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