Erste Schritte in FHEM: Unterschied zwischen den Versionen

Aus FHEMWiki
Zeile 319: Zeile 319:
[[Datei:ErsteSchritteInFhem18.png]]
[[Datei:ErsteSchritteInFhem18.png]]


Im Detailscreen eines ''at'' wird übrigens im ''STATE'' der Zeitpunkt der nächsten Ausführung angezeigt.
Diese Info erscheint auch in der Raum-Ansicht, falls Sie das ''at'' dort anzeigen lassen:
[[Datei:ErsteSchritteInFhem18B.png]]


==Timer bei einem Event starten - notify und at==
==Timer bei einem Event starten - notify und at==

Version vom 3. Oktober 2015, 07:25 Uhr

Für alle, die das erste mal mit fhem arbeiten, hier ein kleiner Kurs zum Einstieg. Dieser ist so aufgebaut, dass man noch keine Hardware benötigt und nach dem Installieren der fhem-Software sofort loslegen kann.

Diese Anleitung wurde ursprünglich von Ulrich Maass publiziert, der die Genehmigung erteilt hat, sie auch im Wiki zu veröffentlichen.

Anmerkung zur Bearbeitung: Korrekturen von Tippfehlern kann jeder machen. Redaktionelle Änderungen und Erweiterungen aber bitte mit dem Autor (z.B. auf der zugehörigen Diskussionsseite) abstimmen.

Der erste Einstieg

Um fhem zum ersten Mal aufzurufen, geben Sie im Browser ein:

http://<ip-Adresse>:8083

also z.B. http://192.168.1.1:8083. Sie gelangen auf den Startbildschirm:

ErsteSchritteInFhem01.png

  • Am oberen Bildschirmrand sehen Sie das weiße Kommandofeld, in das Sie Befehle tippen können.
  • Als ersten Menüpunkt sehen Sie die Schaltfläche Save config, mit der Änderungen so gespeichert werden, dass sie auch nach einem Neustart noch vorhanden sind.
  • Außerdem gibt es bereits die Räume Unsorted und Everything, die wir bald kennenlernen.
  • Im unteren Block befinden sich weitere Links, auf die wir später ebenfalls eingehen.

Der Hinweis Security Check besagt, dass Sie noch kein Passwort für fhem eingerichtet haben. Wie man einen Passwortschutz einrichten kann, steht in der fhem-Befehlsreferenz commandref, in der es übrigens eine Beschreibung zu allen Funktionen und Modulen von fhem gibt. Um diese Meldung erst einmal zu unterdrücken, geben Sie in das Kommandofeld ein:

attr global motd none

und bestätigen Ihre Eingabe mit der Enter-Taste.

ErsteSchritteInFhem02.png

Device anlegen - define

Um fhem kennenzulernen, legen wir erst einmal einige "Dummy"-Devices an. So können Sie diese Tests auch ohne ein Hardware-System durchführen bzw. kann hier eine allgemeine Einführung erfolgen, ohne auf die Unterschiede der einzelnen Hardwaresysteme einzugehen. Ein Dummy-Device sieht auf der fhem-Oberfläche im Allgemeinen genau so aus, wie ein fhem-Device zu einem "echten" Gerät Ihres Hardwaresystems.

Zunächst legen wir einen Schalter an. Dieser soll einen Lichtschalter an der Wand simulieren. Geben Sie dazu folgenden Befehl in das Kommandofeld ein:

define mySchalter1 dummy

Nach drücken der Enter-Taste wird die Detail-Ansicht des neuen fhem-Device mySchalter1 angezeigt.

ErsteSchritteInFhem03.png


Info blue.png
Der Block Internals zeigt immer die grundlegende Ausprägung eines fhem-device an:
  • NAME ist der von Ihnen vergebene Name.
  • TYPE ist der Typ des fhem-device, hier dummy.
  • STATE ist der in allen Übersichten angezeigte Status des Geräts. Da noch keine Zuordnung stattgefunden hat, ist dieser zunächst ???.


Räume definieren

In Räumen können Sie Geräte gruppieren, die sich auch physisch in einem Raum (Wohnzimmer, Schlafzimmer, etc.) befinden.

