FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: rallye am 22 April 2021, 11:38:12

Titel: [gelöst/verstanden] [?HCAutomatik] eq "on" vs. [?"HCAutomatik:on"]
Beitrag 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.
Titel: Antw:[?HCAutomatik] eq "on" vs. [?"HCAutomatik:on"]
Beitrag von: Damian am 22 April 2021, 11:59:57
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.
Titel: Antw:[?HCAutomatik] eq "on" vs. [?"HCAutomatik:on"]
Beitrag von: rallye am 22 April 2021, 13:05:30
Danke, hilft mir ordentlich weiter !

Zusatzfrage:

wie sieht es mit [?HCAutomatik:"^on$"] aus ? Ist das sinnvoller als [?HCAutomatik] eq "on"] ?
Titel: Antw:[?HCAutomatik] eq "on" vs. [?"HCAutomatik:on"]
Beitrag von: Otto123 am 22 April 2021, 13:09:16
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:

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!
Titel: Antw:[?HCAutomatik] eq "on" vs. [?"HCAutomatik:on"]
Beitrag von: Damian am 22 April 2021, 13:15:00
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.
Titel: Antw:[?HCAutomatik] eq "on" vs. [?"HCAutomatik:on"]
Beitrag von: rallye am 22 April 2021, 16:10:08
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" ?
Titel: Antw:[?HCAutomatik] eq "on" vs. [?"HCAutomatik:on"]
Beitrag von: Otto123 am 22 April 2021, 16:33:33
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.
Titel: Antw:[?HCAutomatik] eq "on" vs. [?"HCAutomatik:on"]
Beitrag von: rallye am 23 April 2021, 13:30:43
 :) :) :) 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