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

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
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
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