Re: Rule - Xmas-Beleuchtung
Verfasst: 29. Jan 2020 23:47
Immer gerne 
Code: Alles auswählen
rule "Xmas-Beleuchtung (Innen) EIN"
when
Time cron "0 30 05 ? 12,1 MON,TUE,WED,THU,FRI" or // 05:30:00 Uhr Montag-Freitag, Dezember und Januar
Time cron "0 00 16 ? 12,1 MON,TUE,WED,THU,FRI" or // 16:00:00 Uhr Montag-Freitag, Dezember und Januar
Time cron "0 00 05 ? 12,1 SAT,SUN" or // 05:00:00 Uhr Samstag + Sonntag, Dezember und Januar
Time cron "0 00 15 ? 12,1 SAT,SUN" // 15:00:00 Uhr Samstag + Sonntag, Dezember und Januar
then
if(now.plusDays(31).getDayOfYear < 38) //1. Dezember + 31 Tage = 1. Januar = 1. Tag... (1. Dezember - 6. Januar = 38 Tage)
Xmas.sendCommand(ON)
end
rule "Xmas-Beleuchtung (Innen) AUS"
when
Time cron "0 59 23 30 11 ?" or // 23:59:00 Uhr 30.11. erster Schaltpunkt AUS
Time cron "0 30 07 ? 12,1 MON,TUE,WED,THU,FRI" or // 07:30:00 Uhr Montag-Freitag, Dezember und Januar
Time cron "0 45 23 ? 12,1 MON,TUE,WED,THU,FRI" or // 23:45:00 Uhr Montag-Freitag, Dezember und Januar
Time cron "0 00 10 ? 12,1 SAT,SUN" or // 10:00:00 Uhr Samstag + Sonntag, Dezember und Januar
Time cron "0 59 23 ? 12,1 SAT,SUN" // 05:00:00 Uhr Samstag + Sonntag, Dezember und Januar
then
if(now.plusDays(31).getDayOfYear < 38) //1. Dezember + 31 Tage = 1. Januar = 1. Tag... (1. Dezember - 6. Januar = 38 Tage)
Xmas.sendCommand(OFF)
endCode: Alles auswählen
// Schaltet die Weihnachtsbeleuchtung (Aussen) vom 01. Dezember bis 6. Januar
rule "Xmas-Beleuchtung (Aussen) EIN 01.12-06.01"
when
Time cron "0 00 06 ? 12,1 MON,TUE,WED,THU,FRI" or // 06:00:00 Uhr Montag-Freitag, November, Dezember und Januar
Time cron "0 00 06 ? 12,1 SAT,SUN" or // 06:00:00 Uhr Samstag + Sonntag, November, Dezember und Januar
Time cron "0 30 16 ? 12,1 MON,TUE,WED,THU,FRI" or // 16:30:00 Uhr Montag-Freitag, November, Dezember und Januar
Time cron "0 00 16 ? 12,1 SAT,SUN" // 16:00:00 Uhr Samstag + Sonntag, November, Dezember und Januar
then
if(now.plusDays(31).getDayOfYear < 38) //01. Dezember + 31 Tage = 1. Januar = 1. Tag... (01.Dezember - 6. Januar = 38 Tage)
Xmas_Aussen.sendCommand(ON)
end
rule "Xmas-Beleuchtung (Aussen) AUS 01.12-06.01"
when
Time cron "0 30 07 ? 12,1 MON,TUE,WED,THU,FRI" or // 07:30:00 Uhr Montag-Freitag, November, Dezember und Januar
Time cron "0 00 08 ? 12,1 SAT,SUN" or // 08:00:00 Uhr Samstag + Sonntag, November, Dezember und Januar
Time cron "0 30 23 ? 12,1 MON,TUE,WED,THU,FRI" or // 23:30:00 Uhr Montag-Freitag, November, Dezember und Januar
Time cron "0 30 23 ? 12,1 SAT,SUN" or // 23:30:00 Uhr Samstag + Sonntag, November, Dezember und Januar
Time cron "0 30 23 6 1 ?" // 23:30:00 Uhr 06.01. letzter Schaltpunkt AUS
then
if(now.plusDays(31).getDayOfYear < 38) //01. Dezember + 31 Tage = 1. Januar = 1. Tag... (01.Dezember - 6. Januar = 38 Tage)
Xmas_Aussen.sendCommand(OFF)
end
//
//
// Schaltet die Weihnachtsbeleuchtung (Innen) vom 28. November bis 6. Januar
rule "Xmas-Beleuchtung (Innen) EIN 01.12-06.01"
when
Time cron "0 00 06 ? 12,1 MON,TUE,WED,THU,FRI" or // 06:00:00 Uhr Montag-Freitag, Dezember und Januar
Time cron "0 30 15 ? 12,1 MON,TUE,WED,THU,FRI" or // 15:30:00 Uhr Montag-Freitag, Dezember und Januar
Time cron "0 00 08 ? 12,1 SAT,SUN" or // 08:00:00 Uhr Samstag + Sonntag, Dezember und Januar
Time cron "0 03 15 ? 12,1 SAT,SUN" // 15:30:00 Uhr Samstag + Sonntag, Dezember und Januar
then
if(now.plusDays(31).getDayOfYear < 38) //01. Dezember + 31 Tage = 1. Januar = 1. Tag... (01.Dezember - 6. Januar = 38 Tage)
Xmas.sendCommand(ON)
end
rule "Xmas-Beleuchtung (Innen) AUS 01.12-06.01"
when
Time cron "0 30 07 ? 12,1 MON,TUE,WED,THU,FRI" or // 07:30:00 Uhr Montag-Freitag, Dezember und Januar
Time cron "0 30 23 ? 12,1 MON,TUE,WED,THU,FRI" or // 23:30:00 Uhr Montag-Freitag, Dezember und Januar
Time cron "0 30 09 ? 12,1 SAT,SUN" or // 09:30:00 Uhr Samstag + Sonntag, Dezember und Januar
Time cron "0 30 23 ? 12,1 SAT,SUN" // 23:30:00 Uhr Samstag + Sonntag, Dezember und Januar
then
if(now.plusDays(31).getDayOfYear < 38) //01. Dezember + 31 Tage = 1. Januar = 1. Tag... (01.Dezember - 6. Januar = 38 Tage)
Xmas.sendCommand(OFF)
end
//
//
// Schaltet die Weihnachtsbeleuchtung (Kids) vom 28. November bis 6. Januar
rule "Xmas-Beleuchtung (Kids) EIN 01.12-06.01"
when
Time cron "0 30 06 ? 12,1 MON,TUE,WED,THU,FRI" or // 06:30:00 Uhr Montag-Freitag, Dezember und Januar
Time cron "0 30 15 ? 12,1 MON,TUE,WED,THU,FRI" or // 15:30:00 Uhr Montag-Freitag, Dezember und Januar
Time cron "0 30 07 ? 12,1 SAT,SUN" or // 07:30:00 Uhr Samstag + Sonntag, Dezember und Januar
Time cron "0 00 16 ? 12,1 SAT,SUN" // 16:00:00 Uhr Samstag + Sonntag, Dezember und Januar
then
if(now.plusDays(31).getDayOfYear < 38) //01. Dezember + 31 Tage = 1. Januar = 1. Tag... (01.Dezember - 6. Januar = 38 Tage)
Xmas_Kids.sendCommand(ON)
end
rule "Xmas-Beleuchtung (Kids) AUS 01.12-06.01"
when
Time cron "0 30 07 ? 12,1 MON,TUE,WED,THU,FRI" or // 07:30:00 Uhr Montag-Freitag, Dezember und Januar
Time cron "0 00 22 ? 12,1 MON,TUE,WED,THU,FRI" or // 22:00:00 Uhr Montag-Freitag, Dezember und Januar
Time cron "0 00 08 ? 12,1 SAT,SUN" or // 08:00:00 Uhr Samstag + Sonntag, Dezember und Januar
Time cron "0 00 22 ? 12,1 SAT,SUN" // 22:00:00 Uhr Samstag + Sonntag, Dezember und Januar
then
if(now.plusDays(31).getDayOfYear < 38) //01. Dezember + 31 Tage = 1. Januar = 1. Tag... (01.Dezember - 6. Januar = 38 Tage)
Xmas_Kids.sendCommand(OFF)
end
Code: Alles auswählen
var Integer intStAdvent = 0
rule "Berechnung nach Mitternacht"
when
Time cron "5 0 0 * * ?" or
System started
then
val firstAdvent = LocalDate.of(now.getYear,12,25).minusDays(LocalDate.of(now.getYear,12,25).getDayOfWeek.getValue + 21)
intStAdvent = firstAdvent.getDayOfYear
logInfo("holiday","Der erste Advent ist am {}", firstAdvent)
end
rule "Weihnachtslicht ein"
when
Time cron "0 0 6 * * ?" or // morgens 6 Uhr
Time cron "0 30 16 * * ?" // nachmittags 16:30 Uhr
then
if (now.getDayOfYear < 7 || now.getDayOfYear > intStAdvent) {
logDebug("x-mas","Weihnachtsbeleuchtung ein.")
NOutBalkonSteckdose.sendCommand(ON)
}
end
rule "Weihnachtslicht aus"
when
Time cron "0 0 9 * * ?" or // morgens 9 Uhr
Time cron "0 30 22 * * ?" // abends 22:30 Uhr
then
if (now.getDayOfYear < 7 || now.getDayOfYear > intStAdvent) {
logDebug("x-mas","Weihnachtsbeleuchtung aus.")
NOutBalkonSteckdose.sendCommand(OFF)
}
end
Code: Alles auswählen
023-11-30 00:00:05.821 [INFO ] [rg.openhab.core.model.script.holiday] - Der erste Advent ist am 2023-12-03Code: Alles auswählen
if (now.getDayOfYear < 7 || now.getMonthValue == 12) {Code: Alles auswählen
if (now.getDayOfYear < 7 || now.getDayOfYear > intStAdvent - 7) {Code: Alles auswählen
var Integer intStAdvent = 0
rule "Berechnung nach Mitternacht"
when
Time cron "5 0 0 * * ?" or
System started
then
val firstAdvent = LocalDate.of(now.getYear,12,25).minusDays(LocalDate.of(now.getYear,12,25).getDayOfWeek.getValue + 21)
intStAdvent = firstAdvent.getDayOfYear
logInfo("holiday","Der erste Advent ist am {}", firstAdvent)
end
rule "Weihnachtslicht ein"
when
Time cron "0 0 6 * * ?" or // morgens 6 Uhr
Time cron "0 30 16 * * ?" // nachmittags 16:30 Uhr
then
if (now.getDayOfYear < 7 || now.getDayOfYear > intStAdvent) {
logDebug("x-mas","Weihnachtsbeleuchtung ein.")
Swi_Weihnachtsbaum.sendCommand(ON)
}
end
rule "Weihnachtslicht aus"
when
Time cron "0 0 8 * * ?" or // morgens 8 Uhr
Time cron "0 45 23 * * ?" // abends 23:45 Uhr
then
if (now.getDayOfYear < 7 || now.getDayOfYear > intStAdvent) {
logDebug("x-mas","Weihnachtsbeleuchtung aus.")
Swi_Weihnachtsbaum.sendCommand(OFF)
}
endCode: Alles auswählen
var Integer intStAdvent = 0
var Integer intEndeWeihnachten = 6 // 6. Januar
// Berechnung des ersten Advents und Steuerung der Beleuchtung
rule "Berechnung des ersten Advents"
when
System started or
Time cron "5 0 0 * * ?" // Wird bei Systemstart und täglich um Mitternacht ausgeführt
then
// Berechne den ersten Advent
val firstAdvent = (LocalDate.of(now.getYear, 12, 25) // Weihnachten am 25. Dezember
.minusDays(LocalDate.of(now.getYear, 12, 25).getDayOfWeek().getValue() + 21)) // Erster Advent ist 3-4 Wochen vor Weihnachten
intStAdvent = firstAdvent.getDayOfYear // Speichern des ersten Advents als Tag des Jahres
logInfo("holiday", "Der erste Advent ist am {}", firstAdvent)
end
// Regel für das Einschalten der Weihnachtsbeleuchtung
rule "Weihnachtslicht ein"
when
Time cron "0 0 6 * * ?" or // Morgens um 6 Uhr
Time cron "0 30 16 * * ?" // Nachmittags um 16:30 Uhr
then
// Prüfen, ob der aktuelle Tag des Jahres zwischen dem ersten Advent und dem 6. Januar liegt
if (now.getDayOfYear >= intStAdvent && now.getDayOfYear <= intEndeWeihnachten) {
logDebug("x-mas", "Weihnachtsbeleuchtung ein.")
Swi_Weihnachtsbaum.sendCommand(ON)
}
end
// Regel für das Ausschalten der Weihnachtsbeleuchtung
rule "Weihnachtslicht aus"
when
Time cron "0 0 8 * * ?" or // Morgens um 8 Uhr
Time cron "0 45 23 * * ?" // Abends um 23:45 Uhr
then
// Prüfen, ob der aktuelle Tag des Jahres zwischen dem ersten Advent und dem 6. Januar liegt
if (now.getDayOfYear >= intStAdvent && now.getDayOfYear <= intEndeWeihnachten) {
logDebug("x-mas", "Weihnachtsbeleuchtung aus.")
Swi_Weihnachtsbaum.sendCommand(OFF)
}
end
Code: Alles auswählen
rule "Weihnachtsschaltung1"
when
Item Dummy_1 changed to ON
or Time cron "0 0 16 * * ? *" or
Time cron "0 30 20 * * ? *"
then
var vXMasDayNumber = LocalDate.of(now.year,12,24).getDayOfYear() // Heiligabend - Tag des Jahres - Day of the Year
var vWeekDayXMAS = LocalDate.of(now.year,12,24).getDayOfWeek().getValue // Heiligabend - Christmas eve - Wochentag - Day of the Week
if (vWeekDayXMAS == 7) {
vWeekDayXMAS = 0 // Wenn Sonntag, dann Heiligabend und 4.Advent gleich - if Christmas eve is Sunday it equals to 4. Advent
logInfo("advent1", "Heiligabend und 4 Advent sind gleich {} ", vWeekDayXMAS)
} // Wenn Sonntag, dann Heiligabend und 4.Advent gleich - if Christmas eve is Sunday it equals to 4. Advent
else {
logInfo("advent1", "Heiligabend und 4 Advent sind nicht gleich {} ", vWeekDayXMAS)
}
var vFirstAdventDate = LocalDate.of(now.year,12,24).withDayOfYear(vXMasDayNumber - vWeekDayXMAS - 21) // 1. Advent
var vFirstAdventDay = vFirstAdventDate.getDayOfYear // Tag-Nr. 1. Advent
logInfo("advent1_1", "1.Advent ist am {}, der {} Tag des Jahres", vFirstAdventDate, vFirstAdventDay)
var vMemorialDayDate = LocalDate.of(now.year,12,24).withDayOfYear(vXMasDayNumber - vWeekDayXMAS - 28) // Totensonntag
var vMemorialDayDay = vMemorialDayDate.getDayOfYear // Tag-Nr. des Totensonntag
logInfo("advent1_2", "Totensonntag ist am {} Tag des Jahres", vMemorialDayDay)
val vHourMinute = Integer::parseInt(now.toLocalTime().getHour.toString + now.toLocalTime().getMinute.toString) // Stunde + Minute für Vergleich ob Ein- oder Ausschaltzeit (Minute kann ggf. weggelassen werden)
// val vHourMinute1 = Integer::parseInt((now.toLocalTime().getHour * 60).toString + now.toLocalTime().getMinute.toString) // Minuten seit Tagesanfang - auch eine Möglichkeit
val vDateOfDayOfYear = ZonedDateTime.now.with(LocalTime.of(0,0,0,0)).withDayOfYear(vFirstAdventDay) // Umrechnung Tag des Jahres in ein Datum, in diesem Falle Tag des 1. Advents
val vDateOfDayOfYear1 = ZonedDateTime.now.withDayOfYear(vFirstAdventDay) // Umrechnung Tag des Jahres in ein Datum, in diesem Falle Tag des 1. Advents mit al#ktueller Uhrzeit
logInfo("advent1_3", "1.Advent ist am: {} {} {}", vDateOfDayOfYear, vDateOfDayOfYear1, vHourMinute)
Date1stAdvent.postUpdate(new DateTimeType(vDateOfDayOfYear))
// 1 Advent Berechnung von udo1toni
val firstAdvent = LocalDate.of(now.getYear,12,25).minusDays(LocalDate.of(now.getYear,12,25).getDayOfWeek.getValue + 21)
val intStAdvent = firstAdvent.getDayOfYear
logInfo("advent1_4","Der erste Advent ist am {}, der {} Tag im Jahr", firstAdvent, intStAdvent)
// Ist es Weihnachtszeit ?
if (now.getDayOfYear < 7 || now.getDayOfYear > vMemorialDayDay) {
logInfo("advent1_4a", "Status Dummy_5 {}", Dummy_5.state)
// Ist es Einschaltzeit ? -> an Cron anpassen
if (vHourMinute >= 1600 && vHourMinute <= 2029) {
if (Dummy_5.state != ON) {
Dummy_5.sendCommand(ON)
logInfo("advent1_5", "Beleuchtung eingeschaltet {}", Dummy_5.state)
}
}
// Ist es Ausschaltzeit ? -> an Cron anpassen
if (vHourMinute >= 2030) {
if (Dummy_5.state != OFF) {
Dummy_5.sendCommand(OFF)
logInfo("advent1_6", "Beleuchtung ausgeschaltet {}", Dummy_5.state)
}
}
}
else {
logInfo("advent1_7", "Es ist keine Weihnachtszeit")
return;
}
end