Rules

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

mamoel
Beiträge: 137
Registriert: 12. Jan 2019 19:56
Answers: 0

Re: Rules

Beitrag von mamoel »

Gibt bestimmt elegantere Lösungen, aber mein erster Ansatz wäre so etwas in der Art:

Code: Alles auswählen

rule "Temp_Stal_rule"

when
    Item Stall_Temp changed

then
    if(Stall_Temp.state instanceof QuantityType) {
        val Number nTemp = Stall_Temp.state as QuantityType<Number>
        val prevVal nTempPrev = previousState as QuantityType<Number>

        if(nTemp <= 0 && nTempPrev > 0) {
           sendTelegram("bot1", "Stall Temperatur ist nun {}",nTemp)
        }

        if(nTemp <= -5 && nTempPrev > -5) {
           sendTelegram("bot1", "Stall Temperatur ist nun {}",nTemp)
        }

        if(nTemp <= -10 && nTempPrev > -10) {
           sendTelegram("bot1", "Stall Temperatur ist nun {}",nTemp)
        }

    }
end
Sollte die Temperatur von +1°C schlagartig auf unter -10°C fallen, bekommst du allerdings gleich drei Nachrichten. Sollte aber nicht of vorkommen :D
openHAB 2.5 (M1) in Docker auf NAS: Synology DS418play
mit Homematic, Hue, TP-Link, AVM Fritz!, FritzboxTR064, Nuki, Amazon Echo, Sonos, Harmony, zigbee2mqtt, Denon/Marantz, ...

matze.lingen
Beiträge: 52
Registriert: 28. Jul 2018 18:35
Answers: 0

Re: Rules

Beitrag von matze.lingen »

mamoel hat geschrieben: 29. Jan 2019 15:37 Gibt bestimmt elegantere Lösungen, aber mein erster Ansatz wäre so etwas in der Art:

Code: Alles auswählen

rule "Temp_Stal_rule"

when
    Item Stall_Temp changed

then
    if(Stall_Temp.state instanceof QuantityType) {
        val Number nTemp = Stall_Temp.state as QuantityType<Number>
        val prevVal nTempPrev = previousState as QuantityType<Number>

        if(nTemp <= 0 && nTempPrev > 0) {
           sendTelegram("bot1", "Stall Temperatur ist nun {}",nTemp)
        }

        if(nTemp <= -5 && nTempPrev > -5) {
           sendTelegram("bot1", "Stall Temperatur ist nun {}",nTemp)
        }

        if(nTemp <= -10 && nTempPrev > -10) {
           sendTelegram("bot1", "Stall Temperatur ist nun {}",nTemp)
        }

    }
end
Sollte die Temperatur von +1°C schlagartig auf unter -10°C fallen, bekommst du allerdings gleich drei Nachrichten. Sollte aber nicht of vorkommen :D
OK Cool Vielen Dank erstmal. Wie bekomme ich es denn dann auch noch hin mit meiner Auswertung wenn der Sensor sich nicht mehr updated?

mamoel
Beiträge: 137
Registriert: 12. Jan 2019 19:56
Answers: 0

Re: Rules

Beitrag von mamoel »

Falls Du die Temperatur historisierst (Datenbank), kannst du das prüfen mit

Code: Alles auswählen

Stall_Temp.changedSince(now.minusHours(12))
openHAB 2.5 (M1) in Docker auf NAS: Synology DS418play
mit Homematic, Hue, TP-Link, AVM Fritz!, FritzboxTR064, Nuki, Amazon Echo, Sonos, Harmony, zigbee2mqtt, Denon/Marantz, ...

matze.lingen
Beiträge: 52
Registriert: 28. Jul 2018 18:35
Answers: 0

Re: Rules

Beitrag von matze.lingen »

Ok also ich habe nen Perisistent für Stall Temp meinst du das?
und dann muss ich when Item Stall_Temp.changedSince(now.minusHours(12)) then send.....
oder wie?

mamoel
Beiträge: 137
Registriert: 12. Jan 2019 19:56
Answers: 0

Re: Rules

Beitrag von mamoel »

Du machst eine neue Rule und prüfst darin, ob der Wert geändert wurde:

Code: Alles auswählen

rule "Test"
when
    Time cron "0/30 0/1 * 1/1 * ? *" // alle 30 sec
then     
    if(Stall_Temp.changedSince(now.minusHours(12)) == false) {
    	sendTelegram("bot1", "Stall: Temperatursensor prüfen")
    }
end
Das Intervall kannst Du natürlich beliebig setzen.
openHAB 2.5 (M1) in Docker auf NAS: Synology DS418play
mit Homematic, Hue, TP-Link, AVM Fritz!, FritzboxTR064, Nuki, Amazon Echo, Sonos, Harmony, zigbee2mqtt, Denon/Marantz, ...

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

Re: Rules

Beitrag von udo1toni »

Die Temperaturschwellen sind sicher ein guter Ansatz. Ein Problem könnte sein, wenn die Temperatur "exakt" bei einer der Schwellen stehen bleibt, und dann der Wert ständig minimal um diese Grenze schwankt. Das ist aber vermutlich eher theoretisch ein Problem :)

Für das Update-Problem möchte ich empfehlen, einen Timer zu verwenden.

Code: Alles auswählen

var Timer tTimeout = null
rule "watchDog"
when
    Item Stall_Temp received update
then
    if(tTimeout !== null)
        tTimeout.reschedule(now.plusHours(12))
    else
        tTimeout = createTimer(now.plusHours(12), [|
            sendTelegram("bot1", "Stall: Temperatursensor prüfen")
        ])
end
Diesen Code könnte man auch recht bequem in einer vorhandenen Rule integrieren, schließlich ist die Wahrscheinlichkeit, dass ein Temperatursensor 12 Stunden keine Temperaturänderung misst (und trotzdem in Ordnung ist) ist doch... eher unwahrscheinlich. Insofern würde ein Trigger auf changed ebenso ausreichen...
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

matze.lingen
Beiträge: 52
Registriert: 28. Jul 2018 18:35
Answers: 0

Re: Rules

Beitrag von matze.lingen »

So, was auch immer nun passiert ist, es war nun unter 0 Grad im Stall, jedoch wurde kein Event ausgelöst.
Ich muss mal einen anderen Sensor bauen, bei dem ich es leichter hin bekomme, dass der Schwellwert erreicht wird. Dann kann ich die Regeln besser Analysieren.

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

Re: Rules

Beitrag von udo1toni »

Zum Testen kannst Du ja einen anderen Schwellwert setzen, einfach um zu sehen, ob die Rule triggert.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

mamoel
Beiträge: 137
Registriert: 12. Jan 2019 19:56
Answers: 0

Re: Rules

Beitrag von mamoel »

Welchen Code hast Du denn letztendlich genommen? Hast Du auch schon sicher gestellt, dass das Versenden von Telegram-Nachrichten überhaupt funktioniert? Vielleicht funktioniert die Rule bereits, aber das Senden schlägt fehl?
Ich würde zu Analysezwecken mal ein paar Meldungen ins Logfile schreiben lassen (und natürlich die Schwellwerte testweise so setzen, dass Du nicht auf Minustemperaturen warten musst).
openHAB 2.5 (M1) in Docker auf NAS: Synology DS418play
mit Homematic, Hue, TP-Link, AVM Fritz!, FritzboxTR064, Nuki, Amazon Echo, Sonos, Harmony, zigbee2mqtt, Denon/Marantz, ...

matze.lingen
Beiträge: 52
Registriert: 28. Jul 2018 18:35
Answers: 0

Re: Rules

Beitrag von matze.lingen »

Aktuell habe ich das hier im Einsatz:

Code: Alles auswählen

rule "Temp_Stal_rule"

when
    Item Stall_Temp changed

then
    if(Stall_Temp.state instanceof QuantityType) {
        val Number nTemp = Stall_Temp.state as QuantityType<Number>
        val prevVal nTempPrev = previousState as QuantityType<Number>

        if(nTemp <= 0 && nTempPrev > 0) {
           sendTelegram("bot1", "Stall Temperatur ist nun {}",nTemp)
        }

        if(nTemp <= -5 && nTempPrev > -5) {
           sendTelegram("bot1", "Stall Temperatur ist nun {}",nTemp)
        }

        if(nTemp <= -10 && nTempPrev > -10) {
           sendTelegram("bot1", "Stall Temperatur ist nun {}",nTemp)
        }

    }
end
Das versenden Funktioniert, das habe ich getestet.
Wie kann ich das Log hochdrehen?
Gruß
Matze

Antworten