FHEM

Aus Zebradem WIKI
Zur Navigation springenZur Suche springen

Das Board mit Freiheiten





Zebradem AVM Wiki >> Fritzbox Tipps & Tricks >> FHEM Magyar, Nederlands, Italiano, English
Community Modelle Freetz Fritzbox Tipps & Tricks

Hardware-Tipps System-Tipps Netzwerk-Tipps Telefonie-Tipps Software-Tipps Sonstige Tipps

fhem

fhem ist ein Projekt zur Webserver-gestützen Heimautomation, das AVM in Zukunft auf neueren FRITZ!Box-Modellen in die Firmware aufnehmen will (CONFIG_FHEM, CONFIG_PERL). Aber auch auf älteren Modellen kann fhem betrieben werden, jedoch ist die nachträgliche Installation alles andere als simpel.

Daher werden hier Informationen gesammelt wie man fhem auf einer FRITZ!Box nachträglich installiert.

Schritt 1 - Freetz kompilieren

cd freetz-trunk
make menuconfig

Bei Hardware Type auf entsprechende Fritz!Box stellen. Show advanced options ---> einschalten Der USB-Stick sollte mit ext2/ext3 formatiert sein. In Patches automount ext2/ext3 beim USB mounting einschalten. Bei den Packages ---> Testing ---> ser2net aktivieren. menuconfig mit Exit verlassen und speichern der Einstellungen bestätigen. in Advanced options ---> kernel modules ---> drivers --> usb-storage.ko, usbserial.ko, fti_sio.ko aktivieren.

--- Legacy Funktion aktivieren in uclibc ---

make uclibc-menuconfig

In General Library Settings ---> Enable SuSv3 LEGACY functions

--- Modem Modul (für das CUL) ---

make kernel-menuconfig

In Device Driver ---> USB support --> "USB Modem (CDC ACM) support aktivieren


Ausführen von make erzeugt das cdc-acm.ko Modul in kernel/modules-ur8-16mb-7270_04.86/drivers/usb/class/ Dieses Modul wird später gebraucht in /var/media/ftp/uStor01/fhem/fritzbox/

make

Schritt 2 - Perl5 installieren

fhem benötigt Perl5 und eine Reihe von Perl-Modulen. Das in Freetz anwählbare microperl ist nicht zum Betrieb von fhem geeignet. Das komplette Perl5 Paket zu kompilieren ist nicht gerade einfach, daher "leihen" wir uns fertige Binaries vom OpenWrt-Projekt. Ein erster Test eines für AR7- und UR8-Modelle geeigneten Sets aus Perl5 und einer auf fhem Bedürfnisse zusammengeschnürten Sammlung von Perl-Modulen kann hier heruntergeladen werden:

Mit Telnet zur Fritz verbinden und folgende Kommandos ausführen:

Dieses Perl Paket ist soweit fertig, dass FHEM ausgeführt wird. Es können für andere Anwendungen noch Module fehlen!

cd /var/media/ftp/uStor01
wget http://gpl.back2roots.org/binary/perl/perl5-mipsel-fhem.tar.gz
tar xvzf perl5-mipsel-fhem.tar.gz

Nun hat man auf dem Stick ein 5.6MB fassendes perl Verzeichnis. Damit perl die Module findet genügt diese Zeile in rc.custom:

export PERL5LIB='/var/media/ftp/uStor01/perl/usr/lib/perl5/5.10:/'

Schritt 3 - FHEM & Kernelmodul installieren

Mit Telnet zur Fritz verbinden und folgende Kommandos ausführen:

cd /var/media/ftp/uStor01/
wget http://fhem.de/fhem-5.0.tar.gz && tar -xvzf fhem-5.0.tar.gz &&  mv fhem-5.0 fhem
cd fhem && mkdir fritzbox && cd fritzbox

Im aktuellen Verzeichnis muss die cdc-acm.ko abgelegt sein. (siehe oben)

Das Cul muss wie folgt konfiguriert werden.

Im Freetz-Webinterface - ser2net:

27073:raw:300:/dev/ttyACM0:115200 NONE 1STOPBIT 7DATABITS

und in /var/media/ftp/uStor01/fhem.cfg

define MyCUL CUL 127.0.0.1:27073 3333

Als Grundlage zur fhem.cfg Datei kann man im fhem/examples Ordner die fhem_pgm2 nehmen.

Beispiel:

attr global autoload_undefined_devices 1
attr global logfile /var/media/ftp/uStor01/fhem/fhem-%Y-%m.log
attr global modpath /var/media/ftp/uStor01/fhem
attr global port 7072 global
attr global room hidden
attr global statefile  /var/media/ftp/uStor01/fhem/tmp/fhem.save
attr global verbose 3
define CUL CUL 127.0.0.1:27073 1234
attr CUL room hidden
define WEB FHEMWEB 8083 global
attr WEB fwcompress 0
attr WEB room hidden
define WEBS FHEMWEB 8084 global
attr WEBS fwcompress 0
attr WEBS room hidden
attr WEBS smallscreen 1
define autocreate autocreate
attr autocreate autosave 1
attr autocreate device_room %TYPE
attr autocreate filelog /var/media/ftp/uStor01/fhem/%NAME-%Y.log
attr autocreate room hidden
attr autocreate weblink 1
attr autocreate weblink_room Plots

Damit FHEM auch das Webfrontend läuft muss der inhalt des webfrontend/pgm2 Ordners noch in den Ordner /var/media/ftp/uStor01/fhem/fhem kopiert werden.


FHEM starten

Damit FHEM gestartet wird in die rc.custom folgendes Eintragen

cd /var/media/ftp/uStor01/fhem/fritzbox
mknod /dev/ttyACM0 c 166 0
insmod cdc-acm.ko
cd /var/media/ftp/uStor01/fhem
export dTSB=1212687845
export PERL5LIB='/var/media/ftp/uStor01/perl/usr/lib/perl5/5.10:/'
/var/media/ftp/uStor01/perl/usr/bin/perl fhem.pl fhem.cfg &

Erreichbar ist das Interface über: http://fritz.box:8083/fhem

Viel Erfolg

Um z.B. die Komponenten aus der "FS20"-Serie in FHEM einzubinden, ist es erforderlich, sich vorher mit der Arbeitsweise der FS20-Module vertraut zu machen. Die folgenden Beschreibungen sind entnommen aus http://fhem.de/HOWTO.html und http://fhem.de/commandref.html

Dem FHEM Image liegt eine Konfigurationsdatei von FHEM bei. Nach der Installation des FHEM Image auf der Box liegt dieses im internen Speicher im Verzeichnis /opt/etc/fhem.cfg und kann auch innerhalb der FHEM-Webseiten (http://192.168.178.1:8083/fhem?cmd=style%20edit%20fhem.cfg) bearbeitet werden.

Durch Hinzufügen der Zeilen

 #define autocreate autocreate
 #attr autocreate autosave 1
 #attr autocreate device_room %TYPE
 #attr autocreate filelog /opt/fhem/log/%NAME-%Y.log
 #attr autocreate weblink 1
 #attr autocreate weblink_room Plots

erkennt FHEM Geräte in der Umgebung automatisch, sobald es Übertragungen von diesem empfängt und legt in der FHEM Konfiguration neue Geräte an.

Wird z. B. der Schaltvorgang eines FS20 Handsenders mit dem Hauscode a751 und Tastencode 01 empfangen, legt FHEM ein neues Gerät mit der Bezeichnung FS20_a75101 an.

Umbenennung von erkannten Geräten

Wäre z.B. ein darauf reagierender Aktor ein Funkschalter FS20 ST könnte dieser Zuweisung von passendem Namen und Darstellung in der FHEM Weboberfläche eingebunden werden.

Dazu kann das neue Gerät durch Eingabe des Kommandos

rename FS20_a75101 Steckdose

in der FHEM Kommandozeile in "Steckdose" umbenannt werden und durch

attr Steckdose model fs20st

dem Webinterface als Funkschalter bekannt gemacht werden. Eine Liste der von FHEM unterstützten FS20 Geräte findet sich hier: http://fhem.de/commandref.html#model

Aktionen zu bestimmten Uhrzeiten durchführen

Um Aktionen zu bestimmten Zeitpunkten oder periodisch durchzuführen, sind Zeitregeln vom Typ "at" zu definieren. Die Seite http://fhem.de/commandref.html#at listet eine Reihe von Beispielen:

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

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


Aktionen durch Sensoren auslösen

Um Aktionen durch Sensoren auszulösen, sind Regeln vom Typ "notify" oder "watchdog" zu definieren, z.B.

  1. 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

schaltet das Gerät "lamp" 3x in Folge an und aus, wenn das Gerät "piri" (Bewegungsmelder) auslöst.

Komplexere Beispiele finden sich unter:

http://fhemwiki.de/index.php/Schalten_mit_mehreren_Bedingungen http://fhemwiki.de/index.php/Category:Code_Snippets

Quellenangaben

Links