Zustand nach Schaltvorgang prüfen und erneut auslösen

Begonnen von hugomckinley, 29 Juli 2025, 19:55:00

Vorheriges Thema - Nächstes Thema

hugomckinley

Hallo,
ich habe folgendes notify, das einen mehrstufigen Schaltvorgang auslöst. Das aufwendige Timing kommt daher, dass hier eine Pumpe zwischen zwei unterschiedlichen Versorgungen hin- und hergeschaltet wird. Dazwischen muss die Pumpe kurz stehen, damit die Induktion nicht auf die andere Versorgung wirkt.
dum_valve:pool_kurz:.* {
    if($EVTPART1 eq "on" && ReadingsVal("Shelly_Plug_S_1","state","on") eq "off"){
        fhem("set PwSw_Schalter off; sleep 3;{if(ReadingsAge(\"PwSw_Schalter\",\"state\",0)<4 && ReadingsVal(\"PwSw_Schalter\",\"state\",\"on\") eq \"off\"){fhem(\"set Shelly_Plug_S_1 on\")}}; sleep 5; set PwSw_Schalter on");
    }elsif($EVTPART1 eq "off" && ReadingsVal("Shelly_Plug_S_1","state","off") eq "on"){
        fhem("set PwSw_Schalter off; sleep 3;{if(ReadingsAge(\"PwSw_Schalter\",\"state\",0)<4 && ReadingsVal(\"PwSw_Schalter\",\"state\",\"on\") eq \"off\"){fhem(\"set Shelly_Plug_S_1 off\")}}; sleep 5; set PwSw_Schalter on");
    }else{
    Log3 (qq{Pool}, 4, qq{Notify Pool Kurz - parameter is not on or off});
    }
}

Manchmal passiert es, dass der Schaltvorgang nicht ausgeführt wird, obwohl das notify getriggert wird.

Meine Frage nun:
Ich möchte, dass nach z.B. 10 Sekunden geprüft wird, ob der Zustand sich passend geändert hat und wenn nicht, soll erneut geschaltet werden.
Ich bin glaube ich schon so betriebsblind, dass ich keine einfache(re) Lösung, außer eine weitere Verschachtelung FHEM/Perl sehe.

Hat jemand einen Tipp für mich?

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

passibe

Vermutlich führen hier, wie so oft, verschiedene Wege nach Rom. Aber:

Ich glaube, ich würde statt notify und dieser ganzen Verschachtelung hier ein DOIF mit dem wait-Attribut bemühen.
Die Zustandsüberwachung kannst du dort dann ebenfalls einbauen.

Ist alles in der commandref beschrieben und dürfte wohl auch den Code erheblich lesbarer machen, vor allem, weil du vermutlich dann überall mit FHEM-IF + set magic arbeiten kannst und nicht mehr die Readings*-Funktionen brauchst.

Wenn du dann noch Fragen hast, einfach den Beitrag in das DOIF-Unterforum verschieben und dann kann man dir dort nochmal helfen.