DOIF - Perl: Triggert nicht obwohl sich Wert ändert

Begonnen von bmwfan, 15 August 2025, 13:41:16

Vorheriges Thema - Nächstes Thema

bmwfan

Hallo,
da meine Lüftungssteuerung bei Änderung des Feuchtigkeitswertes nicht triggert habe ich ein Test-DOIF erstellt, um verschiedene Möglichkeiten zu testen und den Fehler zu finden. Leider bin ich trotz Durcharbeitens der Commandref, Internetsuche, Bemühen einer KI und vieler Versuche nicht erfolgreich gewesen. Ich hoffe, dass jemand aus dem Forum mir auf die Sprünge helfen kann.

Anbei mein Test-DOIF:
defmod di_Test DOIF {\
# Definitionen\
my $Device = $hash->{NAME};; # kann auch mit $hash->{NAME} gesetzt werden.\
my $HumIst = ReadingsNum("du_Test", "state", 60);; # Versuch 2, um sicher zu gehen dass bei Wertänderung ein Event ausgelöst wird\
# my $HumIst = ReadingsNum("HmIP_BWTH_000C9BE99C66F8_9", "humidity", 60);; # Versuch 1 wie in Lüftersteuerung\
my $HumSchwelle = ReadingsNum("HmIP_BWTH_000C9BE99C66F8_9", "humidity20minSchwelle", 58);;\
# Programm\
Log3($Device, 3, "$Device: HumIst: $HumIst");;\
if ([$HumIst] > [$HumSchwelle]) {\
Log3($Device, 3, "$Device: HumIst: $HumIst;; HumSchwelle: $HumSchwelle");;\
  } #\
} # Anweisungssequenz DOIF
attr di_Test disable 0
attr di_Test room 9.8.1_DOIF,Test
attr di_Test verbose 5

setstate di_Test initialized
setstate di_Test 2025-08-15 13:21:24 mode enabled
setstate di_Test 2025-08-15 13:21:25 state initialized

1.te Abfrage war: if ($HumIst > $HumSchwelle) {\
Trigger nur, wenn ich den Block manuell ausführe. Nicht bei Wertänderung von $HumIst oder $HumSchwelle

2.te Abfrage: if ([$HumIst] > [$HumSchwelle]) {\
Nach Lesen der Commandref war ich der Meinung, dass die eckigen Klammern zum Erkennen der Wertänderung notwendig sind.
Leider keine Änderung zu 1.

3.te Abfrage: if ([ReadingsNum("du_Test", "state", 60)] > [$HumSchwelle]) {\
Hatte dann die Zuweisung zu my $HumIst in Verdacht. Leider keine Änderung zu 1.

4.te Abfrage: if ([du_Test:state] > [$HumSchwelle]) {\
Triggert das erste Log: Log3($Device, 3, "$Device: HumIst: $HumIst"); nicht aber das 2.te Log: Log3($Device, 3, "$Device: HumIst: $HumIst;; HumSchwelle: $HumSchwelle");;\
=> DOIF hat zwar getriggert, aber obwohl du_Test:state mit dem Wert 80 über $HumSchwelle mit Wert 76 liegt, wurde das if nicht ausgelöst.

5.te Abfrage: if ([du_Test:state] > 70) {\
Dies funktioniert. Beide Log-Einträge sind da!

Ist es generell nicht möglich, dass mit readingsNum oder readingsVal erstellte Werte triggern oder liegt es an der Zuweisung mit my $...?

Bitte um Info zur Lösung des Problemes.

Besten Dank und Grüße

Jürgen

P.S.: Ich finde nicht mehr, wie ich bei Lösen des Problems in den Betreff [Gelöst] eintragen kann. Wie geht das denn?
Synology DS720+ mit Docker-Container und Haupt-FHEM, HM-LAN, Jalousienaktoren HmWired, Shelly-Devices; Raspi 3B+ mit piVCCU ohne FHEM-Instanz, CUL, JeeLink; Raspi 3B+ mit FHEM und HMUARTUSB,  Raspi 3B+ mit HMUARTGPIO, 1-wire, ebusd