Rule - Xmas-Beleuchtung

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

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

Rule - Xmas-Beleuchtung

Beitrag von EMaster »

Servus,

ich hatte in letzter Zeit schon ein wenig mit Rules experimentiert, was auch durch intensive Recherche immer zum Erfolg führte. Aktuell stehe ich jedoch auf dem Schlauch und habe auch in den Weiten des Inet nicht das gefunden, was ich benötige.
Folgendes wollte ich realisieren.
Die Weihnachtsbeleuchtung soll vom 1. Dezember - 6. Januar nach bestimmten Zeiten schalten, jedoch am Wochenende anders, als unter der Woche. Der letzte erste Schaltpunkt soll am 1. Dezember 5.00Uhr/5.30Uhr (je nach Tag) sein und der letzte am 6. Januar um 23.59Uhr.
Folgende Experimente habe ich bereits gemacht aber alle haben nicht funktioniert. "Invalid..." (Ich habe es dann erstmal immer auskommentiert!)

Code: Alles auswählen

// Schaltet die Weihnachtsbeleuchtung vom 1. Dezember bis 6. Januar

rule "Xmas-Beleuchtung EIN"

when
Time cron "0 30 5 * * MON,TUE,WED,THU,FRI *"
// Time cron "0 51 12 1-31 11 1-5"
// Time cron "0 37 21 ? 11 MON,WED,FRI *" or
// Time cron "0 45 21 31-1 11 SAT,SUN *" or
// Time cron "0 05 05 1-31 11 TUE,THU *"
// Time cron "0 30 05 1-31 12 MON,TUE,WED,THU,FRI,SAT,SUN" or
// Time cron "0 00 15 1-31 12 SAT,SUN" or
// Time cron "0 00 16 1-31 12 MON,TUE,WED,THU,FRI" or
// Time cron "0 30 05 1-6 1 MON,TUE,WED,THU,FRI,SAT,SUN" or
// Time cron "0 00 05 1-6 1 SAT,SUN" or
// Time cron "0 00 16 1-6 1 MON,TUE,WED,THU,FRI"

then
Swi_FritzBox.sendCommand(ON)
end


rule "Xmas-Beleuchtung AUS"

when
Time cron "0 55 12 * * ?"
// Time cron "0 42 21 ? 11 MON,WED,FRI *" or
// Time cron "0 50 21 31-1 11 SAT,SUN *" or
// Time cron "0 15 05 1-31 11 TUE,THU *"
// Time cron "0 00 08 1-31 12 MON,TUE,WED,THU,FRI" or
// Time cron "0 30 09 1-31 12 SAT,SUN" or
// Time cron "0 30 00 2-31 12 MON,TUE,WED,THU,FRI,SAT,SUN" or
// Time cron "0 00 08 1-6 1 MON,TUE,WED,THU,FRI" or
// Time cron "0 30 09 1-6 1 SAT,SUN" or
// Time cron "0 30 00 1-5 1 MON,TUE,WED,THU,FRI,SAT,SUN" or
// Time cron "0 59 23 6 1 ?"

then
Swi_FritzBox.sendCommand(OFF)
(Ich habe gelesen, dass der Cron-Tag mindestens ein ? enthalten muss und damit funktioniert meine Datumsbeschränkung vermutlich nicht. )

Wie könnte ich das denn lösen?
Ich hatte mir das mit Time cron simpel vorgestellt aber irgendwie schein es nicht so zu sein.
Ich wollte auch nicht für jedem Tag eine einzelne Rule machen.

Danke für Eure Vorschläge...
openHAB 4.3.4 im Docker@Synology

Benutzeravatar
peter-pan
Beiträge: 2769
Registriert: 28. Nov 2018 12:03
Answers: 30
Wohnort: Schwäbisch Gmünd

Re: Rule - Xmas-Beleuchtung

Beitrag von peter-pan »

Was genau ist denn "Invalid". Kannst du die Fehlermeldung posten. Auf jeden Fall fehlen (in den auskommentierten) Trigger-Bedingungen einige "or" Bedingungen. ;)
EMaster hat geschrieben: 9. Nov 2019 11:03 Time cron "0 30 5 * * MON,TUE,WED,THU,FRI *"
// Time cron "0 51 12 1-31 11 1-5"
// Time cron "0 37 21 ? 11 MON,WED,FRI *" or
// Time cron "0 45 21 31-1 11 SAT,SUN *" or
// Time cron "0 05 05 1-31 11 TUE,THU *"
// Time cron "0 30 05 1-31 12 MON,TUE,WED,THU,FRI,SAT,SUN" or
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.3.5 openhabian

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

Re: Rule - Xmas-Beleuchtung

Beitrag von EMaster »

Eine Zeile aus der openhab.log wäre zum Beispiel: Cannot create timer for rule 'Xmas-Beleuchtung EIN': CronExpression '0 51 12 1-31 11 1-5' is invalid.
Heißt ja eigentlich im Klartext nur, dass die Cron-Parameter nicht passen.

Die "or" Bedingungen sind nicht das Problem. Die fehlen nur, weil ich da verschiedenes (blockweise) probiert habe.
openHAB 4.3.4 im Docker@Synology

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

Re: Rule - Xmas-Beleuchtung

Beitrag von udo1toni »

EMaster hat geschrieben: 9. Nov 2019 11:03 (Ich habe gelesen, dass der Cron-Tag mindestens ein ? enthalten muss und damit funktioniert meine Datumsbeschränkung vermutlich nicht. )
Ein gültiges Time cron Statement enthält exakt ein ?, nicht mehr und nicht weniger.

Das Fragezeichen ist der Tatsache geschuldet, dass man nicht sinnvoll auf bestimmte Tage eines Monats und gleichzeitig bestimmten Wochentagen einschränken kann. Naja, streng genommen natürlich schon, aber dann geht es wieder um Datumsbereiche. Es gibt zwei Möglichkeiten, mit dem Problem umzugehen, entweder, Du beschränkst die Ausführung der Rules auf die Wochentage und Monate und prüfst dann innerhalb der Rule, ob der Tag passt, oder Du begrenzt die Ausführung der Rule auf Monate und Tage und prüfst anschließend auf die Wochentage. Da die Obergrenze der 6. Januar ist, bietet es sich an, die erste Variante zu verwenden, da eine Zeitspanne vom 1. Dezember bis zum 6. Januar ohnehin nicht in ein Statement passt.

Die Menge an Schaltzeiten macht es ehrlich gesagt etwas kompliziert.

Code: Alles auswählen

rule "Xmas-Beleuchtung EIN"
when
    Time cron "0 30 05 * 12 ?"  or // 05:30:00 Uhr, Dezember
    Time cron "0 30 05 1-6 1 ?"    //05:30:00 Uhr, 1.-6. Januar
then
    Swi_FritzBox.sendCommand(ON)
end
schaltet von Montag bis Sonntag vom 1.12. bis 6.1.

Code: Alles auswählen

rule "Xmas-Beleuchtung EIN"
when
    Time cron "0 00 16 ? 12,1 1-5" // 16:00:00 Uhr Montag-Freitag, Dezember und Januar
then
    if(now.getDayOfYear < 7 || now.getMonth = 12)
        Swi_FritzBox.sendCommand(ON)
end
Den Tag des Jahres zu prüfen hat den Vorteil, dass man nur eine Bedingung für den 1. bis 6. Januar benötigt. es gibt noch einen kleinen Trick:

Code: Alles auswählen

rule "Xmas-Beleuchtung EIN"
when
    Time cron "0 00 16 ? 12,1 1-5" // 16:00:00 Uhr Montag-Freitag, Dezember und Januar
then
    if(now.plusDays(31).getDayOfYear < 38) /1. Dezember + 31 Tage = 1. Januar = 1. Tag...
        Swi_FritzBox.sendCommand(ON)
end
Die Rules werden also den gesamten Januar ausgeführt, der Schaltbefehl wird aber nur bis zum 6. Januar ausgeführt.
openHAB4.3.5 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

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

Re: Rule - Xmas-Beleuchtung

Beitrag von EMaster »

Danke Dir erstmal für die ausführliche Erklärung. Ich schaue mir das mal in Ruhe an und versuche da durchzusteigen.
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 »

Dann müsste das jetzt so funktionieren?

Code: Alles auswählen

// Schaltet die Weihnachtsbeleuchtung (Innen) vom 1. Dezember bis 6. Januar

rule "Xmas-Beleuchtung (Innen) EIN"

when
    Time cron "0 30 05 ? 12,1 1-5" or // 05:30:00 Uhr Montag-Freitag, Dezember und Januar
    Time cron "0 00 16 ? 12,1 1-5" or // 16:00:00 Uhr Montag-Freitag, Dezember und Januar
    Time cron "0 00 05 ? 12,1 6-7" or // 05:00:00 Uhr Samstag + Sonntag, Dezember und Januar
    Time cron "0 00 15 ? 12,1 6-7"    // 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 30 07 ? 12,1 1-5" or // 07:30:00 Uhr Montag-Freitag, Dezember und Januar
    Time cron "0 45 23 ? 12,1 1-5" or // 23:45:00 Uhr Montag-Freitag, Dezember und Januar
    Time cron "0 00 10 ? 12,1 6-7" or // 10:00:00 Uhr Samstag + Sonntag, Dezember und Januar
    Time cron "0 59 23 ? 12,1 6-7"    // 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
Wie müsste ich dann diese Regel noch erweitern, dass die Beleuchtung am 6. Januar um 23:59Uhr ausschaltet?
Der aktuell letzte Schaltpunkt wäre "EIN" um 15.00 oder 16.00Uhr am 6. Januar.

Code: Alles auswählen

// Schaltet die Weihnachtsbeleuchtung (Aussen) vom 1. Dezember bis 6. Januar

rule "Xmas-Beleuchtung (Aussen) EIN"

when
    Time cron "0 00 16 ? 12,1 1-5" or // 16:00:00 Uhr Montag-Freitag, Dezember und Januar
    Time cron "0 00 15 ? 12,1 6-7" // 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)
        Swi_Xmas_Aussen.sendCommand(ON)
end



rule "Xmas-Beleuchtung (Aussen) AUS"

when
    Time cron "0 00 08 ? 12,1 1-5" or // 16:00:00 Uhr Montag-Freitag, Dezember und Januar
    Time cron "0 00 09 ? 12,1 6-7" // 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)
        Swi_Xmas_Aussen.sendCommand(OFF)
end
Herzlichen Dank
openHAB 4.3.4 im Docker@Synology

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

Re: Rule - Xmas-Beleuchtung

Beitrag von udo1toni »

Na ja, da es sich um ein fixes Datum und eine fixe Uhrzeit handelt, sollte nichts dagegen sprechen, das als zusätzlichen Time cron Ausdruck an die OFF-Rule zu koppeln:

Code: Alles auswählen

Time cron "59 59 23 6 1 ?" or // weitere Trigger
openHAB4.3.5 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

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

Re: Rule - Xmas-Beleuchtung

Beitrag von EMaster »

Guten Morgen,

heute war der große Tag.
Leider funktioniert es nicht ganz so, wie gedacht und ich verstehe gerade nicht warum.
Obwohl am Wochenende (6-7) erst 10:00Uhr ausgeschalten werden soll, wurde die Regel laut LOG 7:30Uhr ausgeführt, was eigentlich Mo - Fr (1-5) passieren soll.

Code: Alles auswählen

rule "Xmas-Beleuchtung (Innen) AUS"

when
    Time cron "0 30 07 ? 12,1 1-5" or // 07:30:00 Uhr Montag-Freitag, Dezember und Januar
    Time cron "0 45 23 ? 12,1 1-5" or // 23:45:00 Uhr Montag-Freitag, Dezember und Januar
    Time cron "0 00 10 ? 12,1 6-7" or // 10:00:00 Uhr Samstag + Sonntag, Dezember und Januar
    Time cron "0 59 23 ? 12,1 6-7"    // 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
Ich habe es gerade noch einmal simuliert.
Es wird immer der Time crone fürs WE (6-7) ignoriert und die Zeit unter der Woche(1-5) genommen.
openHAB 4.3.4 im Docker@Synology

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

Gelöst: Re: Rule - Xmas-Beleuchtung

Beitrag von EMaster »

Ich hab die Lösung gefunden!

Die Angaben der Tage mit 1,2,3,4,5,6,7 scheint er zu ignorieren. Wenn ich stattdessen "SAT,SUN" und "MON,TUE,WED,THU,FRI" eintrage, benutzt er den richtigen Time cron.

Code: Alles auswählen

rule "Xmas-Beleuchtung (Innen) AUS"

when
    Item Swi_Dummy changed or
    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
Ich teste das aber nochmal Live. :-)
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 »

Ich wollte mich nochmal für die Hilfestellungen bedanken. Es hat alles perfekt geklappt.
openHAB 4.3.4 im Docker@Synology

Antworten