So ist es. Es fehlte die Klammer nach dem if()
Eine bedingte Verzweigung wirkt immer exakt auf den nächsten Befehl (wenn die Bedingung nicht erfüllt ist, wird dieser eine Befehl übersprungen). Will man mehr als einen Befehl bedingt ausführen, so muss man die Befehle mittels geschweifter Klammern gruppieren.
Im vorliegenden Fall wäre eine andere Möglichkeit, die Rule anders zu formulieren:
Code: Alles auswählen
var Timer tSunset = null
rule "WZ_Licht an DSL"
when
Item sonoff0002ASwitchGarten_LichtwertGarten changed
then
if(!(sonoff0002ASwitchGarten_LichtwertGarten.state instanceof Number)) { // keine gültige Helligkeit
logWarn("lightOn","Helligkeitssensor liefert keine gültige Zahl!")
return;
}
if((sonoff0002ASwitchGarten_LichtwertGarten.state as Number) > 230) { // heller als 230
logInfo("lightOn","Es ist noch zu hell")
return;
}
if(now.toLocalTime.getHour < 18 || now.toLocalTime.getHour > 21) { // außerhalb 17:00:00 - 21:59:59 Uhr
logInfo("lightOn","falsches Zeitfenster")
return;
}
if(Wohnzimmer1000lm1_Helligkeit.state == ON) { // Licht bereits an
logInfo("lightOn","Licht ist schon an")
return;
}
// Alle Bedingungen sind erfüllt, also los!
tSunset?.cancel
tSunset = createTimer(now.plusSeconds(1), [|
var nBright = Wohnzimmer1000lm1_Helligkeit.state as Number
if(nBright < 60) {
Wohnzimmer1000lm1_Helligkeit.sendCommand(nBright + 2)
Wohnzimmer1000lm2_Helligkeit.sendCommand(nBright + 2)
tSunset.reschedule(now.plusSeconds(1))
}
])
end
Diese Form hat den einen oder anderen Vorteil, insbesondere bleibt die Schachtelungstiefe gering; außerdem ist der Code sehr strukturiert und man bekommt auf Wunsch (ansonsten kann man das Logging auch reduzieren) Informationen, warum die Rule nicht ihre Arbeit tut.
EDIT: Überzählige Klammer im Code entfernt.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet