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
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, ...
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?
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?
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.
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
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.
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, ...
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