DSL Rule immer wieder Probleme

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
maddin2020
Beiträge: 30
Registriert: 29. Sep 2019 11:21
Answers: 0

DSL Rule immer wieder Probleme

Beitrag von maddin2020 »

Hallo zusammen,

ich habe recht einfache Rules die bei mir eine Pushover Nachricht verschicken. Leider habe ich immer wieder Probleme mit den Rules und komme nicht weiter.

Code: Alles auswählen

//-------------  Büro --------------------
val bueroactions = getActions("pushover", "pushover:pushover-account:account")


rule "FensterBueroGeoffnet"
    when
        Item Fenster_Buero changed from CLOSED to OPEN
    then
        bueroactions.sendMessage("Fenster Büro wurde geöffnet","Home")
end

rule "FensterBueroGeschlossen"
    when
        Item Fenster_Buero changed from OPEN to CLOSED
    then
        bueroactions.sendMessage("Fenster Büro wurde geschlossen","Home")
end
Ich bekomme immer folgenden Fehlercode angezeigt.

Code: Alles auswählen

2022-07-09 09:34:21.466 [ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID '205_Buero-1' failed: null in 205_Buero
2022-07-09 09:34:21.972 [ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID '205_Buero-2' failed: null in 205_Buero
Kommentiere ich allerdings die Punkte mit dem Zugriff auf die Variable bueroactions aus und danach wieder ein läuft das ganze wieder eine Zeit lang. Was mach ich dort falsch anscheinend wird auf die Variable bueroactions nichts oder zu spät zugewiesen.

Danke vorab für eure Hilfe

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

Re: DSL Rule immer wieder Probleme

Beitrag von udo1toni »

Du müsstest die Definition der Variablen nicht mal ausklammern, es würde schon reichen, ein touch auf die Datei zu schicken.
Das Problem ist, dass Du den Handle auf die pushover Action als globale Konstante definiert hast. Dadurch wird dieser Handle ausschließlich beim beim (Re-)load der rules-Datei gesetzt. Der Handle ist aber nicht unbedingt fix, weshalb es besser ist, diesen in der Rule selbst zu definieren. Du brauchst außerdem nur eine Rule :)

Code: Alles auswählen

rule "Fenster Büro"
when
    Item Fenster_Buero changed
then
    val bueroactions = getActions("pushover", "pushover:pushover-account:account")
    var String strState = "wurde "
    if(previousState == NULL)
        strState = "ist "

    if(newState == OPEN)
        strState = strState + "geöffnet."
    else
        strState = strState + "geschlossen."

    bueroactions.sendMessage("Fenster Büro " + strState,"Home")
end
Die Rule löst aus, wenn sich der Status von Fenster_Buero geändert hat.
Es gibt vier verschiedene Möglichkeiten. Die ersten beiden Möglichkeiten ergeben sich daraus, dass der Status vorher NULL war. Dies geschieht gewöhnlich, wenn openHAB neu gestartet wurde.
Der neue Zustand ist dann entweder offen oder geschlossen, was auch den letzten beiden Zuständen entspricht, denen aber nicht NULL als Status voranging.
Die Rule definiert also über die Variable strState den Textbaustein "wurde ". Falls der alte Status NULL war, wird der Textbaustein durch "ist " ersetzt.
Im Anschluss wird der Textbaustein ergänzt. Falls der aktuelle Zustand OPEN ist, wird das Wort "geöffnet." ergänzt, sonst "geschlossen."

Als Meldung gibt es dann vier verschiedene Meldungen:
"Fenster Büro ist geöffnet."
"Fenster Büro ist geschlossen."
"Fenster Büro wurde geöffnet."
"Fenster Büro wurde geschlossen."

Wenn Du an den ersten beiden Meldungen nicht interessiert bist, kannst Du die Zeile strState = "ist " durch die Zeile return; ersetzen. Dann wird die Textausgabe unterdrückt, wenn der alte Status NULL war. Es ist natürlich sinnvoll, diesen Code ganz zu Anfang der Rule zu schreiben, damit der Handle nicht unnötig gesetzt werden muss. Der wichtige Teil ist aber vor allem, dass der Handle innerhalb der Rule gesetzt wird, nur so ist sichergestellt, dass der Handle auf jeden Fall gültig ist.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

maddin2020
Beiträge: 30
Registriert: 29. Sep 2019 11:21
Answers: 0

Re: DSL Rule immer wieder Probleme

Beitrag von maddin2020 »

ein Traum danke Udo für die Hilfe. Ich sehe das nicht als selbstverständlich so schnell und kompetent Hilfe zu bekommen. GROSSEN RESPEKT - DANKE

Antworten