Seite 1 von 1

Rule mit Statusabfrage Thing

Verfasst: 26. Nov 2023 02:21
von zinnik
Hallo,

Ich hab das Problem das manchmal einige Things (Temperatusensoren) Offline gehen weil sie nicht erreichbar sind zb. weil Batterie leer ist.

Oder keinen Empfang haben. Jetzt dachte ich mir ich lass mir einfach den Status vom Thing schicken wenn es Offline geht, per Pushover oder hat eventuell Openhab eine eigene Funktion?

Dann kann ich nachschauen.

Mit einem Thing habe ich das hinbekommen aber ich finde nicht heraus wie ich das mit Mehreren mache sodass es mir auch genau sagt welches Thing eine Störung hat.

Hier wäre meine Test Rule

Code: Alles auswählen

rule "Push Thing Offline"
when
    Thing "deconz:temperaturesensor:00212E070550:00158d0003faf862010402" changed from Online to Offline
then
    val actions = getActions("pushover", "pushover:pushover-account:375383cc42")
    
    actions.sendMessage("ThingStatus", "Temperatursensor Schlafzimmer nicht erreichbar")
    
end
Lg Sven

Re: Rule mit Statusabfrage Thing

Verfasst: 26. Nov 2023 12:25
von udo1toni
Im Gegensatz zu Items gibt es bei Things keine Gruppen.
Du kommst also leider nicht darum herum, jedes Thing einzeln als Trigger aufzuführen.
In der Auswertung kannst Du aber sehr wohl unterscheiden, welches der Things die Rule getriggert hat, und welchen Zustand das Thing hat:

Code: Alles auswählen

rule "Push Thing Offline"
when
    Thing "deconz:temperaturesensor:00212E070550:00158d0003faf862010401" changed or
    Thing "deconz:temperaturesensor:00212E070550:00158d0003faf862010402" changed or
    Thing "deconz:temperaturesensor:00212E070550:00158d0003faf862010403" changed or
    Thing "deconz:temperaturesensor:00212E070550:00158d0003faf862010404" changed
then
    if(newThingStatus == "Online") {
        return;
    }
    val actions = getActions("pushover", "pushover:pushover-account:375383cc42")
    val strLastDigits = triggeringThing.substring(triggeringThing.lastIndexOf(":") + 1)
    val strMessage = "Temperatursensor "
    switch(strLastDigits) {
        case "00158d0003faf862010401" : strMessage += "Wohnzimmer "
        case "00158d0003faf862010402" : strMessage += "Schlafzimmer "
        case "00158d0003faf862010403" : strMessage += "Büro "
        case "00158d0003faf862010404" : strMessage += "Kinderzimmer "
        default : {
            logWarn("pushThing", "Da ist was schief gelaufen! ThingID {} nicht in Liste...",triggeringThing)
            return;
        }
    }
    strMessage += "ist gerade " + newThingStatus + "!"
    actions.sendMessage("ThingStatus", strMessage)
    logInfo("pushThing", strMessage)    
end
Wesentlich eleganter wäre es, die Thing IDs gleich sinnvoll zu setzen. Die Buchstaben-Zahlenkombination sollte bei der Übernahme aus der Inbox angepasst werden können.
Man könnte auch eine Mapping-Tabelle dafür verwenden - und natürlich kann man den String für die Nachricht auch anders gestalten, genau wie man auch newThingstatus explizit auswerten kann, falls das interessant ist.

Re: Rule mit Statusabfrage Thing

Verfasst: 26. Nov 2023 21:16
von zinnik
Hallo Udo,

vielen Dank für deine Hilfe habe die Rule jetzt erstellt und angepasst.

Funktioniert auch Prima, kann man die Rule vielleicht noch so abändern ,dass nur eine Push kommt bei dem Status OFFLINE

Lg Sven

Re: Rule mit Statusabfrage Thing

Verfasst: 27. Nov 2023 00:57
von udo1toni
Ja, sicher, Du kannst entweder die Trigger eingrenzen (changed to OFFLINE) oder alternativ auch in der Rule selbst:

Code: Alles auswählen

...
then
    if(newThingStatus != "OFFLINE") {
        return;
    }
    val actions = getActions("pushover", "pushover:pushover-account:375383cc42")
...

Re: Rule mit Statusabfrage Thing

Verfasst: 27. Nov 2023 18:06
von zinnik
Jetzt habe ich ochwas amHerzen aus unerklärlichen gründen ging heute zwei kurz dasdeconz binding offline somit wurde ich zugespamt von Pushover. Kann man es so ab ändern wenn die Temperatursensoren mindestens 1h offline sind dann erst ei push auszugeben.
Lg sven

Re: Rule mit Statusabfrage Thing

Verfasst: 27. Nov 2023 18:38
von nw378
Was Du machen kannst, ist eine Art Hystere einbauen, also einen zusätzlichen Schalter, der nach erstmaliger Offline-Meldung für 60 Minuten an ist und danach wieder ausgeht.
Dass heißt, Du bekommst sofort eine Pushover Meldung, wenn ein Thing offline geht, die nächste Warnung aber erst eine Stunde später:

.items:

Code: Alles auswählen

Switch deconz_warn  {expire="60m,command=OFF"} 

Code: Alles auswählen

...
then
    if((newThingStatus != "OFFLINE") || (deconz_warn.state==ON)) {
        return;
    }
    val actions = getActions("pushover", "pushover:pushover-account:375383cc42")
    deconz_warn.sendCommand(ON)  
...

Re: Rule mit Statusabfrage Thing

Verfasst: 29. Nov 2023 11:43
von zinnik
Ok danke probiere ich aus