Um ein Device einem Raum zuzuordnen (der Raum muss zu diesem Zeitpunkt noch nicht existieren), verwenden Sie folgenden Befehl:

attr mySchalter1 room Schulungsraum

Nach Eingabe dieses Befehls in das Kommandofeld und Abschließen der Eingabe mit Enter ist das Device dem Raum Schulungsraum zugeordnet. Durch diese Zuordnung ist dieser Raum in der Navigationsleiste links zur Liste der Räume hinzugefügt worden.

Klicken Sie einmal auf den Raum Schulungsraum.

ErsteSchritteInFhem04.png

Es werden nun alle Geräte angezeigt, die diesem Raum zugeordnet wurden. Bisher haben wir hier nur ein Gerät: mySchalter1. Es wird in einem Block mit der Typbezeichnung dummy dargestellt. Neben dem Device-Namen wird immer der Status des Device angezeigt, hier noch ???. Wenn Sie auf den Namen mySchalter1 klicken, gelangen Sie wieder in dessen Detailansicht.

Schaltbefehle definieren

Nun soll unser mySchalter1 Schalterflächen für on und off bekommen.

attr mySchalter1 webCmd on:off

Statt den o.g. Befehl in das Kommandofeld einzugeben, können Sie auch im unteren Bereich der Detailansicht das gewünschte Attribut (hier: webCmd) auswählen und in dem Textfeld rechts daneben die gewünschten Werte eintragen, hier on:off. Schließen Sie Ihre Eingabe durch Klick auf den Button attr ab.

ErsteSchritteInFhem05.png


Info blue.png
Attribute können vom Anwender gesetzt und geändert werden. Sie beeinflussen das Erscheinungsbild und die Funktion eines bereits bestehenden fhem-device. Welche Attribute verfügbar sind, hängt vom device-TYPE ab.


Klicken Sie nun wieder links auf den Schulungsraum.

Sie sehen, dass durch die Attribut-Angabe im vorhergehenden Schritt, nun in der Raumansicht die Schaltflächen für on und off hinzugekommen sind.

ErsteSchritteInFhem06.png

Klicken Sie versuchsweise auf on und off: Statt der bisher angezeigten ??? erscheint nun ein Glühbirnensymbol, das den aktuellen Status darstellt.

Wenn Sie durch Klicken auf den Device-Namen mySchalter1 wieder in die Detailansicht wechseln, sehen Sie, dass im Block Internals nun auch der aktuelle Zustand STATE angezeigt wird. Dieser wird in der Raumansicht als Icon (Glühbirne) dargestellt.

ErsteSchritteInFhem07.png

Auch sehen Sie im Detail-Bildschirm einen neuen Block:

Info blue.png
Readings zeigen Informationen an, die - anders als Attribute - nicht direkt vom Anwender geändert werden können. Unter anderem werden hier Datum und Uhrzeit der letzten Zustandsänderung angezeigt. Welche Readings angezeigt werden, hängt vom device-TYPE ab.


Schalten Sie mySchalter1 noch einmal aus und prüfen Sie, ob das Reading STATE incl. seines Zeitstempels aktualisiert wurde.

Event Monitor

Öffnen Sie nun in Ihrem Browser ein zusätzliches Fenster, in dem Sie ebenfalls fhem und darin den Event Monitor anzeigen. Am Schnellsten geht das, indem Sie mit der rechten Maustaste auf Event Monitor klicken und aus dem Kontextmenü des Browsers Öffnen in neuem Fenster auswählen. Legen Sie die Fenster so übereinander, dass Sie gleichzeitig den Event Monitor sehen und Ihren mySchalter1 bedienen können. Unter Windows ab Version 7 geht das am Einfachsten, wenn Sie zuerst das eine Fenster aktivieren und Windows+Pfeil rechts drücken, anschließend das selbe mit dem anderen Fenster und Windows+Pfeil links wiederholen.

ErsteSchritteInFhem08.png

Bei jedem Schalten von mySchalter1 wird in fhem ein Ereignis, englisch event, ausgelöst. Bei jeder Betätigung des Schalters erscheint ein neuer Event im Event Monitor. Probieren Sie auch, was passiert, wenn Sie zweimal hintereinander auf on klicken.

Ein Event besteht immer aus dem Zeitstempel, gefolgt vom Typ des auslösenden Gerätes (hier dummy), dem auslösenden Device-Namen (hier mySchalter1), sowie dem ausgelösten Befehl (hier on oder off).

Auch "echte" sendende fhem-Geräte, also z.B. eine Fernbedienung oder ein Funkschalter an der Wand, lösen bei jedem Tastendruck auf dieses Gerät oder bei Klick auf das zugehörige fhem-Device einen Event aus. Das Verständnis von Events und wie sie aufgebaut sind ist also elementar, wir werden sie noch oft benötigen. Probieren Sie ein wenig damit herum.

Schalten von Geräten - set

mySchalter1 kann also über Klicken auf on oder off geschaltet werden. Alternativ geht das auch über die Eingabe eines Befehls in das Kommandofeld.

Geben Sie dazu in das Kommandofeld set mySchalter1 on oder set mySchalter1 off ein und bestätigen jeweils mit der Enter-Taste. Auch hierbei ändert sich der Schaltzustand und ein Event wird ausgelöst. Den set-Befehl werden wir ebenfalls noch häufig verwenden.

Für weitere Tests legen wir nun ein neues Device myLampe1 an. Diese wollen wir später mit mySchalter1 bedienen.

define myLampe1 dummy

Da dies eine Lampe, also einen Aktor darstellen soll, werden wir der Lampe selbst keine Buttons für on oder off geben.

Die Lampe soll im Schulungsraum stehen. Diese Zuordnung könnten Sie wie zuvor über die Kommandozeile erreichen. Diesmal sind wir aber tippfaul und möchten die Zuordnung durch Klicken vornehmen.

Da myLampe1 noch keinem Raum zugeordnet ist, erscheint sie im Raum Unsorted. Wechseln Sie in diesen Raum und klicken Sie auf den Namen von myLampe1, um in die Detailansicht zu gelangen.

ErsteSchritteInFhem09.png

Im unteren Bereich können wir wieder die Attributzuordnung vornehmen.

Praktischerweise ist das Attribut room bereits ausgewählt, auch der Raum Schulungsraum ist bereits voreingestellt. Sie müssen also nur noch auf den Button attr klicken.

Wechseln Sie nun wieder in den Raum Schulungsraum. Es werden beide Geräte angezeigt.

ErsteSchritteInFhem10.png

Bei Event ausführen - notify

Im nächsten Schritt werden wir fhem beibringen, auf einen Event von mySchalter1 zu reagieren. Immer dann, wenn mySchalter1 einen Event mit dem Befehl on auslöst, soll myLampe1 eingeschaltet werden. Dazu wird in fhem ein "notify" verwendet. Die Befehlsstruktur ist

define <NAME> notify <REGEXP> <command>
  • Der Name <name> dient später dazu, dieses fhem-Device anzeigen und wiederfinden zu können. Als Name verwende ich hier n_mySchalter1_on, also n_ um es als Notify kenntlich zu machen, dann das auslösende Gerät mySchalter1 und den auslösenden Event on. Dieser Name scheint jetzt kompliziert, ist aber hilfreich, wenn Sie später mehrere Notify angelegt haben. Sie können es ganz nach Gusto auch n1 nennen oder Karlheinz. Device-Namen dürfen aus den Zeichen a-z, A-Z, 0-9, Unterstrich _ und Punkt . bestehen, wobei ein Punkt nicht an erster Stelle stehen darf. Sie werden später sehen, dass der Punkt in perl und damit fhem eine besondere Bedeutung hat, wenn möglich sollten Sie daher auf seine Verwendung in Device-Namen verzichten.
  • <regex> steht für "Regular Expression" und ist die Bedingung, unter der das Notify ausgeführt werden soll. Wann immer in fhem ein Event auftritt, wird für alle vorhandenen Notify geprüft, ob die angegebene Regex zutrifft. Der auslösende Event ist in unserem Fall, dass mySchalter1 ein Event mit dem Befehl on erzeugt. Dafür wird für die Regular Expression die Schreibweise mySchalter1:on verwendet. Regular Expressions werden in perl und fhem häufig verwendet, Sie werden sich damit später detaillierter auseinandersetzen dürfen :)
  • <command> definiert, was denn eigentlich ausgeführt werden soll. In unserem Beispiel soll das set myLampe1 on sein.

Unser Notify wird also erstellt mit

define n_mySchalter1_on notify mySchalter1:on set myLampe1 on

Nach Eingabe dieses Befehls in das Kommandofeld, abgeschlossen durch Enter, sehen Sie wieder die Detailansicht des neuen fhem-Device, also des Notify (siehe TYPE).

ErsteSchritteInFhem11.png

Im Block Internals sehen Sie hier die Definition DEF. Angezeigt wird hier alles, was bei der Definition nach dem Wort "notify", also nach dem Gerätetyp angegeben wurde. Es erscheinen also <regexp> und <command>.

Info blue.png
Im Block Probably associated with' die fhem-Devices angezeigt, die mit dem Notify verbunden sind. Die Geräte werden als klickbare Device-Namen angezeigt. Das ist praktisch, da man so mit einem Klick zur Detailansicht des jeweiligen Geräts springen kann.


Ordnen Sie auch das Notify unserem Schulungsraum zu (im unteren Bereich das Attribut room und den passenden Raum auswählen und dann auf attr klicken).

Wenn Sie nun im fhem-Menü auf Schulungsraum klicken, werden unsere drei fhem-Devices angezeigt.

ErsteSchritteInFhem12.png


Info blue.png
Üblicherweise würde man das Notify nicht dem Raum zuordnen, da es später für den Benutzer gar nicht sichtbar sein soll. Für unsere Testdurchläufe ist es aber praktischer.


Wenn Sie nun mySchalter1 auf on schalten, wird auch myLampe1 auf on geschaltet. Das funktioniert scheinbar nur beim ersten Mal – wenn Sie aber den Event Monitor prüfen oder in der Detailansicht von myLampe1 auf den Zeitstempel der letzten Statusänderung schauen, werden Sie sehen, dass es jedes Mal ausgeführt wird.

Damit das Ganze auch beim Ausschalten funktioniert, legen Sie ein zweites notify an:

define n_mySchalter1_off notify mySchalter1:off set myLampe1 off

Funktioniert es wie erwartet?


Natürlich möchte man nicht für jeden Befehl, den ein Device auslöst, ein eigenes Notify anlegen. Es geht auch einfacher. Statt

define n_mySchalter1_on  notify mySchalter1:on  set myLampe1 on
define n_mySchalter1_off notify mySchalter1:off set myLampe1 off

definieren wir nun

define n_mySchalter1     notify mySchalter1     set myLampe1 $EVENT

Wir sehen, dass die Regex nun nicht mehr unterscheidet, ob mySchalter1 den Event on oder off sendet. Lassen wir diese Angabe weg, löst dieses Notify bei jedem Event von mySchalter1 aus, egal mit welchem Kommando. Im auszuführenden set-Befehl verwenden wir nun die fhem-Variable $EVENT (Groß/Kleinschreibung beachten!). Dies ist ein Platzhalter für den Befehl, der vom auslösenden Event übernommen wird. Wenn also mySchalter1 ein on auslöst, nimmt $EVENT den Wert on an. Entsprechend für off oder jeden anderen Befehl.

Devices löschen oder deaktivieren – delete, disable

Wenn Sie den Event Monitor beachten, werden Sie sehen, dass nach jeder Betätigung von mySchalter1 der Befehl für myLampe1 nun zweimal ausgeführt wird. Das liegt daran, dass auf jeden Event von mySchalter1 zwei Notify reagieren – sowohl die "alten" Notify wie auch das Neue. Um dies zu umgehen, müssen wir die alten Notify loswerden. Dazu gibt es zwei Möglichkeiten.

  1. Löschen Sie ein Notify mit dem Befehl delete <name>, z.B. mit delete n_mySchalter1_on. Der delete Befehl funktioniert übrigens für jedes Objekt in fhem. Sie können damit also auch "echte" Devices löschen.
  2. Deaktivieren Sie ein Notify, indem Sie das Attribut disable verwenden. Das können Sie wieder über die Detailansicht des Notify setzen (im unteren Bereich das Attribut disable auswählen und den Wert 1 auswählen), oder in der Kommandozeile attr n_mySchalter1_off disable 1 eingeben.

Save Config

Wann immer Sie mit dem aktuellen Zustand Ihrer fhem-Konfiguration zufrieden sind, klicken Sie im fhem-Menü oben links einmal auf Save config oder geben Sie in das Kommandofeld den Befehl save ein. Ihre Konfiguration wird nun gespeichert. Tun Sie das nicht, sind alle Änderungen nach dem nächsten fhem-Neustart verloren.

Bestehende Devices verändern – modify

Wir legen nun eine zweite Lampe an, die ebenfalls durch unseren mySchalter1 und unser Notify geschaltet werden soll. Die neue Lampe wird durch folgende Eingabe in das Kommandofeld erzeugt:

define myLampe2 dummy

Durch "Zusammenklicken" im Detail-Bildschirm von myLampe2 ordnen Sie diese ebenfalls dem Raum Schulungsraum zu und weisen ihr über das Attribut webCmd Schaltflächen für on und off zu.


ErsteSchritteInFhem13.png


Nun passen wir das Notify n_mySchalter1 an. Dazu navigieren Sie auf den Detail-Bildschirm des Notify: Wechseln Sie in den Raum Schulungsraum und klicken Sie auf den Namen von n_mySchalter1.

Im Detail-Bildschirm befindet sich die Zeile DEF, die wir uns vorhin schon einmal angeschaut haben. Wenn Sie auf das Wort DEF klicken, können Sie die Definition eines fhem-Objekts bearbeiten.


Info blue.png
Im Feld DEF wird nur der Teil der Definition angezeigt, der beim Anlegen dieses Notify nach dem Objekttyp, also notify folgt. Sie finden hier also zunächst die Regex auf die das Notify reagiert, dann nach einer Leerstelle den auszuführenden Befehl. Der Lesbarkeit halber ist im Folgenden immer das gesamte define-Statement dargestellt, auch wenn man es im Feld DEF nicht vollständig sieht.


Wir ändern hier also von

define n_mySchalter1 notify mySchalter1 set myLampe1 $EVENT

zu

define n_mySchalter1 notify mySchalter1 set myLampe1,myLampe2 $EVENT


ErsteSchritteInFhem14.png


Zum Beenden der Bearbeitung klicken Sie auf die Schaltfläche modify <name>, hier also modify n_mySchalter1. Wenn Sie die Angaben im Detail-Bildschirm prüfen, sehen Sie, dass die DEFinition des Notify angepasst wurde.

ErsteSchritteInFhem14B.png

Beachten Sie auch hier wieder, dass im Detailscreen im unteren Bereich unter Probably associated with die geschalteten Lampen erscheinen – das wird noch oft nützlich sein.

Über den Link Device specific help können Sie sich übrigens den gesamten Hilfe-Text zu Ihrem device-Typ aus der commandref anschauen, hier also den Hilfetext zu notify. Dieser Link ist gerade zu Beginn häufig hilfreich.

Nun können Sie testen, ob ein Klick auf mySchalter1 auch wirklich beide Lampen schaltet. Schauen Sie sich dabei auch wieder in einem separaten Fenster mit dem Event Monitor die entstehenden Events an.


ErsteSchritteInFhem15.png

Mehrere Devices schalten

Zum Schalten mehrerer Devices kann also verwendet werden

set <device1>,<device2> on

Eine alternative Schreibweise dafür ist

set <device1> on; set <device2> on

Auch eine Kombination ist möglich:

set <device1>,<device2> on; set <device3> off


Auch innerhalb eines notify (oder anderen fhem-Befehlen) kann man mehrere Befehle auflisten, jedoch ist hier eines zu beachten:

define n1 notify mySchalter1:on set myLampe1 on;set myLampe2 off

Die Befehle sind durch ein Semikolon getrennt. Effekt ist: das notify schaltet myLampe1 wann immer mySchalter1 den Event on sendet. Der nächste Befehl in dieser Zeile ist set myLampe2 off. Dieser wird sofort bei der Eingabe der o.g. Befehlszeile abgearbeitet. Es schaltet also myLampe2 sofort, myLampe1 erst nach dem Event von mySchalter1.

Soll auch der zweite Befehl set myLampe2 off erst nach dem Event ausgeführt werden, muss ein doppeltes Semikolon genutzt werden:

define n1 notify mySchalter1:on set myLampe1 on;;set myLampe2 off

Die kombinierte Variante könnte so aussehen:

define n1 notify mySchalter1:on set myLampe1 on;;set myLampe2 off;set myLampe3 on

Diese Befehlszeile würde also myLampe3 sofort schalten, aber erst nach dem Event von mySchalter1 schalten myLampe1 und myLampe2.

Devices umbenennen

Schließlich wollen wir (zur Übung) noch ein Device umbenennen: Aus myLampe2 soll myStehlampe werden. Dafür verwenden wir

rename <alterName> <neuerName>

Hierbei ist zu beachten, dass zugehörige notify-Anweisungen nicht automatisch aktualisiert werden. Beachten Sie also vor dem Umbenennen im unteren Bereich des Detail-Bildschirms die Liste Probably associated with, damit Sie bei der folgenden Anpassung keines Ihrer Notify vergessen.

Geben Sie also in das Kommandofeld ein

rename myLampe1 myStehlampe

und passen Sie anschließend n_mySchalter1 an, indem Sie auf dessen Detail-Bildschirm im Bereich DEF die Definition anpassen.

Nach der Änderung muss das Notify lauten

define n_mySchalter1 notify mySchalter1 set myLampe1,myStehlampe $EVENT


ErsteSchritteInFhem16.png


Zeitgesteuert schalten - at

Im nächsten Schritt soll eine Zeitsteuerung eingerichtet werden. Zunächst möchten wir erreichen, dass myLampe1 nach einer Minute ausgeschaltet wird wie z.B. ein Treppenhauslicht.


Info blue.png
Damit Sie den Effekt sehen können, schalten Sie myLampe1 vorher auf on.


Für Zeitsteuerungen gibt es den fhem-Device-Typ at. Die Befehlsstruktur ist

define <name> at <timespec> <command>

<name> und <command> haben hier dieselbe Funktion wie bei notify. Neu ist hier lediglich <timespec> (time specification), also die Zeitangabe. Diese erfolgt in der Schreibweise HH:MM:SS oder HH:MM.

Um myLampe1 also in einer Minute auszuschalten, erzeugen Sie folgendes at:

define a_myLampe1 at +00:01:00 set myLampe1 off


ErsteSchritteInFhem17.png


Probieren Sie es aus. Wird myLampe1 nach einer Minute ausgeschaltet? Wird dabei ein Event erzeugt?

Wenn Sie sich die Detailansicht des at anschauen möchten, müssen Sie sich übrigens beeilen: Nach der einmaligen Ausführung wird das at automatisch gelöscht. Falls fhem schneller war, können Sie es ja noch einmal anlegen und ggf. eine längere Zeitspanne angeben :-)

Bei <timespec> kann man die Sekunden auch weglassen und einfach nur HH:MM schreiben. Außerdem gibt es mehrere Varianten:

Varianten von Zeitangaben für at
Notation Erklärung
+00:02:00 In zwei Minuten; einmalige Ausführung
00:02:00 Um zwei Minuten nach Mitternacht, also um 00:02 Uhr und 0 Sekunden; einmalige Ausführung
*00:02:00 Täglich um 00:02 Uhr
+*00:02:00 Alle 2 Minuten
+*{3}00:02 Dreimal, alle zwei Minuten
*{3}00:02 Dreimal um 00:02 Uhr
*{sunset_rel()} Täglich zu Sonnenuntergang
*{sunrise(+120)} Täglich 2 Minuten (120 Sekunden) nach Sonnenaufgang
  • Durch die Angabe von * wird also eine dauerhafte Wiederholung definiert. Die Wiederholungen laufen so lange, bis das at gelöscht oder disabled wird.
  • Durch die Angabe von + wird die angegebene Zeit nicht mehr als absolute Uhrzeit interpretiert, sondern als Timer, nach wie vielen Stunden:Minuten:Sekunden der Befehl ausgeführt wird.
  • Durch die Angabe von {n} wird das at nur n-mal durchlaufen.
  • Die Funktionen {sunset_rel()} und {sunrise()} liefern die passende Uhrzeit zurück. Durch Angabe von * wird dies täglich wiederholt.

Um bspw. täglich zu Sonnenaufgang die Gartenbeleuchtung auszuschalten, definieren Sie so etwas wie

define a_GartenLicht_morgens_off at *{sunrise()} set GartenLicht off


ErsteSchritteInFhem18.png

Im Detailscreen eines at wird übrigens im STATE der Zeitpunkt der nächsten Ausführung angezeigt.

Diese Info erscheint auch in der Raum-Ansicht, falls Sie das at dort anzeigen lassen:

ErsteSchritteInFhem18B.png

Timer bei einem Event starten - notify und at

Als letzte Übung wollen wir ein notify und ein at verbinden. Der Timer soll nun nicht starten, wenn Sie den Befehl in das Kommandofeld eingeben, sondern wenn ein Event eintritt.

Dazu basteln wir uns ein Treppenhaus: Legen Sie dafür die Dummy-Devices th_Schalter und th_Licht im Raum Treppenhaus an. Zum Anlegen des Raums Treppenhaus ordnen Sie dem ersten Device den Raum über das Kommandofeld zu, alle weiteren Attribute dann durch Klicken im Detail-Bildschirm:

define th_Schalter dummy
attr   th_Schalter room Treppenhaus
attr   th_Schalter webCmd on
define th_Licht dummy
attr   th_Licht room Treppenhaus

Nun fehlt noch das Notify, welches auf th_Schalter:on reagiert und daraufhin zwei Befehle ausführt:

  • Einschalten des Treppenhauslichts mit set th_Licht on
  • Einen Timer starten, der es nach einer Minute wieder ausschaltet. Also define a1 at +00:01 set th_Licht off.

Das sieht dann so aus (und muss ins Kommandofeld als eine Zeile eingegeben werden):

define n_th_Schalter_on notify th_Schalter:on 
       set th_Licht on;define a1 at +00:01 set th_Licht off

Beim Auslösen des Notify wird also als Kommando das Einschalten des Treppenhauslichts ausgelöst, wie auch das Definieren eines Timers, der es eine Minute später wieder ausschaltet. Funktioniert es?


ErsteSchritteInFhem19.png


Da das ja doch recht sperrig ist, gibt es noch eine etwas einfachere Alternative:

define n_th_Schalter_on notify th_Schalter:on set th_Licht on;;sleep 60;;set th_Licht off

Manche Hardwaresysteme bieten auch den Befehl on-for-timer, mit dem man alternativ schreiben kann

define n_th_Schalter_on notify th_Schalter:on set th_Licht on-for-timer 60

Wie geht es weiter?

Sie haben nun kennengelernt:

  • Das Anlegen von fhem-Devices mit define
  • Events und den Event-Monitor
  • Schalten von Devices mit set
  • Verändern von Devices mit modify, rename und delete
  • Das Setzen und Bearbeiten von Attributen
  • Event-getriebene Aktionen durch notify
  • Zeitgesteuertes Schalten mit at

Damit kennen Sie die grundlegendsten Mechanismen von fhem. Details zu diesen Befehlen finden Sie in der fhem Befehlsreferenz commandref

Tipp: Zu vielen fhem-Befehlen und Gerätetypen gibt es auch eine deutschsprachige Beschreibung. Klicken Sie dazu in der commandref oben links auf den Link "DE".

In der commandref finden Sie neben der Beschreibung aller fhem-Befehle auch die Liste aller Gerätetypen, die in fhem eingebunden werden können.

Sie werden feststellen, dass "echte" fhem-Devices grundsätzlich genau so aussehen, wie die dummy-Devices, die Sie hier bereits kennengelernt haben. Der wesentliche Unterschied ist, dass Sie die verfügbaren Befehle nicht mehr selbst mittels attr webCmd festlegen müssen, da diese bereits durch das fhem-Device vorgegeben sind. Und Events werden nicht nur ausgelöst, wenn Sie im fhem-Webfrontend klicken, sondern auch, wenn das physische Gerät (also der Bewegungssensor oder der Lichtschalter an der Wand) auslöst.

Sobald Sie ihre ersten Geräte an fhem gekoppelt haben, schauen Sie sich den Event-Monitor an, um zu sehen, wann welche Events ausgelöst werden.

Einen umfangreicheren Einstieg in fhem finden Sie im Dokument Heimautomatisierung-mit-fhem

Viel Spaß und Erfolg mit fhem !