Was GENAU sind events und nach welcher Regel werden sie weiterverarbeitet?

Begonnen von andies, 18 November 2017, 13:10:31

Vorheriges Thema - Nächstes Thema

andies

Ich habe nun eine Menge zu Events etc gelesen, habe aber immer noch ein Verständnisproblem. Laut Wiki sind Events Zeichenketten, und beispielsweise sehe ich im Eventmonitor die folgende:
2017-11-18 13:05:27 MQTT Mosquitto connection: active
2017-11-18 13:06:01 MQTT_DEVICE Sonoff_TH10a Time: 2017-11-18T13:06:00

Ein Event besteht damit aus mehreren Zeichen, die durch Leerzeichen getrennt sind. Ich sehe timestamp, type, device, Reading mit einem Doppelpunkt und Value.

Nun möchte ich das mit RegEx in einem notify auswerten. Nehmen wir mal den Sonoff. Dann soll ich das so angeben:
<devicename>:Reading
Aber zwischen devicename und reading kommt gar kein Doppelpunkt, der kommt erst nach dem Reading? Wie passt das zusammen? Wie genau ist die Syntax an der Stelle? Die 237 Einträge in der commandref zu events habe ich jetzt nicht alle gelesen, weil ich keinen Ort finde, wo ich das nachvollziehbar erklärt bekomme.

Ich verstehe den genauen Zusammenhang zwischen dem, was ich im eventmonitor sehe, und dem, was ich in Regex eingeben soll, nicht.
FHEM 6.1 auf RaspPi3 (Raspbian:  6.1.21-v8+; Perl: v5.32.1)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

schnitzelbrain

Von hier https://wiki.fhem.de/wiki/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 vom Gerät aus.
Ein Event beinhaltet den Zeitpunkt der Entstehung seines Inhalts.


Also keine Zeichenkette sondern ein Ereignis.
Im Eventmonitor wird dir der Event und dessen Inhalt wie oben beschrieben aufgeführt.

Willst du einen Event auswerten  (als Trigger nutzen), dann musst du dann musst du ihn in der Formel so wie beschrieben verwenden.
Sprachgebrauch

Unter Event oder Ereignis wird oft nur der Teil <Gerätename> 〈<Readingname>: 〉<Wert> oder 〈<Readingname>: 〉<Wert> verstanden.


Grüße

andies

Sorry, aber das kapiere ich trotzdem nicht.

Event oder Ereignis scheinen Synonyme zu sein. Insofern ist die Aussage "Keine Zeichenkette, sondern ein Ereignis" keine Erläuterung, weil dann nur da steht "Ein Event ist keine Zeichenkette, sondern ein Event". Innerhalb von Perl gibt es aber keine Events, sondern Datentypen - gibt es dann einen Datentyp, der ein Event "widerspiegelt"?

Auch kenne ich die Zeilen aus dem Wiki, aber ich habe an einigen Stellen bei mir derzeit konkrete Probleme, die ich nicht lösen kann (event wird nicht ausgelöst oder zu häufig ausgelöst etc.). Beim Nachdenken ist mir aufgefallen, dass ich die Syntax nicht kapiere. Wieso stehen da wann Doppelpunkte? Der Hinweis, dass man unter einem Event manchmal etwas anderes versteht (und welcher Datentyp ist das dann - ist das eine Zeichenkette oder wieder was anderes?!) hilft mir nicht, weil ich genau wissen will, wieso ich beispielsweise <device> <reading>:<value> und nicht etwa <device>:<reading>:@<value> oder weiß der Teufel was schreibe.
FHEM 6.1 auf RaspPi3 (Raspbian:  6.1.21-v8+; Perl: v5.32.1)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

FranzB94

@schnitzelbrain:

Ist es nun der Event, oder das Event aus dem WIKI?


Grüße Franz

andies

FHEM 6.1 auf RaspPi3 (Raspbian:  6.1.21-v8+; Perl: v5.32.1)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

herrmannj

@andies valide Frage.

Du vermengst (scheinbar) 2 Dinge: _was_ ist ein event und _wie_ wird es repräsentiert.

Das _was_ ist vmtl klar, ein fhem internes "Dingens". Wenn sich etwas tut generiert fhem das "Dingens" (event) und reicht es intern herum damit alle die mögen drauf reagieren können.

Das _wie_ wird es repräsentiert (und/oder verwendet) hängt vom Modul ab welches betroffen ist. Daher muss man sich einfach an den Syntax halten der dokumentiert ist. In einem notify ist der Syntax (der regex) <device>:<reading> <value>. Wenn das Device "D" heißt, das Reading "R" und der Inhalt des Readings "1a 2b 3" lautet dann erzeugt das notify einen String mit "D:R 1a 2b 3". In der cmdref steht "Die Regex muss komplett matchen". Eine regex D:R.* erfüllt das.

Die _Repräsentation_ im event monitor ist in der Tat anders. (TS TYPE Device Reading: ....). Je nach Modul triffst Du auch andere Repräsentation.

igami

Im Eventmonitor stehen mehrere Informationen in einer Zeile.
Hier einmal an deinem Beispiel

2017-11-18 13:06:01 MQTT_DEVICE Sonoff_TH10a Time: 2017-11-18T13:06:00

In jeder Zeile stehen 4 Innformationen, welche durch ein Leerzeichen verbunden sind:
1. Zeitstempel: "2017-11-18 13:06:01"
2. Modul (TYPE): "MQTT_DEVICE"
3. device (NAME): "Sonoff_TH10a"
4. Event: Time: 2017-11-18T13:06:00

Das Event wiederrum setzt sich für Readings aus zwei Teilen zusammen, welche durch einen Doppelpunkt gefolgt von einem Leerzeichen verbunden sind:
1. reading: "Time"
2. value: "2017-11-18T13:06:00"

Es gibt jedoch auch Events welche nicht durch das aktualisieren von Readings ausgelöst werden (z.B. durch den Befehl trigger)
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

andies

Danke, langsam fängt der Groschen an zu fallen.

Noch eine Nachfrage. Gibt es Elemente/Dinge/Objekte, die immer notwendigerweise zu einem Event (nicht der Repräsentation) dazugehören? Ich würde vermuten, dass man jedem Event immer einen Zeitstempel zuordnen kann, weil das ja "in der Zeit" stattfinden muss. Igamis Antwort hat mich aber dann etwas verwirrt: Kann man einem Event immer ein device oder immer ein Reading zuordnen? Oder kann es von mehreren Devices ausgehen?
Oder hängt das am Ende von den Umständen des konkreten Falles ab?

<edit> Also in der Einleitung steht: "Ein device sendet ein Event an FHEM und FHEM verteilt dieses Event an alle devices. Diese wiederum entscheiden dann, ob und wie sie darauf reagieren" Demzufolge müsste man ein Event immer eindeutig einem device zuordnen können.
FHEM 6.1 auf RaspPi3 (Raspbian:  6.1.21-v8+; Perl: v5.32.1)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

herrmannj

ZitatOder hängt das am Ende von den Umständen des konkreten Falles ab?
yepp. Drück SAVE und schau im event monitor. SAVE erzeugt ein event wobei es erwiesener Massen kein Reading "Save" gibt und in der Folge auch keinen Wert.

UPDATE: Ich präzisere das wenn ich sage das es immer 3 Sachen im event gibt:
- auslösendes Device
- "was"
- Zeitstempel

herrmannj

zu Deinem edit: Ja das ist der Fall. Daher wird das event zu "SAVE" auch vo Device "global" verschickt. Nochmal, ein Reading benötigt das nicht und es gibt auch keins dazu.