Rule - Xmas-Beleuchtung

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Benutzeravatar
udo1toni
Beiträge: 15244
Registriert: 11. Apr 2018 18:05
Answers: 242
Wohnort: Darmstadt

Re: Rule - Xmas-Beleuchtung

Beitrag von udo1toni »

Immer gerne :)
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

EMaster
Beiträge: 107
Registriert: 13. Dez 2018 21:02
Answers: 2

Re: Rule - Xmas-Beleuchtung

Beitrag von EMaster »

Hallo udo1toni,

die Zeitschaltung hatte ja im letzten Jahr super funktioniert.
Um es zu verstehen, habe ich doch noch mal eine Frage.
Dieses Jahr wäre ja der erste Advent am 29.11..
Wie müsste ich denn die Regeln zum Ein- bzw. Ausschalten anpassen?
Bisher wurde ja nur der Monat 12 & 1 in Betracht gezogen und am 30.11. wurde manuell eingeschaltet.

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)
end

Vielen herzlichen Dank
openHAB 4.3.4 im Docker@Synology

Benutzeravatar
udo1toni
Beiträge: 15244
Registriert: 11. Apr 2018 18:05
Answers: 242
Wohnort: Darmstadt

Re: Rule - Xmas-Beleuchtung

Beitrag von udo1toni »

Na, das Eine sind die Time cron Ausdrücke, da muss das 12,1 gegen 11,12,1 getauscht werden, das Zweite ist das plusDays, da muss die 31 gegen eine 33 getauscht werden (29.11. + 33 Tage = 1. Januar), das Dritte ist dann der Vergleich <38, da muss dann logischerweise < 40 stehen (6.1. + 33 = 39. Tag).
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

EMaster
Beiträge: 107
Registriert: 13. Dez 2018 21:02
Answers: 2

Re: Rule - Xmas-Beleuchtung

Beitrag von EMaster »

Hat wieder perfekt funktioniert. Danke.
Ich glaube, jetzt habe ich es auch verstanden. :-)

Gibt eigentlich eine Website, wo das alles dokumentiert ist oder wo bekommt man das (dein) ganzes Wissen her? :?:
openHAB 4.3.4 im Docker@Synology

EMaster
Beiträge: 107
Registriert: 13. Dez 2018 21:02
Answers: 2

Re: Rule - Xmas-Beleuchtung

Beitrag von EMaster »

Alle Jahre wieder. :-) Nein, die letzten Jahre hat immer alles super funktioniert, nur dieses Jahr ist der Wurm drin.
Ich habe die Rule angepasst, aber sie wird trotzdem seit heute ausgelöst. - Kann mir das evtl. jemand erklären???

***Dieser Teil scheint nach einem Neustart von OH zu funktionieren! In der UI hat es mir noch alte, nicht mehr gültige Rules angezeigt.***

Aktuell passe ich die Rule für jedes Jahr manuell an. Gibt es vielleicht eine elegantere Lösung, den Start der Rule zu berechnen?

Code: 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
Was ich noch seltsam finde ist, dass im UI die Rules alle doppelt stehen.
OH2023-11-27 18_27_13-.png
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
openHAB 4.3.4 im Docker@Synology

Benutzeravatar
udo1toni
Beiträge: 15244
Registriert: 11. Apr 2018 18:05
Answers: 242
Wohnort: Darmstadt

Re: Rule - Xmas-Beleuchtung

Beitrag von udo1toni »

Gewöhnlich sollte die Weihnachtsbeleuchtung abhängig vom ersten Advent geschaltet werden, je nach Gegend entweder ab Montag nach dem Totensonntag oder eben direkt ab dem ersten Advent.

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
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

EMaster
Beiträge: 107
Registriert: 13. Dez 2018 21:02
Answers: 2

Re: Rule - Xmas-Beleuchtung

Beitrag von EMaster »

Hallo Udo,

vielen Dank erstmal für das Skript.
Im LOG steht jetzt folgendes.

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-03
Das heißt quasi, dass der 1. Advent für den 03. Dezember berechnet wird.

Was muss jetzt angepasst werden, dass die Beleuchtung am 01. Dezember oder/und wie Du geschrieben hast, am Montag nach dem Totensonntag einschalten soll?

Danke
openHAB 4.3.4 im Docker@Synology

Benutzeravatar
udo1toni
Beiträge: 15244
Registriert: 11. Apr 2018 18:05
Answers: 242
Wohnort: Darmstadt

Re: Rule - Xmas-Beleuchtung

Beitrag von udo1toni »

Für den ersten Dezember prüfst Du einfach, ob der erste Dezember erreicht ist :) Für den Montag nach Totensonntag prüfst Du, ob 1. Advent minus 6 Tage erreicht ist.
Prüfung ob vor dem 7.1. oder schon Dezember:

Code: Alles auswählen

if (now.getDayOfYear < 7 || now.getMonthValue == 12) {
Prüfung ob vor dem 7.1. oder nach Totensonntag:

Code: Alles auswählen

if (now.getDayOfYear < 7 || now.getDayOfYear > intStAdvent - 7) {
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Antworten