Die Frage ist ja, was machen die Schalter? Wenn die Tür geschlossen ist, ist Sonoffsv3zu ON und wenn die Tür offen ist, ist Sonoffsv2auf ON?
Also ist auf jeden Fall einer der beiden Kontakte OFF (die if-Anweisung ist also immer erfüllt, abgesehen davon, dass sie an der falschen Stelle steht). Weiterhin hast Du diverse Fehler (Leerzeichen an der falschen Stelle, falsche Formulierungen...)
Außerdem denkst Du zu kompliziert. Diese Rule sollte wie gewünscht funktionieren:
Code: Alles auswählen
var Timer tGaragel = null
rule "Garage lueftet"
when
Item Sonoffsv2auf changed or
Item Sonoffsv3zu changed
then
tGarage1?.cancel
if(triggeringItem.state == OFF)
tGaragel = createTimer(now.plusSeconds(30), [ |
sendTelegram("bot1", "Garage wird gelüftet.")
Sonoffsv3.sendCommand(ON)
])
else
Sonoffsv3.sendCommand(OFF)
end
Sobald einer der Kontakte seinen Zustand ändert, triggert die Rule (nicht nur, wenn der Kontakt auf OFF wechselt).
Zu Beginn wird ein Timer gecancelt, falls er läuft (die Schreibweise entspricht dem
if(tGarage1 !== null) tGarage1.cancel)
Falls das triggernde Item den Zustand OFF hat, hat das Tor eine der Endlagen verlassen, also wird der Timer gestartet. Falls das triggernde Item den Zustand ON hat, hat das Tor eine seiner Endlagen erreicht und das Item Sonoffsv3 auf OFF gesetzt. Der Timer läuft zu diesem Zeitpunkt nicht (er wurde je zu Beginn der Rule abgebrochen).
Wenn der Timer endet, bedeutet das, dass sich zwischenzeitlich keine Zustandsänderung der Torkontakte ergeben hat -> das Tor steht zwischen beiden Endlagen, also wird Sonoffsv3 auf ON gesetzt.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet