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

Damian

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.

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

betateilchen

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Per

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?

betateilchen

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.

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Marko1976

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..

Beta-User

https://de.wikipedia.org/wiki/Division_mit_Rest#

Zumindest Wikipedia behauptet, dass diese modulo-Funktionalität praktisch jede Programmiersprache kennen würde...
Server: HP-elitedesk@Debian 13, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

Marko1976

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 ...

Marko1976

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.

Beta-User

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!
Server: HP-elitedesk@Debian 13, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

Damian

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Marko1976

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.

Damian

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.


Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF