Item Status abfragen

Allgemeine Fragen zum Thema "Smart Home" und Entscheidungshilfen

Moderator: seppy

Antworten
Servomaster
Beiträge: 6
Registriert: 27. Mär 2021 18:48

Item Status abfragen

Beitrag von Servomaster »

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?

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

Re: Item Status abfragen

Beitrag von udo1toni »

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:

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
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).
openHAB2.5.10 in einem Debian-Container (Proxmox, LXC)

Servomaster
Beiträge: 6
Registriert: 27. Mär 2021 18:48

Re: Item Status abfragen

Beitrag von Servomaster »

Danke für die Hilfe. Das habe ich gesucht. Hab den Code zwar noch nicht verstanden, werde mich aber bemühen das zu ändern.

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

Re: Item Status abfragen

Beitrag von udo1toni »

der Code ist eigentlich ganz gut lesbar:

Code: Alles auswählen

var Timer tOnTime = null
definiere eine Globale Variable, die einen Zeiger auf einen Timer hält. (global, weil außerhalb der Rules)

Code: Alles auswählen

rule "alarm wenn mehr als 2 sek ON"
when
    Item myMonitoredItem changed
then
Kopf der Rule mitsamt Triggern, also wann die Rule ausgelöst werden soll. In diesem Fall bei jeder Statusänderung des Items myMonitoredItem

Code: Alles auswählen

    tOnTime?.cancel
Falls (das ist das ?) die Variable tOnTime einen Zeiger auf einen Timer enthält, stoppe den Timer und lösche ihn aus dem Scheduler.

Code: Alles auswählen

    if(newState == ON)
Falls der neue Status (des Items, welches die Rule getriggert hat) ON ist

Code: Alles auswählen

        tOnTime = createTimer(
Lege einen Timer an und weise der Variablen tOnTime den Zeiger auf den Timer zu. Der Timer hat folgende Eigenschaften:

Code: Alles auswählen

        now.plusSeconds(2)
zwei Sekunden von nun an (also "in 2 Sekunden") Beginn des Codeblocks, der ausgeführt wird, wennn der Timer abläuft.

Code: Alles auswählen

            logInfo("alarm","Item myMonitoredItem länger als 2 Sekunden ON")
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.
openHAB2.5.10 in einem Debian-Container (Proxmox, LXC)

Servomaster
Beiträge: 6
Registriert: 27. Mär 2021 18:48

Re: Item Status abfragen

Beitrag von Servomaster »

Super erklärt. Denke das ich das jetzt verstanden habe. Das mit dem Fragezeichen hat mich verwirrt. Danke.

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

Re: Item Status abfragen

Beitrag von udo1toni »

Das mit dem Fragezeichen ist eine schicke Kurzform von

Code: Alles auswählen

if(tOnTime !== null) tOnTime.cancel
Das gibt es auch an anderen Stellen in der Rules DSL.
openHAB2.5.10 in einem Debian-Container (Proxmox, LXC)

Antworten