Ich habe da eine Verständnisfrage (siehe auch dieser Beitrag: https://forum.fhem.de/index.php/topic,120572.msg1151084.html#msg1151084):
Wenn ich den o.a. Code
defmod DG_Fenster_Heizung DOIF (["^Fenster.DG:open"] and [?HCAutomatik] eq "on")
...
her nehme wird auf Fenster.DG getriggert und die nachfolgenden Befehle nur dann ausgeführt, wenn HCAutomatik "on" ist (ist also kein Trigger). Wo ist der Unterschied zu folgendem Code:
defmod DG_Fenster_Heizung DOIF (["^Fenster.DG:open"] and [?"HCAutomatik:on"])
...
Wenn ich es richtig verstanden habe wird auch im 2ten Fall nur auf Fenster.DG getriggert und die nachfolgenden Befehle nur dann ausgeführt, wenn HCAutomatik "on" ist (ebenfalls kein Trigger).
Ich verwende beide Notationen erfolgreich doch welches ist die bevorzugte (professionellere) Schreibweise bzw. bei welchem Fall habe ich im System weniger Overhead ? Ich möchte mich mit mir auf nur eine Schreibweise einigen.
Zitat von: rallye am 22 April 2021, 11:38:12
Ich habe da eine Verständnisfrage (siehe auch dieser Beitrag: https://forum.fhem.de/index.php/topic,120572.msg1151084.html#msg1151084):
Wenn ich den o.a. Code
defmod DG_Fenster_Heizung DOIF (["^Fenster.DG:open"] and [?HCAutomatik] eq "on")
...
her nehme wird auf Fenster.DG getriggert und die nachfolgenden Befehle nur dann ausgeführt, wenn HCAutomatik "on" ist (ist also kein Trigger). Wo ist der Unterschied zu folgendem Code:
defmod DG_Fenster_Heizung DOIF (["^Fenster.DG:open"] and [?"HCAutomatik:on"])
...
Wenn ich es richtig verstanden habe wird auch im 2ten Fall nur auf Fenster.DG getriggert und die nachfolgenden Befehle nur dann ausgeführt, wenn HCAutomatik "on" ist (ebenfalls kein Trigger).
Ich verwende beide Notationen erfolgreich doch welches ist die bevorzugte (professionellere) Schreibweise bzw. bei welchem Fall habe ich im System weniger Overhead ? Ich möchte mich mit mir auf nur eine Schreibweise einigen.
Die zweite Abfrage ist nicht sinnvoll, da [?"HCAutomatik:on"] keine sinnvolle Angabe ist. Sie ist immer falsch - entspricht 0. Sie wäre zum Zeitpunkt des Triggers wahr, wenn sie triggern würde.
Danke, hilft mir ordentlich weiter !
Zusatzfrage:
wie sieht es mit [?HCAutomatik:"^on$"]
aus ? Ist das sinnvoller als [?HCAutomatik] eq "on"]
?
Irgendwo hatte ich das die Tage schon mal erklärt - das was Du als Schreibweise bezeichnest ist keine - sondern ein genereller Unterschied:
["^Fenster.DG:open"] - wertet diesen Event aus. Es ist also wahr genau in dem Moment wo der Event eintritt, also Fenster.DG von irgendwas nach open wechselt
[?HCAutomatik] eq "on" - fragt den Zustand von HCAutomatik ab wenn irgendetwas das DOIF triggert. Es ist immer wahr wenn HCAutomatik auf on steht.
[HCAutomatik] eq "on" - eine (jede) Änderung von HCAutomatik triggert das DOIF im Gegensatz zum vorhergehenden Satz: dort triggert eine Änderung von HCAutomatik nicht.
Du musst immer abwägen:
- welchen Auslöser soll es geben?
- Was soll nicht auslösen sondern nur die Entscheidung beeinflussen.
- Was soll auslösen und die Entscheidung beeinflussen.
Und auch hier nochmal der Hinweis: eine
and Verknüpfung von zwei Eventtriggern funktioniert nicht!
Damian hat das wieder nett gesagt - aber durch die Verknüpfung "and 0" wird der gesamte Ausdruck 0 - also nie wahr!
Edit:Zitat[?HCAutomatik:"^on$"]
ist mMn auch immer null!
Man könnte als Merkregel (natürlich gibt es Ausnahmen) sagen, Angaben in Anführungszeichen haben etwas mit Ereignistriggern zu tun, diese stellen keinen Zustand dar, den man sinnvoll mit Vergleichen der Art, eq, ne, ... abfragen könnte.
Zitat von: Otto123 am 22 April 2021, 13:09:16
[?HCAutomatik] eq "on" - fragt den Zustand von HCAutomatik ab wenn irgendetwas das DOIF triggert. Es ist immer wahr wenn HCAutomatik auf on steht.
Danke, gute Erklärung (der gesamte Post!). Wo liegt dann der Unterschied zu Value("HCAutomatik") eq "on" ?
Du fragst jetzt die ganze Doku ab? :)
mMn gibt es da keinen funktionalen Unterschied. Value() ist eine FHEM Perlfunktion die das Internal STATE abfragt -> https://fhem.de/commandref_DE.html#perl
[?Device] tut im DOIF das Gleiche.
Ob es im DOIF einen Unterschied macht (wo und was) kann ich nicht sagen. In FHEM allgemein kannst Du nur Value() im Perlcode verwenden.
:) :) :) Nein, ich frage natürlich NICHT die ganze Doku ab !!! Ich will lediglich verstehen was ich da tue und ob es andere (bessere) Wege gibt. Mittlerweile läuft das auch alles bei mir wunderbar und ich verstehe es auch - dank Deiner und Damian's Hilfe