(FHEM) Notify

Aus TippvomTibb
Zur Navigation springen Zur Suche springen

Beschreibung

Eventhandler (Hinweis: Kommt noch in den Steckbrief.)

Mit dem Notify-Element lassen sich Kommandos in Abhängigkeit von Ereignissen auslösen. (Command|DeviceModule|HelperModule) (Hinweis: Kommt noch in den Steckbrief.)

Ereignisse > Liste aus Notify-Elementen > Elementfilter > Filterregeln ergeben Treffer  > Kommandos werden ausgeführt

Ereignisse sind alle Kommunikationspakete von und zum FHEM-Server. Die Ereignisse werden chronologisch in einer Liste abgelegt. Die aktuellen Ereignisse der Liste kann man sich mit Hilfe des Eventmonitor anschauen. Hier werden alle Kommunikationspakete von FHEM nach einem Muster aufbereitetet und angezeigt. Die alten, also alle vor dem aktuellen Zeitpunkt, aufgetretenen Ereignisse werden in einer Datei (FileLog) oder in einer Datenbank (DbLog) abgelegt.

Durch das FHEM-Kommando define vom Typ notify werden Filterregeln (Suchmuster oder Reguläre Ausdrücke) in die Liste der Eventhandler eingetragen. Alle Events werden der Reihe nach auf Übereinstimmungen mit den Filterregeln geprüft. Sobald eine Filterregel einen Treffer (Match) ergibt werden die Kommandos des entsprechenden Evennthandlers ausgeführt.

Syntax

Allgemeine Syntax des Define-Kommandos aus der FHEM-Referenz.

define [option] <name> <type> <type-specific> 

Für die Definition eines Notify-Elements ergibt sich der obligatorische Parameter <type> zu 'notify' und <type-specific> sind hier <pattern> und <command> also

define <name> notify <pattern> <command>

Wie auch in der Befehlsreferenz nachzulesen ist, hat das notify-Element bei der Defintion keine Optionen.

Ein Beispiel für ein Beschreibungsverwirrung sei nachfolgend dies angeführt:

define <NAME> notify <REGEXP> <command> 

Diese Syntaxdarstellung aus dieser Quelle unterscheidet sich von der aus der Referenz. Das hier <NAME> in Großbuchstaben geschrieben wurde mag man noch verkraften, dass aber <pattern> auf <REGEXP> reduziert wird förderte meine Verwirrung. Da auch noch gelegentlich von Suchmustern geschrieben wird war mein erster Gedanken: Da haben Rudolf König et al. eine eigene Filtersyntax in FHEM rein programmiert. Dem scheint aber nicht so zu sein. Bei Gelegenheit vergewissere ich mich mal im Quellcode, oder einer der Beteiligten klärt mich auf.

Parameter

<name>

Mit <name> lässt sich das notify-Element eindeutig identifizieren. Als gültige Zeichen für die Wahl eines eindeutigen Namens gelten die Großbuchstaben (A-Z), die Kleinbuchstaben (a-z), der Unterstrich (_) und der Punkt (.). Also keine Umlaute und kein SZ. Beim Doppelpunkt scheint es noch Unstimmigkeit zu geben. Siehe hierzu. Der Name dient als Etikett des Notify-Elements und hat sonst keine weitere Bedeutung. Eine Systemtatik bei der Namenswahl, auch bei Devices, ist hilfreich.

<pattern>

Ein Suchmuster (Filterregel) das durch einen Regulären Ausdruck gebildet wird. Ein sehr gelungene und hilfreiche Auflistung zum entwerfen der Filterregeln befindet sich hier.

Die scheinbar am häufisten in der FHEM-Dokumentation zu findende Regel ist '.*'. Ein kurzer Blick in das CheatSheet offenbart, dass der Punkt genau irgendein Zeichen (ohne Zeilenumbruch) "matcht". Steht also im Pattern ein Punkt an einer Stelle, darf im Teststring (Event) an dieser Stelle ein beliebiges Zeichen stehen, dass der Filter ein "Match" liefert und damit die Filterregel einen Treffer hat und die notify-Kommandos ausgeführt werden. Das zweite Zeichen, der Stern, steht bei den Quantifiers (deu: Anzahl angebend) und bedeutet, dass die voranstehende Entsprechung, in unserem Beispiel der Punkt, keinmal, einmal oder mehrfach vorkommen darf. Der Stern entspricht der alternativen Schreibweise {0,}. Weiter Beispiele findet man auf der eigenen Wikiseite RegExp Eine extrem hilfreiche Seite zum Testen von Regulären Ausdrücken findet man hier.

<commands>

Laut Aussage der Referenz muss die Ersetzung von <commands> eine der 3 Befehlstypen entsprechen.

* FHEM-Befehle, mehrere FHEM-Befehle werden durch Semikolon (;) getrennt. (Achtung: siehe unten Escape-Zeichen)
* Shell-Befehle ""
* Perl-Ausdrücke {}

Das Beispiel aus der Referenz empfinde ich der Kategorie "Der Laie staunt, der Fachmann wundert sich" entsprungen.

Das 'set lamp off' einen FHEM-Befehl darstellt hat man schnell erfasst. Im Shell-Befehl '"fhem.pl 7072 "set lamp off""' steckt allerdings schon mehr drin. Auf die Idee fhem.pl himself als Programm zur Übergabe des String "set lamp off" an Port 7072 zu benutzen wäre ich ohne den Hinweis auf die Client-Form wohl nie gekommen. Da fallen mir andere Kandidaten wie telnet oder besser noch netcat eher ein. Man beachte auch die verschachtelten doppelten Anführungszeichen. Das letzte Beispiel (Perl-Ausdruck) setzt voraus, dass man weiß oder vermutet, dass es im Perl-Programm ein Unterroutine (sub) namens fhem gibt der man als Parameter eine FHEM-Befehl übergeben kann. Das muss ich bei Gelegenheit ...

Bei der Wahl des Kommandotyps stellt die obige Liste vielleicht auch eine Rangfolge dar. Man sollte erst versuchen mit FHEM-Befehlen zu arbeiten. Erst wenn das nicht gelingt auf "externe Hilfe" durch Shell-Befehle zurückgreifen und als letztes Mittel Perlcode generieren.

Diesem Hinweis muss ich noch nachgehen: ...können Sie als <command> auch eine Liste von Geräten angeben (siehe devspec beim Befehl set) oder eine Struktur schalten (siehe structure).

Set

Get

Attributes

Readings

Erläuterungen

Beispiele

Tipps

list modify setreading trigger Perl specials