ich versuche mich nun schon seit geraumer Zeit an meiner Rule für meinen Bewegungsmelder, leider bekomme ich diese aber nicht sauber zum Laufen.
Hardware:
- Rasp 4 - OpenHAB 2.5.5
- Hue Motion Sensor (nicht über die App konfiguriert)
- 2 Philips Hue Leuchten
Rule:
Code: Alles auswählen
rule "bath_motionsensor_on"
when
Item hue_bath_motionsensor received update ON
then
if((now.getHourOfDay > 4 && now.getHourOfDay < 22) && hue_floor_motionsensor_illuminance.state <= 10 | "lx" && timer_bath_motion === null || timer_bath_motion.hasTerminated) { // zwischen 05:00 und 22:00 Uhr
logInfo("BATH", "(DAY) IF okay")
hue_bath_lamp_color.sendCommand(1)
hue_bath_lamp_brightness.sendCommand(100)
if(hue_bath_motionsensor.state == ON) {
logInfo("BATH", "create 1st Timer")
timer_bath_motion = createTimer(now.plusMinutes(2)) [|
if (hue_bath_motionsensor.state == ON) {
timer_bath_motion.reschedule(now.plusMinutes(2))
logInfo("BATH", "reschedule 1st Timer")
}
]
}
}
if((now.getHourOfDay > 21 && now.getHourOfDay < 5) && hue_floor_motionsensor_illuminance.state <= 10 | "lx" && timer_bath_motion === null || timer_bath_motion.hasTerminated) { // // zwischen 22:00 und 5:00 Uhr
logInfo("BATH", "(NIGHT) IF okay")
hue_bath_lamp_color.sendCommand(100)
hue_bath_lamp_brightness.sendCommand(25)
if(hue_bath_motionsensor.state == ON) {
logInfo("BATH", "create 1st Timer")
timer_bath_motion = createTimer(now.plusMinutes(2)) [|
if (hue_bath_motionsensor.state == ON) {
timer_bath_motion.reschedule(now.plusMinutes(2))
logInfo("BATH", "reschedule 1st Timer")
}
]
}
}
else if (timer_bath_motion !== null) {
if(now.getHourOfDay > 4 && now.getHourOfDay < 22) {
hue_bath_lamp_brightness.sendCommand(100)
timer_bath_motion.reschedule(now.plusMinutes(2))
logInfo("BATH", "(DAY) Timer on/off rescheduled")
}
if(now.getHourOfDay > 21 && now.getHourOfDay < 5){
hue_bath_lamp_brightness.sendCommand(25)
timer_bath_motion.reschedule(now.plusMinutes(2))
logInfo("BATH", "(NIGHT) Timer on/off rescheduled")
}
}
end
rule "bath_motionsensor_off"
when
Item hue_bath_motionsensor changed from ON to OFF
then
if (hue_bath_lamp_brightness.state == OFF){
return;}
logInfo("BATH", "no motion - set Timer")
hue_bath_lamp_brightness.sendCommand(25)
timer_bath_motion = createTimer(now.plusMinutes(2), [ |
timer_bath_motion.cancel
timer_bath_motion = null
hue_bath_lamp_brightness.sendCommand(OFF)
logInfo("BATH", "all off")
])
end
Der Bewegungsmelder sollte bei Bewegung vom Status OFF auf ON wechseln, die Rule entsprechend der definierten Kriterien (Helligkeit, Zeit) triggern und anschließend das Licht einschalten.
Wird eine kontinuierliche Bewegung (dauernd Status ON) oder eine unterbrochene Bewegung (ON -> OFF -> ON) innerhalb der definierten Zeit erkannt, soll das Licht bis zum Status OFF eingeschaltet bleiben, dann die Lichter für eine gewisse Zeit auf X% dimmen und erst anschließend soll das Licht ausgeschaltet werden.
Ist:
Das Licht geht immer wieder aus, obwohl ich mich noch im Raum befinde. Manchmal gibt es lt. Log eine Timer.cancel-Fehlermeldung, manchmal läuft der Timer trotz Bewegung ab und schaltet das Licht aus und manchmal funktioniert alles (denke eher durch Zufall) wie es soll.
Zudem sollte der Bewegungsmelder nur unter einem definierten Helligkeitswert (lx) ein Event auslösen. Das führt jedoch manchmal zum Problem, dass bei einem zeitnahen ON/OFF-Event die Helligkeit noch nicht aktualisiert wurde und so die Rule nicht mehr getriggert wird.
Fragen:
Was kann ich an meiner Rule noch optimieren bzw. wo habe ich noch einen Fehler drin?
Schön wäre es natürlich auch, wenn man die zweite Rule "bath_motionsensor_off" auch noch in die erste Rule packen könnte.
Primäres Ziel ist aber, dass das Licht ohne Unterbrechungen eingeschaltet bleibt, bis man den Raum verlässt.
Vielen lieben Dank im Voraus!
LG Christoph