Rule mit delay funktioniert nicht

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
Airmaxchen
Beiträge: 33
Registriert: 29. Jan 2019 10:54
Answers: 0

Rule mit delay funktioniert nicht

Beitrag von Airmaxchen »

Ahoi!

Ich habe mir eine Rule erstellt, die mir nach einiger Zeit melden soll, dass ich das Garagentor offen gelassen habe.

Code: Alles auswählen

rule "Garage offen"
    when
        Item XiaomiAqaraDoorWindowSensor_OpenStatus changed to OPEN
    then 
    createTimer(now.plusSeconds(10)) [
                    if (XiaomiAqaraDoorWindowSensor_OpenStatus == OPEN) { 
                        sendNotification("meine@email.at","Garage offen!")
    	             }]
end
Ohne den Timer funktioniert sie aber ich möchte erst erinnert werden wenn das Tor länger offen ist. (Die eingestellten 10 Sekunden sind nur zu Testzwecken)

Ich bekomme im events.log auch keine Fehlermeldung dazu.
Was mache ich falsch?

mamoel
Beiträge: 137
Registriert: 12. Jan 2019 19:56
Answers: 0

Re: Rule mit delay funktioniert nicht

Beitrag von mamoel »

Ich habe noch nie die Timerfunktion benutzt, aber ich glaube das müsste so aussehen:

Code: Alles auswählen

createTimer(now.plusSeconds(10), [|
	if (XiaomiAqaraDoorWindowSensor_OpenStatus == OPEN) { 
	sendNotification("meine@email.at","Garage offen!")
        }
])
openHAB 2.5 (M1) in Docker auf NAS: Synology DS418play
mit Homematic, Hue, TP-Link, AVM Fritz!, FritzboxTR064, Nuki, Amazon Echo, Sonos, Harmony, zigbee2mqtt, Denon/Marantz, ...

Airmaxchen
Beiträge: 33
Registriert: 29. Jan 2019 10:54
Answers: 0

Re: Rule mit delay funktioniert nicht

Beitrag von Airmaxchen »

Hat leider auch nicht funktioniert.

mamoel
Beiträge: 137
Registriert: 12. Jan 2019 19:56
Answers: 0

Re: Rule mit delay funktioniert nicht

Beitrag von mamoel »

Könntest Du mal testweise ins Log schreiben, einmal direkt nach dem 'then' und einmal vor dem 'if' innerhalb des Timers?
openHAB 2.5 (M1) in Docker auf NAS: Synology DS418play
mit Homematic, Hue, TP-Link, AVM Fritz!, FritzboxTR064, Nuki, Amazon Echo, Sonos, Harmony, zigbee2mqtt, Denon/Marantz, ...

Airmaxchen
Beiträge: 33
Registriert: 29. Jan 2019 10:54
Answers: 0

Re: Rule mit delay funktioniert nicht

Beitrag von Airmaxchen »

Ich als ziemlicher Anfänger muss leider sagen:

Wie mache ich das?

mamoel
Beiträge: 137
Registriert: 12. Jan 2019 19:56
Answers: 0

Re: Rule mit delay funktioniert nicht

Beitrag von mamoel »

An den besagten Stellen einfach jeweils eine Zeile einfügen:

Code: Alles auswählen

logInfo("Garagentimer", "Garage offen - vor Timer")
und

Code: Alles auswählen

logInfo("Garagentimer", "Garage offen - im Timer")
Der Text ist im Prinzip egal. Hauptsache man sieht, ob er überhaupt das Öffnen des Garagentors erkennt und falls ja, ob der Timer funktioniert.
openHAB 2.5 (M1) in Docker auf NAS: Synology DS418play
mit Homematic, Hue, TP-Link, AVM Fritz!, FritzboxTR064, Nuki, Amazon Echo, Sonos, Harmony, zigbee2mqtt, Denon/Marantz, ...

mamoel
Beiträge: 137
Registriert: 12. Jan 2019 19:56
Answers: 0

Re: Rule mit delay funktioniert nicht

Beitrag von mamoel »

Der Fehler liegt aber wahrscheinlich woanders. Ersetze den Code mal auf diese Weise:

Code: Alles auswählen

XiaomiAqaraDoorWindowSensor_OpenStatus.state == OPEN
Also mit einem '.state'.
openHAB 2.5 (M1) in Docker auf NAS: Synology DS418play
mit Homematic, Hue, TP-Link, AVM Fritz!, FritzboxTR064, Nuki, Amazon Echo, Sonos, Harmony, zigbee2mqtt, Denon/Marantz, ...

Airmaxchen
Beiträge: 33
Registriert: 29. Jan 2019 10:54
Answers: 0

Re: Rule mit delay funktioniert nicht

Beitrag von Airmaxchen »

Perfekt!
Das war es. Das .state hat gefehlt.
Herzlichen Dank!

mamoel
Beiträge: 137
Registriert: 12. Jan 2019 19:56
Answers: 0

Re: Rule mit delay funktioniert nicht

Beitrag von mamoel »

Ja, ich glaube da sind schon Einige (mich eingeschlossen) darauf reingefallen.
openHAB 2.5 (M1) in Docker auf NAS: Synology DS418play
mit Homematic, Hue, TP-Link, AVM Fritz!, FritzboxTR064, Nuki, Amazon Echo, Sonos, Harmony, zigbee2mqtt, Denon/Marantz, ...

Benutzeravatar
udo1toni
Beiträge: 15307
Registriert: 11. Apr 2018 18:05
Answers: 246
Wohnort: Darmstadt

Re: Rule mit delay funktioniert nicht

Beitrag von udo1toni »

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.0 stable in einem Debian-Container (bookworm) (Proxmox 9.0.3, LXC)

Antworten