Seite 2 von 14
Re: Ein Newbie benötigt Hife bei einer Rule
Verfasst: 30. Nov 2021 12:22
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.
Re: Ein Newbie benötigt Hife bei einer Rule
Verfasst: 30. Nov 2021 12:42
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.
Re: Ein Newbie benötigt Hife bei einer Rule
Verfasst: 30. Nov 2021 18:32
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
Heilgabend etc sind dort ja eh schon enthalten.
Ausser natürlich zum schalten der Lampen, da braucht es dann eine Rule.
Re: Ein Newbie benötigt Hife bei einer Rule
Verfasst: 30. Nov 2021 19:59
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.
Re: Ein Newbie benötigt Hife bei einer Rule
Verfasst: 1. Dez 2021 09:29
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.
Ist ".getDayOfYear" ein Sonntag?
Re: Ein Newbie benötigt Hife bei einer Rule
Verfasst: 1. Dez 2021 10:03
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?
Re: Ein Newbie benötigt Hife bei einer Rule
Verfasst: 1. Dez 2021 10:28
von mike69
int5749 hat geschrieben: ↑1. Dez 2021 10:03
Hoffe dies hilft Die so weiter?
Auf alle Fälle.
So was mit paar Beispielen gehört angepinnt, wisst ihr das?
Re: Ein Newbie benötigt Hife bei einer Rule
Verfasst: 1. Dez 2021 10:51
von int5749
mike69 hat geschrieben: ↑1. Dez 2021 10:28
Auf alle Fälle.
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

Re: Ein Newbie benötigt Hife bei einer Rule
Verfasst: 1. Dez 2021 10:59
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
Ja, das stimmt.

Dann ist der Thread erledigt, danke an alle.
Re: [solved] Ein Newbie benötigt Hife bei einer Rule
Verfasst: 1. Dez 2021 13:17
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.