Event
Definition
Ein Event (Ereignis) ist eine ungerichtete Nachricht, die vom FHEM-Server gesendet wird.
Das Event enthält Informationen über den Zustand eines Gerätes (Device).
Der Anstoss zum Senden eines Events geht von einem Gerät aus.
Ein Event beinhaltet den Zeitpunkt der Entstehung seines Inhalts.
Sprachgebrauch
Unter Event oder Ereignis wird oft nur der Teil <Gerätename> ⟨<Readingname>: ⟩<Wert>
oder ⟨<Readingname>: ⟩<Wert>
verstanden.
Aufbau
Aufbau eines Events:
<Datum> <Uhrzeit> <TYPE> <Gerätename> ⟨<Readingname>: ⟩<Wert>
Beispiele
Beispiel eines globalen Events, bei dem der Readingname fehlt:
2016-12-13 11:40:33 Global global MODIFIED Test
- Datum: 2016-12-13
- Uhrzeit: 11:40:33
- TYPE: Global
- Gerätename: global
- Readingname: N/A
- Wert: MODIFIED Test
Beispiel eines Geräte-Events mit Readingname:
2016-12-13 11:48:26 PRESENCE LaptopAn presence: present
- Datum: 2016-12-13
- Uhrzeit: 11:48:26
- TYPE: PRESENCE
- Gerätename: LaptopAn
- Readingname: presence
- Wert: present
Verwendung
Events stehen allen Geräten des FHEM-Servers zur Weiterverarbeitung zur Verfügung. Einige Gerätetypen, Eventhandler erfordern die Angabe von Ereignisfiltern in Form eines regulären Ausdrucks. Im Gerät werden dann nur die gefilterten Events in die Weiterverarbeitung einbezogen, das sind z.B.
Zur Erstellung eines Ereignisfilter ist die genaue Kenntnis über den Inhalt eines Events erforderlich. Die aktuellen Ereignisse können im Eventmonitor oder mit inform[1] über einen Telnet-Client angezeigt werden. Der Befehl trigger[2] simuliert den Anstoss eines Gerätes an den FHEM-Server ein Event zu senden.
Besonderheiten
Events des Reading state
Wenn ein Gerät ein Event für das Reading state generiert, dann wird der Readingname weggelassen.
Beispiel
2016-12-13 11:48:26 PRESENCE LaptopAn present
- Datum: 2016-12-13
- Uhrzeit: 11:48:26
- TYPE: PRESENCE
- Gerätename: LaptopAn
- Readingname: N/A
- Wert: present
Ergänzen des Reading state im Event
Manchmal ist es sinnvoll bei der Verwendung von Events einen regulären Ausdruck mit state zu formulieren.
Die Ergänzung eines Events mit dem Reading state erfolgt in dem Gerät, das als Empfänger des Events dient, dort ist das Attribut addStateEvent
zu setzen.
D.h. bei gesetztem Attribut addStateEvent enthalten auch diese Events den Readingnamen und lassen sich in Eventhandlern wie Events anderer Readings behandeln.
Beschränken von Events
Events erzeugen eine Systemlast. Um diese zu reduzieren, kann die Erzeugung von Events eingeschränkt werden. Die Begrenzung erfolgt in den Geräten, die als Quelle der Events dienen. In diesen Geräten können folgende Attribute gesetzt werden:
allgemein:
DbLog:
Das Modul DOIFtools bietet die Möglichkeit eine Event-Statistik zu erstellen, als Grundlage zur Optimierung des Event-Aufkommens.
Erweiterung des angezeigten Zeitstempels um Milisekunden
Die Anzeige des Zeitstempels kann auf Millisekunden erweitert werden, wenn das globale Attribut mseclog auf 1 gesetzt wird.
Beispiel
2016-12-13 11:48:26.836 PRESENCE LaptopAn present
- Datum: 2016-12-13
- Uhrzeit: 11:48:26.836
- TYPE: PRESENCE
- Gerätename: LaptopAn
- Readingname: N/A
- Wert: present
Einzel-Events
Geräte können für jede Aktualisierung jedes Readings ein Event auslösen. In diesem Fall handelt es sich um Einzel-Events.
Sie können an den unterschiedlichen Zeiten im Zeitstempel erkannt werden.
Beispiel
2017-03-19 14:07:50.187 dummy du3 reading1: abc 2017-03-19 14:07:50.210 dummy du3 reading2: def
Sammel-Events
Geräte können zusammenhängende Aktualisierungen von Readings sammeln und diese als Sammel-Event auslösen.
Sammel- Events enthalten die gleiche Zeitangabe im Zeitstempel.
Beispiel
2017-03-19 14:22:31.559 I2C_BMP180 BMP180 T: 20.8 P: 998 P-NN: 999 2017-03-19 14:22:31.559 I2C_BMP180 BMP180 temperature: 20.8 2017-03-19 14:22:31.559 I2C_BMP180 BMP180 pressure: 998 2017-03-19 14:22:31.559 I2C_BMP180 BMP180 pressure-nn: 999