Autor Thema: Auswertung der Bedingungen bei wait-timer  (Gelesen 294 mal)

Offline hugomckinley

  • Full Member
  • ***
  • Beiträge: 182
Auswertung der Bedingungen bei wait-timer
« 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
----------------------------------------------------
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, ...

Offline Damian

  • Moderator
  • Hero Member
  • ***
  • Beiträge: 9750
Antw:Auswertung der Bedingungen bei wait-timer
« Antwort #1 am: 18 Juni 2022, 17:12:20 »
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

Offline hugomckinley

  • Full Member
  • ***
  • Beiträge: 182
Antw:Auswertung der Bedingungen bei wait-timer
« Antwort #2 am: 18 Juni 2022, 20:39:15 »
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.
« Letzte Änderung: 18 Juni 2022, 20:49:30 von hugomckinley »
----------------------------------------------------
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, ...

Offline Damian

  • Moderator
  • Hero Member
  • ***
  • Beiträge: 9750
Antw:Auswertung der Bedingungen bei wait-timer
« Antwort #3 am: 18 Juni 2022, 20:58:14 »
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

Offline hugomckinley

  • Full Member
  • ***
  • Beiträge: 182
Antw:Auswertung der Bedingungen bei wait-timer
« Antwort #4 am: 18 Juni 2022, 21:41:51 »
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, ...

 

decade-submarginal