Also, ein vollständiger Regelsatz sähe so aus:
Code: Alles auswählen
rule "Bild Flur ein"
when
Time cron "0 30 18 24-31 10 ?" or // im Oktober vom 24. bis 31. um 18:30 Uhr
Time cron "0 30 18 * 11-12,1-3 ?" or // November bis März täglich um 18:30 Uhr
Time cron "0 30 18 1-5 4 ?" or // im April vom 1. bis 5. um 18:30 Uhr
Time cron "0 30 20 6-30 4 ?" or // im April vom 6. bis 30. um 20:30 Uhr
Time cron "0 30 20 * 5-9 ?" or // Mai bis September täglich um 20:30 Uhr
Time cron "0 30 20 1-23 10 ?" // im Oktober vom 1. bis 23. um 20:30 Uhr
then
if(Bild_Flur.state == ON) {
Steckd_OG_Flur_Bild.sendCommand(ON)
}
end
rule "Bild Flur aus"
when
Time cron "0 5 1 24-31 10 ?" or // im Oktober vom 24. bis 31. um 01:05 Uhr
Time cron "0 5 1 * 11-12,1-3 ?" or // November bis März täglich um 01:05 Uhr
Time cron "0 5 1 1-5 4 ?" or // im April vom 1. bis 5. um 01:05 Uhr
Time cron "0 5 2 6-30 4 ?" or // im April vom 6. bis 30. um 02:05 Uhr
Time cron "0 5 2 * 5-9 ?" or // Mai bis September täglich um 02:05 Uhr
Time cron "0 5 2 1-23 10 ?" // im Oktober vom 1. bis 23. um 02:05 Uhr
then
if(Bild_Flur.state == ON) {
Steckd_OG_Flur_Bild.sendCommand(OFF)
}
end
Man kann sich natürlich ein bisschen was sparen:
Code: Alles auswählen
rule "Bild Flur ein"
when
Time cron "0 30 18 24-31 10 ?" or // im Oktober vom 24. bis 31. um 18:30 Uhr
Time cron "0 30 18 * 11-12,1-3 ?" or // November bis März täglich um 18:30 Uhr
Time cron "0 30 18 1-5 4 ?" or // im April vom 1. bis 5. um 18:30 Uhr
Time cron "0 30 20 * * ?" // spätestens um 20:30 Uhr
then
if(Bild_Flur.state == ON && Steckd_OG_Flur_Bild.state != ON) {
Steckd_OG_Flur_Bild.sendCommand(ON)
}
end
rule "Bild Flur aus"
when
Time cron "0 5 1 24-31 10 ?" or // im Oktober vom 24. bis 31. um 01:05 Uhr
Time cron "0 5 1 * 11-12,1-3 ?" or // November bis März täglich um 01:05 Uhr
Time cron "0 5 1 1-5 4 ?" or // im April vom 1. bis 5. um 01:05 Uhr
Time cron "0 5 2 * * ?" // spätestens um 02:05 Uhr
then
if(Bild_Flur.state == ON && Steckd_OG_Flur_Bild.state != OFF) {
Steckd_OG_Flur_Bild.sendCommand(OFF)
}
end
Spätestens um 20:30 bzw. 02:05 Uhr wird der Schaltvorgang stattfinden. Man prüft nun zur entsprechenden Zeit, ob das Licht an (bzw. aus) ist und schaltet entsprechend nur, wenn das nötig ist.
Die 3. Variante:
Code: Alles auswählen
rule "Bild Flur ein"
when
Time cron "0 30 18 * * ?" or // täglich um 18:30 Uhr
Time cron "0 30 20 * * ?" // und täglich um 20:30 Uhr
then
if(Bild_Flur.state != ON) // Automatik inaktiv?
return; // dann Abbruch
if(now.hourOfDay == 18 && now.dayOfYear > 95 && now.dayOfYear < 297) // Sommer und 18 Uhr?
return; // Dann Abbruch
if(Steckd_OG_Flur_Bild.state != ON) {
Steckd_OG_Flur_Bild.sendCommand(ON)
}
end
rule "Bild Flur aus"
when
Time cron "0 5 1 * * ?" or // täglich um 01:05 Uhr
Time cron "0 5 2 * * ?" // und täglich um 02:05 Uhr
then
if(Bild_Flur.state != ON) // Automatik inaktiv?
return; // Dann Abbruch
if(now.hourOfDay == 1 && now.dayOfYear > 95 && now.dayOfYear < 297) // Sommer und 1 Uhr?
return; // Dann Abbruch
if(Steckd_OG_Flur_Bild.state != OFF) {
Steckd_OG_Flur_Bild.sendCommand(OFF)
}
end
Die Rule triggert immer zu beiden Zeitpunkten, jedoch wird innerhalb der Rule geprüft, ob gerade der 1. Zeitschaltpunkt ausgeführt wird (hourOfDay reicht hier als Kriterium) und gleichzeitig "die falsche Jahreszeit" ist. In diesem Fall wird die Ruleverarbeitung abgebrochen (das ist eleganter, als erst den ganzen Block zu bearbeiten...)
Ich habe hier (faul) nur auf den Tag im Jahr geprüft, das funktioniert in Schaltjahren natürlich nicht korrekt. Es gibt aber auch eine Funktion, die true liefert, wenn sich ein Datum innerhalb einer Zeitspanne befindet (die wird über exakte Datumsangaben definiert). Meine Faulheit besteht in diesem Fall darin, dass ich nicht suchen wollte, wie die korrekte Funktion lautet... ich habe das an anderer Stelle schon mal verwendet, also bei Bedarf krame ich auch noch mal...