The HMLAN is the fhem module for the eQ-3 HomeMatic LAN Configurator.
The fhem module will emulate a CUL device, so the CUL_HM
module can be used to define HomeMatic devices.
In order to use it with fhem you must disable the encryption first
with the "HomeMatic Lan Interface Configurator" (which is part of the
supplied Windows software), by selecting the device, "Change IP Settings",
and deselect "AES Encrypt Lan Communication".
This device can be used in parallel with a CCU and (readonly) with fhem. To do this:
- start the fhem/contrib/tcptee.pl program
- redirect the CCU to the local host
- disable the LAN-Encryption on the CCU for the Lan configurator
- set the dummy attribute for the HMLAN device in fhem
Define
define <name> HMLAN <ip-address>[:port]
port is 1000 by default.
If the ip-address is called none, then no device will be opened, so you
can experiment without hardware attached.
Set
Get
Attributes
CUL
The CUL/CUR/CUN is a family of RF devices sold by busware.de.
With the opensource firmware (see this link) they are capable
to receive and send different 868MHz protocols (FS20/FHT/S300/EM/HMS).
It is even possible to use these devices as range extenders/routers, see the
CUL_RFR module for details.
Some protocols (FS20, FHT and KS300) are converted by this module so that
the same logical device can be used, irrespective if the radio telegram is
received by a CUL or an FHZ device. Other protocols (S300/EM) need their
own modules. E.g. S300 devices are processed by the CUL_WS module if the
signals are received by the CUL, similarly EMWZ/EMGZ/EMEM is handled by the
CUL_EM module.
It is possible to attach more than one device in order to get better
reception, fhem will filter out duplicate messages.
Note: this module may require the Device::SerialPort or Win32::SerialPort
module if you attach the device via USB and the OS sets strange default
parameters for serial devices.
|
|
Define
define <name> CUL <device> <housecode>
USB-connected devices (CUL/CUR/CUN):
<device> specifies the serial port to communicate with the CUL or
CUR. The name of the serial-device depends on your distribution, under
linux the cdc_acm kernel module is responsible, and usually a
/dev/ttyACM0 device will be created. If your distribution does not have a
cdc_acm module, you can force usbserial to handle the CUL by the
following command:modprobe usbserial vendor=0x03eb
product=0x204b In this case the device is most probably
/dev/ttyUSB0.
You can also specify a baudrate if the device name contains the @
character, e.g.: /dev/ttyACM0@38400
If the baudrate is "directio" (e.g.: /dev/ttyACM0@directio), then the
perl module Device::SerialPort is not needed, and fhem opens the device
with simple file io. This might work if the operating system uses sane
defaults for the serial parameters, e.g. some Linux distributions and
OSX.
Network-connected devices (CUN):
<device> specifies the host:port of the device. E.g.
192.168.0.244:2323
If the device is called none, then no device will be opened, so you
can experiment without hardware attached.
The housecode is a 4 digit hex number, and it is used when the CUL/CUR
talks to FHT devices or when CUR requests data.
Set
- raw
Issue a CUL firmware command. See the this document
for details on CUL commands.
- freq / bWidth / rAmpl / sens
SlowRF mode only.
Set the CUL frequency / bandwidth / receiver-amplitude / sensitivity
Use it with care, it may destroy your hardware and it even may be
illegal to do so. Note: the parameters used for RFR transmission are
not affected.
- freq sets both the reception and transmission frequency. Note:
although the CC1101 can be set to frequencies between 315 and 915
MHz, the antenna interface and the antenna of the CUL is tuned for
exactly one frequency. Default is 868.3MHz (or 433MHz)
- bWidth can be set to values between 58kHz and 812kHz. Large values
are susceptible to interference, but make possible to receive
inaccurate or multiple transmitters. It affects tranmission too.
Default is 325kHz.
- rAmpl is receiver amplification, with values between 24 and 42 dB.
Bigger values allow reception of weak signals. Default is 42.
- sens is the decision boundery between the on and off values, and it
is 4, 8, 12 or 16 dB. Smaller values allow reception of less clear
signals. Default is 4dB.
- hmPairForSec
HomeMatic mode only.
Set the CUL in Pairing-Mode for the given seconds. Any device set into
pairing mode in this time will be paired with fhem.
- hmPairSerial
HomeMatic mode only.
Try to pair with the given device. The argument is a 10 character
string, usually starting with letters and ending with digits, printed on
the backside of the device. It is not necessary to put the given device
in learning mode if it is a receiver.
- led
Set the CUL led off (00), on (01) or blinking (02).
Get
- version
return the CUL firmware version
- uptime
return the CUL uptime (time since CUL reset).
- raw
Issue a CUL firmware command, and wait for one line of data returned by
the CUL. See the CUL firmware README document for details on CUL
commands.
- fhtbuf
CUL has a message buffer for the FHT. If the buffer is full, then newly
issued commands will be dropped, if the attribute fhtsoftbuffer is not set.
Instead, a "EOB" message is issued.
fhtbuf returns the free memory in this buffer (in hex),
an empty buffer in the CUL-V2 is 74 bytes, in CUL-V3/CUN 200 Bytes.
A message occupies 3 + 2x(number of FHT commands) bytes,
this is the second reason why sending multiple FHT commands with one
set is a good idea. The first reason is, that
these FHT commands are sent at once to the FHT.
- ccconf
Read some CUL radio-chip (cc1101) registers (frequency, bandwidth, etc),
and display them in human readable form.
Attributes
- do_not_notify
- dummy
- showtime
- loglevel
- model (CUL,CUN,CUR)
- sendpool
If using more than one CUL/CUN for covering a large area, sending
different events by the different CUL's might disturb each other. This
phenomenon is also known as the Palm-Beach-Resort effect.
Putting them in a common sendpool will serialize sending the events.
E.g. if you have three CUN's, you have to specify following
attributes:
attr CUN1 sendpool CUN1,CUN2,CUN3
attr CUN2 sendpool CUN1,CUN2,CUN3
attr CUN3 sendpool CUN1,CUN2,CUN3
- addvaltrigger
Create triggers for additional device values. Right now these are RSSI
and RAWMSG for the CUL family and RAWMSG for the FHZ.
- rfmode
Configure the RF Transceiver of the CUL (the CC1101). Available
arguments are:
- SlowRF
To communicate with FS20/FHT/HMS/EM1010/S300/Hoermann devices @1kHz
datarate. This is the default.
- HomeMatic
To communicate with HomeMatic type of devices @20kHz datarate
- hmId
Set the HomeMatic ID of this device. If this attribute is absent, the
ID will be F1<housecode>. Note 1: after setting or changing this
attribute you have to relearn all your HomeMatic devices. Note 2: the
value _must_ be a 6 digit hex number, and 000000 is not valid. fhem
wont complain if it is not correct, but the communication won't work.
- hmProtocolEvents
Generate events for HomeMatic protocol messages.
CUL_WS
The CUL_WS module interprets S300 type of messages received by the CUL.
Define
define <name> CUL_WS <code> [corr1...corr4]
<code> is the code which must be set on the S300 device. Valid values
are 1 through 8.
corr1..corr4 are up to 4 numerical correction factors, which will be added
to the respective value to calibrate the device. Note: rain-values will be
multiplied and not added to the correction factor.
Set
Get
Attributes
CUL_TX
The CUL_TX module interprets TX2/TX3 type of messages received by the CUL,
see also http://www.f6fbb.org/domo/sensors/tx3_th.php.
This protocol is used by the La Crosse TX3-TH thermo/hygro sensor and other
wireless themperature sensors. Please report the manufacturer/model of other
working devices.
Define
define <name> CUL_TX <code> [corr]
<code> is the code of the autogenerated address of the TX device (0
to 127)
corr is a correction factor, which will be added to the value received from
the device.
Set
Get
Attributes
CUL_EM
The CUL_EM module interprets EM type of messages received by the CUL, notably
from EMEM, EMWZ or EMGZ devices.
Define
define <name> CUL_EM <code> [corr1 corr2
CostPerUnit BasicFeePerMonth]
<code> is the code which must be set on the EM device. Valid values
are 1 through 12. 1-4 denotes EMWZ, 5-8 EMEM and 9-12 EMGZ devices.
corr1 is used to correct the current number, corr2
for the total number.
- for EMWZ devices you should specify the rotation speed (R/kW)
of your watt-meter (e.g. 150) for corr1 and 12 times this value for
corr2
- for EMEM devices the corr1 value is 0.01, and the corr2 value is
0.001
CostPerUnit and BasicFeePerMonth are used to compute your
daily and mothly fees. Your COST will appear in the log, generated once
daiy (without the basic fee) or month (with the bassic fee included). Your
definition should look like E.g.:
define emwz 1 75 900 0.15 12.50
and the Log looks like:
CUM_DAY: 6.849 CUM: 60123.4 COST: 1.02
CUM_MONTH: 212.319 CUM: 60123.4 COST: 44.34
Tipp: You can configure your EMWZ device to show in the CUM column of the
STATE reading the current reading of your meter. For this purpose: multiply
the current reading (from the real device) with the corr1 value (RperKW),
and substract the RAW CUM value from it. Now set the basis reading of your
EMWZ device (named emwz) to this value.
Set
Get
Attributes
ESA2000
The ESA2000 module interprets ESA2000 type of messages received by the CUL,
currently only for ESA2000 LED devices.
Define
define <name> ESA2000 <code>
[base1 base2]
<code> is the 4 digit HEX code identifying the devices.
base1/2 is added to the total kwh as a base (Hoch- und Niedertarifzählerstand).
Set
Get
Attributes
CUL_HM
Support for eQ-3 HomeMatic devices via the CUL or the HMLAN.
Prerequisites:
- If the interface is a CUL device, the rfmode
attribute of the corresponding CUL/CUN device must be set to HomeMatic.
Note: this mode is BidCos/Homematic only, you will not receive
FS20/HMS/EM/S300 messages via this device. Previously defined FS20/HMS
etc devices must be assigned to a different input device (CUL/FHZ/etc).
- The protocol used by HomeMatic devices (BidCos, known as AskSin
in the culfw) must be enabled in the culfw firmware. This is done for all
CUN and for newer CUL (i.e. V3.0 and greater) devices with culfw firmware
version 1.38 and newer. For CUL hardware version before 3.0 there is a
separate firmware with HomeMatic support which lacks FHT support.
Notes
- Currently supported device families: remote, switch, dimmer,
blindActuator, motionDetector, smokeDetector, threeStateSensor, THSensor,
winmatic. Special devices: KS550, HM-CC-TC and the KFM100.
- Device messages can only be interpreted correctly if the device type is
known. fhem will extract the device type from a "pairing request"
message, even if it won't respond to it (see hmPairSerial and hmPairForSec to enable pairing).
As an alternative, set the correct subType and model attributes, for a
list of possible subType values see "attr hmdevice ?".
- The so called "AES-Encryption" is in reality a signing request: if it is
enabled, an actor device will only execute a received command, if a
correct answer to a request generated by the actor is received. This
means:
- Reaction to commands is noticably slower, as 3 messages are sent
instead of one before the action is processed by the actor.
- Every command and its final ack from the device is sent in clear,
so an outside observer will know the status of each device.
- The firmware implementation is buggy: the "toggle" event is executed
before the answer for the signing request is received, at
least by some switches (HM-LC-Sw1-Pl and HM-LC-SW2-PB-FM).
- The HMLAN configurator will answer signing
requests by itself, and if it is configured with the 3-byte address
of a foreign CCU (the address is part of the signing request), it is
able to answer signing requests correctly. In the reality this will
only work reliably if the foreign CCU is switched off, else it
will also answer to the signing request in parallel, and the actor
will not receive a clear confirmation.
- AES-Encryption is not useable with a CUL device as the interface, but
it is supported with a HMLAN. Due to the issues above I do not
recommend using Homematic encryption at all.
Define
define <name> CUL_HM <6-digit-hex-code>
Normally this command is generated by the autocreate module, together with the necessary
hmClass and subType attributes. Usually you issue a hmPairForSec command and press the corresponding button
on the device to be paired, or issue a hmPairSerial
set command if the device is a receiver and you know its serial number.
Autocreate will then create a fhem device and set all necessary attributes.
Without pairing the device will not accept messages from fhem.
If you cannot use autocreate, then you have to specify:
- the <6-digit-hex-code>
which is the hardcoded address of the device (no, you cannot choose
it arbitrarily like for FS20 devices). You may detect it by
inspecting the fhem log.
- the hmClass attribute
which is either sender or receiver
- the subType attribute
which is one of switch dimmer blindActuator remote sensor swi
pushButton threeStateSensor motionDetector keyMatic winMatic
smokeDetector
Without these attributes fhem won't be able to decode device messages
appropriately.
Set
Note: devices which are normally send-only (remote/sensor/etc) must be set
into pairing/learning mode in order to receive the following commands.
General commands (available to most hm devices):
- statusRequest
Send a status request to the device.
- reset
Factory reset the device. You need to pair it again to use it with
fhem.
- pair
Pair the device again with its known serialNumber (e.g. after a device
reset).
- unpair
"Unpair" the device, i.e. make it available to pair with other
master devices.
- sign [on|off]
Activate or deactivate signing (also called AES encryption, see the note above). Warning: if the device is attached via
a CUL, you won't be able to switch it (or deactivate signing) from
fhem before you reset the device directly.
subType (i.e family) dependent commands:
- switch
- on - set the switch on
- off - set the switch off
- on-for-timer sec - set the switch on for the given seconds. Note:
the protocol does not support an off-for-timer like FS20.
- toggle - toggle the switch.
- dimmer, blindActuator
- 0 - 100 with a resolution of 0.5:
set the dimmer / blindActuator to the given value (in percent).
- on / off
this corresponds to 100 or 0 %.
- 4Dis (HM-PB-4DIS-WM)
- text <btn_no> [on|off] <text1> <text2>
Set the text on the display of the device. To this purpose issue
this set command first (or a number of them), and then choose from
the teach-in menu of the 4Dis the "Central" to transmit the data.
Example:
set 4Dis text 1 on On Lamp
set 4Dis text 1 off Kitchen Off
- Climate-Control (HM-CC-TC)
- day-temp <tmp>
night-temp <tmp>
party-temp <tmp>
Set the day or night temperature. Temp must be between 6 and 30
Celsius, and precision is half a degree.
- tempListSat HH:MM temp ... 24:00 temp
tempListSun HH:MM temp ... 24:00 temp
tempListMon HH:MM temp ... 24:00 temp
tempListTue HH:MM temp ... 24:00 temp
tempListThu HH:MM temp ... 24:00 temp
tempListWed HH:MM temp ... 24:00 temp
tempListFri HH:MM temp ... 24:00 temp
Specify a list of temperature intervals. Up to 24 intervals can be
specified for each week day, the resolution is 10 Minutes. The
last time spec must always be 24:00.
Example: set th tempListSat 06:00 19 23:00 22.5 24:00 19
Debugging:
Get
Attributes
- eventMap
- do_not_notify
- ignore
- showtime
- loglevel
- hmClass,
model,
subType
These attributes are set automatically after a successful pairing.
They are not supposed to be set by hand, and are necessary in order to
correctly interpret device messages or to be able to send them.
- rawToReadable
Used to convert raw KFM100 values to readable data, based on measured
values. E.g. fill slowly your container, while monitoring the
values reported with inform. You'll see:
10 (at 0%)
50 (at 20%)
79 (at 40%)
270 (at 100%)
Apply these values with: "attr KFM100 rawToReadable 10:0 50:20 79:40 270:100".
fhem will do a linear interpolation for values between the bounderies.
- unit
set the reported unit by the KFM100 if rawToReadable is active. E.g.
attr KFM100 unit Liter
Generated events:
- KS550/HM-WDS100-C6-O:
T: $t H: $h W: $w R: $r IR: $ir WD: $wd WDR: $wdr S: $s B: $b
- HM-CC-TC:
T: $t H: $h
temperature $t
humidity $h
actuator $vp %
desired-temp: $t
ValveErrorPosition $dname: $vep %
ValveOffset $dname: $of %
- HM-CC-VD:
actuator $vp %
actuator:movement_open
actuator:movement_close
ValveErrorPosition:$vep %
ValveOffset $dname: $of %
- KFM100:
rawValue $v
Sequence $s
$cv $unit
- switch/dimmer/blindActuator:
deviceMsg on
deviceMsg off
deviceMsg $val %
poweron on
poweron off
poweron $val %
- remote/pushButton
Btn$x on
Btn$x off
Btn$x onLong
Btn$x offLong
Btn$x on (to $dest)
Btn$x off (to $dest)
Btn$x onLong (to $dest)
Btn$x offLong (to $dest)
- motionDetector
brightness:$b
alive
motion
cover closed
cover open
- smokeDetector
on
smoke_detect on
all-clear
alive
test $t
- threeStateSensor
cover closed
cover open
alive
contact closed
contact open
contact tilted
- THSensor
T: $t H: $h
temperature $t
humidity $h
- winMatic
contact closed
contact open
contact tilted
contact movement_tilted
contact movement_closed
contact lock_on
airing: $air
course: tilt
course: close
CUL_HOERMANN
The CUL_HOERMANN module registers the 868MHz Hoermann Garage-Door-Opener
signals received by the CUL. Note: As the structure of this signal is
not understood, no checksum is verified, so it is likely to receive bogus
messages.
Define
define <name> CUL_HOERMANNEM <10-digit-hex-code>
Set
Get
Attributes
CUL_RFR
The CUL_RFR module is used to "attach" a second CUL to your base CUL, and
use it as a repeater / range extender. RFR is shorthand for RF_ROUTER.
Transmission of the data uses the CC1101 packet capabilities with GFSK
modulation at 250kBaud after pinging the base CUL at the usual 1kBaud. When
configured, the RFR device can be used like another CUL connected directly to
fhem.
Before you can use this feature in fhem, you have to enable/configure RF
ROUTING in both CUL's:
- First give your base CUL (which remains connected to the PC) an RFR ID
by issuing the fhem command "set MyCUL raw ui0100". With this command
the base CUL will get the ID 01, and it will not relay messages to other
CUL's (as the second number is 00).
- Now replace the base CUL with the RFR CUL, and set its id by issuing
the fhem command "set MyCUL raw ui0201". Now remove this CUL and attach the
original, base CUL again. The RFR CUL got the id 02, and will relay every
message to the base CUL with id 01.
- Take the RFR CUL, and attach it to an USB power supply, as seen on
the image. As the configured base id is not 00, it will activate RF
reception on boot, and will start sending messages to the base CUL.
- Now you have to define this RFR cul as a fhem device:
|
|
Define
define <name> CUL_RFR <own-id> <base-id>
<own-id> is the id of the RFR CUL not connected to the PC,
<base-id> is the id of the CUL connected to the PC. Both parameters
have two characters, each representing a one byte hex number.
Example:
set MyCUL raw ui0100
# Now replace the base CUL with the RFR CUL
set MyCUL raw ui0201
# Reattach the base CUL to the PC and attach the RFR CUL to a
USB power supply
define MyRFR CUL_RFR 02 01
Set
Get
Attributes
EnOcean
Devices sold by numerous hardware verndors (e.g. Eltako, Peha, etc), using
the RF Protocol provided by the EnOcean Alliance.
Define
define <name> EnOcean <ID>
Define an EnOcean device, connected via a TCM. The
<ID> parameter is an 8 digit hex number. For remotes and sensors the
autocreate module may help you.
Example:
define switch1 EnOcean ffc54500
Set
set switch1 <value>
where value is one of A0,AI,B0,BI,C0,CI,D0,DI and
released, in fact we are trying to emulate a PTM100 type remote.
If you define an eventMap attribute with on/off,
then you'll be able to easily set the device from the WEB frontend.
In order to control devices, you cannot reuse the ID's of other devices
(like remotes), instead you have to create your own, which must be in the
allowed ID-Range of the underlying IO device. For this first query the
TCM with the "get <tcm> idbase " command. You can use
up to 128 ID's starting with the base shown there. If you are using an
ID outside of the allowed range, you'll see an ERR_ID_RANGE message in the
fhem log.
Example:
set switch1 BI
set switch1 B0
attr eventMap BI:on B0:off
set switch1 on
Get
Attributes
Generated events:
- switch. Switches (remotes) with more than one (pair) of buttons
are separate devices with separate address.
- A0
- AI
- B0
- BI
- C0
- CI
- D0
- DI
- A0,BI
- <all other combinations of BtnX/BtnY>
- buttons released
- windowHandle (HOPPE SecuSignal). Set the subType attr to windowHandle.
- closed
- open
- tilted
- open from tilted
- keycard. Set the subType attr to keycard. (untested)
- keycard inserted
- keycard removed
- STM-250 Door and window contact.
- SR04* (Temp sensor + Presence button and desired temp dial). Set the
subType attr to SR04:
- temperature: XY.Z
- set_point: [0..255]
- fan: [0,1,2,3,Auto]
- present: yes
- learnBtn: on
- T: XY.Z SP: [0..255] F: [0,1,2,3,Auto] P: [yes|no]
EM
Define
define <name> EM <em1010pc-device>
Define a EM1010PC USB device. As the EM1010PC was not designed to be used
with a PC attached to it all the time, it won't transmit received signals
automatically, fhem has to poll it every 5 minutes.
Currently there is no way to read the internal log of the EM1010PC with
fhem, use the program em1010.pl in the contrib directory for this
purpose.
Examples:
define em EM /dev/elv_em1010pc
Set
set EM <value>
where value is either time or reset.
If time has arguments of the form YYYY-MM-DD HH:MM:SS, then the specified
time will be set, else the time from the host.
Note: after reset you should set the time.
Get
get EM <value>
where value is either version or time.
Attributes
EMWZ
Define
define <name> EMWZ <device-number>
Define up to 4 EM1000WZ attached to the EM1010PC. The device number must
be between 1 and 4. Defining an EMWZ will schedule an internal task, which
reads the status of the device every 5 minutes, and triggers notify/filelog
commands.
Example:
Set
set EMWZdevice <param> <value>
where param is one of:
- rperkw
Number of rotations for a KiloWatt of the EM1000WZ device (actually
of the device where the EM1000WZ is attached to). Without setting
this correctly, all other readings will be incorrect.
- alarm
Alarm in WATT. if you forget to set it, the default value is
rediculously low (random), and if a value above this threshold is
received, the EM1010PC will start beeping once every minute. It can
be very annoying.
- price
The price of one KW in EURO (use e.g. 0.20 for 20 Cents). It is used
only on the EM1010PC display, it is of no interest for FHEM.
Get
get EMWZ status
This is the same command which is scheduled every 5 minutes internally.
Attributes
EMGZ
Define
define <name> EMGZ <device-number>
Define up to 4 EM1000GZ attached to the EM1010PC. The device number must
be between 9 and 12.
Defining an EMGZ will schedule an internal task, which reads the
status of the device every 5 minutes, and triggers notify/filelog commands.
Example:
Set
set EMGZdevice <param> <value>
where param is:
- price
The price of one KW in EURO (use e.g. 0.20 for 20 Cents). It is used
only on the EM1010PC display, it is of no interest for FHEM.
Get
get EMGZ status
This is the same command which is scheduled every 5 minutes internally.
Attributes
EMEM
Define
define <name> EMEM <device-number>
Define up to 4 EM1000EM attached to the EM1010PC. The device number must
be between 5 and 8.
Defining an EMEM will schedule an internal task, which reads the
status of the device every 5 minutes, and triggers notify/filelog commands.
Note: Currently this device does not support a "set" function.
Example:
Set
Get
get EMEM status
This is the same command which is scheduled every 5 minutes internally.
Attributes
KM271
KM271 is the name of the communication device for the Buderus Logamatic 2105
or 2107 heating controller. It is connected via a serial line to the fhem
computer. The fhem module sets the communication device into log-mode, which
then will generate an event on change of the inner parameters. There are
about 20.000 events a day, the FHEM module ignores about 90% of them, if the
all_km271_events attribute is not set.
Note: this module requires the Device::SerialPort or Win32::SerialPort module.
Define
define <name> KM271 <serial-device-name>
Example:
define KM271 KM271 /dev/ttyS0
Set
set KM271 <param> [<value>]
where param is one of:
- hk1_nachtsoll <temp>
(0.5 celsius resolution)
- hk1_tagsoll <temp>
(0.5 celsius resolution)
- hk1_betriebsart [automatik|nacht|tag]
- ww_soll <temp>
(1.0 celsius resolution)
- ww_betriebsart [automatik|nacht|tag]
- logmode
set to logmode / request all parameters again
Get
Attributes
- do_not_notify
- loglevel
- all_km271_events
If this attribute is set to 1, do not ignore following events:
Vorlaufisttemperatur_HK1, Kesselvorlaufisttemperatur,
Kesselintegral_1, "Kesselintegral_2
These events account for ca. 92% of all events.
All UNKNOWN events are ignored too, most of them were only seen
directly after setting the device into logmode.
Generated events:
- HK1_Betriebswerte1
- HK1_Betriebswerte2
- HK1_Vorlaufsolltemperatur
- HK1_Vorlaufisttemperatur
- HK1_Raumsolltemperatur
- HK1_Raumisttemperatur
- HK1_Einschaltoptimierungszeit
- HK1_Ausschaltoptimierungszeit
- HK1_Pumpenleistung
- HK1_Mischerstellung
- HK1_Heizkennlinie_bei_+_10_Grad
- HK1_Heizkennlinie_bei_0_Grad
- HK1_Heizkennlinie_bei_-_10_Grad
- HK2_Betriebswerte1
- HK2_Betriebswerte2
- HK2_Vorlaufsolltemperatur
- HK2_Vorlaufisttemperatur
- HK2_Raumsolltemperatur
- HK2_Raumisttemperatur
- HK2_Einschaltoptimierungszeit
- HK2_Ausschaltoptimierungszeit
- HK2_Pumpenleistung
- HK2_Mischerstellung
- HK2_Heizkennlinie_bei_+_10_Grad
- HK2_Heizkennlinie_bei_0_Grad
- HK2_Heizkennlinie_bei_-_10_Grad
- WW_Betriebswerte1
- WW_Betriebswerte2
- WW_Solltemperatur
- WW_Isttemperatur
- WW_Einschaltoptimierungszeit
- WW_Ladepumpe
- Kessel_Vorlaufsolltemperatur
- Kessel_Vorlaufisttemperatur
- Brenner_Einschalttemperatur
- Brenner_Ausschalttemperatur
- Kessel_Integral1
- Kessel_Integral
- Kessel_Fehler
- Kessel_Betrieb
- Brenner_Ansteuerung
- Abgastemperatur
- Brenner_Stellwert
- Brenner_Laufzeit1_Minuten2
- Brenner_Laufzeit1_Minuten1
- Brenner_Laufzeit1_Minuten
- Brenner_Laufzeit2_Minuten2
- Brenner_Laufzeit2_Minuten1
- Brenner_Laufzeit2_Minuten
- Aussentemperatur
- Aussentemperatur_gedaempft
- Versionsnummer_VK
- Versionsnummer_NK
- Modulkennung
As I cannot explain all the values, I logged data for a period and plotted
each received value in the following logs:
All of these events are reported directly after initialization (or after
requesting logmode), along with some 60 configuration records (6byte long
each). About 20 parameters from these records are reverse engeneered, they
all start with CFG_.
KS300
Fhem can receive the KS300 radio (868.35 MHz) messages through FHZ, WS300 or an CUL
device, so one of them must be defined first.
This module services messages received by the FHZ device, if you use one of
the other alternetives, see the WS300 or CUL_WS entries.
Note: The KS555 is also reported to work.
Define
define <name> KS300 <housecode> [ml/raincounter [wind-factor]]
<housecode> is a four digit hex number,
corresponding to the address of the KS300 device, right now it is ignored.
The ml/raincounter defaults to 255 ml, but it must be specified if you wish
to set the wind factor, which defaults to 1.0.
Examples:
Set
Get
Attributes
- ignore
- IODev
- eventMap
- do_not_notify
- showtime
- loglevel
- model (ks300)
- rainadjustment
If this attribute is set, fhem automatically accounts for rain counter
resets after a battery change and random counter switches as experienced
by some users. The raw rain counter values are adjusted by an offset
in order to flatten out the sudden large increases and decreases in
the received rain counter values. Default is off.
CM11
Note: this module requires the Device::SerialPort or Win32::SerialPort module.
Define
define <name> CM11 <serial-device>
CM11 is the X10 module to interface X10 devices with the PC.
The current implementation can evaluate incoming data on the powerline of
any kind. It can send on, off, dimdown and dimup commands.
The name of the serial-device depends on your distribution. If
serial-device is none, then no device will be opened, so you can experiment
without hardware attached.
If you experience problems (for verbose 4 you get a lot of "Bad CRC message"
in the log), then try to define your device as
define <name> FHZ <serial-device> strangetty
Example:
define x10if CM11 /dev/ttyUSB3
Set
set <name> reopen
Reopens the serial port.
Get
get <name> fwrev
Reads the firmware revision of the CM11 device. Returns error
if the serial connection to the device times out. Can be used for error
detection.
get <name> time
Reads the internal time of the device which is the total uptime (modulo one
year), since fhem sets the time to 0.00:00:00 if the device requests the time
to be set after being powered on. Returns error
if the serial connection to the device times out. Can be used for error
detection.
Attributes
X10
Define
define <name> X10 <model> <housecode>
<unitcode>
Defines an X10 device via its model, housecode and unitcode.
Notes:
<model> is one of
lm12 : lamp module, dimmable
lm15 : lamp module, not dimmable
am12 : appliance module, not dimmable
tm12 : tranceiver module, not dimmable. Its
unitcode is 1.
Model determines whether a dim command is reasonable to be sent
or not.
<housecode> ranges from A to P.
<unitcode> ranges from 1 to 16.
Examples:
define lamp1 X10 lm12 N 10
define pump X10 am12 B 7
define lamp2 X10 lm15 N 11
Set
set <name> <value> [<argument>]
where value is one of:
dimdown # requires argument, see the note
dimup # requires argument, see the note
off
on
on-till # Special, see the note
on-for-timer # Special, see the note
Examples:
set lamp1 dimup 10
set lamp1,lamp2 off
set pump off
set lamp2 on-till 19:59
set lamp2 on-for-timer 00:02:30
Notes:
- Only switching and dimming are supported by now.
- Dimming is valid only for a dimmable device as specified by
the
model argument in its define
statement.
- An X10 device has 210 discrete brightness levels. If you use a
X10 sender, e.g. a remote control or a wall switch to dim, a
brightness step is 100%/210.
dimdown and dimup take a number in the
range from 0 to 22 as argument. It is assumed that argument 1 is
a 1% brightness change (microdim) and arguments 2 to 22 are
10%..100% brightness changes. The meaning of argument 0 is
unclear.
- This currently leads to some confusion in the logs as the
dimdown and dimup codes are logged with
different meaning of the arguments depending on whether the commands
were sent from the PC or from a remote control or a wall switch.
dimdown and dimup from on and off states may
have unexpected results. This seems to be a feature of the X10
devices.
on-till requires an absolute time in the "at" format
(HH:MM:SS, HH:MM) or { <perl code> }, where the perl code
returns a time specification).
If the current time is greater than the specified time, then the
command is ignored, else an "on" command is generated, and for the
given "till-time" an off command is scheduleld via the at command.
on-for-timer requires a relative time in the "at" format
(HH:MM:SS, HH:MM) or { <perl code> }, where the perl code
returns a time specification).
Get
Attributes
LIRC
Use infrared signals received by an lirc device as toggle events.
Note: this module needs the Lirc::Client perl module.
Define
define <name> LIRC <lircrc_file>
Example:
define Lirc LIRC /etc/lirc/lircrc
Note: In the lirc configuration file you have to define each possible event.
If you have this configuration
begin
prog = fhem
button = pwr
config = IrPower
end
and you press the pwr button the IrPower toggle event occures at fhem.
define IrPower01 notify IrPower set lamp toggle
turns the lamp on and off.
If you want a faster reaction to keypresses you have to change the
defaultvalue of readytimeout from 5 seconds to e.g. 1 second in fhem.pl
Set
Get
Attributes
WS300
Define
define WS300Device WS300 <serial device>
or
define <devname> WS300 [0-9]
The first line is mandatory if you have a WS300 device: it defines the
input device with its USB port. The name of this device is fixed and must
be WS300Device. It must be the first defined WS300 device.
For each additional device (with number 0 to 9) you have to define another
WS300 device, with an arbitrary name. The WS300 device which reports the
readings will be defined with the port number 9, an optional KS300 with the
port number 8.
Examples:
define WS300Device WS300 /dev/ttyUSB1
define ash2200.1 WS300 0
define ks300 WS300 8
define ws300 WS300 9
Set
set WS300Device <interval(min.)> <height(m)> <rainvalume(ml)>
Set some WS300 configuration parameters.
Get
Attributes
Weather
Define
define <name> Weather <location> [<interval>]
Defines a virtual device for weather forecasts. You need to have the perl
module Weather::Google installed to use this device. If you do not have it,
use cpan -i Weather::Google to install it.
A Weather device periodically gathers current and forecast weather conditions
from the Google Weather API.
The parameter location is any string that is recognized as a
location, either a town name or a zip code. Browse to the URL
http://www.google.de/ig/api?weather=location&hl=en
to see the raw output for your location.
The parameter interval is the time between subsequent updates
in seconds. It defaults to 3600 (1 hour).
Examples:
define MyWeather Weather "Frankfurt,HE"
define Forecast Weather "Amsterdam,NL" 1800
define weather Weather "30000,France"
Set
Get
get <name> <reading>
Valid readings and their meaning (? can be one of 0, 1, 2, 3 and stands
for today, tomorrow, ...):
city | name of town returned for location |
condition | current condition, one of Sunny, Clear, Partly Cloudy, Mostly Cloudy, Overcast, Chance of Rain |
current_date_time | last update of forecast on server |
fc?_condition | forecast condition |
fc?_day_of_week | day of week for day +? |
fc?_high_c | forecasted daily high in degrees centigrade |
fc?_icon | relative path for forecast icon, prefix with http://www.google.com to form a valid URL for display in web interfaces |
fc?_low_c | forecasted daily low in degrees centigrade |
humidity | current humidity |
icon | relative path for current icon |
postal_code | location sent to server |
temp_c | current temperature in degrees centigrade |
temp_f | current temperature in degrees Fahrenheit |
wind_condition | wind direction and speed |
Attributes
USF1000
Fhem can receive your tank's fill level from the USF1000S device
through a FHZ device, so one must be defined first.
The state contains the fill level in % (lower case v in the device state)
and the current volume in liters (upper case V in the device state).
Measured distance to the liquid's surface, fill level, volume and warnings
(Test mode, Battery low) are available. Due to the design of the USF1000S
protocol, you can have only one USF1000S in range of your FHZ as these
devices cannot be distinguished.
Define
define <name> USF1000 <geometry>
<geometry> determines the form of the tank and the
position of the sensor. The following geometries are currently
supported:
cub <length> <width> <height> <offset>
cylv <diameter> <height> <offset>
cub stands for a cuboid whose base is <length> × <width>.
cylv stands for a vertical cylinder whose diameter is <diameter>.
<height> is the distance of the surface of the liquid from the ground
if the tank is full. <offset> is the distance of the sensor relative to
the surface of the liquid. All quantities are expressed in meters.
Example:
define MyTank USF1000 cylv 2 1 0.3 : a cylindrical water tank with
2 meters diameter. The water stands 1 meter high if the tank is full. The
sensor is fixed 1,3 meters above ground.
Set
Get
Attributes
WEBCOUNT
Note: this module needs the HTTP::Request and LWP::UserAgent perl modules.
Define
define <name> WEBCOUNT <ip-address> <port> <delay>
Defines an WEBCOUNT device (Box with 6 count pulses, www.wut.de) via ip address. The device is pooled (delay interval).
Examples:
define pump WEBCOUNT 192.168.8.200 1 60
WEBIO
Note: this module needs the HTTP::Request and LWP::UserAgent perl modules.
Define
define <name> WEBIO <ip-address> <port> <delay>
Defines an Web-IO device (Box with 2 Analog-In/Out 0..10V, www.wut.de) via ip address. The status of the device is also pooled (delay interval).
Examples:
define pumpspeed WEBIO 192.168.8.200 1 60
Set
set <name> <value>
where value is one of:
0.00 - 10.00
Examples:
WEBIO_12DIGITAL
Note: this module needs the HTTP::Request and LWP::UserAgent perl modules.
Define
define <name> WEBIO_12DIGITAL <ip-address> <outputport> <delay>
Defines an Web-IO-Digital device (Box with up to 12 digital in/outputs, www.wut.de) via ip address. The status of the device is also pooled (delay interval).
Examples:
define motor1 WEBIO_12DIGITAL 192.168.8.200 1 60
Set
set <name> <value>
where value is one of:
on off
Examples:
VantagePro2
Note: this module needs the Net::Telnet perl module.
Define
define <name> <ip-address> <port> <delay>
Defines a Davis VantagePro2 weatherstation attached on transparent ethernet/usb|serial server accessable by telnet.
Examples:
define AUSSEN.wetterstation VantagePro2 192.168.8.127 4999 60
fhem> list AUSSEN.wetterstation
Internals:
DEF 192.168.8.127 4999 60
Host 192.168.8.127
NAME AUSSEN.wetterstation
NR 5
Port 4999
STATE T-OUT: 22.78 T-IN: 26.50 H-OUT: 55 H-IN: 45 W: 1.61 W-AV: 1.61 WS 257 R: 0.00 S: 770 UV: 4.1 RD: 0 RM: 41 RY: 241 BM: 76.27 BT: Steady
TYPE VantagePro2
Readings:
2010-08-04 10:15:17 10 min. average windspeed 1.61 (km/h)
2010-08-04 10:15:17 UV 4.1 (UV/Index)
2010-08-04 10:15:17 barometer 76.27 (Millimeters)
2010-08-04 10:15:17 barometer trend Steady
2010-08-04 10:15:17 day rain 0 (mm/day)
2010-08-04 10:15:17 humidity inside 45 (%)
2010-08-04 10:15:17 humidity outside 55 (%)
2010-08-04 10:15:17 month rain 41 (mm/month)
2010-08-04 10:15:17 rainrate 0.00 (mm/h)
2010-08-04 10:15:17 solar 770 (Watt/m^2)
2010-08-04 10:15:17 temperature-inside 26.50 (Celsius)
2010-08-04 10:15:17 temperature-outside 22.78 (Celsius)
2010-08-04 10:15:17 wind direction 257 (Degrees)
2010-08-04 10:15:17 windspeed 1.61 (km/h)
2010-08-04 10:15:17 year rain 241 (mm/year)
Attributes:
delay 60
ALL3076
Note: this module needs the HTTP::Request and LWP::UserAgent perl modules.
Define
define <name> ALL3076 <ip-address>
Defines an Allnet 3076 device (Dimmable lightswitch) via its ip address or dns name
Examples:
define lamp1 ALL3076 192.168.1.200
Set
set <name> <value>
where value is one of:
dimdown
dim10%
dim20%
dim30%
dim40%
dim50%
dim60%
dim70%
dim80%
dim90%
dim100%
dim[0-100]%
dimup
off
on
toggle
Examples:
set lamp1 on
set lamp1 dim11%
set lamp2 toggle
Notes:
- Toggle is special implemented. List name returns "on" or "off" even after a toggle command
ALL4000T
Note: this module requires the following perl modules: XML::Simple LWP::UserAgent
HTTP::Request.
Define
define <name> ALL4000T <ip-address> <port> <delay>
Defines a temperature sensor connected on an Allnet 4000 device via its ip address and port. Use the delay argument to define the delay between polls.
Examples:
define AUSSEN.POOL.TEMP.vorlauf ALL4000T 192.168.68.20 t2 120
ALL4027
Note: this module needs the HTTP::Request and LWP::UserAgent perl modules.
Define
define <name> ALL4027 <ip-address> <port> <relay_nr> <delay>
Defines an Allnet 4027 device (Box with 8 relays) connected to an ALL4000 via its ip address. The status of the device is also pooled (delay interval), because someone else is able to change the state via the webinterface of the device.
Examples:
define lamp1 ALL4027 192.168.8.200 0 7 60
Set
set <name> <value>
where value is one of:
off
on
on-for-timer <Seconds>
toggle
Examples:
Notes:
- Toggle is special implemented. List name returns "on" or "off" even after a toggle command
BS
The module BS allows to collect data from a brightness sensor through a
FHZ device. For details on the brightness sensor see
busware wiki.
You can have at most nine different brightness sensors in range of your
FHZ.
The state contains the brightness in % (reading brightness ) and
the brightness in lux (reading lux ). The flags
reading is always zero. The meaning of these readings is explained in more
detail on the above mentioned wiki page.
Define
define <name> BS <sensor#> [<RExt>]
<sensor#> is the number of sensor in the brightness
sensor address system that runs from 1 to 9.
<RExt> is the value of the resistor on your brightness
sensor in Ω (Ohm). The brightness reading in % is proportional to the resistance, the
lux reading is proportional to the resistance squared. The value is
optional. The default resistance is RExt= 50.000Ω.
Example:
Set
Get
Attributes
SCIVT
Define
define <name> SCIVT <SCD-device>
Define a SCD series solar controler device. Details see here.
You probably need a Serial to USB controller like the PL2303.
Defining an SCIVT device will schedule an internal task, which reads the
status of the device every 5 minutes, and triggers notify/filelog commands.
Note: Currently this device does not support a "set" function, only
a single get function which reads the device status immediately.
Example:
define scd SCIVT /dev/ttyUSB2
Set
Get
Attributes
ECMD
Any physical device with request/response-like communication capabilities
over a TCP connection can be defined as ECMD device. A practical example
of such a device is the AVR microcontroller board AVR-NET-IO from
Pollin with
ECMD-enabled
Ethersex firmware.
A physical ECMD device can host any number of logical ECMD devices. Logical
devices are defined as ECMDDevices in fhem.
ADC 0 to 3 and I/O port 0 to 3 of the above mentioned board
are examples of such logical devices. ADC 0 to 3 all belong to the same
device class ADC (analog/digital converter). I/O port 0 to 3 belong to the device
class I/O port. By means of extension boards you can make your physical
device drive as many logical devices as you can imagine, e.g. IR receivers,
LC displays, RF receivers/transmitters, 1-wire devices, etc.
Defining one fhem module for any device class would create an unmanageable
number of modules. Thus, an abstraction layer is used. You create a device class
on the fly and assign it to a logical ECMD device. The
class definition
names the parameters of the logical device, e.g. a placeholder for the number
of the ADC or port, as well as the get and set capabilities. Worked examples
are to be found in the documentation of the ECMDDevice device.
Note: this module requires the Device::SerialPort or Win32::SerialPort module
if the module is connected via serial Port or USB.
Define
define <name> ECMD telnet <IPAddress:Port>
or
define <name> ECMD serial <SerialDevice>[<@BaudRate>]
Defines a physical ECMD device. The keywords telnet or
serial are fixed.
Examples:
define AVRNETIO ECMD telnet 192.168.0.91:2701
define AVRNETIO ECMD serial /dev/ttyS0
define AVRNETIO ECMD serial /sev/ttyUSB0@38400
Set
set <name> classdef <classname> <filename>
Creates a new device class <classname> for logical devices.
The class definition is in the file <filename> . You must
create the device class before you create a logical device that adheres to
that definition.
Example:
define AVRNETIO classdef /etc/fhem/ADC.classdef
set <name> reopen
Closes and reopens the device. Could be handy if connection is lost and cannot be
reestablished automatically.
Get
get <name> raw <command>
Sends the command <command> to the physical ECMD device
<name> and reads the response.
Attributes
- classdefs
A colon-separated list of <classname>=<filename>.
The list is automatically updated if a class definition is added. You can
directly set the attribute.
Class definition
The class definition for a logical ECMD device class is contained in a text file.
The text file is made up of single lines. Empty lines and text beginning with #
(hash) are ignored. Therefore make sure not to use hashes in commands.
The following commands are recognized in the device class definition:
params <parameter1> [<parameter2> [<parameter3> ... ]]
Declares the names of the named parameters that must be present in the
definition of the logical ECMD device.
set <commandname> cmd { <perl special> }
Declares a new set command <commandname> .
get <commandname> cmd { <perl special> }
Declares a new get command <commandname> .
-
set <name> params <parameter1> [<parameter2> [<parameter3> ... ]]
get <name> params <parameter1> [<parameter2> [<parameter3> ... ]]
Declares the names of the named parameters that must be present in the
set or get command <name> . Be careful not to use a parameter name that
is already used in the device definition (see params above).
The perl specials in the definitions of the set and get commands can
contain macros. Apart from the rules outlined in the documentation of perl specials in fhem, the following
rules apply:
- The character @ will be replaced with the device
name. To use @ in the text itself, use the double mode (@@).
- The macro
%NAME will expand to the device name (same
as @ ).
- The macro
%<parameter> will expand to the
current value of the named parameter. This can be either a parameter
from the device definition or a parameter from the set or get
command.
- The macro substitution occurs before perl evaluates the
expression. It is a plain text substitution.
- If in doubt what happens, run the commands with loglevel 5 and
observe the log file.
ECMDDevice
Define
define <name> ECMDDevice <classname> [<parameter1> [<parameter2> [<parameter3> ... ]]]
Defines a logical ECMD device. The number of given parameters must match those given in
the class definition of the device class <classname> .
Examples:
define myADC ECMDDevice ADC
define myRelais1 ECMDDevice relais 8
Set
set <name> <commandname> [<parameter1> [<parameter2> [<parameter3> ... ]]]
The number of given parameters must match those given for the set command <commandname> definition in
the class definition.
If set <commandname> is invoked the perl special in curly brackets from the command definition
is evaluated and the result is sent to the physical ECMD device.
Example:
Get
get <name> <commandname> [<parameter1> [<parameter2> [<parameter3> ... ]]]
The number of given parameters must match those given for the get command <commandname> definition in
the class definition.
If get <commandname> is invoked the perl special in curly brackets from the command definition
is evaluated and the result is sent to the physical ECMD device. The response from the physical ECMD device is returned
and the state of the logical ECMD device is updated accordingly.
Example:
Example 1
The following example shows how to access the ADC of the AVR-NET-IO board from
Pollin with
ECMD-enabled
Ethersex firmware.
The class definition file /etc/fhem/ADC.classdef looks as follows:
get value cmd {"adc get %channel"}
get value params channel
In the fhem configuration file or on the fhem command line we do the following:
define AVRNETIO telnet 192.168.0.91:2701 # define the physical device
set AVRNETIO classdef ADC /etc/fhem/ADC.classdef # define the device class ADC
define myADC ADC # define the logical device myADC with device class ADC
get myADC value 1 # retrieve the value of analog/digital converter number 1
The get command is evaluated as follows: get value has one named parameter
channel . In the example the literal 1 is given and thus %channel
is replaced by 1 to yield "adc get 1" after macro substitution. Perl
evaluates this to a literal string which is send as a plain ethersex command to the AVR-NET-IO. The
board returns something like 024 for the current value of analog/digital converter number 1.
Example 2
The following example shows how to switch a relais driven by pin 3 (bit mask 0x08) of I/O port 2 on for
one second and then off again.
The class definition file /etc/fhem/relais.classdef looks as follows:
params pinmask
set on cmd {"io set ddr 2 ff\nioset port 2 0%pinmask\nwait 1000\nio set port 2 00"}
In the fhem configuration file or on the fhem command line we do the following:
define AVRNETIO telnet 192.168.0.91:2701 # define the physical device
set AVRNETIO classdef relais /etc/fhem/relais.classdef # define the device class relais
define myRelais 8 # define the logical device myRelais with pin mask 8
set myRelais on # execute the "on" command
The set command is evaluated as follows: %pinmask
is replaced by 8 to yield
"io set ddr 2 ff\nioset port 2 08\nwait 1000\nio set port 2 00" after macro substitution. Perl
evaluates this to a literal string which is send as a plain ethersex command to the AVR-NET-IO line by line.
M232
Define
define <name> M232 <m232-device>
Define a M232 device. You can attach as many M232 devices as you like. A
M232 device provides 6 analog inputs (voltage 0..5V with 10 bit resolution)
and 8 bidirectional digital ports. The eighth digital port can be used as a
16 bit counter (maximum frequency 3kHz). The M232 device needs to be
connected to a 25pin sub-d RS232 serial port. A USB-to-serial converter
works fine if no serial port is available.
Examples:
define m232 M232 /dev/ttyUSB2
Set
set <name> stop
Stops the counter.
set <name> start
Resets the counter to zero and starts it.
set <name> octet
Sets the state of all digital ports at once, value is 0..255.
set <name> io0..io7 0|1
Turns digital port 0..7 off or on.
Get
get <name> [an0..an5]
Gets the reading of analog input 0..5 in volts.
get <name> [io0..io7]
Gets the state of digital ports 0..7, result is 0 or 1.
get <name> octet
Gets the state of all digital ports at once, result is 0..255.
get <name> counter
Gets the number of ticks of the counter since the last reset. The counter
wraps around from 65,535 to 0 and then stops.
See M232Counter for how we care about this.
Attributes
M232Counter
Define
define <name> M232Counter [unit [factor [deltaunit [deltafactor]]]]
Define at most one M232Counter for a M232 device. Defining a M232Counter
will schedule an internal task, which periodically reads the status of the
counter, and triggers notify/filelog commands. unit is the unit
name, factor is used to calculate the reading of the counter
from the number of ticks. deltaunit is the unit name of the counter
differential per second, deltafactor is used to calculate the
counter differential per second from the number of ticks per second.
Default values:
- unit: ticks
- factor: 1.0
- deltaunit: ticks per second
- deltafactor: 1.0
Note: the parameters in square brackets are optional. If you wish to
specify an optional parameter, all preceding parameters must be specified
as well.
Examples:
define counter M232Counter turns
define counter M232Counter kWh 0.0008 kW 2.88
(one tick equals 1/1250th kWh)
Do not forget to start the counter (with set .. start for
M232) or to start the counter and set the reading to a specified value
(with set ... value for M232Counter).
To avoid issues with the tick count reaching the end point, the device's
internal counter is automatically reset to 0 when the tick count is 64,000
or above and the reading basis is adjusted accordingly.
Set
set <name> value <value>
Sets the reading of the counter to the given value. The counter is reset
and started and the offset is adjusted to value/unit.
set <name> interval <interval>
Sets the status polling interval in seconds to the given value. The default
is 60 seconds.
Get
get <name> status
Gets the reading of the counter multiplied by the factor from the
define statement. Wraparounds of the counter are accounted for
by an offset (see reading basis in the output of the
list statement for the device).
Attributes
M232Voltage
Define
define <name> M232Voltage [an0..an5] [unit [factor]]
Define as many M232Voltages as you like for a M232 device. Defining a
M232Voltage will schedule an internal task, which reads the status of the
analog input every minute, and triggers notify/filelog commands.
unit is the unit name, factor is used to
calibrate the reading of the analog input.
Note: the unit defaults to the string "volts", but it must be specified
if you wish to set the factor, which defaults to 1.0.
Example:
define volt M232Voltage an0
define brightness M232Voltage an5 lx 200.0
Set
Get
Attributes
xxLG7000
Define
define <name> xxLG7000 <serial-device>
Defines a serial link to a TV set of LG's xxLG70yy (e. g. 47LG7000) series
and similar TV sets from LG. As of January 2010, the following TV sets should
be compatible:
xxLG7000 , e. g. 47LG7000 (tested)
xxPG7000 , e. g. 50PG7000 (same Manual as 47LG7000 ;))
PS3000/6000/7000/8000 series (according to LG brochure; no liabilities assumed)
PQ3000/6000 series (see PS3000)
LU4000/5000 series (not LU7000; see PS3000)
LH2000/3000/4000/5000 series (see PS3000)
SL9500/9000/8000 series (see PS3000)
These TV sets feature a serial connector which can officially be used to control
the TV set (see your Onwer's Manual, there's an Appendix labelled "External Control
Device setup", referening to cabling and command set). The xxLG7000 module is
the FHEM module to actually utilize this. (BTW, those TVs run Linux internally ;))
To exercise control over your TV set, use the LGTV module and
bind it ("attr <LGTV-name> IODev <xxLG7000-name>") to xxLG7000.
Examples:
define myLG7k xxLG7000 /dev/ttyUSB1
Set
Not used, nothing to set directly.
Get
Not used, nothing to get directly.
Attributes
- loglevel
- SetID (1, 2, ...; see your TV's Owner's Manual how to set it. Defaults to 1 if unset.)
LGTV
Define
define <name> LGTV
This module is expected to work with xxLG7000 as it's
IODev. With LGTV and a compatible hardware module (currently, there's only
xxLG7000), you are able to power your TV set on and off, query it's power state,
select the input (AV, RGB, Composites, analogue TV, DVB-T, HDMI) or mute/unmute
the volume.
Defining a LGTV device will schedule an internal task, which periodically reads
the status of the TV set (power state; if power is on, query the selected input)
and triggers notify/filelog commands.
Example:
define 47LG7000 LGTV
attr 47LG7000 IODev myLG7k
Set
set <name> <what> <value>
Currently, the following commands are defined; not all may be available on a
given TV set. An error messages should be recorded if e. g. the input in question
is not usable.
power on
power off
input AV1
input AV2
input AV3
input AV3
input Component
input RGB
input HDMI1
input HDMI2
input HDMI3
input HDMI4
input DVBT
input PAL
audio mute
audio normal
Get
get <name> <what>
Currently, the following commands are defined; not all may be available on a
given TV set. An error messages should be recorded if e. g. the input in question
is not usable.
power
input
audio
Attributes
Implementator's note
The commands listed above are send 1:1 to the underlying IODev (e. g. xxLG7000); that IODev
is responsible for translation into whatever means to invoke the function on the TV.
It is my hope that other's will adopt this idea and write compatible low level drivers for other
TV sets, to make this module (even ;)) more useful.
OREGON
The OREGON module interprets Oregon sensor messages received by a RFXCOM receiver. You need to define a RFXCOM receiver first.
See RFXCOM.
Define
define <name> OREGON <deviceid>
<deviceid> is the device identifier of the Oregon sensor. It consists of the sensors name and a one byte hex string (00-ff) that identifies the sensor. The define statement with the deviceid is generated automatically by autocreate. The following sensor names are used:
BTHR918, BTHR918N, PCR800 RGR918, RTGR328N, THN132N, THGR228N, THGR328N, THGR918, THR128, THWR288A, THGR810, UV138, UVN800, WGR918, WGR800, WTGR800_A, WTGR800_T.
The one byte hex string is generated by the Oregon sensor when is it powered on. The value seems to be randomly generated. This has the advantage that you may use more than one Oregon sensor of the same type even if it has no switch to set a sensor id. For exampple the author uses three BTHR918 sensors at the same time. All have different deviceids. The drawback is that the deviceid changes after changing batteries.
Example:
define Kaminzimmer OREGON BTHR918N_ab
Set
Get
OWFS
OWFS is a suite of programs that designed to make the 1-wire bus and its
devices easily accessible. The underlying priciple is to create a virtual
filesystem, with the unique ID being the directory, and the individual
properties of the device are represented as simple files that can be read
and written.
Note: You need the owperl module from
http://owfs.org/.
Define
define <name> OWFS <owserver-ip:port> <model> [<id>]
Define a 1-wire device to communicate with an OWFS-Server.
<owserver-ip:port>
IP-address:port from OW-Server.
<model>
Define the type of the input device.
Currently supportet: DS1420, DS9097 (for passive Adapter)
<id>
Corresponding to the id of the input device. Only for active Adapter.
Note:
If the owserver-ip:port is called none , then
no device will be opened, so you can experiment without hardware attached.
Example:
#define an active Adapter:
define DS9490R OWFS 127.0.0.1:4304 DS1420 93302D000000
#define a passive Adapter:
define DS9097 OWFS 127.0.0.1:4304 DS9097
Set
Get
get <name> <value>
where value is one of (not supported by passive Devices e.g. DS9097):
-
address (read-only)
The entire 64-bit unique ID. address starts with the family code.
Given as upper case hexidecimal digits (0-9A-F).
-
crc8 (read-only)
The 8-bit error correction portion. Uses cyclic redundancy check. Computed
from the preceeding 56 bits of the unique ID number.
Given as upper case hexidecimal digits (0-9A-F).
-
family (read-only)
The 8-bit family code. Unique to each type of device.
Given as upper case hexidecimal digits (0-9A-F).
-
id (read-only)
The 48-bit middle portion of the unique ID number. Does not include the
family code or CRC.
Given as upper case hexidecimal digits (0-9A-F).
-
locator (read-only)
Uses an extension of the 1-wire design from iButtonLink company that
associated 1-wire physical connections with a unique 1-wire code. If
the connection is behind a Link Locator the locator will show a unique
8-byte number (16 character hexidecimal) starting with family code FE.
If no Link Locator is between the device and the master, the locator
field will be all FF.
-
present (read-only)
Is the device currently present on the 1-wire bus?
-
type (read-only)
Part name assigned by Dallas Semi. E.g. DS2401 Alternative packaging
(iButton vs chip) will not be distiguished.
Examples:
get DS9490R type
DS9490R type => DS1420
get DS9490R address
DS9490R address => 8193302D0000002B
Attributes
OWTEMP
High-Precision 1-Wire Digital Thermometer.
Note:
Please define an OWFS device first.
Define
define <name> OWTEMP <id> [<interval>] [<alarminterval>]
Define a 1-wire Digital Thermometer device.
<id>
Corresponding to the id of the input device.
Set <id> to none for demo mode.
<interval>
Sets the status polling intervall in seconds to the given value. The default is 300 seconds.
<alarminterval>
Sets the alarm polling intervall in seconds to the given value. The default is 300 seconds.
Note:
Currently supported type: DS18S20 .
Example:
define KG.hz.TF.01 OWTEMP 14B598010800 300 60
Set
set <name> <value>
where value is one of:
-
templow (read-write)
The upper limit for the low temperature alarm state.
-
temphigh (read-write)
The lower limit for the high temperature alarm state.
-
ALARMINT (write-only)
Sets the alarm polling intervall in seconds to the given value.
-
INTERVAL (write-only)
Sets the status polling intervall in seconds to the given value.
Get
get <name> <value>
where value is one of:
- address (read-only)
- crc8 (read-only)
- family (read-only)
- id (read-only)
- locator (read-only)
- present (read-only)
-
temperature (read-only)
Read by the chip at high resolution (~12 bits). Units are selected from
the defined OWFS Device. See temp-scale for choices.
- templow (read-write)
- temphigh (read-write)
- type (read-only)
Examples:
get KG.hz.TF.01 type
KG.hz.TF.01 type => DS18S20
get KG.hz.TF.01 temperature
KG.hz.TF.01 temperature => 38.2500 (Celsius)
Attributes
RFXCOM
RFXCOM sells RF receivers and transmitters
for a variety of protocols. The 433.92MHz receivers supports many protocols like Oregon Scientific weather sensors, RFXMeter devices, X10 security and lightning devices adn others.
This module supports receiving messages for the USB attached receivers (see http://www.rfxcom.com/receivers.htm).
For testing purposes you may also use the LAN based receivers. However
the code for LAN access is not fault tolerant. I recommend to use the USB attached receiver.
Currently the following parser modules are implemented:
- 41_OREGON.pm (see device OREGON): Process messages Oregon Scientific weather sensors.
See http://www.rfxcom.com/oregon.htm of
Oregon Scientific weather sensors that could be received by the RFXCOM receivers. See http://www.rfxcom.com/sensors.htm.
Until now the following Oregon Scientific weather sensors have been tested successfully: BTHR918N, THGR810, THR128, THWR288A, PCR800, WTGR800. It will probably work with many other Oregon sensors supported by RFXCOM receivers. Please give feedback if you use other sensors.
- 42_RFXMETER.pm (see device RFXMETER): Process RFXCOM RFXMeter devices.
- 43_RFXX10REC.pm (see device RFXX10REC): Process X10 security and X10 lightning devices.
- 44_RFXELSE.pm: Process and display all other messages. This module shows you messages that could not be handled by the other modules. It is useful to see RF receiption problems.
Note: this module requires the Device::SerialPort or Win32::SerialPort module
if the devices is connected via USB or a serial port.
Define
define <name> RFXCOM <device> [noinit]
USB-connected (80002):
<device> specifies the USB port to communicate with the RFXCOM receiver.
Normally on Linux the device will be named /dev/ttyUSBx, where x is a number.
For example /dev/ttyUSB0.
Example:
define RFXCOMUSB RFXCOM /dev/ttyUSB0
Network-connected devices:
<device> specifies the host:port of the device. E.g.
192.168.1.5:10001
noninit is optional and issues that the RFXCOM device should not be initialized. This is useful if you share a RFXCOM device. It is also useful for testing to simulate a RFXCOM receiver via netcat.
Example:
define RFXCOMTCP RFXCOM 192.168.1.5:10001
define RFXCOMTCP2 RFXCOM 192.168.1.121:10001 noinit
|
RFXMETER
The RFXMETER module interprets RFXCOM RFXMeter messages received by a RFXCOM receiver. You need to define an RFXCOM receiver first.
See the RFXCOM.
Define
define <name> RFXMETER <deviceid> [<scalefactor>] [<unitname>]
<deviceid> is the device identifier of the RFXMeter sensor and is a one byte hexstring (00-ff).
<scalefactor> is an optional scaling factor. It is multiplied to the value that is received from the RFXmeter sensor.
<unitname> is an optional string that describes the value units. It is added to the Reading generated to describe the values.
Example:
define RFXWater RFXMETER 00 0.5 ltr
define RFXPower RFXMETER 01 0.001 kwh
define RFXGas RFXMETER 02 0.01 cu_m
Set
Get
RFXX10REC
The RFXX10REC module interprets X10 security and X10 lightning messages received by a RFXCOM RF receiver. Reported also to work with KlikAanKlikUit. You need to define an RFXCOM receiver first.
See RFXCOM.
Define
define <name> RFXX10REC <type> <deviceid> <devicelog> [<deviceid> <devicelog>]
<type>
specifies the type of the X10 device:
X10 security devices:
-
ds10a (X10 security ds10a Door/Window Sensor or compatible devices. This device type reports the status of the switch [Open/Closed], status of the delay switch [min|max]], and battery status [ok|low].)
-
ms10a (X10 security ms10a motion sensor. This device type reports the status of motion sensor [normal|alert] and battery status [ok|low].))
-
sd90 (Marmitek sd90 smoke detector. This device type reports the status of the smoke detector [normal|alert] and battery status [ok|low].)
-
kr18 (X10 security remote control. Report the Reading "Security" with values [Arm|Disarm], "ButtonA" and "ButtonB" with values [on|off] )
X10 lightning devices:
-
ms14a (X10 motion sensor. Reports [normal|alert] on the first deviceid (motion sensor) and [on|off] for the second deviceid (light sensor))
-
x10 (All other x10 devices. Report [on|off] on both deviceids.)
<deviceid>
specifies the first device id of the device. X10 security have a a 16-Bit device id which has to be written as a hex-string (example "5a54").
A X10 lightning device has a house code A..P followed by a unitcode 1..16 (example "B1").
<devicelog>
is the name of the Reading used to report. Suggested: "Window" or "Door" for ds10a, "motion" for motion sensors, "Smoke" for sd90.
<deviceid2>
is optional and specifies the second device id of the device if it exists. For example sd90 smoke sensors can be configured to report two device ids. ms14a motion sensors report motion status on the first deviceid and the status of the light sensor on the second deviceid.
<devicelog2>
is optional for the name used for the Reading of <deviceid2> .
Example:
define livingroom_window RFXX10REC ds10a 72cd Window
define motion_sensor1 RFXX10REC ms10a 55c6 motion
define smoke_sensor1 RFXX10REC sd90 54d3 Smoke 54d3 Smoketest
define motion_sensor2 RFXX10REC ms14a A1 motion A2 light
Set
Get
WS2000
Define
define <name> WS2000 <device_to_connect>
Define a WS2000 series raw receiver device sold by ELV. Details see here.
Unlike 86_FS10.pm it will handle the complete device communication itself
and doesnt require an external program. For this reason you can now use
this also on windows.
This Device will be usually connect to a serial port, but you can also
define a raw network redirector like lantronix XPORT(TM).
Note: Currently this device does not support a "set" function
Attributes:
rain : factor for calculating amount of rain in ml/count
altitude : height in meters to calculate pressure for NN (not used yet)
Example:
define WS2000 WS2000 /dev/ttyS0
define WS2000 WS2000 xport:10001
attr WS2000 rain 366 : use factor 366 ml/count for rain sensor S2000R
Set
Get
get <name> list
Gets the last reading of all received sensord
get <name> [TH0..TH7, T0..T7, I0..I7, R0..R7, W0..W7, L0..L7, P0..P7,LAST,RAW]
get the last reading for the name sensor,
LAST : Last received Sensor
RAW : original Data from interface
Attributes
WS3600
Define
define <name> WS3600 </path/to/fetch3600>
Define a WS3600 series weather station (Europe Supplies, technotrade, etc; refer to
Wetterstationen.info
(german) for details on this model); the station is queried by means of an external program,
fetch3600. It talks to the attached weather station (several WS do supply an RS323 interface
but seem to use some kind of "morse code" on the RTS, CTS wires instead of using propper
serial communication (RX, TX); it's no use to recode that crap into FHEM when there is a
stable package of tools to talk to the station available: open3600)
and delivers the current readings line by line as reading-value-pairs. These are read in
and translated into more readable names for FHEM by the module WS3600.pm.
As the WS3600 is rather similar to the WS2300
and open3600 basically is a modified offspring of open2300, by exchanging the /path/to/fetch3600 with /path/to/fetch2300 this module
should be able to handle the WS2300 was well.
Currently, it is expected that the WS is attached to the local computer and fetch3600 is run
locally. Basically the executable called needs to supply on stdout an output similar to what
fetch3600 returns; how to implement a "networked setup" is left as an excercise to the reader.
For the records, this is an output of fetch3600:
Date 14-Nov-2009
Time 10:50:22
Ti 22.8
Timin 20.8
Timax 27.9
TTimin 10:27
DTimin 15-10-2009
TTimax 23:31
DTimax 20-08-2009
To 14.2
Tomin -0.4
Tomax 35.6
TTomin 07:03
DTomin 15-10-2009
TTomax 16:52
DTomax 20-08-2009
DP 9.2
DPmin -2.2
DPmax 20.3
TDPmin 07:03
DDPmin 15-10-2009
TDPmax 11:58
DDPmax 20-08-2009
RHi 48
RHimin 32
RHimax 57
TRHimin 17:03
DRHimin 21-10-2009
TRHimax 22:24
DRHimax 07-10-2009
RHo 72
RHomin 27
RHomax 96
TRHomin 16:41
DRHomin 20-08-2009
TRHomax 06:28
DRHomax 02-11-2009
WS 0.0
DIRtext WSW
DIR0 247.5
DIR1 247.5
DIR2 247.5
DIR3 247.5
DIR4 247.5
DIR5 247.5
WC 14.2
WCmin -0.4
WCmax 35.6
TWCmin 07:03
DWCmin 15-10-2009
TWCmax 16:52
DWCmax 20-08-2009
WSmin 0.0
WSmax 25.6
TWSmin 10:44
DWSmin 14-11-2009
TWSmax 19:08
DWSmax 24-09-2009
R1h 0.00
R1hmax 24.34
TR1hmax 22:34
DR1hmax 07-10-2009
R24h 0.00
R24hmax 55.42
TR24hmax 07:11
DR24hmax 08-10-2009
R1w 29.00
R1wmax 95.83
TR1wmax 00:00
DR1wmax 12-10-2009
R1m 117.58
R1mmax 117.58
TR1mmax 00:00
DR1mmax 01-11-2009
Rtot 3028.70
TRtot 03:29
DRtot 18-09-2005
RP 992.200
AP 995.900
RPmin 970.300
RPmax 1020.000
TRPmin 05:25
DRPmin 04-11-2009
TRPmax 09:19
DRPmax 11-09-2009
Tendency Falling
Forecast Cloudy
There is no expectation on the readings received from the fetch3600 binary; so, in
essence, if you have a similar setup (unsupported, attached weather station and a
means to get it's reading into an output similar to above's), you should be able
to use WS3600.pm with a custom written script to interface FHEM with your station
as well. WS3600.pm only recognizes the above readings (and translates these
into, e. g., Temp-inside for Ti for use within FHEM), other
lines are silently dropped on the floor.
fetch3600 is available as binary for the Windows OS as well, but I haven't tested operation
under that OS, use it at your own risk and you mileage may vary ...
Note: Currently this device does not support a "set" function nor anything to "get". The
later would be possible to implement if neccessary, though.
Implementation of WS3600.pm tries to be nice, that is it reads from the pipe only
non-blocking (== if there is data), so it should be safe even to use it via ssh or
a netcat-pipe over the Internet, but this, as well, has not been tested yet.
Attributes:
model : WS3600 or WS2300 (not used for anything, yet)
Example:
define my3600 W36000 /usr/local/bin/fetch360
Set
Get
Attributes
SISPM
Define
define <name> SISPM </path/to/sispmctl>
PLEASE NOTE: This module is still work in progess; please treat it as such.
(That is, don't but your central heating on SISPM in a cold winter just yet ;))
Further tests should be done regarding the interaction between "set" commands and the sheduled
status reading. (Testing with FIFOs seems as if it's working without blocking nor interference,
but that's on a mostly unloaded, fast system.)
When using multiple SIS PMs on one host, sispmctl up to and including V 2.7 has a bug:
plug-2:# sispmctl -v -s -d 1 -g all -d 2 -g all
SiS PM Control for Linux 2.7
(C) 2004, 2005, 2006, 2007, 2008 by Mondrian Nuessle, (C) 2005, 2006 by Andreas Neuper.
This program is free software.
[...]
Gembird #0 is USB device 013.This device is a 4-socket SiS-PM.
[...]
Gembird #1 is USB device 015.This device is a 4-socket SiS-PM.
[...]
Accessing Gembird #1 USB device 015
Status of outlet 1: on
Status of outlet 2: on
Status of outlet 3: on
Status of outlet 4: on
Error performing requested action
Libusb error string: error sending control message: Invalid argument
Terminating
*** glibc detected *** sispmctl: double free or corruption (fasttop): 0x000251e0 ***
[...]
Well, the fix is simple and will be sent upstream, but in case it's not incorporated
at the time you need it, here it is; it's easy to apply even by hand ;-)
--- src/main.c-old 2010-01-19 16:56:15.000000000 +0100
+++ src/main.c 2010-01-19 16:54:56.000000000 +0100
@@ -441,7 +441,7 @@
}
break;
case 'd': // replace previous (first is default) device by selected one
- if(udev!=NULL) usb_close (udev);
+ if(udev!=NULL) { usb_close (udev); udev=NULL; }
devnum = atoi(optarg);
if(devnum>=count) devnum=count-1;
break;
Defines a path to the program "sispmctl", which is used to control (locally attached)
"Silver Shield Power Manager" devices. Usually these are connected to the local computer
via USB, more than one "sispm" device per computer is supported. (Please note that, due
to neglections in their USB driver, AVM's Fritz!Box 7170 (and derivates, like Deutsche
Telekom's Speedport W901V) is not able to talk to these devices ...)
The communication between FHEM and the Power Manager device is done by using the open
source sispmctl program. Thus, for the
time being, THIS functionality is only available running FHEM on Linux (or any other platform
where you can get the sispmctl program compiled and running). On the bright side: by
interfacing via commandline, it is possible to define multiple SISPM devices, e. g. with
a wrapper that does execute sispmctl on a remote (Linux) system. And: sispmctl runs happily
on Marvells SheevaPlug ;) Please note: if you're not running FHEM as root, you most likely
have to make sispmctl setuid root (chmod 4755 /path/to/sispmctl ) or fiddle with
udev so that the devices of the Power Manager are owned by the user running FHEM.
After defining a SISPM device, a first test is done, identifying attached PMs. If this
succeeds, an internal task is scheduled to read the status every 30 seconds. (Reason
being that someone else could have switched sockets externally to FHEM.)
To actually control any power sockets, you need to define a SIS_PMS
device ;) If autocreate is enabled, those should be autocreated for your convenience as
soon as the first scan took place (30 seconds after the define).
Implementation of SISPM.pm tries to be nice, that is it reads from the pipe only
non-blocking (== if there is data), so it should be safe even to use it via ssh or
a netcat-pipe over the Internet, but this, as well, has not been tested extensively yet.
Attributes:
model : SISPM (ignored for now)
Example:
define PMS_Terrarium SISPM /usr/bin/sispmctl
Set
Get
Attributes
SIS_PMS
This module is responsible for handling the actual sockets (power on,
power off, toggle) on a "Silver Shield Power Manager", see SISPM
for how to define access to one (SIS_PMS stands for "Silver Shield Power Manager Socket").
Define
define <name> SIS_PMS <serial> <socket>
To securely distinguish multiple attached Power Manager devices, the
serial number of those is used. You get these with "sispmctl -s" - or
just let autocreate define the sockets attached for you.
<serial> is the serial number of the Power Manager device, see above.
<socket> is a number between 1 and 4 (for a 4 socket model)
Examples:
define lamp SIS_PMS 01:02:03:04:05 1
define otherlamp SIS_PMS 01:02:03:04:05 3
define tv SIS_PMS 01:01:38:44:55 1
Set
set <name> <value> [<time>]
where value is one of:
off
on
toggle
on-till # Special, see the note
off-till # Special, see the note
Examples:
set lamp on
set lamp1,lamp2,lamp3 on
set lamp1-lamp3 on
set hql_lamp on-till 18:45
Notes:
- As an external program is used, a noticeable delay may occur.
- *-till requires an absolute time in the "at" format (HH:MM:SS, HH:MM
or { <perl code> }, where the perl-code returns a time
specification).
If the current time is greater than the specified time, then the
command is ignored, else an "on" or "off" command, respectively, is
generated, and for the given time an "off"/"on" command is
scheduleld via the at command.
Get
Attributes
- do_not_notify
- dummy
Set the device attribute dummy to define devices which should not
output any signals. Associated notifys will be executed if the signal
is received. Used e.g. to react to a code from a sender, but it will
not actually switch if triggered in the web frontend.
- loglevel
IPWE
Define
define <name> IPWE <hostname> [<delay>]
Define a IPWE network attached weather data receiver device sold by ELV. Details see here.
It's intended to receive the same sensors as WS300 (8 T/H-Sensors and one kombi sensor),
but can be accessed via http and telnet.
For unknown reason, my try to use the telnet interface was not working neither with raw sockets
nor with Net::Telnet module. Therefore i choosed here the "easy" way
to simple readout the http page and extract all data from the offered table. For this reason this module doesnt
contain any option to configure this device.
Note: You should give your sensors a name within the web interface, once they a received the first time.
To extract a single sensor simply match for this name or sensor id
Attributes:
delay : seconds between read accesses(default 300s)
Example:
define ipwe IPWE ipwe1 120
attr ipwe delay 600 : 10min between readouts
Set
Get
get <name> status
Gets actual data from device for sensors with data
get <name> <sensorname>
will grep output from device for this sensorname
Attributes
USBWX
The USBWX module interprets the messages received by the ELV USB-WDE1
weather receiver. This receiver is compaptible with the following ELV sensors:
KS200/KS300, S300IA, S300TH, ASH2200, PS50. It also known to work with Conrad
weather sensors KS555, S555TH and ASH555. This module was tested with ELV
S300TH, ELV ASH2200, ELV KS300, Conrad S555TH and Conrad KS555. Readings
and STATE of temperature/humidity sensors are compatible with the CUL_WS
module. For KS300/KS555 sensors STATE is compatible with the KS300 module. The
module is integrated into autocreate to generate the appropriate filelogs and
weblinks automatically.
Note: this module requires the Device::SerialPort or Win32::SerialPort module
if the devices is connected via USB or a serial port.
Define
define <name> USBWX <serial device>
Defines USB-WDE1 attached via usb.
define <name> USBWX <code> [corr1...corr4]
<code> is the code which must be set on the sensor. Valid values
are 1 through 8. 9 is used as the sensor id of the ks300 sensor.
corr1..corr4 are up to 4 numerical correction factors, which will be added
to the respective value to calibrate the device. Note: rain-values will be
multiplied and not added to the correction factor.
Example:
define USBWDE1 USBWX /dev/ttyUSB0
define USBWX_1 USBWX 1
define USBWX_livingroom USBWX 2
define USBWX_ks300 USBWX 9
Set
Get
Attributes
TCM
The TCM module serves an USB or TCP/IP connected TCM120 or TCM310 EnOcean
Transceiver module. These are mostly packaged together with a serial to USB
chip and an antenna, e.g. the BSC BOR contains the TCM120. See also the
datasheet available from www.enocean.com.
As the TCM120 and the TCM310 speak completely different protocols, this
module implements 2 drivers in one. It is the "physical" part for the EnOcean module.
Note: this module requires the Device::SerialPort or Win32::SerialPort module.
Define
define <name> TCM [120|310] <device>
First you have to specify the type of the EnOcean Transceiver Chip , i.e
either 120 for the TCM120 or 310 for the TCM310.
USB-connected device:
<device> specifies the serial port to communicate with the TCM.
The name of the serial-device depends on your distribution, under linux
it is commonly /dev/ttyACM0.
You can also specify a baudrate if the device name contains the @
character, e.g.: /dev/ttyACM0@9600. The default for the TCM120 is 9600
Baud, and for the TCM310 it is 57600 baud.
Network-connected device (untested):
<device> specifies the host:port of the device. E.g.
192.168.0.244:2323
If the device is called none, then no device will be opened, so you
can experiment without hardware attached.
Set
- idbase
Set the ID base. Note: The firmware executes this command only up to
then times to prevent misuse.
- modem_off
- modem_on
- reset
- sensitivity
- sleep
- wake
For details see the datasheet available from
www.enocean.com. If you do not understand it, than you probably don't
need it :)
Get
- idbase
Get the ID base. You need this command in order to control EnOcean
devices, see the EnOcean
paragraph.
- modem_status
- sensitivity
- sw_ver
for details see the datasheet available from www.enocean.com
Attributes
weblink
Define
define <name> weblink [link|fileplot|image|iframe]
<argument>
This is a placeholder used with webpgm2 to be able to integrate links
into it, and to be able to put more than one gnuplot/SVG picture on one
page. It has no set or get methods.
Examples:
define homepage weblink link http://www.fhem.de
define webcam_picture weblink image http://w.x.y.z/current.jpg
define interactive_webcam weblink iframe http://w.x.y.z/webcam.cgi
define MyPlot weblink fileplot <logdevice>:<gnuplot-file>:<logfile>
Notes:
- Normally you won't have to define fileplot weblinks manually, as
FHEMWEB makes it easy for you, just plot a logfile (see
logtype) and convert it to weblink. Now you
can group these weblinks by putting them into rooms. If you convert
the current logfile to a weblink, it will always refer to the current
file, even if its name changes regularly (and not the one you
originally specified).
Set
Get
Attributes
- htmlattr
HTML attributes to be used for link, image and iframe type of links. E.g.:
define yw weblink wl_im1 iframe http://weather.yahooapis.com/forecastrss?w=650272&u=c
attr yw weblink htmlattr width="480" height="560"
- fixedrange
- plotsize
- plotmode
- label
Double-Colon separated list of values. The values will be used to replace
<L#> type of strings in the .gplot file, with # beginning at 1
(<L1>, <L2>, etc.). Each value will be evaluated as a perl
expression, so you have access e.g. to the Value functions.
If the plotmode is gnuplot-scroll or SVG, you can also use the min, max,
avg, cnt, sum, lastv (last value) and lastd (last date) values of the
individual curves, by accessing the corresponding values from the data
hash, see the example below:
- Fixed text for the right and left axis:
- Fhem config:
attr wl_1 label "Temperature"::"Humidity"
- .gplot file entry:
set ylabel <L1>
set y2label <L2>
- Title with maximum and current values of the 1st curve (FileLog)
- Fhem config:
attr wl_1 label "Max $data{max1}, Current $data{currval1}"
- .gplot file entry:
set title <L1>
- label
Double-Colon separated list of values. The values will be used to replace
<L#> type of strings in the .gplot file, with # beginning at 1
(<L1>, <L2>, etc.). Each value will be evaluated as a perl
expression, so you have access e.g. to the Value functions.
If the plotmode is gnuplot-scroll or SVG, you can also use the min, max,
avg, cnt, sum, lastv (last value) and lastd (last date) values of the
individual curves, by accessing the corresponding values from the data
hash, see the example below:
- Fixed text for the right and left axis:
- Fhem config:
attr wl_1 label "Temperature"::"Humidity"
- .gplot file entry:
set ylabel <L1>
set y2label <L2>
- Title with maximum and current values of the 1st curve (FileLog)
- Fhem config:
attr wl_1 label "Max $data{max1}, Current $data{currval1}"
- .gplot file entry:
set title <L1>
- title
A special form of label (see above), which replaces the string <TL>
in the .gplot file. It defaults to the filename of the logfile.
FHEM2FHEM
FHEM2FHEM is a helper module to connect separate fhem installations.
Define
define <name> FHEM2FHEM <host:portnr> [LOG:regexp|RAW:devicename]
Connect to the remote fhem on host. portnr is the global port
attribute of the remote fhem. The next parameter specifies the connection
type:
- LOG
Using this type you will receive all events generated by the remote fhem,
just like when using the inform on command, and you
can use these events just like any local event for FileLog or notify.
The regexp will prefilter the events distributed locally, for the syntax
see the notify definition.
Drawbacks: the remote devices wont be created locally, so list wont
show them and it is not possible to manipulate them from the local
fhem. It is possible to create a device with the same name on both fhem
instances, but if both of them receive the same event (e.g. because both
of them have a CUL attached), then all associated FileLogs/notifys will be
triggered twice.
- RAW
By using this type the local fhem will receive raw events from the remote
fhem device devicename, just like if it would be attached to the
local fhem.
Drawback: only devices using the Dispatch function (CUL, FHZ, CM11,
SISPM, RFXCOM, TCM, TUL) generate raw messages.
devicename must exist on the local
fhem server too with the same name and same type as the remote device, but
usually with the device-node "none", so it is only a dummy device. All
necessary attributes (e.g. rfmode if the remote CUL
is in HomeMatic mode) must also be set for the local device.
Examples:
define ds1 FHEM2FHEM 192.168.0.1:7072 LOG:.*
define ds2 FHEM2FHEM 192.168.0.1:7072 RAW:CUL
Set
Get
Attributes
FHEMWEB
FHEMWEB is the builtin web-frontend (webpgm2). It implements a simple web
server (optionally with Basic-Auth and HTTPS), so no additional program is
needed.
Define
define <name> FHEMWEB <tcp-portnr> [global]
Enable the webfrontend on port <tcp-portnr>. If global is specified,
then requests from all interfaces (not only localhost / 127.0.0.1) are
serviced.
To enable listening on IPV6 see the comments here.
Feature: http://host:port/fhem/icons/<devicename> will return
the icon associated with the current status of <devicename>.
Set
Get
Attributes
- webname
Path after the http://hostname:port/ specification. Defaults to fhem,
i.e the default http address is http://localhost:8083/fhem
- refresh
If set, a http-equiv="refresh" entry will be genererated with the given
argument (i.e. the browser will reload the page after the given
seconds).
- plotmode
Specifies how to generate the plots:
- gnuplot
Call the gnuplot script with each logfile. The filename
specification of the FileLog device will
determine what is in the plot. The data is converted into an
image on the backend with gnuplot.
- gnuplot-scroll
Fhemweb will offer zoom and scroll buttons in order to navigate
in the current logfile, i.e. you can select just a part of the
data to be displayed. The more data is contained in a single
logfile, the easier you can navigate. The recommendation is to
store the data for a whole year in one logfile. The data is
converted into an image on the backend with gnuplot.
- SVG
The same scrolling as with gnuplot scroll, but the data is sent
as an SVG script to the frontend, which will compute
the image: no need for gnuplot on the backend.
This is the default. Note: SVG is supported on the Android
platform by Opera/Firefox and the Internet Explorer before 9
needs a plugin.
See also the attribute fixedrange.
Note: for gnuplot & gnuplot-scroll mode the gnuplot output is
redirected to the file gnuplot.err in the /tmp directory
- plotsize
the default size of the plot, in pixels, separated by comma:
width,height. You can set individual sizes by setting the plotsize of
the weblink. Default is 800,160 for desktop, and 480,160 for
smallscreen.
- fixedrange
Can be applied to weblink devices (FHEMWEB).
Contains two time specs in the form YYYY-MM-DD separated by a space.
In plotmode gnuplot-scroll or SVG the given time-range will be used,
and no scrolling for this weblinks will be possible. Needed e.g. for
looking at last-years data without scrolling.
If the value is one of day, week, month, year than set the zoom level
for this weblink independently of the user specified zoom-level.
This is useful for pages with multiple plots: one of the plots is best
viewed in with the default (day) zoom, the other one with a week zoom.
- smallscreen, touchpad
Optimize for small screen size (i.e. smartphones) or for touchpad
devices (i.e. tablets)
Note: The default configuration installed with make install-pgm2
installs 2 FHEMWEB instances: port 8083 for desktop browsers and
port 8084 for smallscreen browsers, both using SVG rendering.
On Android SVG is supported by Opera/Firefox.
WebApp suppport if specifying one of the above options: After viewing
the site on the iPhone or iPad in Safari, add it to the home-screen to
get full-screen support.
- plotfork
If set, generate the logs in a parallel process. Note: do not use it
on Windows and on systems with small memory foorprint.
- basicAuth, basicAuthMsg
request a username/password authentication for access. You have to set
the basicAuth attribute to the Base64 encoded value of
<user>:<password>, e.g.:
# Calculate first the encoded string with the commandline program
$ echo -n fhemuser:secret | base64
ZmhlbXVzZXI6c2VjcmV0
fhem.cfg:
attr WEB basicAuth ZmhlbXVzZXI6c2VjcmV0
You can of course use other means of base64 encoding, e.g. online
Base64 encoders. If basicAuthMsg is set, it will be displayed in the
popup window when requesting the username/password.
- HTTPS
use HTTPS instead of HTTP. This feature requires the perl module
IO::Socket::SSL, to be installed with cpan -i IO::Socket::SSL or
apt-get install libio-socket-ssl-perl; the OSX perl already has this
module.
A local certificate has to be generated into a directory called certs,
this directory must be in the working directory (pwd) of fhem,
which is not necessarily the modpath directory. To generate it:
mkdir certs
cd certs
openssl req -new -x509 -nodes -out server-cert.pem -days 3650 -keyout server-key.pem
- stylesheet
name of the alternative stylesheet file in the FHEM directory.
- hiddenroom
Komma separated list of rooms to "hide", i.e. not to show.
at
Start an arbitrary fhem.pl command at a later time.
Define
define <name> at <timespec> <command>
<timespec> format: [+][*{N}]<timedet>
The optional + indicates that the specification is
relative(i.e. it will be added to the current time).
The optional * indicates that the command should be
executed repeatedly.
The optional {N} after the * indicates,that the command
should be repeated N-times only.
<timedet> is either HH:MM, HH:MM:SS or {perlfunc()}, where perlfunc
must return a HH:MM or HH:MM:SS date.
Examples:
# absolute ones:
define a1 at 17:00:00 set lamp on # fhem command
define a2 at 17:00:00 { Log 1, "Teatime" } # Perl command
define a3 at 17:00:00 "/bin/echo "Teatime" > /dev/console" # shell command
define a4 at *17:00:00 set lamp on # every day
# relative ones
define a5 at +00:00:10 set lamp on # switch the lamp on in 10 seconds
define a6 at +00:00:02 set lamp on-for-timer 1 # Blink once in 2 seconds
define a7 at +*{3}00:00:02 set lamp on-for-timer 1 # Blink 3 times
# Blink 3 times if the piri sends a command
define n1 notify piri:on.* define a8 at +*{3}00:00:02 set lamp on-for-timer 1
# Switch the lamp on from sunset to 11 PM
define a9 at +*{sunset_rel()} set lamp on
define a10 at *23:00:00 set lamp off
# More elegant version, works for sunset > 23:00 too
define a11 at +*{sunset_rel()} set lamp on-till 23:00
# Only do this on weekend
define a12 at +*{sunset_rel()} { fhem("set lamp on-till 23:00") if($we) }
# Switch lamp1 and lamp2 on from 7:00 till 10 minutes after sunrise
define a13 at *07:00 set lamp1,lamp2 on-till {sunrise(+600)}
# Switch the lamp off 2 minutes after sunrise each day
define a14 at +{sunrise(+120)} set lamp on
# Switch lamp1 on at sunset, not before 18:00 and not after 21:00
define a15 at *{sunset(0,"18:00","21:00")} set lamp1 on
Notes:
- if no
* is specified, then a command will be executed
only once, and then the at entry will be deleted. In
this case the command will be saved to the statefile (as it
considered volatile, i.e. entered by cronjob) and not to the
configfile (see the save command.)
- if the current time is greater than the time specified, then the
command will be executed tomorrow.
- For even more complex date handling you either have to call fhem from
cron or filter the date in a perl expression, see the last example and
the section Perl special.
Set
Get
Attributes
- disable
Can be applied to at/watchdog/notify/FileLog devices.
Disables the corresponding at/notify or FileLog device. Note:
If applied to an at, the command will not be executed,
but the next time will be computed.
- skip_next
Used for at commands: skip the execution of the command the next
time.
autocreate
Automatically create not yet defined fhem devices upon reception of a message
generated by this device. Note: devices which are polled (like the EMEM/EMWZ
accessed through the EM1010PC) will NOT be automatically created.
Define
define <name> autocreate
It makes no sense to create more than one instance of this module.
By defining an instance, the global attribute autoload_undefined_devices
is set, so that modules for unknnown devices are automatically loaded.
The autocreate module intercepts the UNDEFINED event generated by each
module, creates a device and optionally also FileLog and weblink
entries.
Note 1: devices will be created with a unique name, which contains
the type and a unique id for this type. When renaming
the device, the automatically created filelog and weblink devices
will also be renamed.
Note 2: you can disable the automatic creation by setting the
disable attribute, in this case only the rename
hook is active, and you can use the createlog
command to add FileLog and weblink to an already defined device.
Example:
define autocreate autocreate
attr autocreate autosave
attr autocreate device_room %TYPE
attr autocreate filelog test2/log/%NAME-%Y.log
attr autocreate weblink
attr autocreate weblink_room Plots
Set
Get
Attributes
- autosave
After creating a device, automatically save the config file with the
command save command.
- device_room
"Put" the newly created device in this room. The name can contain the
wildcards %TYPE and %NAME, see the example above.
- filelog
Create a filelog associated with the device. The filename can contain
the wildcards %TYPE and %NAME, see the example above. The filelog will
be "put" in the same room as the device.
- weblink
Create a weblink associated with the device/filelog.
- weblink_room
"Put" the newly weblink in this room. The name can contain the
wildcards %TYPE and %NAME, see the example above.
- disable
- ignoreTypes
This is a regexp, to ignore certain devices, e.g. you neighbours FHT.
You can specify more than one, with usual regexp syntax, e.g.
attr autocreate ignoreTypes CUL_HOERMANN.*|FHT_1234|CUL_WS_7
createlog
Use this command to manually add a FileLog and a weblink to an existing
device. E.g. if a HomeMatic device is created automatically by something
else then a pairing message, the model is unknown, so no plots will be
generated. You can set the model/subtype attribute manually, and then call
createlog to add the corresponding logs.
holiday
Note: this module requires the "DateTime::Event::Easter" perl module for all
easter related holidays.
Define
define <name> holiday
Define a set of holidays. The module will try to open the file
<name>.holiday in the modpath/FHEM directory.
If an entry in the holiday file matches the current day, then the STATE of
this holiday instance displayed in the list command
will be set to the holiday, else the state is set to the text none. Most
probably you'll want to query this value in some perl script: see Value() in
the perl section or the global attribute holiday2we.
The file will be reread once every night, to compute the value for the
current day, and by each get command (see below).
Holiday file definition:
The file may contain comments (beginning with #) or empty lines.
Significant lines begin with a number (type) and contain some space
separated words, depending on the type. The different types are:
- 1
Exact date. Arguments: <MM-DD> <holiday-name>
Exampe: 1 12-24 Christmas
- 2
Easter-dependent date. Arguments: <day-offset>
<holiday-name>.
The offset is counted from Easter-Sunday. Note: the perl module
DateTime::Event::Easter must be installed to use this type of
holiday.
Exampe: 2 1 Easter-Monday
- 3
Month dependent date. Arguments: <nth> <weekday>
<month <holiday-name>.
Examples:
3 1 Mon 05 First Monday In May
3 2 Mon 05 Second Monday In May
3 -1 Mon 05 Last Monday In May
3 0 Mon 05 Each Monday In May
- 4
Interval. Arguments: <MM-DD> <MM-DD> <holiday-name>
.
Example:
4 01-06 31-06 Summer holiday
- 5
Date relative, weekday fixed holiday. Arguments: <nth>
<weekday> <month> <day> < holiday-name>
Note that while +0 or -0 as offsets are not forbidden, their behaviour
is undefined in the sense that it might change without notice.
Examples:
5 -1 Wed 11 23 Buss und Bettag (first Wednesday before Nov, 23rd)
5 1 Mon 01 31 First Monday after Jan, 31st (1st Monday in February)
See also he.holiday in the contrib directory for official holidays in the
german country of Hessen, and by.holiday for the Bavarian definition.
Set
Get
get <name> <MM-DD>
Return the holiday name of the specified date or the text none.
Attributes
notify
Define
define <name> notify <pattern> <command>
Execute a command when received an event for the definition <pattern> . If
<command> is enclosed in {}, then it is a perl expression, if it is
enclosed in "", then it is a shell command, else it is a "plain" fhem.pl
command (chain). See the trigger command for
testing it.
Examples:
define b3lampV1 notify btn3 set lamp %
define b3lampV2 notify btn3 { fhem "set lamp %" }
define b3lampV3 notify btn3 "/usr/local/bin/setlamp "%""
define b3lampV3 notify btn3 set lamp1 %;;set lamp2 %
define wzMessLg notify wz:measured.* "/usr/local/bin/logfht @ "%""
define LogUndef notify global:UNDEFINED.* "send-me-mail.sh "%""
Notes:
- The character
% will be replaced with the received event,
e.g. with on or off or measured-temp: 21.7
(Celsius) It is advisable to put the % into double
quotes, else the shell may get a syntax error.
- The character
@ will be replaced with the device
name.
- To use % or @ in the text itself, use the double mode (%% or @@).
- Instead of
% and @ , the parameters
%EVENT (same as % ), %NAME (same as
@ ) and %TYPE (contains the device type, e.g.
FHT ) can be used. The space separated event "parts" are
available as %EVTPART0, %EVTPART1, etc. A single % looses
its special meaning if any of these parameters appears in the
definition.
<pattern> may also be a compound of
definition:event to filter for events.
<pattern> must completely (!)
match either the device name, or the compound of the device name and the
event. The event is either the string you see in the list output in paranthesis after the device name, or the
string you see when you do a detailed list of the device.
- To use database logging, copy the file contrib/91_DbLog.pm into your
modules directory, and change the $dbconn parameter in the file.
- Following special events will be generated for the device "global"
- INITIALIZED after initialization is finished.
- DEFINED <devname> after a device is defined.
- DELETED <devname> after a device was deleted.
- RENAMED <old> <new> after a device was renamed.
- UNDEFINED <defspec> upon reception of a message for an
undefined device.
- Notify can be used to store macros for manual execution. Use the trigger command to execute the macro.
E.g.
fhem> define MyMacro notify MyMacro { Log 1, "Hello"}
fhem> trigger MyMacro
Set
Get
Attributes
sequence
Define
define <name> sequence <re1> <timeout1> <re2> [<timeout2> <re3> ...]
A sequence is used to allow to trigger events for a certain combination of
button presses on a remote. E.g. to switch on a lamp when pressing the
Btn1:on, then Btn2:off and at last Btn1:on one after the other you could
define the following:
define lampseq sequence Btn1:on 0.5 Btn2:off 0.5 Btn1 on
define lampon notify lampseq:trigger set lamp on
Set
Get
Attributes
structure
Define
define <name> structure <struct_type> <dev1> <dev2> ...
The structure device is used to organize/structure a devices in order to
set groups of them at once (e.g. switching everything off in a house).
The list of attached devices can be modified through the addstruct /
delstruct commands. Each attached device will get the attribute
<struct_type>=<name> when it is added to the list, and the
attribute will be deleted if the device is deleted from the structure.
The structure devices can also be added to a structure, e.g. you can have
a building consisting of levels which consists of rooms of devices.
Example:
- define kitchen structure room lamp1 lamp2
- addstruct kitchen TYPE=FS20
- delstruct kitchen lamp1
- define house structure building kitchen living
- set house off
Set
Every set command is propagated to the attached devices. Exception: if an
attached devices has an attribute structexcluse, and the attribute value
matches (as a regexp) the name of the current structure.
Get
get is not supported through a structure device.
Attributes
- structexclude
exclude the device from set operations, see the set command above.
watchdog
Define
define <name> watchdog <regexp1> <timespec> <regexp2> <command>
Start an arbitrary fhem.pl command if after <timespec> receiving an
event matching <regexp1> no event matching <regexp2> is
received.
The syntax for <regexp1> and <regexp2> is the same as the
regexp for notify.
<timespec> is HH:MM[:SS]
<command> is a usual fhem command like used int the at or notify
Examples:
# "Reset" the FHT80 if we do not receive any message for 15 Minutes
define w watchdog FHT80 00:15:00 SAME set FHT80 refreshvalues
# Shout if the HMS100-FIT is not alive
define w watchdog HMS100-FIT 01:00:00 SAME "alarm-fit.sh"
Notes:
- if <regexp1> is . (dot), then activate the watchdog at
definition time. Else it will be activated when the first matching event
is received.
- if <regexp2> is SAME, then it will be the same as the first
regexp, and it will be reactivated, when it is received. This is probably
the normal operation.
Set
Get
Attributes
DbLog
Define
define <name> DbLog <configfilename> <regexp>
Log events to a database. The database connection is defined in
<configfilename> (see sample configuration file
db.conf ). The configuration is stored in a separate file
to avoid storing the password in the main configuration file and to have it
visible in the output of the list command.
You must have 93_DbLog.pm in the FHEM subdirectory
to make this work. Additionally, the modules DBI and
DBD::<dbtype> need to be installed (use
cpan -i <module> if your distribution does not have it).
<regexp> is the same as in FileLog.
Sample code to create a MySQL database is in fhemdb_create.sql .
The database contains two tables: current and
history . The latter contains all events whereas the former only
contains the last event for any given reading and device.
The columns have the following meaning:
- TIMESTAMP: timestamp of event, e.g.
2007-12-30 21:45:22
- DEVICE: device name, e.g.
Wetterstation
- TYPE: device type, e.g.
KS300
- EVENT: event specification as full string,
e.g.
humidity: 71 (%)
- READING: name of reading extracted from event,
e.g.
humidity
- VALUE: actual reading extracted from event,
e.g.
71
- UNIT: unit extracted from event, e.g.
%
The content of VALUE is optimized for automated post-processing, e.g.
yes is translated to 1 .
The current values can be retrieved by means of the perl script
fhemdb_get.pl . Its output is adapted to what a
Cacti data input method expects.
Call fhemdb_get.pl without parameters to see the usage
information.
Examples:
# log everything to database
define logdb DbLog /etc/fhem/db.conf .*:.*
Set
Get
Attributes
FileLog
Define
define <name> FileLog <filename> <regexp>
Log events to <filename> . The log format is
YYYY:MM:DD_HH:MM:SS <device> <event>
The regexp will be checked against the (complete!) device name
or against the (complete!) devicename:event combination.
<filename> may contain one or more of the following
wildcards (a subset of the Unix date command arguments):
%d day of month (01..31)
%m month (01..12)
%Y year (1970...)
%w day of week (0..6); 0 represents Sunday
%j day of year (001..366)
%U week number of year with Sunday as first day of week (00..53)
%V week number of year with Monday as first day of week (01..53)
Examples:
define lamplog FileLog /var/tmp/lamp.log lamp
define wzlog FileLog /var/tmp/wz-%Y-%U.log
wz:(measured-temp|actuator).*
Set
set <name> reopen
Used to reopen a FileLog after making some manual changes to the logfile.
Get
get <name> <infile> <outfile> <from>
<to> <column_spec>
Read data from the logfile, used by frontends to plot data without direct
access to the file.
- <infile>
Name of the logfile to grep. "-" is the current logfile, or you can
specify an older file (or a file from the archive).
- <outfile>
If it is "-", you get the data back on the current connection, else it
is the prefix for the output file. If more than one file is specified,
the data is separated by a comment line for "-", else it is written in
separate files, numerated from 0.
- <from> <to>
Used to grep the data. The elements should correspond to the
timeformat or be an initial substring of it.
- <column_spec>
For each column_spec return a set of data in a separate file or
separated by a comment line on the current connection.
Syntax: <col>:<regexp>:<default>:<fn>
- <col>
The column number to return, starting at 1 with the date.
If the column is enclosed in double quotes, then it is a fix text,
not a column nuber.
- <regexp>
If present, return only lines containing the regexp. Case sensitive.
- <default>
If no values were found and the default value is set, then return
one line containing the from value and this default. We need this
feature as gnuplot aborts if a dataset has no value at all.
- <fn>
One of the following:
- int
Extract the integer at the beginning og the string. Used e.g.
for constructs like 10%
- delta-h or delta-d
Return the delta of the values for a given hour or a given day.
Used if the column contains a counter, as is the case for the
KS300 rain column.
- everything else
The string is evaluated as a perl expression. @fld is the
current line splitted by spaces. Note: The string/perl
expression cannot contain spaces, as the part after the space
will be considered as the next column_spec.
Example:
get outlog out-2008.log - 2008-01-01 2008-01-08 4:IR:int: 9:IR::
Attributes
- archivecmd / archivedir / nrarchive
When a new FileLog file is opened, the FileLog archiver wil be called.
This happens only, if the name of the logfile has changed (due to
time-specific wildcards, see the FileLog
section), and there is a new entry to be written into the file.
If the attribute archivecmd is specified, then it will be started as a
shell command (no enclosing " is needed), and each % in the command
will be replaced with the name of the old logfile.
If this attribute is not set, but nrarchive and/or archivecmd is set,
then all superfluous logfiles will be moved to archivedir (or deleted if
archivedir is not set).
- disable
- logtype
Used by the pgm2 webfrontend to offer gnuplot/SVG images made from the
logs. The string is made up of tokens separated by comma (,), each
token specifies a different gnuplot program. The token may contain a
colon (:), the part before the colon defines the name of the program,
the part after is the string displayed in the web frontend. Currently
following types of gnuplot programs are implemented:
- fs20
Plots on as 1 and off as 0. The corresponding filelog definition
for the device fs20dev is:
define FileLog fslog fs20dev /var/log/fs20dev-%Y-%U.log
- fht
Plots the measured-temp/desired-temp/actuator lines. The
corresponding filelog definitions (for the FHT device named
fht1) looks like:
define fhtlog1 FileLog fht1:.*(temp|actuator).* /var/log/fht1-%Y-%U.log
- temp4rain10
Plots the temperature and rain (per hour and per day) of a
ks300. The corresponding filelog definitions (for the KS300
device named ks300) looks like:
define FileLog ks300log ks300:.*H:.*
/var/log/ks300-%Y-%U.log
- hum6wind8
Plots the humidity and wind values of a
ks300. The corresponding filelog definition is the same as
above, both programs evaluate the same log.
- text
Shows the logfile as it is (plain text). Not gnuplot definition
is needed.
Example:
attr ks300log1 logtype temp4rain10:Temp/Rain,hum6wind8:Hum/Wind,text:Raw-data
dummy
Define a dummy. A dummy can take via set any values.
Used for programming.
Define
define <name> dummy
Example:
define myvar dummy
set myvar 7
Set
set <name> <value>
Set any value.
Get
Attributes
SUNRISE_EL
This module is used to define the functions
sunrise, sunset,
sunrise_rel, sunset_rel
sunrise_abs, sunset_abs
isday
perl functions, to be used in at or FS20 on-till commands.
First you should edit SUNRISE_EL.pm, and set long and lat to the exact longitude
and latitude values (see e.g. maps.google.com for the exact values, which
should be in the form of a floating point value). The default value is
Frankfurt am Main, Germany.
The default altitude ($altit in SUNRISE_EL.pm) defines the sunrise/sunset
for Civil twilight (i.e. one can no longer read outside without artificial
illumination), which differs from sunrise/sunset times found on different
websites. See perldoc "DateTime::Event::Sunrise" for alternatives.
sunrise()/sunset() returns the absolute time of the next sunrise/sunset,
adding 24 hours if the next event is tomorrow, to use it in the timespec of
an at device or for the on-till command for FS20 devices.
sunrise_rel()/sunset_rel() returns the relative time to the next
sunrise/sunset.
sunrise_abs()/sunset_abs() return the absolute time of the corresponding
event today (no 24 hours added).
All functions take up to three arguments:
- The first specifies an offset (in seconds), which will be added to the
event.
- The second and third specify min and max values (format: "HH:MM").
isday() can be used in some notify or at commands to check if the sun is up or
down.
Define
Set
Get
Attributes
FHEMRENDERER
The FHEMRENDERER module is intended to render (draw) graphics based on the FHEM Log-Files.
This can be done either based on a timer (used in the module) or based on a direct call of GET.
The rendered graphics will be stored in a pre-defined directory with a predefined prefix of the files. The renderer can also work in a multi-process mode,
which doesn't block the main FHEM-Loop.
Define
define <name> FHEMRENDERER [global]
This defines a new "device", that is of type FHEMRENDERER. The option 'global' can be used if needed for sorting reasons.
Otherwise this option has no real meaning for FHEMRENDERER.
As a side-effect of defining this "device" the following attributes will be set for this "device":
plotmode gnuplot
plotsize 800,200
refresh 00:10:00
room Unsorted
status off
tmpfile /tmp/
multiprocess off
NOTE: The Logfile will report (with LogLevel 2) that the FHEMRENDERER has been defined.
Set
set <name> <value>
Set either on or off.
This switches the timer-based rendering on/off. The attribute 'status' will be modified accordingly.
NOTE: only WebLink based graphics will be rendered.
Get
get <name> <[[file-name] device type logfile [pos=zoom=XX&off=YY]]>
The get function supports different sets of arguments:
Arguments:
NONE: all WebLink based FilePlots will be rerendered
The resulting filename will be '.png'
THREE: device type logfile
In this case only one specific graphic will be rendered:
A graphic will be rendered for 'device', where device is a FileLog, based on the type 'type' based on the given 'logfile'
The resulting filename will be 'attr-tmpfile logfile.png'
FOUR: file-name device type logfile
In this case only one specific graphic will be rendered:
A graphic will be rendered for 'device', where device is a FileLog, based on the type 'type' based on the given 'logfile'
The resulting filename will be 'attr-tmpfile file-name.png'
FIVE: file-name device type logfile pos=zoom=XX&off=YYY
In this case only one specific graphic will be rendered assuming that plotmode is 'gnuplot-scroll':
A graphic will be rendered for 'device', where device is a FileLog, based on the type 'type' based on the given 'logfile'
The 'zoom' will be either qday/day/week/month/year (same as used in FHEMWEB).
The offset 'off' is either 0 (then the second part can be omitted), or -1/-2.... to jump back in time.
The resulting filename will be 'attr-tmpfile file-name.png'
NOTE: If you want to use zoom AND offset then you have to concatenate via '&' !!
NOTE: combinations are possible in limited ranges:
meaning: you can add the 'pos=zoom=XX&off=YY' to any of the first three sets.
This may e.g. result in rendering all WebLinks with a specific zoom or offset
(if you just pass the 'pos=zoom=xx&off=yy' parameter);
Any rendered image (one or all WebLinks) will be stored in 'attr-tmpfile' followed by a 'filename.png'. The filename will be
either derived (from weblink-name or logfile-name) or, for single files, can be assigend.
Attributes
- plotmode
Specifies how to generate the plots:
- gnuplot
Call the gnuplot script with each logfile. The filename
specification of the FileLog device will
determine what is in the plot. The data is converted into an
image on the backend with gnuplot.
- gnuplot-scroll
FHEMRENDERER will offer zoom and offset possibilities in order to navigate
in the current logfile, i.e. you can select just a part of the
data to be displayed. The more data is contained in a single
logfile, the easier you can navigate. The recommendation is to
store the data for a whole year in one logfile. The data is
converted into an image on the backend with gnuplot.
- plotsize
the default size of the plot, in pixels, separated by comma:
width,height. You can set individual sizes by setting the plotsize of
the weblink.
- status
Reflects the status, if the renderer timer has been set to ON or OFF.
By reading the status, you can detect, if the timer is running, or not.
- refresh
This defines the time-interval in which a new rendering of the defined
WebLinks will be done.
- tmpfile
This gives the path and a possible prefix for the rendered
filenames. You can specify a path to which the files will be
rendered. If you also specify a prefix, this will be used to build the
resulting filename.
- multiprocess
This defines if the Renderer works in a multiprocessing mode.
You can set multiprocessing either to on / off and the renderer will draw the
time-scheduled tasks either in multiprocessing mode, or not.
NOTE: Direct GET calls, except for a general GET (for all weblinks) will be renderer
in an interactive mode, meaning that the FHEM-Loop will be block as long as the graphics are rendered.
If you want to use multiprocessing, set the RENDERER and multiprocessing to on and the
weblink-graphics will be rendered in the background.
PachLog
The PachLog-Module Logs SensorData like (temperature and humidity) to www.pachube.com.
Note: this module needs the HTTP::Request and LWP::UserAgent perl modules.
Define
define <name> PachLog <Pachube-API-Key>
<Pachube-API-Key>:
The Pachube-API-Key however is what you need in your code to authenticate your application's access the Pachube service.
Don't share this with anyone: it's just like any other password.
www.pachube.com
Set
Add a new Device for Logging to www.pachube.com
set <NAME> ADD <FHEM-DEVICENAME> FEED-NR:ID:READING:ID:READING
Example: KS300-Weather-Data
READINGS: temperature humidity wind rain
1. Generate Input-Feed on www.pachube.com => Yout get your FEED-NR: 1234
2. Add Datastreams to the Feed:
ID | 0 | temperature |
ID | 1 | humidity |
ID | 2 | wind |
ID | 3 | rain |
3. Add the KS300 to your PachLog-Device
set <NAME> ADD <My-KS300> 1234:0temperature:1:humidity:2:wind:3:rain
Delete a Device form Logging to www.pachube.com
set <NAME> DEL <FHEM-DEVICENAME>
Get
Attributes
dumpdef
dumpdef <options>
Data::Dumper for FHEM-Devices/Hashes
Dumps the content of <options> to FHEMWEB
Options:
FHEM-DEVICENAME | => | %defs{FHEM-DEVICENAME}+%attr{FHEM-DEVICENAME} |
MOD | => | %modules |
SEL | => | %selectlist |
DAT | => | %data |
CMD | => | %cmd |
Example:
dumpdef TEST
CALLER => main: /opt/fhz/FHEM/01_FHEMWEB.pm LINE: 194 SUB: main::FW_AnswerCall
SUB-NAME: main::Commanddumpdef
DUMP-DEVICE: TEST
$VAR1 = {
'IODev' => {},
'NAME' => 'TEST',
'NR' => 64,
'STATE' => '???',
'TYPE' => 'dummy'
};
DUMP-DEVICE-ATTR
$VAR1 = {
'room' => 'DEF_DUMMY,GRP.TEST'
};
Perl specials
If you want to automate some tasks via fhem, then you'll probably use at or notify. For more complex tasks
you'll use either a shell-script or a perl "oneliner" as the at/notify
argument. This chapter gives some tips in using the perl oneliners.
To test perl oneliners, type them on the telnet prompt (or FHEMWEB text
input) by enclosing it in {}, one line at once. The last line will only
write something in the logfile, the output of the other lines is directly
visible.
{ "Hello" }
{ 1+3*4 }
{ `ls /etc` }
{ Log 1, "Hello" }
Perl expressions are separated by ;, in fhem oneliners they have to
escaped with ;;
{ my $a = 1+1;; Log 1, "Hello $a" }
To use fhem commands from the perl expression, use the function fhem(),
which takes a string argument, this string will be evaluated as a fhem
command:
{ fhem "set light on" }
define n1 notify piri:on { fhem "set light on" }
Notify can be used to store macros for manual execution. Use the trigger command to execute the macro:
define MyMacro notify MyMacro { Log 1, "Hello"}
trigger MyMacro
define MacroWithArg notify MyMacro { Log 1, "Hello %"}
trigger MyMacro MyArg
To make date and time handling easier, the variables $sec, $min, $hour,
$mday, $month, $year, $wday, $yday, $isdst are available in the perl
oneliners (see also perldoc -f localtime). Exceptions: $month is in the
range of 1 to 12, and $year is corrected by 1900 (as I would expect).
Additionally the variabe $we is 1 if it is weekend (i.e $wday == 0 or
$wday == 6), and 0 otherwise. If the holida2we
global attribute is set, $we is 1 for holidays too.
define n2 notify piri:on { if($hour > 18 || $hour < 5) {
fhem "set light on" } }
define roll_en *07:45:00 { fhem "trigger SwitchAllRoll on" if(!$we) }
define roll_en *08:30:00 { fhem "trigger SwitchAllRoll on" if($we) }
The following helper functions are defined in 99_Util.pm (which will
be loaded automatically, as every module with prefix 99):
- min(a,b), max(a,b)
- time_str2num("YYYY-MM-DD HH:MM:SS") returns a numerical value,
which makes computation of time differences easier
- abstime2rel("HH:MM:SS") converts an absolute time to a relative one,
to compare it with the sunrise commands in the following example:
# Switch lamp1 on at sunrise, but not before 07:00
define a13 at +*{max(abstime2rel("07:00"),sunrise_rel())} set lamp1
on
# Note that this functionality is easier to achieve with:
define a13 at +*{sunrise_rel(0,"07:00",undef)} set lamp1 on
To access the device states/attributes, use the following functions:
- Value(<devicename>)
returns the state of the device (the string you see in paranthesis in
the output of the list command).
- OldValue(<devicename>)
- OldTimestamp(<devicename>)
returns the old value/timestamp of the device.
-
ReadingsVal(<devicename>,<reading>,<defaultvalue>)
Return the reading (the value in the Readings section of "list device")
-
AttrVal(<devicename>,<attribute>,<defaultvalue>)
Return the attribute of the device
{ Value("wz") }
{ OldValue("wz") }
{ time_str2num(OldTimestamp("wz")) }
{ ReadingsVal("wz", "measured-temp", "20")+0 }
{ AttrVal("wz", "room", "none") }
By using the 99_SUNRISE_EL.pm module, you have access to the following
functions:
sunset_rel($offset, $min, $max)
sunset_abs($offset, $min, $max)
sunrise_rel($offset, $min, $max)
sunrise_abs($offset, $min, $max)
isday()
offset is in seconds, and the format of min/max is "HH:MM" or "HH:MM:SS".
isday returns 1 if the sun is visible, and 0 else.
|