[Gelöst] DOIF (Perl-Modus) mit DOIF_Readings triggert ungewollt

Begonnen von knorxi, 10 Februar 2022, 15:29:42

Vorheriges Thema - Nächstes Thema

knorxi

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
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

Damian

Du hast dir einen zusätzlichen Trigger mit [AussenTemp.GrosserBalkon:temperature] eingebaut, den musst du mit ? deaktivieren.

also

[?AussenTemp.GrosserBalkon:temperature]

angeben.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

knorxi

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  ;)

Damian

#3
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)}
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

knorxi

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 :)