Item Status abfragen
Moderator: seppy
-
- Beiträge: 6
- Registriert: 27. Mär 2021 18:48
Item Status abfragen
Ich möchte die Einschaltzeit eine Items überwachen. wird ein Item eingeschaltet (externer Sensor o.ä.) möchte ich ermitteln ob er z.B. >2 sekunden eingeschaltet ist. Wie kann ich das integrieren?
- udo1toni
- Beiträge: 13944
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Item Status abfragen
Es kommt drauf an, was Du auswerten möchtest.
Geht es nur darum, eine Meldung auszugeben, sobald das Item länger als 2 Sekunden eingeschaltet ist, so sähe das so aus:
Der Timer wird gestartet, wenn das Item auf ON gewechselt hat. Der Timer wird gecancelt, wenn das Status des Items wieder wechselt.
Läuft der Timer ab, so wird eine Meldung generiert (natürlich kann man dort auch beliebigen anderen Code einbauen).
Geht es nur darum, eine Meldung auszugeben, sobald das Item länger als 2 Sekunden eingeschaltet ist, so sähe das so aus:
Code: Alles auswählen
var Timer tOnTime = null
rule "alarm wenn mehr als 2 sek ON"
when
Item myMonitoredItem changed
then
tOnTime?.cancel
if(newState == ON)
tOnTime = createTimer(now.plusSeconds(2),[|
logInfo("alarm","Item myMonitoredItem länger als 2 Sekunden ON")
])
end
Läuft der Timer ab, so wird eine Meldung generiert (natürlich kann man dort auch beliebigen anderen Code einbauen).
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet
-
- Beiträge: 6
- Registriert: 27. Mär 2021 18:48
Re: Item Status abfragen
Danke für die Hilfe. Das habe ich gesucht. Hab den Code zwar noch nicht verstanden, werde mich aber bemühen das zu ändern.
- udo1toni
- Beiträge: 13944
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Item Status abfragen
der Code ist eigentlich ganz gut lesbar:
definiere eine Globale Variable, die einen Zeiger auf einen Timer hält. (global, weil außerhalb der Rules)
Kopf der Rule mitsamt Triggern, also wann die Rule ausgelöst werden soll. In diesem Fall bei jeder Statusänderung des Items myMonitoredItem
Falls (das ist das ?) die Variable tOnTime einen Zeiger auf einen Timer enthält, stoppe den Timer und lösche ihn aus dem Scheduler.
Falls der neue Status (des Items, welches die Rule getriggert hat) ON ist
Lege einen Timer an und weise der Variablen tOnTime den Zeiger auf den Timer zu. Der Timer hat folgende Eigenschaften:
zwei Sekunden von nun an (also "in 2 Sekunden")
Beginn des Codeblocks, der ausgeführt wird, wennn der Timer abläuft.
Gebe eine Logmeldung aus, der Logger heißt alarm, die Meldung lautet "Item myMonitoredItem länger als 2 Sekunden ON".
End des Codeblocks, der vom Timer ausgeführt wird und Ende der createTimer-Anweisung.
Ende der Rule.
Code: Alles auswählen
var Timer tOnTime = null
Code: Alles auswählen
rule "alarm wenn mehr als 2 sek ON"
when
Item myMonitoredItem changed
then
Code: Alles auswählen
tOnTime?.cancel
Code: Alles auswählen
if(newState == ON)
Code: Alles auswählen
tOnTime = createTimer(
Code: Alles auswählen
now.plusSeconds(2)
Code: Alles auswählen
,[|
Code: Alles auswählen
logInfo("alarm","Item myMonitoredItem länger als 2 Sekunden ON")
Code: Alles auswählen
])
Code: Alles auswählen
end
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet
-
- Beiträge: 6
- Registriert: 27. Mär 2021 18:48
Re: Item Status abfragen
Super erklärt. Denke das ich das jetzt verstanden habe. Das mit dem Fragezeichen hat mich verwirrt. Danke.
- udo1toni
- Beiträge: 13944
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Item Status abfragen
Das mit dem Fragezeichen ist eine schicke Kurzform von
Das gibt es auch an anderen Stellen in der Rules DSL.
Code: Alles auswählen
if(tOnTime !== null) tOnTime.cancel
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet