Wie gestalte ich die Bedingung für jede zweite oder dritte Wochen am Besten?

Begonnen von Marko1976, 16 Februar 2026, 17:34:56

Vorheriges Thema - Nächstes Thema

Marko1976

Hallo,
mal eine Frage an die Profis.
Ich möchte gerne eine Aufgabe jede zweite oder dritte Woche ausführen lassen.
Für ungrade Wochen kann ich ja folgenden Code nutzen:
int(($mday-1)/7)==2))
Aber wie kann ich das zum Beispiel für jeden 2. Sonntag schreiben, also der 2., der 4., der 6. Sonntag etc.?

Das einzige was ich gefunden habe ist "$week". Mein Ansatz wäre jetzt die Kalenderwoche durch 2 und dann zu prüfen ob das Ergebnis eine Ganzzahl ist, also 2/2=1, 4/2=2, 6/2=3, aber 1/2=0,5, 3/2=1,5 etc.
Zur Prüfung ob es sich um eine Ganzzahl handelt habe ich dies gefunden:
if ($variable eq int($variable)) {
    Log 1, "Ist eine Ganzzahl";
}
Doch wie bekomme ich das kombiniert und beides dann in die Bedingungsabfrage des DOIF?
Außerdem wäre das keine Lösung für die 3. Woche, die 4. Woche Woche etc..

Gibt es keine einfachere Alternative?

rabehd

Bei DOIF würde ich damit mal Überlegungen anstellen.
https://forum.fhem.de/index.php?msg=951310
Vermutlich brauchst Du die Startwoche als Reading.
Auch funktionierende Lösungen kann man hinterfragen.

betateilchen

Grundsätzliches Vorgehen (Vorschlag):

  • ermittle den ersten Sonntag des Jahres
  • ermittle die Differenz zwischen "heute" und dem ersten Sonntag des Jahres
  • rechne Differenz%14, ist das Ergebnis 0, hast Du einen "jeden zweiten" Sonntag



Alternativ kannst Du auch mit $yday rechnen.

Wenn Du $yday%21 rechnest und dabei 3 rauskommt, hast Du einen "jeden dritten" Sonntag. Der Wert "3" zum Vergleichen gilt aber nur für 2026, da es davon abhängig ist, mit welchem Wochentag das Jahr begonnen hat. Aber auch das lässt sich ja leicht herausfinden, indem man den Wochentag zu 01.01.$year ermittelt.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Marko1976

Ich würde eher die zweite Methode favorisieren, da ich es gerne so genrisch wie möglich halten möchte um unabhängig zu bleiben. Außerdem war der Sonntag nur als Beispiel gedacht und noch nicht der endgültig gewählte Tag. Mir war nicht bewusst, dass der Tag so einen Unterschied machen kann, da ich den ja im Trigger mit der Uhrzeit festlege (Meine Idee ).

Zitat von: betateilchen am 16 Februar 2026, 19:12:29Der Wert "3" zum Vergleichen gilt aber nur für 2026, da es davon abhängig ist, mit welchem Wochentag das Jahr begonnen hat.
Wieso macht der erste Wochentag einen Unterschied?

Hab es mit einem Test-DOIF mit einer KI-Lösung wie folgt probiert:
([00:01|2] and ($week % 2 == 0))Zumindest das aktivieren hat schon mal funktioniert. Frage ist, ob das DOIF morgen oder wann auch immer wieder zurück auf einen anderen Zweig schaltet. Das darf nämlich nicht passieren, da es sich um einen Alarmgeber handelt, der nur durch manuelle Aktion zurückgesetzt werden darf.