So geht das nicht
Rules (egal, ob nun über UI oder Text definiert) sind grundsätzlich Event-gesteuert. Das heißt, es tritt ein Ereignis auf, woraufhin die Rule ausgeführt wird. Es gibt viele verschiedene Ereignisse, angefangen bei System Ereignissen (Start des Systems) über bestimmte Zeitpunkte (Mittag) oder auch Cron Definitionen bis hin zu itemspezifischen Ereignissen. Hier stehen drei verschiedene Trigger zur Verfügung, received command, received update und changed. Bei jedem dieser Ereignisse kann man weitere Einschränkungen angeben (welches Command, Welcher Wert wurde empfangen, Die Änderung fand von welchem und/oder zu welchem Wert statt). Nicht möglich sind hier aber Vergleiche oder Berechnungen, denn dies sind keine Ereignisse, sondern Zustände.
Es ist nun die Frage, welche Aktion Du ausführst. Nehmen wir an, Du schaltest ein Licht an. Dann sieht Deine Rule dafür so aus:
Code: Alles auswählen
rule "Licht bei Differenz unter 2"
when
Item MeinItem1 changed or
Item MeinItem2 changed
then
if(!(MeinItem1.state instanceof Number))
return;
if(!(MeinItem2.state instanceof Number))
return;
val Number nWert1 = (MeinItem1.state as Number).floatValue
val Number nWert2 = (MeinItem2.state as Number).floatValue
val nDiff = nWert1 - nWert2
if(nDiff < 2 && Licht.state != ON)
Licht.sendCommand(ON)
end
Die Rule löst aus, wenn sich einer von zwei Item Status ändert.
Die Rule prüft, ob in beiden Status ein gültiger Zahlenwert vorliegt. Ist das nicht der Fall, bricht die Rule ab.
Wurde die Rule nicht abgebrochen, werden die beiden Status aus den Items ausgelesen und zwei lokalen Konstanten zugewiesen.
Anschließend wird die Differenz der beiden Konstanten einer dritten lokalen Konstanten zugewiesen.
danach prüft die Rule, ob die Differenz unter 2 ist und das Licht nicht eingeschaltet ist. Trifft beides zu, so wird das Licht eingeschaltet.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet