FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: Marko1976 am 16 Februar 2026, 17:34:56

Titel: Wie gestalte ich die Bedingung für jede zweite oder dritte Wochen am Besten?
Beitrag von: Marko1976 am 16 Februar 2026, 17:34:56
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?
Titel: Aw: Wie gestalte ich die Bedingung für jede zweite oder dritte Wochen am Besten?
Beitrag von: rabehd am 16 Februar 2026, 18:19:32
Bei DOIF würde ich damit mal Überlegungen anstellen.
https://forum.fhem.de/index.php?msg=951310 (https://forum.fhem.de/index.php?msg=951310)
Vermutlich brauchst Du die Startwoche als Reading.
Titel: Aw: Wie gestalte ich die Bedingung für jede zweite oder dritte Wochen am Besten?
Beitrag von: betateilchen am 16 Februar 2026, 19:12:29
Grundsätzliches Vorgehen (Vorschlag):




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.
Titel: Aw: Wie gestalte ich die Bedingung für jede zweite oder dritte Wochen am Besten?
Beitrag von: Marko1976 am 17 Februar 2026, 00:23:05
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.
Titel: Aw: Wie gestalte ich die Bedingung für jede zweite oder dritte Wochen am Besten?
Beitrag von: betateilchen am 17 Februar 2026, 08:47:33
Zitat von: Marko1976 am 17 Februar 2026, 00:23:05Wieso macht der erste Wochentag einen Unterschied?

Weil sich daraus die Differenz zum ersten Sonntag im Jahr ergibt.
Und darauf wird in der Modulo-Rechnung getestet.


01.01.2026 -> Donnerstag -> $yday=0 -> erster Sonntag: $yday=3
01.01.2027 -> Freitag    -> $yday=0 -> erster Sonntag: $yday=2


Zitat von: Marko1976 am 17 Februar 2026, 00:23:05mit einer KI-Lösung wie folgt

🤮

Sowas ist nie eine "intelligente" Lösung, sondern immer nur eine statistische Annahme.
Titel: Aw: Wie gestalte ich die Bedingung für jede zweite oder dritte Wochen am Besten?
Beitrag von: Damian am 17 Februar 2026, 08:50:22
Zitat von: Marko1976 am 17 Februar 2026, 00:23:05Ich 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.


Dein DOIF wird jeden Tag getriggert, danach wird geschaut, welcher Wochentag es ist, wenn die Bedingungen wahr sind, geht es in die Auswertung der ganzen Bedingung. Wenn die Wochenabfrage nicht wahr ist (hier bei ungerader Woche), wird der Zweig nicht ausgeführt und es geht weiter mit der nächsten DOELSEIF-Abfrage bzw. zu DOELSE am Ende.

Möchtest du die Zweige unabhängig voneinander haben, musst du mehrere DOIFs definieren oder DOIF-Perl verwenden.


Titel: Aw: Wie gestalte ich die Bedingung für jede zweite oder dritte Wochen am Besten?
Beitrag von: Marko1976 am 17 Februar 2026, 10:05:16
Zitat von: betateilchen am 17 Februar 2026, 08:47:33Weil sich daraus die Differenz zum ersten Sonntag im Jahr ergibt.
Und darauf wird in der Modulo-Rechnung getestet.
Dann ist es ja auch keine endgültige Lösung sondern muss jedes Jahr angepasst werden. Ich wüsste jedenfalls keinen Weg die Differenz automatisch zu bestimmen. Bin aber in Perl auch nicht wirklich fit.
Zitat von: betateilchen am 17 Februar 2026, 08:47:33Sowas ist nie eine "intelligente" Lösung, sondern immer nur eine statistische Annahme.
Ich bin davon auch nicht begeistert, aber wenn man gar keine Idee hat ist es als Stichwort- oder Ideengeber nicht schlecht.
Außerdem wird man gerade hier im Forum immer wieder darauf verwiesen, nach dem Motto schau doch erst mal bei KI ehe du hier fragst.
Wenn ich "{$yday%21}" in der Eingabezeile ausführe, bekomme ich heute den Wert 5 zurückgegeben, doch für was steht diese 5 genau? Ist das der Tag in der Woche, die Woche im Monat oder oder oder? Ich weiß auch nicht wofür das % steht ich kenne nur / als Divisor. Oder ist das %21 eine interne Funktion in Perl? Am einfachsten nachzuvollziehen fände ich eine Funktion die sich auf die Kalenderwoche bezieht, aber ist Kalenderwoche=2, =4, etc. würde natürlich eine Unmenge an Abfragen bilden.

Zitat von: Damian am 17 Februar 2026, 08:50:22Dein DOIF wird jeden Tag getriggert, danach wird geschaut, welcher Wochentag es ist, wenn die Bedingungen wahr sind, geht es in die Auswertung der ganzen Bedingung. Wenn die Wochenabfrage nicht wahr ist (hier bei ungerader Woche), wird der Zweig nicht ausgeführt und es geht weiter mit der nächsten DOELSEIF-Abfrage bzw. zu DOELSE am Ende.
Ok, hätte vielleicht besser das gesamte DEF gepostet als nur die einzelne Abfrage.
Also der erste Zweig dient ausschließlich zum Zurücksetzen und soll nur manuell oder per FTUI3 ausgelöst werden ohne automatischen Trigger, entspricht also dem Standardwert. Nur wenn dann die Bedingung des zweiten Zweigs zutreffend ist soll das DOIF umspringen und dann diesen Wert beibehalten bis er manuell zurückgesetzt wird.
Hier mal das gesamte DEF:
(xxx)
    (setreading Hausarbeit_Test Wert 0)
DOELSEIF ([00:01|2] and ($week % 2 == 0))
    (setreading Hausarbeit_Test Wert Toilette putzen)
Wie gesagt, erstmal alles nur zum testen.
Aber wenn du schreibst gerade/ungerade Woche ist das ja genau das was ich nicht will. Bei der Fragestellung war auch explizit jede zweite Woche und nicht gerade/ungerade wochen bei der KI angegeben. Klar, jede 2. Woche trifft natürlich auf eins der beiden zu, aber ich möchte das Gleiche durch kleine Anpassungen auch genauso für jede 3. Woche oder jede 4. Woche nutzen können. Das geht ja dann offenbar nicht.

Das Ganze soll eine Aufgabenerinnerung steuern und eben für diverseste Aufgaben funktionieren. wobei die eine Aufgabe eben alle zwei Wochen eintritt, eine andere alle drei Wochen und wieder eine andere an festen Terminen (dafür habe ich bereits eine Lösung).
Titel: Aw: Wie gestalte ich die Bedingung für jede zweite oder dritte Wochen am Besten?
Beitrag von: Damian am 17 Februar 2026, 10:18:12
Zitat von: Marko1976 am 17 Februar 2026, 10:05:16Aber wenn du schreibst gerade/ungerade Woche ist das ja genau das was ich nicht will. Bei der Fragestellung war auch explizit jede zweite Woche und nicht gerade/ungerade wochen bei der KI angegeben. Klar, jede 2. Woche trifft natürlich auf eins der beiden zu, aber ich möchte das Gleiche durch kleine Anpassungen auch genauso für jede 3. Woche oder jede 4. Woche nutzen können. Das geht ja dann offenbar nicht.


Das ist offenbar das Problem der KI-Anwendung. Die hast du offenbar nicht hinterfragt, denn dann wüsstest du was "$week % 2" wirklich bedeutet ;)

Dass man immer stärker an KI-Aussagen glaubt, ohne sie wirklich zu verstehen, ist eine traurige Entwicklung.

Titel: Aw: Wie gestalte ich die Bedingung für jede zweite oder dritte Wochen am Besten?
Beitrag von: Marko1976 am 17 Februar 2026, 10:23:15
Zitat von: Damian am 17 Februar 2026, 10:18:12hast du offenbar nicht hinterfragt, denn dann wüsstest du was "$week % 2" wirklich bedeutet
hinterfragt schon, doch ohne Perl zu lernen bringt mir das hinterfragen ja auch nichts. wie oben noch ergänzt kenne ich zum Beispiel das % nicht als Rechen-/Funktionszeichen.
Außerdem sollte dann erstmal aufgehört werden hier im Forum darauf zu verweisen, oder denkst du nicht?
Titel: Aw: Wie gestalte ich die Bedingung für jede zweite oder dritte Wochen am Besten?
Beitrag von: Damian am 17 Februar 2026, 10:25:47
Zitat von: Marko1976 am 17 Februar 2026, 10:23:15
Zitat von: Damian am 17 Februar 2026, 10:18:12hast du offenbar nicht hinterfragt, denn dann wüsstest du was "$week % 2" wirklich bedeutet
hinterfragt schon, doch ohne Perl zu lernen bringt mir das hinterfragen ja auch nichts. wie oben noch ergänzt kenne ich zum Beispiel das % nicht als Rechen-/Funktionszeichen.

Dann frag doch mal die KI, was in Perl $week % 2 wirklich bedeutet, dann wirst du feststellen, dass du den mathematischen Hintergrund schon in der Grundschule gelernt hast :)
Titel: Aw: Wie gestalte ich die Bedingung für jede zweite oder dritte Wochen am Besten?
Beitrag von: RalfRog am 17 Februar 2026, 10:33:22
Zitat von: Marko1976 am 17 Februar 2026, 10:23:15Außerdem sollte dann erstmal aufgehört werden hier im Forum darauf zu verweisen, oder denkst du nicht?

...bitte nicht wieder falsch abbiegen...
Titel: Aw: Wie gestalte ich die Bedingung für jede zweite oder dritte Wochen am Besten?
Beitrag von: Marko1976 am 17 Februar 2026, 10:39:22
Das ist das genaue Ergebnis meiner Frage an die KI:
ZitatErstelle eine DOIF-Bedingung die durch anpassung jede zweite Woche, jede dritte Woche oder auch jede vierte Woche sonntags zutrifft
Das Grundprinzip
Die Bedingung prüft, ob die aktuelle Woche geteilt durch das Intervall einen bestimmten Rest ergibt.
Formel: $week % Intervall == 0 (oder 1, 2, etc.)
Zusatz: Damit das DOIF nur einmal am Tag (z.B. montags um 08:00 Uhr) prüft, kombinieren wir dies mit einer Zeitangabe.
Die DOIF-Varianten
Intervall    DOIF-Bedingung (Beispiel Montags 08:00)
Jede 2. Woche    [[08:00|0] and $week % 2 == 0]
Jede 3. Woche    [[08:00|0] and $week % 3 == 0]
Jede 4. Woche    [[08:00|0] and $week % 4 == 0]

Als weitere Hinwes steht dann da noch:
Zitat
  • Der Startzeitpunkt: Wenn ($week % 2 == 0) in der aktuellen Woche nicht zutrifft, die Aktion aber diese Woche starten soll, ändere die Bedingung einfach auf ($week % 2 == 1). Damit verschiebst du den Rhythmus um eine Woche.
  • Wochentage: Das |0 hinter der Uhrzeit stellt sicher, dass der Befehl nur am Sonntags ausgeführt wird. Ohne diesen Zusatz würde das DOIF bei $week % 2 == 0 jeden Tag in dieser Woche um 08:00 Uhr triggern.

Da ist für mich nicht herauslesbar das es sich auf gerade/ungerade Wochen bezieht, abegesehen davon, dass die Aufzählung %3 und %4 eher auf das Gegentel hinweist. Für mich deutet das eher auf eine Ja/Nein-Ergebnis hin, also trifft die Bedingung zu ist das Ergebnis 0, trifft es nicht zu ist es 1 oder 2 oder 3 - abhängig der Anzahl der Wochen zwischen dem Ja-Zustand.
Titel: Aw: Wie gestalte ich die Bedingung für jede zweite oder dritte Wochen am Besten?
Beitrag von: Marko1976 am 17 Februar 2026, 10:51:14
Zitat von: betateilchen am 17 Februar 2026, 08:47:3301.01.2026 -> Donnerstag -> $yday=0 -> erster Sonntag: $yday=3
01.01.2027 -> Freitag    -> $yday=0 -> erster Sonntag: $yday=2
Das verstehe ich, aber ist das nicht egal wenn ich nur die Woche bestimmen will? Ob diese nur einen Tag früher oder später "beginnt" ist ja vernachlässigbar. Es geht mir einfach um den Abstand der zwei/drei/vier Wochen zwischen dem Auslösen.

Also das die Bedingung für die dritte Woche (damit nicht wieder Verwechslung mit gerade/ungerade besteht) Sonntags um 00:01 Uhr in der 3., der 6., der9. Woche etc. zutrifft. Ich kann dabei vernachlässigen wenn das nicht exakt mit der Kalenderwoche übereinstimmt. Von mir aus kann der Prüfzeitraum genauso am Fr. der KW2 beginnen und am Do. der KW3 enden, wenn das dann ebenfalls für den drei Wochen späteren Zeitraum gillt, also Fr. der KW5 bis Do. der KW6 etc..
Titel: Aw: Wie gestalte ich die Bedingung für jede zweite oder dritte Wochen am Besten?
Beitrag von: betateilchen am 17 Februar 2026, 13:04:31
Zitat von: Marko1976 am 17 Februar 2026, 10:51:14Also das die Bedingung für die dritte Woche (damit nicht wieder Verwechslung mit gerade/ungerade besteht) Sonntags um 00:01 Uhr in der 3., der 6., der9. Woche etc. zutrifft.

Nun, man kann das Ganze auf Basis von Wochen rechnen oder auf Basis von Tagen.
Meine Berechnung geht von Tagen aus, damit kann man am flexibelsten arbeiten.

Es könnte ja mal einen Fall geben, wo Du "an jedem 17. Tag" etwas ausführen möchtest.
Das wird mit wochenweiser Rechnung ziemlich schwierig...
Titel: Aw: Wie gestalte ich die Bedingung für jede zweite oder dritte Wochen am Besten?
Beitrag von: Marko1976 am 17 Februar 2026, 15:49:09
Zitat von: betateilchen am 17 Februar 2026, 13:04:31Nun, man kann das Ganze auf Basis von Wochen rechnen oder auf Basis von Tagen.
Meine Berechnung geht von Tagen aus, damit kann man am flexibelsten arbeiten.
Das ist nachvollziehbar und logisch.
Was ich nicht verstehe ist die Funktion. Wenn ich die Funktion {$yday%Variable} in die Kommandozeile eingebe und ausführe kommt folgendes:
Funktion     Ergebnis
{$yday%1}         0
{$yday%2}         1
{$yday%3}         2
{$yday%4}         3
{$yday%5}         2
{$yday%6}         5
{$yday%7}         5
{$yday%8}         7
{$yday%9}         2
{$yday%10}        7
{$yday%11}        3
{$yday%12}        11
{$yday%13}        8
{$yday%14}        5
{$yday%15}        2
{$yday%16}        15
{$yday%17}        13
{$yday%18}        11
{$yday%19}        9
{$yday%20}        7
{$yday%21}        5
{$yday%22}        3
{$yday%23}        1
{$yday%24}        23
{$yday%25}        22
{$yday%26}        21
{$yday%27}        20
{$yday%28}        19
{$yday%29}        18
{$yday%30}        17
{$yday%31}        16
Wenn ich also (%yday % 21 == 0) in die Bedingung schreibe heißt das nach meinem Wissen doch, dass das Ergebnis des Aufrufs mit 0 verglichen wird. Wie die Tabelle oben zeigt ergibt der Aufruf aber nur bei %1 eine 0, was ja wieder jeden Tag meinen würde oder bin ich zu blöd das zu verstehen?.

Was ich auch nicht verstehe, {$yday} ergibt für heute den 17.2. den Wert 47, also den 47. Tag des Jahres (30T Januar+ 17 Tage Februar). Wenn ich das durch 21 Teile und den Rest nehme erhalte ich 2. Wenn ich genaudas aber in der Kommandozeile in Fhem eingebe erhalte ich 5 - wieso?

Wenn ich nach der Bedeutung von %21 in $yday%21 suche bekomme ich nur Rückmeldungen, dass es sich um den Zeichencode für "!" in url's handelt. Bringt mich nicht weiter.
Titel: Aw: Wie gestalte ich die Bedingung für jede zweite oder dritte Wochen am Besten?
Beitrag von: Damian am 17 Februar 2026, 15:57:43
Das Prozentzeichen in Perl ist der Modulo-Operator, dieser liefert dir den Rest einer Division, so wie man es in der Grundschule rechnet. Der Rest gleich Null bedeutet, dass sich eine Zahl durch die andere teilen lässt oder anders, die eine Zahl ist ein Vielfaches der anderen.

Titel: Aw: Wie gestalte ich die Bedingung für jede zweite oder dritte Wochen am Besten?
Beitrag von: betateilchen am 17 Februar 2026, 16:28:44
https://perlmaven.com/numerical-operators
Titel: Aw: Wie gestalte ich die Bedingung für jede zweite oder dritte Wochen am Besten?
Beitrag von: Per am 17 Februar 2026, 19:51:23
Zitat von: Marko1976 am 17 Februar 2026, 15:49:09Was ich auch nicht verstehe, {$yday} ergibt für heute den 17.2. den Wert 47, also den 47. Tag des Jahres (30T Januar+ 17 Tage Februar). Wenn ich das durch 21 Teile und den Rest nehme erhalte ich 2. Wenn ich genaudas aber in der Kommandozeile in Fhem eingebe erhalte ich 5 - wieso?
Vllt weil 5 richtig ist?
2x21 = 42
47 - 42 = 5

Und weil 47 eine Primzahl ist, ist nur bei 1 und 47 der Rest 0. Wo ist also dein Problem?
Titel: Aw: Wie gestalte ich die Bedingung für jede zweite oder dritte Wochen am Besten?
Beitrag von: betateilchen am 18 Februar 2026, 07:29:46
Zitat von: Marko1976 am 17 Februar 2026, 15:49:09den Wert 47, ... Wenn ich das durch 21 Teile und den Rest nehme erhalte ich 2

Bei 47/21 ist "2" nicht der Rest, sondern der ganzzahlige Teil des Quotienten. Der Rest ist 5.

Titel: Aw: Wie gestalte ich die Bedingung für jede zweite oder dritte Wochen am Besten?
Beitrag von: Marko1976 am 18 Februar 2026, 18:16:00
Zitat von: Per am 17 Februar 2026, 19:51:23Und weil 47 eine Primzahl ist, ist nur bei 1 und 47 der Rest 0. Wo ist also dein Problem?
Wenn man es so schreibt kein Problem - nur tut das nirgendwo jemand.
Das beste Beispiel was ich bisher gefunden habe schrieb:
47/21=2 Rest 2Da lese ich daraus, dass die 2 den Rest markiert und nicht, das Rest für die verbleibende Menge zwischen dem ganzzahligen Divisor und der zu teilenden Zahl ist.Es geht einfach um die Verständlichkeit der Schreibweise.

@Damian
Tut mir leid wenn ich keinen Oeranten "Mudolo" kenne. Ich habe sowas jedenfalls nicht in der Grundschule gelernt und da ich keine Kinder habe habe ich die neumodischen Veränderungen im Schulwesen nicht mitbekommen. Auch kenne ich so einen Operanten weder aus php, noch VB, noch Basic oder einer anderen Programmiersprache die mir geläufig ist.

@betateilchen
Sorry, aber die verlinkte Seite bringt mich überhaupt nicht weiter. Wenn da wenigstens die zu erwartenden Ergebnisse hinter den Rechenoperationen stehen würden, so dass man Rückschlüsse ziehen könnte. aber da steht im Prinzip "9 % 5" - Was soll einem das jetzt sagen wenn man die Funktio nicht kennt?
Deine Erklärung im letzten Post ist das was man braucht, genau wie das was @Per geschrieben hat. Da kann ich was mit anfangen. Dennoch habe ich das Problem wie
($yday % 21 == 0)funktionieren soll.
$yday ergibt 47 (gestern gesehen, damit nicht wieder alles durcheinander kommt), das durch 21 gerechnet ist 2,238... . Also eine Ganzzahl von 2 und einen Rest von 5. Beides stimtmt nicht mit 0 überein, ist also negativ. Es würde rechnerisch nur am 21,., 42., 63. Tag des Jahres etc. aufgehen und true ergeben. Also nicht jede 2., 3., 4. Woche, sondern wenn dann nur an einzelnen Tagen, welcher dann mit dem angegebenen Wochentag in der Uhrzeit übereinstimmen muss. Ansonsten würde die Bedingung nie wahr werden oder habe ich es immer noch nicht verstanden?

Da wäre es ja sinnvoller man läst den Wochentag in der Urhzeit weg und nimmt in Kauf das für die Bedingung die Woche in diesem Jahr zb. von Sonntag-Samstag geht und im kommenden Jahr dann von Montag-Freitag und 2028 von Dienstag-Montag etc..
Titel: Aw: Wie gestalte ich die Bedingung für jede zweite oder dritte Wochen am Besten?
Beitrag von: Beta-User am 18 Februar 2026, 18:25:38
https://de.wikipedia.org/wiki/Division_mit_Rest#

Zumindest Wikipedia behauptet, dass diese modulo-Funktionalität praktisch jede Programmiersprache kennen würde...
Titel: Aw: Wie gestalte ich die Bedingung für jede zweite oder dritte Wochen am Besten?
Beitrag von: Marko1976 am 18 Februar 2026, 18:29:44
Ich bedanke mich auf jedenfall für all die Informationen, habe wieder etwas dazu gelernt. Ich hoffe das Modulo-Thema jetzt kapiert zu haben.
Ich habe jetzt mal verschiedenen Test Devices sowohl mit $week als auch mit $yday erstellt die sich bis Anfang März erstrecken bevor sie wirksam werden.
Mal sehen was und welche Version/Lösung für mich am besten geeignet ist. Sollte ich danach noch Fragen haben würde ich mich hier wieder melden. Bis dahin ...
Titel: Aw: Wie gestalte ich die Bedingung für jede zweite oder dritte Wochen am Besten?
Beitrag von: Marko1976 am 18 Februar 2026, 18:33:20
Zitat von: Beta-User am 18 Februar 2026, 18:25:38Zumindest Wikipedia behauptet, dass diese modulo-Funktionalität praktisch jede Programmiersprache kennen würde..
Also ich habe sie wie gesagt noch nie irgendwo gesehen und ich denke Wikipedia ist auch nicht 100% Fehlerfrei. Was natürlich nicht heißt, dass es die Funktionalität gibt, ich sie nur nie in irgendeiner Programmiersprache benötigt und deshalb nicht gefunden habe. Was aber dann wieder bedeuten würde das in anderen Programmiersprachen andere einfache Wege vorhanden sind um so ein Ziel zu erreichen.
Titel: Aw: Wie gestalte ich die Bedingung für jede zweite oder dritte Wochen am Besten?
Beitrag von: Beta-User am 18 Februar 2026, 18:49:46
Zitat von: Marko1976 am 18 Februar 2026, 18:33:20
Zitat von: Beta-User am 18 Februar 2026, 18:25:38Zumindest Wikipedia behauptet, dass diese modulo-Funktionalität praktisch jede Programmiersprache kennen würde..
Also ich habe sie wie gesagt noch nie irgendwo gesehen und ich denke Wikipedia ist auch nicht 100% Fehlerfrei. Was natürlich nicht heißt, dass es die Funktionalität gibt, ich sie nur nie in irgendeiner Programmiersprache benötigt und deshalb nicht gefunden habe. Was aber dann wieder bedeuten würde das in anderen Programmiersprachen andere einfache Wege vorhanden sind um so ein Ziel zu erreichen.

EXCEL kennt das unter REST().

Wenn man das sogar in Redmond kennt, dürfte Wikipedia an der Stelle Recht haben.

Aber dabei können wir es gerne belassen!
Titel: Aw: Wie gestalte ich die Bedingung für jede zweite oder dritte Wochen am Besten?
Beitrag von: Damian am 18 Februar 2026, 19:04:37
Nur mal zur Klarstellung:

https://www.php.net/manual/en/language.operators.arithmetic.php

https://learn.microsoft.com/de-de/dotnet/visual-basic/language-reference/operators/mod-operator

