Auswertung der Bedingungen bei wait-timer

Begonnen von hugomckinley, 18 Juni 2022, 13:58:35

Vorheriges Thema - Nächstes Thema

hugomckinley

Hallo,

Ich habe folgendes DOIF:
(([Dum.Energy:GridFeedIn] > 800
and (([pump_l1_hc:waterAmount] + [pump_l2_hc:waterAmount]) < 135))
and [dum_valve:valve_position] eq "normal"
and [dum_valve:special_function] eq "none"
and [?Pool_Pin25:value] eq "on"
and [?Pool_Pin26:value] eq "off")
(set Pool_Pin26 on)(set Pool_Pin25 off)
DOELSEIF
((([Dum.Energy:GridFeedIn] < 100)
or (([pump_l1_hc:waterAmount] + [pump_l2_hc:waterAmount]) > 135))
and [?dum_valve:valve_position] eq "normal"
and [?dum_valve:special_function] eq "none"
and [?Pool_Pin26:value] eq "on"
and [?Pool_Pin25:value] eq "off"
)
(set Pool_Pin25 on)(set Pool_Pin26 off)
DOELSE

und folgenden wait-timer:
360,1:540,1

Problem: Im ersten DOIF-Zweig wird zwar set Pool_Pin26 on ausgeführt, jedoch das set Pool_Pin25 off anscheinend nicht.

Kann es sein, dass die Bedingung vor dem Ausführen des zweiten Kommandos noch einmal geprüft wird? Was ja dann nicht mehr stimmt, wegen [?Pool_Pin26:value] eq "off"

Grüße
Hugo
----------------------------------------------------
FHEM in TrueNAS-Jail
HMLGW + HM-Komponenten, alexa-fhem, Modbus/TCP, Modbus/RS485, LG-WebOS, Firmata, 1wire, ESP-RGBWW, DaikinAC per WLAN, Shellys, Denon AVR, Fronius WR, Helios Wohnraumlüftung, ...

Damian

Zitat von: hugomckinley am 18 Juni 2022, 13:58:35
Hallo,

Ich habe folgendes DOIF:
(([Dum.Energy:GridFeedIn] > 800
and (([pump_l1_hc:waterAmount] + [pump_l2_hc:waterAmount]) < 135))
and [dum_valve:valve_position] eq "normal"
and [dum_valve:special_function] eq "none"
and [?Pool_Pin25:value] eq "on"
and [?Pool_Pin26:value] eq "off")
(set Pool_Pin26 on)(set Pool_Pin25 off)
DOELSEIF
((([Dum.Energy:GridFeedIn] < 100)
or (([pump_l1_hc:waterAmount] + [pump_l2_hc:waterAmount]) > 135))
and [?dum_valve:valve_position] eq "normal"
and [?dum_valve:special_function] eq "none"
and [?Pool_Pin26:value] eq "on"
and [?Pool_Pin25:value] eq "off"
)
(set Pool_Pin25 on)(set Pool_Pin26 off)
DOELSE

und folgenden wait-timer:
360,1:540,1

Problem: Im ersten DOIF-Zweig wird zwar set Pool_Pin26 on ausgeführt, jedoch das set Pool_Pin25 off anscheinend nicht.

Kann es sein, dass die Bedingung vor dem Ausführen des zweiten Kommandos noch einmal geprüft wird? Was ja dann nicht mehr stimmt, wegen [?Pool_Pin26:value] eq "off"

Grüße
Hugo
Die Bedingung wird nicht noch mal ausgewertet, die Sequenz wird allerdings unterbrochen, wenn durch einen Trigger ein anderer Fall eintritt hier z. B. cmd_2 oder cmd_3.

Was bei dir passiert, kann ich hier nicht sagen.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

hugomckinley

#2
Danke für den Hinweis.
Das erklärt die Sache, denn sobald der Pin umgeschaltet hat, geht er in das leere DOELSE und somit wird der zweite Befehl nicht mehr abgearbeitet in der Kette.

Das Auskommentieren der Bedingung des Pins aus dem jeweils ersten Teil, hat das Problem anscheinend behoben, somit dürfte es der Grund sein, obwohl es kein Trigger sein dürfte durch das Fragezeichen.
Es könnte natürlich etwas anderes auch triggern, aber das wäre schon ein Zufall wenn das immer in der Sekunde wäre, da die Werte die da kommen frühestens alle 60 sec. aktualisiert werden.

Da muss ich mir noch was einfallen lassen, aber jetzt weiß ich wenigstens woran es liegt.
----------------------------------------------------
FHEM in TrueNAS-Jail
HMLGW + HM-Komponenten, alexa-fhem, Modbus/TCP, Modbus/RS485, LG-WebOS, Firmata, 1wire, ESP-RGBWW, DaikinAC per WLAN, Shellys, Denon AVR, Fronius WR, Helios Wohnraumlüftung, ...

Damian

Eine reine Abfrage mit Fragezeichen wird zwar ausgewertet, aber es muss eines der Trigger den DOELSE-Fall auslösen. Das auslösende Device kann man in den Readings ggf. nachschauen.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

hugomckinley

Da ich da nicht wirklich was gesehen habe (da habe ich aber auch nicht bewußt drauf geachtet), sieht der nächste Versuch so aus:
(Nur mehr ein Befehl mit Verzögerung durch sleep)

(([Dum.Energy:GridFeedIn] > 800
and (([pump_l1_hc:waterAmount] + [pump_l2_hc:waterAmount]) < 135))
and [dum_valve:valve_position] eq "normal"
and [dum_valve:special_function] eq "none"
and [?Pool_Pin25:value] eq "on"
and [?Pool_Pin26:value] eq "off")
(set Pool_Pin26 on; sleep 1; set Pool_Pin25 off)
DOELSEIF
((([Dum.Energy:GridFeedIn] < 100)
or (([pump_l1_hc:waterAmount] + [pump_l2_hc:waterAmount]) > 135))
and [?dum_valve:valve_position] eq "normal"
and [?dum_valve:special_function] eq "none"
and [?Pool_Pin26:value] eq "on"
and [?Pool_Pin25:value] eq "off")
(set Pool_Pin25 on; sleep 1; set Pool_Pin26 off)
DOELSE


Da mir das nicht bewußt war, dass die Befehlskette auch unterbrochen werden kann (das habe ich bei der Lektüre der Commandref nicht realisiert, aber jetzt ;-), muss ich es ohnehin so machen, da die Schaltvorgänge teilweise unteilbar sein müssen.

Danke!
Hugo
----------------------------------------------------
FHEM in TrueNAS-Jail
HMLGW + HM-Komponenten, alexa-fhem, Modbus/TCP, Modbus/RS485, LG-WebOS, Firmata, 1wire, ESP-RGBWW, DaikinAC per WLAN, Shellys, Denon AVR, Fronius WR, Helios Wohnraumlüftung, ...