Du hast verschiedene Optionen. Wichtig ist aber, dass Du Code (und auch die Konfiguration ist Code) auch als Code markierst, z.B. hat bei yaml die Anzahl der Leerzeichen vorne eine Bedeutung

Ich habe das der Einfachheit halber mal nachgeholt, über den vollständigen Editor hast Du die nötigen Tags auf Buttons, ansonsten kannst Du aber die Tags auch einfach hinschreiben, in diesem Fall das Wort code in eckigen Klammern, am Ende des Blocks zusätzlich mit einem Slash vor dem Wort, also so: [/code]
Dein Problem ist, Du willst die Alarmierung nicht, wenn die Temperatur unter 1,5 °C
ist, sondern, wenn die Temperatur unter 1,5 °C
sinkt. Das bedeutet, Deine Prüfung auf < 1,5 °C reicht nicht, die Temperatur muss zuvor eben über 1,5 °C gewesen sein.
Dazu ist es sinnvoll, die impliziten Variablen der Rules zu verwenden. Beim Ereignis changed (das nutzt Du ja schon), gibt es zwei implizite Variablen, previousState und newState. ACHTUNG! previousState ist etwas anderes als Item.previousState. Ersteres ist die implizite Variable, Letzteres ist die Eigenschaft des Items, welches auf die Persistience zugreift (das tut die implizite Variable nicht!). previousState funktioniert immer bei changed, .previousState nur, wenn die Persistence auch läuft.
Der eigentliche Code sieht dann so aus:
Code: Alles auswählen
if(newState >= 1.5 || previousState < 1.5)
return;
val telegramAction = getActions("telegram","telegram:telegramBot:TelegramBot")
telegramAction.sendTelegram("Garten Temp < 1.5 °C")
Alternativ auch so:
Code: Alles auswählen
if(newState < 1.5 && previousState >= 1.5) {
val telegramAction = getActions("telegram","telegram:telegramBot:TelegramBot")
telegramAction.sendTelegram("Garten Temp < 1.5 °C")
}
Unterschied: im ersten Fall wird die Rule abgebrochen, wenn die Temperatur größer oder gleich 1.5 ist oder die alte Temperatur unter 1.5 lag, im zweiten Fall werden die betreffenden Befehle ausgeführt, wenn die Temperatur unter 1.5 ist und die alte Temperatur über oder gleich 1.5. Die Logik ist also zu 100% komplementär.
Allerdings wirst Du auch Situationen haben, wo die Temperatur ständig um die 1.5 °C schwankt, so wird also trotzdem ab und zu ein Alarm ausgelöst.
Abhilfe schafft dann ein Flag für den Alarm. Mit der Alarmierung setzt Du ein Flag, dass der Alarm gesendet wurde. Die Rule kann dann auhc gleichzeitig verwendet werden, um das Flag auch wieder zu löschen, aber ebe nicht direkt, wenn die Temperatur über 1.5 °C steigt, sondern z.B. erst bei mehr als 2 °C. Durch die Hysterese (der Abstand zwischen Ein- und Ausschalten des Flags) werden dann die Alarmmeldungen recht zuverlässig nur einmal ausgelöst.
Das Flag realisierst Du am einfachsten über ein ungebundenes Item, das heiß0t, eines, welches nicht an einen Channel verlinkt ist (zumindest, wenn Du nicht den Zustand des Flags irgendwo außerhalb openHAB anzeigen willst). Switch als Typ reicht dazu, Dazu kommt dann in die Rule einfach eine zusätzliche Abfrage, in der Art
Code: Alles auswählen
if(MeinAlarmFlag.state != ON) {
// Hier Alarmierung plus Setzen des Items MeinAlarmFlag
}
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet