Zur Ergänzung:
Die Rule funktioniert so natürlich, allerdings ist es umständlich, den Timer beim Öffnen zu erzeugen und dann doch wieder prüfen zu müssen, ob die Tür noch offen ist. Eleganter scheint mir deshalb diese Variante:
Code: Alles auswählen
// globale Variablen werden zu Beginn der rules Datei definiert
var Timer tGarage = null
rule "Garage offen"
when
Item XiaomiAqaraDoorWindowSensor_OpenStatus changed
then
tGarage?.cancel
if(XiaomiAqaraDoorWindowSensor_OpenStatus.state == OPEN)
tGarage = createTimer(now.plusSeconds(10), [ |
sendNotification("meine@email.at","Garage offen!")
])
end
Wenn die Tür geöffnet wird, wird ein evtl. laufender Timer gecancelt und anschließend neu erstellt. Falls die Tür geschlossen wird, wird der Timer ebenfalls gecancelt, aber nicht neu erstellt.
Die Schreibweisen createTimer(abstractInstant) [lambda] und createTimer(abstractInstant, [|lambda]) ergeben das identische Verhalten.
Trotzdem ziehe ich letztere Variante vor, weil so klar ersichtlich ist, dass das Lambda (der auszuführende Code) ein Parameter der Funktion ist.
openHAB5.0.1 stable in einem Debian-Container (trixie, OpenJDK 21 headless runtime) (Proxmox 9.0.11, LXC)