Die Rule ist so nicht gut.
Was nun konkret den Fehler auslöst, weiß ich auch nicht, aber wie gesagt ist die Rule ohnehin nicht gut. openHAB Rules arbeiten eventbasiert. Dazu stellt openHAB 5 Threads zur Verfügung, in denen Rules ablaufen können. Deine Rule blockiert einen Thread, solange das Fenster geöffnet ist. Beim Schließen wird gar die Rule ein zweites Mal ausgeführt, parallel zum ersten Thread (auch wenn die Rule dann exakt nichts tut).
Der elegantere Ansatz ist folgender:
Code: Alles auswählen
// Globale Variablen werden zu Beginn der Datei definiert
var Timer tWindow = null // Timervariable global definieren
rule "WC_Fenster_offen"
when
Item Fenster_Gaeste_WC_LEQ0405783_1_State changed // Zustand Fensterkontakt hat sich geändert
then
tWindow?.cancel // Falls Timer vorhanden, abbrechen
if(Fenster_Gaeste_WC_LEQ0405783_1_State.state == OPEN) // Falls Fenster offen
tWindow = createTimer(now.plusMinutes(10),[| // Timer starten (Ablauf nach 10 Minuten)
playSound("Es_sind_noch_Fenster_offen.mp3") // Nachricht abspielen
tWindow.reschedule(now.plusMinutes(10)) // Timer erneut planen (Ablauf nach 10 Minuten)
])
end
Wen das Fenster geöffnet oder geschlossen wird, löst die Rule aus. In beiden Fällen wird ein eventuell laufender Timer abgebrochen.
Falls das Fenster geöffnet wurde, wird ein neuer Timer angelegt. Nach Ablauf des Timers wird das mp3-File abgespielt und der Timer erneut geplant.
Soll das Ganze variabel gestaltet werden (Variable wartezeit aus Deiner Rule) so ist es wichtig, die Variable als Integer zu definieren, da .plusMinutes(int) zwingend ein Argument vom Typ Integer erwartet.
Im Unterschied zur While-Schleife mit Thread::sleep() belegt die Rule nur wenige Millisekunden einen Thread (eben die Zeit, die sie braucht, den Scheduler zu füttern). Der Scheduler benötigt erst mit Ablauf des Timers einen Thread, um den Code auszuführen (wieder nur wenige Millisekunden, denn playsound läuft asynchron in einem eigenen Thread).
Da wir das Thema gerade mehrere Tage in einem anderen Thread hatten: welcher Itemtyp verbirgt sich hinter
Fenster_Gaeste_WC_LEQ0405783_1_State? Sollte es ein Contact Item sein, ist alles prima und die Rule sollte so funktionieren. Sollte es ein String Item sein, müsste das Wort OPEN in Anführungszeichen gesetzt werden.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet