Hauptmenü

Events oder Readings?

Begonnen von chq, 17 April 2019, 07:29:18

Vorheriges Thema - Nächstes Thema

chq

Hallo,

auch nach zig DOIFs tue ich mich noch immer schwer, wenn ich mich entscheiden muss, ob ich ein Reading auslesen, oder auf ein Event reagieren soll.

Im folgenden Beispiel geht es darum, dass steuerung immer dann kontinuierlich in regelmäßigen Abständen neu gestartet werden soll (do always, repeatcmd), so lange wlanRepeaterKueche anwesend ist, jmd. daheim ist und vor allem Wifi_BSSId nicht 90:84:AB:F1:A9:E9 ist.

([Bewohner:state] eq "home"
and ["^wlanRepeaterKueche$:^presence:.present"]
and [steuerung:Wifi_BSSId] ne "90:84:AB:F1:A9:E9") (set steuerung RESTART 1)


In der ersten und letzten Zeile frage ich Readings ab, während ich in der zweiten Zeile auf ein Event reagiere.

Meine Frage ist nun, anhand welcher Kriterien ich entscheiden sollte, ob ich mich für das Auslesen von Readings oder für das Reagieren auf Events entscheiden sollte.

Kann man in diesem Fall sagen, dass weil das Kommando via repeatcmd und repeatsame ohnehin kontinuierlich gesendet wird, es Sinn macht, lediglich Readings auszulesen?

Gruß Chris
So einfach wie möglich, so kompliziert wie nötig

Otto123

Hi Chris,

hilft es Dir das mal zu lesen? https://forum.fhem.de/index.php/topic,99680.0.html
Da hatten wir das Thema gerade.

Du hast noch einen Punkt vergessen
([device:"on"]) triggert auf den Event on, es wird nicht abgefragt.
([device] eq "on") triggert auf einen Event im Gerät device und es wird abgefragt ob der status on ist.
([?device] eq "on") triggert das DOIF nicht. Wird das DOIF durch etwas anderes getriggert wird device abgefragt ob der status on ist.

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Damian

#2
Bei einfachen Abfragen bezweckt der Zustandtrigger:

([device] eq "on")

und Ereignistrigger

([device:"on"])

das Gleiche.

Interessant ist die Verknüpfung mit Operatoren

z. B.  mit and:

([device1] eq "on"  and  [device2] eq "on")

sobald einer der beiden Devices triggert und beide "on" sind, ist die Bedingung wahr.

Dagegen:

([device1:"on"]  and  [device2:"on"])

macht so keinen Sinn, weil niemals zwei verschiedene Events wahr sein können.

Vielmehr machen Ereignisabfragen mit "or" oft Sinn:

z. B.

([device1:"on"]  or  [device2:"on"])

Hier wird getriggert sobald eines der Devices "on" liefert.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

chq

Zitat von: Damian am 17 April 2019, 12:09:37([device1:"on")  and  [device2:"on"])

([device1:"on")  or  [device2:"on"])

Danke. Es müsste aber so lauten, oder?

([device1:"on"]  and  [device2:"on"])

([device1:"on"]  or  [device2:"on"])

Gruß Chris
So einfach wie möglich, so kompliziert wie nötig

Damian

Zitat von: chq am 17 April 2019, 12:39:46
Danke. Es müsste aber so lauten, oder?

([device1:"on"]  and  [device2:"on"])

([device1:"on"]  or  [device2:"on"])

Gruß Chris

ja, habe die Klammern korrigiert.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Per

Zitat von: chq am 17 April 2019, 07:29:18Meine Frage ist nun, anhand welcher Kriterien ich entscheiden sollte, ob ich mich für das Auslesen von Readings oder für das Reagieren auf Events entscheiden sollte.
Das wird dir pauschal keiner beantworten können, weil das ganz von deiner Aufgabe und den gewünschten Ergebnissen abhängt. Und meistens kommt man eh auf verschiedenen Wegen zum selben Ergebnis.

chq

Zitat von: Otto123 am 17 April 2019, 09:45:59([device] eq "on") triggert auf einen Event im Gerät device und es wird abgefragt ob der status on ist.

Also wird dann getriggert, sobald das entspr. Reading eines Devices den entspr. Wert angenommen hat. In dem von Dir angegebenen Fall handelt es sich um das Reading state, oder?

Ist das das, was Du als "Event im Gerät" bezeichnest?

Gruß Chris
So einfach wie möglich, so kompliziert wie nötig

Otto123

Hallo Chris,

nein. Es ist nach meinem Verständnis völlig egal ob reading27 oder state oder reading23 des Gerätes verändert wird (und einen Event erzeugt!).
Zitat Commandref.
Zitatdefine di_garage DOIF ([remotecontrol] eq "on") (set garage on) DOELSEIF ([remotecontrol] eq "off") (set garage off)

Das Modul wird getriggert, sobald das angegebene Device hier "remotecontrol" ein Event erzeugt. Das geschieht, wenn irgendein Reading oder der Status von "remotecontrol" aktualisiert wird. Ausgewertet wird hier der Zustand des Status von remotecontrol nicht das Event selbst.
Irgendein Event des Gerätes triggert DOIF und state wird ausgewertet. Es ist egal ob sich state geändert hat oder nicht.

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz