FHEMWEB Howto
Starting
Attaching an FHZ/CUL
Configuring FS20 receivers
Configuring FS20 transmitters
Configuring FHT devices
Timed commands / Notify
FHEMWEB look and feel
Logging data
Plotting logs
FHEMWEB tips
Complex structures
Starting
First install the Device::SerialPort (or Win32::SerialPort) perl module
with the command "cpan -i Device::Serial"
The default configuration will install fhem into /usr/local/bin,
/usr/local/lib/FHEM and /var/log/fhem. Edit the Makefile to change
this.
To install & start fhem type:
make install-pgm2
perl /usr/local/bin/fhem.pl /var/log/fhem/fhem.cfg
After starting, the logfile should look like:
2008.06.15 16:17:03 2: FHEMWEB port 8083 opened
2008.06.15 16:17:03 0: Server started (version ...)
Connect to fhem with an internet browser:
http://localhost:8083/fhem
Attaching an FHZ/CUL
Attach the FHZ1000 or FHZ1300 to your computer, and look for a file named
/dev/ttyUSB0 or /dev/tts/USB0 (or /var/elv on the Fritz!Box).
Define it for fhem (by typing it in the
"Fhem cmd" input field in the browser):
define FHZ1 FHZ /dev/ttyUSB0
You can find details here and
here. Instead of an FHZ you can also
use a CUL with slightly different
parameters (define CUL CUL /dev/ttyACM0 1234).
Note: Don't forget to type "save" in the "Fhem cmd" input field of
the browser after defining a device or setting its attribute. Otherwise
the changes will disappear after the next start.
Automatically creating transmitters
The sample configuration file installed via "make install-pgm2" has
configured an autocreate
instance. This will automatically create fhem devices upon reception
of a message form this device (typically a sensor like S300 or FHT).
Just wait for a while, and re-check your browser for newly appeared
devices. You can use rename to
rename the automatically created device, e.g. type in the input field of
the web frontend:
rename FHT_1234 fht.kitchen
Configuring FS20 receivers
Configure the FS20 device in
fhem first with:
define lamp1 FS20 1234 56
Now press the button on the device for a while until its LED starts to
blink. Click on the "on" link in the fhem window to send a command. The
LED should terminate blinking, the device is programmed to housecode
1234, device code 56. You can also use the 4-base ELV notation.
Now set the model attribute of the device:
attr lamp1 model fs20st
to get only the commands available for this device.
Here is a complete list of models.
Misc. RF transmitters (FS20/EM/S300 etc.)
Wait a while, until the transmitter sent some data. In the logfile
(Browser window: "All together" -> Logs:Logfile:text) a line
will appear:
FS20 Unknown device <HOUSECODE, Button <BTN> Code <CDE>, please define it
Now define a device:
define piri1 FS20 <HOUSECODE> <BTN>
Set the model attribute of the device:
attr lamp1 model fs20piri
to get only the commands available for this device.
Here is a complete list of FS20
models.
For other device-types similar messages should appear.
Configuring FHT devices
Wait for a while (2-5 mins) till the FHT is sending some signals. In the
logfile ("All together" -> Logs:LogFile:text) a line should
appear:
FHZ1: Unknown FHT device detected, define one to get detailed information
Define your FHT device with an arbitrary code in order to load the FHT
module, see this link for details:
define MyFHT FHT 1111
The next message in the log will contain more details:
FHT Unknown device <HOUSECODE>, please define it
Delete and create your device again:
delete MyFHT
define MyFHT FHT <HOUSECODE>
If there is no signal for a while, then check
this FAQ entry.
Timed commands / Notification
To execute commands at a given time / periodically, you have to define
devices of the type at. See the definition
here and the examples here The last link
only works if you are reading this HOWTO from your fhem Web.
To execute commands if a device sent a message you have to define
devices of the type notify or
watchdog. In order to understand
the fhem events better you can open a telnet session to your fhem
telnet localhost 7072
and type
inform timer
Now you will receive in this telnet session all events, just like the
notifies/watchdogs do. You can even simulate events by using the
trigger command:
trigger lamp1 on
FHEMWEB look and feel.
It makes sense to group your devices into rooms by setting the room
attribute. FHEMWEB puts devices without a room attribute into the
"Unsorted" room. Devices in the room "hidden" will not be shown.
Set the title of the webpage by setting the title attribute of the global
device ("All together" -> global)
Edit the colors / fonts by changing the style.css ("Edit files" ->
style.css)
Further FHEMWEB attributes:
webname,
plotmode,
plotsize.
Logging data
To log messages into files, define devices of the type FileLog. To log messages into a
database, see the contrib/dblog directory in the fhem
distribution.
FHEMWEB has builtin support for displaying FileLog type logs as plots,
see the plot section below.
The size of each logfile will be determined by its wildcard characters
(year/month/week/day), look at the
FileLog definition.
Don't forget to enable archiving with the nrarchive or archivecmd attributes.
Plotting logs
To convert a log into a plot in FHEMWEB, set the
logtype attribute of the
corresponding FileLog. Take a look at the available gnuplot files in the
"Edit files" section, they contain the corresponding FileLog definition
example.
When displaying the plot, you can convert it into a "weblink", which can
in turn have a room attribute, to group more than one Plot together. If
the weblink refers to the current logfile, then it will be stored as a
CURRENT weblink, and it will always display the most recent log (you do
not have to redefine it if the logfile changes due to year/month/date
parameters in its name).
The logs can be converted to a plot either with gnuplot (which must be
installed and in your PATH), or via the builtin SVG module, in this case
your internet browser must support SVG. Firefox, opera and the
iPhone/Android borwser support SVG out of the box, Internet Explorer does
it via the Adobe "SVG viewer" plugin. To use SVG graphics, set the plotmode attribute to SVG.
To zoom in the log you have to set plotmode to gnuplot-scroll or SVG. The
gnuplot files must have #FileLog entries in order to be useable with
scrolling, see the supplied gnuplot files for an example.
FHEMWEB tips
You can first set an attribute to an arbitrary (wrong) value, then click
on the attribute: you will be guided to the correct place in the
documentation; now you can change the attribute value to the correct
one.
Password/HTTPS
These features are implemented by apache, and apache must be configured
to redirect the page to 01_FHEMWEB.pm. For this purpose add the following
lines to your httpd.conf:
<Proxy *>
AuthType Basic
AuthName "Password Required"
AuthUserFile /home/httpd/etc/passwd
Require valid-user
Allow from 127.0.0.1
</Proxy>
ProxyPass /fhem http://localhost:8083/fhem
ProxyPassReverse /fhem http://localhost:8083/fhem
and then restart httpd with apachectl graceful. To create the password
file, execute
htpasswd -c /home/httpd/etc/passwd <username>
To enable HTTPS, please check the web. In essence:
To display "foreign" (non fhem) files as a plot or a just as plain text,
configure a fake logfile with the correct filename and an unused regexp,
e.g.
define messages FileLog /var/log/messages fakelog
Complex structures
Put your devices in different rooms. You can now use the
room=<roomname> specification to set different devices at once.
See the devspec paragraph for details.
For more complex scenarios consider the
structure module. You can define different structure levels like
floors, buildings, etc. and set all elements of a gives structure at once.