In der Grundschule (3. Schuljahr) lernt man nicht den "Modulo-Operator", sondern "Teilen mit Rest".
Titel: Aw: Wie gestalte ich die Bedingung für jede zweite oder dritte Wochen am Besten?
Beitrag von: Marko1976 am 18 Februar 2026, 19:12:16
Zitat von: Damian am 18 Februar 2026, 19:04:37In der Grundschule (3. Schuljahr) lernt man nicht den "Modulo-Operator", sondern "Teilen mit Rest".
Mir ist schon klar wie du es gemeint hast, ich wollte damit nur sagen, dass es vor 40 Jahren als ich in der Grundschule war das eben nicht gegeben hat. Da gab es ausschließlich die Grundrechenarten Plus, Minus, Multiplizieren und Dividieren (Jargon 3. Klasse Mal und Teilen).
Mag sein, dass das heute vielleicht gelehrt wird, damals eben nicht - zumindest bei mir auf der Dorfgrundschule nicht. Und wie gesagt, da ich keine Kinder habe, habe ich nicht im Blick was sich da so alles verändert hat.
Titel: Aw: Wie gestalte ich die Bedingung für jede zweite oder dritte Wochen am Besten?
Beitrag von: Damian am 18 Februar 2026, 19:29:25
Informatik in der Grundschule ist heute noch nicht verbindlich. Es beginnt allerdings inzwischen in der Sekundarstufe I (5. - 10. Schuljahr). Ich unterrichte z. B. Informatik in der Oberstufe.

Allerdings "Teilen" habe ich vor 50. Jahren in der Grundschule gelernt - auch mit Rest.

Das Problem ist allerdings hier eher, dass beim DOIF KI oft falsch liegt, weil das Modul nicht allgemein bekannt ist. Hinzu kommt, dass manche Syntax DOIF-spezifisch ist und manche einfach Perl ist. Das kann oft der Anwender nicht erkennen und die KI auch nicht.


Titel: Aw: Wie gestalte ich die Bedingung für jede zweite oder dritte Wochen am Besten?
Beitrag von: betateilchen am 18 Februar 2026, 21:44:12
Zitat von: Damian am 18 Februar 2026, 19:04:37In der Grundschule (3. Schuljahr) lernt man nicht den "Modulo-Operator", sondern "Teilen mit Rest".

Zitat von: Damian am 18 Februar 2026, 19:29:25Allerdings "Teilen" habe ich vor 50. Jahren in der Grundschule gelernt - auch mit Rest.

Ich auch, im Schuljahr 1974/75 😀
Titel: Aw: Wie gestalte ich die Bedingung für jede zweite oder dritte Wochen am Besten?
Beitrag von: betateilchen am 18 Februar 2026, 21:50:41
Zitat von: Marko1976 am 17 Februar 2026, 15:49:09oder bin ich zu blöd das zu verstehen?.

Erwartest Du auf diese Frage eigentlich eine Antwort?

Zitat von: Marko1976 am 17 Februar 2026, 15:49:09Was ich auch nicht verstehe, {$yday} ergibt für heute den 17.2. den Wert 47, also den 47. Tag des Jahres (30T Januar+ 17 Tage Februar)

Zur Richtigstellung:

Titel: Aw: Wie gestalte ich die Bedingung für jede zweite oder dritte Wochen am Besten?
Beitrag von: rabehd am 18 Februar 2026, 21:55:38
Zitat von: betateilchen am 18 Februar 2026, 21:44:12
Zitat von: Damian am 18 Februar 2026, 19:04:37In der Grundschule (3. Schuljahr) lernt man nicht den "Modulo-Operator", sondern "Teilen mit Rest".

Zitat von: Damian am 18 Februar 2026, 19:29:25Allerdings "Teilen" habe ich vor 50. Jahren in der Grundschule gelernt - auch mit Rest.

Ich auch, im Schuljahr 1974/75 😀

Gilt auch für mich, POS, Einschulung 1972 und sogar "Jungpionier".  8)
Titel: Aw: Wie gestalte ich die Bedingung für jede zweite oder dritte Wochen am Besten?
Beitrag von: rabehd am 18 Februar 2026, 21:58:25
Zitat von: Marko1976 am 18 Februar 2026, 18:33:20das in anderen Programmiersprachen andere einfache Wege vorhanden sind um so ein Ziel zu erreichen.
Kühne (Schutz)-behauptung.
Titel: Aw: Wie gestalte ich die Bedingung für jede zweite oder dritte Wochen am Besten?
Beitrag von: Beta-User am 18 Februar 2026, 22:07:29
Kommt es wirklich darauf an, nach welchem Lehrplan was gelernt wurde?

Bin schon froh, zwischenzeitlich nicht alles wieder vergessen zu haben, was ich vielleicht mal gewusst hatte, auch nach der Grundschule...

Von daher sind wir doch alle froh, wenn irgendjemand wieder die richtige Schublade aufzieht, dafür braucht sich keiner zu rechtfertigen.

Wir sollten das hier erst mal auf sich beruhen lassen, just my2ct.
Titel: Aw: Wie gestalte ich die Bedingung für jede zweite oder dritte Wochen am Besten?
Beitrag von: Damian am 18 Februar 2026, 23:03:45
Nachdem wir alle festgestellt haben, dass wir in der Grundschule das Dividieren gelernt haben, wollen wir mal zum ursprünglichen Thema zurückkehren.

Bedeutet:

DOIF ([08:00|2] and $week % 3 == 0) (...)
jeden dritten Dienstag um 08:00 Uhr, es beginnt in der dritten Woche des Jahres, will man es um eine oder zwei Wochen verschieben muss man die Woche erhöhen:

DOIF ([08:00|2] and ($week+1) % 3 == 0) (...)
heißt jeden dritten Dienstag um 08:00, es beginnt in der zweiten Woche des Jahres

usw.

Das eigentliche Problem dieser Lösung ist, dass nach dem Jahreswechsel die Kontinuität verloren geht und je nach Konstellation mal mehr oder weniger Wochen zwischen den Jahren liegen können.

Die Frage ist, ob eine bestimmte Wiederholung überhaupt ein ganzes Jahr Bestand haben soll oder sich im Laufe eines Jahres ohnehin ändert (z. B. beim Schichtwechsel).

Alternativen sind sicherlich Kalendereinträge oder das holiday-Modul.
Titel: Aw: Wie gestalte ich die Bedingung für jede zweite oder dritte Wochen am Besten?
Beitrag von: Prof. Dr. Peter Henning am 19 Februar 2026, 04:27:09
Zitat von: Damian am 18 Februar 2026, 23:03:45Alternativen sind sicherlich Kalendereinträge oder das holiday-Modul.
"Das ist der Weg", würde ein Mandalorianer sagen. Insbesondere deshalb, weil jedes halbwegs vernünftige Kalenderprogramm über komfortable Funktionen zum Einrichten und Anzeigen wiederholter Termine verfügt. Das bedeutet vor allem, dass dies auch noch in drei Jahren wartbar ist, wenn gewisse Leute schon wieder vergessen haben, was sie heute gelernt haben.

Zitat von: Marko1976 am 18 Februar 2026, 18:33:20Also ich habe sie wie gesagt noch nie irgendwo gesehen und ich denke Wikipedia ist auch nicht 100% Ffehlerfrei.
Das ist sicher richtig, unter anderem behauptet Wikipedia ja, dass man Division in der dritten Klasse lernen würde. Was, wie wir gesehen haben, nicht stimmt. Allerdings stimmt die Aussage der Wikipedia im Hinblick auf Programmiersprachen vollständig.

Zitat von: Marko1976 am 18 Februar 2026, 18:33:20Was aber dann wieder bedeuten würde das in anderen Programmiersprachen andere einfache Wege vorhanden sind um so ein Ziel zu erreichen
Selbstverständlich, denn _jede Programmiersprache mit einem Zahlenbegriff_ kennt die Umwandlung von Gleitkommazahlen in Ganzzahlen. Damit lässt sich die modulare Division in einer Zeile darstellen. Geht sogar in symbolischen Sprachen wie LISP oder string-orientierten Sprachen wie XSLT, die eigentlich nicht über ausgefeilte Arithmetik verfügen. Vergl. https://www.amazon.de/Handbuch-Programmiersprachen-Softwareentwicklung-Lernen-Nachschlagen/dp/3446405585 - vielleicht sollte Marko1976 mal die 7,50 € für ein gebrauchtes Exemplar anlegen, das spart uns viel Zeit.


Zitat von: Marko1976 am 18 Februar 2026, 18:16:0047/21=2 Rest 2
Sehr schön, dann habe ich doch eine fantastische Geschäftsidee für Marko1976, die ich ihm gerne unterbreiten würde.

LG

pah
Titel: Aw: Wie gestalte ich die Bedingung für jede zweite oder dritte Wochen am Besten?
Beitrag von: Damian am 20 Februar 2026, 21:58:51
Thema wegen zu vielen Off-topics geschlossen. Funktionierende Lösungen wurden bereits aufgezeigt.