Seite 2 von 6

Re: Rules

Verfasst: 29. Jan 2019 15:37
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

Re: Rules

Verfasst: 29. Jan 2019 15:52
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?

Re: Rules

Verfasst: 29. Jan 2019 16:08
von mamoel
Falls Du die Temperatur historisierst (Datenbank), kannst du das prüfen mit

Code: Alles auswählen

Stall_Temp.changedSince(now.minusHours(12))

Re: Rules

Verfasst: 29. Jan 2019 16:11
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?

Re: Rules

Verfasst: 29. Jan 2019 16:57
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.

Re: Rules

Verfasst: 30. Jan 2019 20:26
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...

Re: Rules

Verfasst: 4. Feb 2019 11:41
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.

Re: Rules

Verfasst: 4. Feb 2019 12:08
von udo1toni
Zum Testen kannst Du ja einen anderen Schwellwert setzen, einfach um zu sehen, ob die Rule triggert.

Re: Rules

Verfasst: 4. Feb 2019 12:34
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).

Re: Rules

Verfasst: 4. Feb 2019 13:45
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