Seite 2 von 2

Re: Rule - Xmas-Beleuchtung

Verfasst: 29. Jan 2020 23:47
von udo1toni
Immer gerne :)

Re: Rule - Xmas-Beleuchtung

Verfasst: 12. Okt 2020 22:25
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

Re: Rule - Xmas-Beleuchtung

Verfasst: 14. Okt 2020 11:28
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).

Re: Rule - Xmas-Beleuchtung

Verfasst: 4. Dez 2020 22:50
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? :?:

Re: Rule - Xmas-Beleuchtung

Verfasst: 27. Nov 2023 17:46
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

Re: Rule - Xmas-Beleuchtung

Verfasst: 27. Nov 2023 23:16
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

Re: Rule - Xmas-Beleuchtung

Verfasst: 30. Nov 2023 17:35
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

Re: Rule - Xmas-Beleuchtung

Verfasst: 1. Dez 2023 02:13
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) {