Da müssen wir erst mal klären...
Du schaltest die Steckdose über einen Schalter. Zusätzlich wirkt die Rule, sobald die Sonne unter dem Horizont steht.
Nun soll das Licht zwischen 19:15 und 22:15 dauerhaft an sein. Aber gilt das auch, wenn das Licht nicht über den Schalter eingeschaltet wurde?
Vermutlich wäre die einfachste Variante diese:
1. Der Schalter kommt als eigenes Item in openHAB an. (Ich hoffe mal, der Schalter ist ein Taster...)
2. Der Schalter schaltet das Licht über eine Rule an. (kann es sein, dass der Schalter das Licht auch ausschalten können soll?)
3. Die Bewegungsmelder Rule fragt die Schaltstellung ab.
4. Die Zeitsteuerung setzt den Schalter in die OFF-Position zurück.
Sieht so aus:
Code: Alles auswählen
Switch MeinTaster "Taster Steckdose Flur oben 1.OG" {...}
Switch FF_Flur_Steckdoseoben "Steckdose Flur oben 1.OG" {...}
Code: Alles auswählen
//Globale Variablen zu Beginn der Datei definieren!
var Timer tFlurobenMotion = null
rule "Schalter Steckdose Flur 1.OG"
when
Item MeinTaster received command
then
if(receivedCommand == ON) {
FF_Flur_Steckdoseoben.sendCommand(ON)
} else {
FF_Flur_Steckdoseoben.sendCommand(OFF)
}
end
rule "Bewegungsmelder Flur hat Bewegung erkannt und es ist Dunkel"
when
Item FF_Flur_Bewegungsmelder received update ON
then
if((Elevation.state as Number).floatValue < 0 && MeinTaster.state != ON) {
tFlurobenMotion?.cancel
FF_Flur_Steckdoseoben.sendCommand(ON)
tFlurobenMotion = createTimer(now.plusMinutes(3), [|
FF_Flur_Steckdoseoben.sendCommand(OFF)
tFlurobenMotion = null
])
}
end
rule "Steckdose Flur 1.OG automatisch aus"
when
Time cron "0 15 23 * * ?" // Täglich 23:15:00 Uhr
then
if(MeinTaster.state != OFF)
MeinTaster.postUpdate(OFF)
if(FF_Flur_Steckdoseoben.state != OFF)
FF_Flur_Steckdoseoben.sendCommand(OFF)
end
Der Code für den Bewegungsmelder ist ein leicht anderer.
Zum einen hat FF_Flur_Bewegungsmelder die Rule mit ON getriggert, also ist es sinnlos, diesen Status zu prüfen, er wird immer ON sein.
Zum zweiten mag ich persönlich lieber normale Zahlen, als solche mit Einheiten. -0 gibt es übrigens nicht, auch wenn die Rule eventuell trotzdem funktioniert.
Zum dritten mag ich auch eine klare Zuordnung, dass das definierte Lambda ein Parameter der Funktion createTimer ist, deshalb das Komma und die schließende Klammer erst nach dem Lambda.
Zum vierten ist die Rule (ein wenig) kürzer, wenn der Timer einfach verworfen und neu angelegt wird.
Die Punkte 2 bis 4 sind dabei natürlich eher Geschmacksache...
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet