Intelligente FHEM-Zeitschaltuhr mit DOIF
Seiteninhalte
Wie wäre es, wenn Ihr nach Hause kommt und das Licht im Flur automatisch angeht? Macht dies aber zu jeder Tageszeit Sinn oder müsste es nicht viel mehr abhängig von Wetter und Tageslicht geschaltet werden? Vor einigen Jahren war die Realisierung einer intelligenten FHEM-Zeitschaltuhr noch relativ umständlich. Zeitliche Events wurden ausschließlich mit dem AT-Befehl definiert, schon vorhandene Events anderer Geräte konnten mit NOTIFY abgefangen werden. Möchte man etwas zeitverzögert schalten, und dies von dem Ausbleiben eines weiteren Ereignisses abhängig machen, musste dies mit dem WATCHDOG-Modul realisiert werden. Es war also immer ein kompliziertes Zusammenspiel aller 3 Module.
Am 21.4.2014 wurde dann von Damian im FHEM-Forum die Entwicklung eines neuen Moduls mit dem Namen DOIF angekündigt, das die Funktionalität von den oben genannten Modulen unter einem Dach vereint und die Nutzung daher stark vereinfacht. Ich hatte zu diesem Zeitpunkt schon alle meine Automatisierungen auf die klassische Art umgesetzt und daher keine Lust, dies alles wieder über den Haufen zu werfen. In diesem Artikel möchte ich verschiedene Praxisbeispiele für die Nutzung von DOIF aufzeigen, die ich im Laufe meiner Umstellung realisieren werde. Ein großes Dankeschön an Damian, für die Entwicklung dieses grandiosen Moduls.
Voraussetzung
Natürlich benötigt Ihr für die FHEM-Zeitschaltuhr eine laufende FHEM-Installation, um die Tipps in diesem Artikel umzusetzen. Wenn Ihr nur zeitgesteuert schalten wollt, benötigt Ihr natürlich keine Dämmerungs- und Anwesenheitserkennung. Trotzdem kann es Sinn machen, alles miteinander zu kombinieren.
- Grundinstallation von FHEM und dem Raspberry Pi
- Funksteckdosen mit FHEM schalten
- Simple Anwesenheitserkennung mit FHEM die jeder einrichten kann (optional)
- Dämmerungs-Erkennung mit FHEM und Twilight (optional)
Wie wird ein DOIF angelegt?
Je nach Komplexität kann es in einer DOIF-Definition durchaus recht unübersichtlich werden. FHEM bringt von Haus aus einen erweiterten Editor mit, der Syntaxhighlighting unterstützt, so dass Ihr zumindest eine farbliche Darstellung bekommt und Fehler hierdurch schneller erkennt. Aktiviert wird er für die jeweils genutzte WEB-Definition folgendermaßen:
1 | attr WEB JavaScripts codemirror/fhem_codemirror.js |
DOIF nutzt die folgenden Syntax:
1 | define <name> DOIF (<Bedingung>) (<Befehle>) DOELSEIF (<Bedingung>) (<Befehle>) DOELSEIF ... DOELSE (<Befehle>) |
Damit der Editor beim Anlegen der DOIF-Bedingung auch genutzt werden kann, ist es notwendig zuerst ein leeres DOIF-Objekt anzulegen und es hinterher mit dem Editor zu bearbeiten. Da man für die Definition aber eine gültige Bedingung angeben muss, habe ich es mir angewöhnt, hier einfach eine beliebige Zeitangabe anzugeben und diese nach dem Anlegen dann wieder zu editieren.
1 2 | define di_test DOIF ([12:00]) attr di_test room Testraum |
Dieser DOIF würde also um 12:00 ausgelöst werden, allerdings nichts tun, da keine Befehle angegeben wurden. Damit ich das Objekt wiederfinde, wird auch gleich ein Raum zugeordnet.
Mit einem Klick auf „DEF“ öffnet sich nun der Codemirror-Editor wie auf dem folgenden Bild zu sehen ist. Die Änderungen werden über den Button „modify di_test“ gespeichert.
FHEM-Zeitschaltuhr mit DOIF in der Praxis
Weihnachtsbeleuchtung schalten
Da die Weihnachtsbeleuchtung aus mehr als einer Lichterkette besteht, habe ich alle verwendeten Funksteckdosen mit dem Modul STRUCTURE zusammengefasst. Dies vereinfacht das Schalten, da nur noch ein Befehl ausgeführt werden muss.
1 2 3 4 | define Weihnachtsbeleuchtung structure room wz_beleuchtung1 wz_beleuchtung2 ku_beleuchtung3 attr Weihnachtsbeleuchtung room Küche,Wohnzimmer attr Weihnachtsbeleuchtung clientstate_behavior relative attr Weihnachtsbeleuchtung clientstate_priority an|on aus|off |
Bei „wz_beleuchtung1+2“ und „ku_beleuchtung3“ handelt es sich um die Namen meiner Steckdosenschalter. Die „clientstate“-Angaben bewirken, dass der Status von dem STRUCTURE auf „on“ steht, wenn mindestens eines der angegeben Devices eingeschaltet ist.
Auf folgenden Weg schalte ich zu bestimmten Zeiten und abhängig von der Dämmerung die Weihnachts-Lichterketten und Weihnachtsdeko, die von draußen sichtbar ist:
1 | define di_xmaslight DOIF ([12:00]) |
Das DOIF wird im Anschluss folgendermaßen angepasst:
1 2 3 4 | ( ([6:30-9:00] or [13:00-23:00]) and [T:light] < 5) (set Weihnachtsbeleuchtung on) DOELSE (set Weihnachtsbeleuchtung off) |
Ich möchte, dass die Weihnachtsbeleuchtung zwischen 6:30 und 9:00 und 13:00 und 23:00 eingeschaltet wird. Allerdings nur, wenn es auch wirklich dunkel ist, der Twilight-Light Wert also kleiner 5 ist. Achtet bei der logischen Verknüpfung von Bedingungen auf die Klammersetzung.
Weihnachtsbaum einschalten bei Anwesenheit
Ähnlich wie im vorherigen Beispiel schalte ich den Weihnachtsbaum. Einziger Unterschied: Ich möchte, dass er sich ausschaltet, sobald ich die Wohnung verlasse und sich wieder einschaltet, wenn ich nach Hause komme.
1 | define di_xmaspresence DOIF ([12:00]) |
Das DOIF wird folgendermaßen angepasst:
1 2 3 4 | (([6:30-9:00] or [13:00-23:00]) and [T:light] < 5 and [Anwesenheit] eq "present") (set wz_xmastree on) DOELSE (set wz_xmastree off) |
„wz_xmastree“ ist der Name der Funksteckdose, „Anwesenheit“ der STRUCTURE, den wir im Blogartikel über die Anwesenheitserkennung angelegt haben.
Nun wünsche ich viel Spaß mit Eurer intelligenten FHEM-Zeitschaltuhr. Wenn Ihr Fragen, Anregungen oder Verbesserungsvorschläge habt, schreibt sie gerne unten in die Kommentare.
Schreibe einen Kommentar