[solved] Ein Newbie benötigt Hife bei einer Rule

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

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

Re: Ein Newbie benötigt Hife bei einer Rule

Beitrag von peter-pan »

Weil mich das Thema auch interessiert hat und ich eine ähnliche Regel in OH2 für die Weihnachtsbeleuchtung habe, habe ich mal versucht das Ganze in OH3 umzusetzen (1. Advent). Ich weiss nicht, ob du damit etwas anfangen kannst, aber ich könnte mir vorstellen, dass du auf dieser Basis evtl. mit einer Regel auskommen kannst.

Hier die Regel:

Code: Alles auswählen

rule "Weihnachtsbeleuchtung ab 1 Advent oder anders"
when
    Item Dummy_4 changed to ON
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
   var vFirstAdventNum1 = LocalDate.of(now.year,12,24).withDayOfYear(vXMasDayNumber - vWeekDayXMAS - 21)  // compressed

   logInfo("datumtest1", "Heiligabend ist am {} Wochentag",  vWeekDayXMAS)
   logInfo("datumtest1", "erster Advent ist (vFirstAdventNum1) am {} ",  vFirstAdventNum1)
end
Damit kannst du z. B. auch den Totensonntag (Sonntag vor 1. Advent = 7 Tage) oder den Buß- und Bettag (14 Tage vor 1. Advent) berechnen. Wenn Heiligabend und 4. Advent auf einen Tag fallen, ist auch berücksichtigt.

Heilige Drei Könige (6.1) ist ja klar.
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.3.5 openhabian

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

Re: Ein Newbie benötigt Hife bei einer Rule

Beitrag von udo1toni »

Der 4. Advent ist der letzte Sonntag vor dem 25.12. Ist der 25.12. ein Sonntag, so muss ich 7 Tage abziehen. Ist der 25.12. ein Montag, so muss ich einen Tag abziehen. Um vom 4. Advent auf den Totensonntag zu kommen (der 0. Advent...) muss man 28 Tage abziehen. Um wiederum auf den Montag nach dem Totensonntag zu kommen, muss man 1 addieren.

Es gibt einige Unterschiede zwischen Joda Time und JavaTime. Folgendes gilt erst mal für Joda Time:

.getDayOfWeek liefert den Wochentag als Zahl, wobei Montag = 1 und Sonntag = 7 ist.
.minusDays(x as int) zieht vom Datum x Tage ab.
.getDayOfYear liefert den Tag im Jahr als Integerwert

Für JavaTime gilt, dass .getDayOfWeek den Namen des Wochentags liefert, um den Wert als Integer zu erhalten, muss man .getValue anhängen.

Ich habe es jetzt nicht ausprobiert, gehe aber davon aus, dass die Formel

Code: Alles auswählen

intStAdvent = LocalDate.now.withMonth(12).withDayOfMonth(25).getDayOfYear - (now.withMonth(12).withDayOfMonth(25).getDayOfWeek.getValue +21)
als solche schon funktioniert, nur müsste sie den 1. Advent liefern. Totensonntag wäre +28, Montag nach Totensonntag wäre +27.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

int5749
Beiträge: 1173
Registriert: 4. Nov 2019 22:08
Answers: 9

Re: Ein Newbie benötigt Hife bei einer Rule

Beitrag von int5749 »

udo1toni hat geschrieben: 30. Nov 2021 12:42 Ich habe es jetzt nicht ausprobiert, gehe aber davon aus, dass die Formel

Code: Alles auswählen

intStAdvent = LocalDate.now.withMonth(12).withDayOfMonth(25).getDayOfYear - (now.withMonth(12).withDayOfMonth(25).getDayOfWeek.getValue +21)
als solche schon funktioniert, nur müsste sie den 1. Advent liefern. Totensonntag wäre +28, Montag nach Totensonntag wäre +27.
Ja, diese Formel liefert den 1. Advent, verifiziert mit Excel :)
Advent.JPG
Ich habe den Advent bei mir auch komplett in Ephemeris abgebildet, dort leider nur ohne die deutsche Übersetzung. Dies scheint noch ein Bug zu sein.
Ansonsten werden die Adventsonntage angezeigt und könnten direkt genutzt werden, komplett ohne Rule :geek:
Heilgabend etc sind dort ja eh schon enthalten.

Ausser natürlich zum schalten der Lampen, da braucht es dann eine Rule.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
openHAB 4.1.0 Release mit openHABian in einem Debian Bookworm (LXC) unter Proxmox 8.1.3

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

Re: Ein Newbie benötigt Hife bei einer Rule

Beitrag von udo1toni »

Ja, die Formel stammt aus der Vor-Ephemeris-Zeit. Da ich aber sowohl für Ostersonntag (= alle beweglichen Feiertage) als auch für die Adventszeit funktionierenden Code habe und Ephemeris auch nicht eben selbsterklärend ist und dann doch einiges an Nacharbeit verlangt, sehe ich für mich hier keinen Vorteil.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

mike69
Beiträge: 64
Registriert: 17. Nov 2020 22:38
Answers: 0

Re: Ein Newbie benötigt Hife bei einer Rule

Beitrag von mike69 »

Erstmal grossen Dank an Euch.
Langsam kommt ein Licht am Ende des Tunnels. :)

Nur, wie kommt das Rule auf einen Sonntag? Dieses Jahr ist der 1te Weihnachtstag ein Samstag, also 6 zurück der 4te Advent minus 21 der 1te Advent.
Bei dem Code von int5749 und udo1tony erkenne ich irgendwie nicht, wie er sich den letzten Sonntag vor Weihnachten sucht. Wisst Ihr was ich meine?
Es wird der 25.12. definiert und geht dann 21 bzw. 28 tage zurück. Wie wird der Sonntag erfasst? :)

Bei peter-pan`s code erkennt man noch die Suche nach einem Sonntag. :lol: :lol:

Ist ".getDayOfYear" ein Sonntag?
openHAB 4.2.0 auf Debian 12 als VM unter Proxmox

int5749
Beiträge: 1173
Registriert: 4. Nov 2019 22:08
Answers: 9

Re: Ein Newbie benötigt Hife bei einer Rule

Beitrag von int5749 »

mike69 hat geschrieben: 1. Dez 2021 09:29 Ist ".getDayOfYear" ein Sonntag?
Nein :)

Also die Formel - um den Tageszahl des 1. Advent im laufenden Jahr zu erhalten - einmal zerlegt
LocalDate.now.withMonth(12).withDayOfMonth(25).getDayOfYear
Diese liefert die Tageszahl des 25.12. => in diesem Jahr 359
now.withMonth(12).withDayOfMonth(25).getDayOfWeek
Würde den Wochentag liefern => in diesem Jahr Saturday

also verwenden wir
now.withMonth(12).withDayOfMonth(25).getDayOfWeek.getValue
Dies liefert die Zahl des Tages in der Woche => in diesem Jahr 6 für Samstag, denn die Woche ist eingeteilt von Sonntag (0) bis Samstag (6)

Somit erhalten wir bei
LocalDate.now.withMonth(12).withDayOfMonth(25).getDayOfYear - (now.withMonth(12).withDayOfMonth(25).getDayOfWeek.getValue)
Da wir nun vom Tag des Jahres die Wochenzahl abziehen, landen wir auf dem Sonntag vor dem 25.12. = 4. Advent => 353

Aber wir wollen ja den 1. Advent, also ziehen wir 3 weitere Wochen (3x 7 Tage) ab
LocalDate.now.withMonth(12).withDayOfMonth(25).getDayOfYear - (now.withMonth(12).withDayOfMonth(25).getDayOfWeek.getValue +21)
Somit landen wir auf dem 1. Advent => 332

Natürlich kannst Du noch 6 weitere Tage abziehen und landest dann auf dem Montag der auf den Totensonntag folgt (offizieller Start der Adventszeit)

Hoffe dies hilft Die so weiter?
openHAB 4.1.0 Release mit openHABian in einem Debian Bookworm (LXC) unter Proxmox 8.1.3

mike69
Beiträge: 64
Registriert: 17. Nov 2020 22:38
Answers: 0

Re: Ein Newbie benötigt Hife bei einer Rule

Beitrag von mike69 »

int5749 hat geschrieben: 1. Dez 2021 10:03 Hoffe dies hilft Die so weiter?
Auf alle Fälle. :D

So was mit paar Beispielen gehört angepinnt, wisst ihr das?
openHAB 4.2.0 auf Debian 12 als VM unter Proxmox

int5749
Beiträge: 1173
Registriert: 4. Nov 2019 22:08
Answers: 9

Re: Ein Newbie benötigt Hife bei einer Rule

Beitrag von int5749 »

mike69 hat geschrieben: 1. Dez 2021 10:28 Auf alle Fälle. :D
Prima
mike69 hat geschrieben: 1. Dez 2021 10:28 So was mit paar Beispielen gehört angepinnt, wisst ihr das?
Dies sind eher genutzte Basiscs (aber auch ich muss da immer suchen und freue mich hier über die Hilfe im Forum)
Zwecks anpinnen müsste dies mal jemand komplett niederschreiben und dokumentieren, dies ist dann neben der Arbeit und Privatleben meist runterpriorisiert :lol:
openHAB 4.1.0 Release mit openHABian in einem Debian Bookworm (LXC) unter Proxmox 8.1.3

mike69
Beiträge: 64
Registriert: 17. Nov 2020 22:38
Answers: 0

Re: Ein Newbie benötigt Hife bei einer Rule

Beitrag von mike69 »

int5749 hat geschrieben: 1. Dez 2021 10:51 Zwecks anpinnen müsste dies mal jemand komplett niederschreiben und dokumentieren, dies ist dann neben der Arbeit und Privatleben meist runterpriorisiert :lol:
Ja, das stimmt. :)
Dann ist der Thread erledigt, danke an alle.
openHAB 4.2.0 auf Debian 12 als VM unter Proxmox

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

Re: [solved] Ein Newbie benötigt Hife bei einer Rule

Beitrag von peter-pan »

int5749 hat geschrieben: 1. Dez 2021 10:03 Dies liefert die Zahl des Tages in der Woche => in diesem Jahr 6 für Samstag, denn die Woche ist eingeteilt von Sonntag (0) bis Samstag (6)
...ich möchte ja nicht "klugscheissern", aber könnte es sein, dass es eigentlich lauten muss Montag (1) bis Sonntag (7) ?

So verstehe ich zumindest die Doku zu DayOfWeek(getValue).
Ich habe deshalb in meiner Beispiel-Regel einen etwas anderen Ansatz gewählt.

Im Jahr 2023 fallen übrigens Heiligabend und 4. Advent wieder zusammen.
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.3.5 openhabian

Antworten