FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: knorxi am 10 Februar 2022, 15:29:42

Titel: [Gelöst] DOIF (Perl-Modus) mit DOIF_Readings triggert ungewollt
Beitrag von: knorxi am 10 Februar 2022, 15:29:42
Ich will ein "DOIF_Readings" einsetzen (im Code unten "ok" genannt) um ungewollte Trigger des DOIFs zu verhindern, so wie im Beispiel des Wiki beschrieben: https://wiki.fhem.de/wiki/DOIF/Perl-Modus#F.C3.BCr_Umsteiger_vom_DOIF-FHEM-Modus (https://wiki.fhem.de/wiki/DOIF/Perl-Modus#F.C3.BCr_Umsteiger_vom_DOIF-FHEM-Modus)
Das DOIF habe ich mit einem Temperaturfühler verknüpft.
defmod doif_test2 DOIF { # benutze DOIF_Readings um ungewollte Trigger zu verhindern\
  if ([$SELF:ok] eq "1") \
  {\
    Log 1, "if-Zweig: SELF:ok: ".[$SELF:ok]." temperature: ".[AussenTemp.GrosserBalkon:temperature];;\
  }\
  else \
  {\
    Log 1, "else-Zweig: SELF:ok: ".[$SELF:ok]." temperature: ".[AussenTemp.GrosserBalkon:temperature];;\
  }\
}
attr doif_test2 DOIF_Readings ok: ([AussenTemp.GrosserBalkon:temperature] > 12 ? "1" : "0")
attr doif_test2 event-on-change-reading .*


Leider bekomme ich im Log folgende Einträge, die zeigen, dass der If- oder Else-Zweig bei jeder Temperaturänderung durchlaufen wird, obwohl sich "DOIF_Readings" "ok" nicht ändert.
2022.02.10 14:18:40 1: if-Zweig: SELF:ok: 1 temperature: 12.5
2022.02.10 14:20:06 1: if-Zweig: SELF:ok: 1 temperature: 12.4
2022.02.10 14:22:58 1: if-Zweig: SELF:ok: 1 temperature: 12.3
2022.02.10 14:25:50 1: if-Zweig: SELF:ok: 1 temperature: 12.4
2022.02.10 14:27:59 1: if-Zweig: SELF:ok: 1 temperature: 12.3
2022.02.10 14:34:26 1: if-Zweig: SELF:ok: 1 temperature: 12.2
2022.02.10 14:35:52 1: if-Zweig: SELF:ok: 1 temperature: 12.1
2022.02.10 14:38:01 1: if-Zweig: SELF:ok: 1 temperature: 12.0
2022.02.10 14:38:01 1: else-Zweig: SELF:ok: 0 temperature: 12.0
2022.02.10 14:42:19 1: else-Zweig: SELF:ok: 0 temperature: 11.9
2022.02.10 14:44:28 1: else-Zweig: SELF:ok: 0 temperature: 11.8

Außerdem wird bei Temperaturänderung von >12 auf 12 erst der If- und dann der Else-Zweig aufgerufen.
2022.02.10 14:38:01 1: if-Zweig: SELF:ok: 1 temperature: 12.0
2022.02.10 14:38:01 1: else-Zweig: SELF:ok: 0 temperature: 12.0

Das Verhalten verstehe ich nicht. Könntet ihr mich bitte aufklären, wo mein Denkfehler liegt? :-[
Oder wie ich das Verhalten abstellen kann. :D
Vielen Dank
Titel: Antw:DOIF (Perl-Modus) mit DOIF_Readings Trigger ungewollt
Beitrag von: Damian am 10 Februar 2022, 16:37:50
Du hast dir einen zusätzlichen Trigger mit [AussenTemp.GrosserBalkon:temperature] eingebaut, den musst du mit ? deaktivieren.

also

[?AussenTemp.GrosserBalkon:temperature]

angeben.
Titel: Antw:DOIF (Perl-Modus) mit DOIF_Readings Trigger ungewollt
Beitrag von: knorxi am 10 Februar 2022, 17:07:20
Vielen Dank!  :-* Das war's.
Wenn also irgendeine Auswertung X mit [] irgendwo im Code (also nicht nur in der Bedingung) steht, dann wird das DOIF getriggert, wenn für X ein Event eintrifft, oder?
Ist ja schon ein bisschen fies  ;)
Titel: Antw:DOIF (Perl-Modus) mit DOIF_Readings Trigger ungewollt
Beitrag von: Damian am 10 Februar 2022, 17:12:50
Zitat von: knorxi am 10 Februar 2022, 17:07:20
Vielen Dank!  :-* Das war's.
Wenn also irgendeine Auswertung X mit [] irgendwo im Code (also nicht nur in der Bedingung) steht, dann wird das DOIF getriggert, wenn für X ein Event eintrifft, oder?
Ist ja schon ein bisschen fies  ;)

Du bist hier im Perlmodus, da braucht man nicht unbedingt eine Bedingung, wie z. B. so etwas:

DOIF {set_State([mydummy:state]+1)}
Titel: Antw:[Gelöst] DOIF (Perl-Modus) mit DOIF_Readings Trigger ungewollt
Beitrag von: knorxi am 10 Februar 2022, 17:41:49
Aha, wieder etwas gelernt  ;D.
Jetzt kenne ich das Verhalten und es erklärt mir auch manch ,,komisches" Verhalten, dass ich mir eingebaut habe ;)
Werde ich auch sicher nicht wieder vergessen :)