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!