FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: Superposchi am 18 März 2022, 14:40:02

Titel: Frage zu Zeitereignissen
Beitrag von: Superposchi am 18 März 2022, 14:40:02
Ich würde gerne wissen ob es mit einem DOIF möglich ist als Auslöseereigniss regelmäßige Termine wie z.b. "jeden zweiten Samstag" oder "jeden 3. Sonntag im Monat" umzusetzen.

Aus der Doku kann ich dazu leider nichts erkennen.
Titel: Antw:Frage zu Zeitereignissen
Beitrag von: Damian am 18 März 2022, 15:08:01
Nur indirekt z. B. [00:00|Sa] and .... irgendeine Berechnung mit $mday (Tag des Monats) oder $yday (Tag des Jahres) oder selber einen Counter hochzählen
Titel: Antw:Frage zu Zeitereignissen
Beitrag von: betateilchen am 18 März 2022, 15:24:46
Es gibt auch noch andere Möglichkeiten, das zu berechnen - aber man muss es halt selbst tun.

Für "jede 2. Woche" könnte man die Ausführung beispielsweise auf die geraden Wochennummern einschränken


(in der bash shell)
$(( $(date +%U) % 2 ))


liefert 0 oder 1 zurück, die Ausführung wird sich aber beim Jahreswechsel ab und zu mal verschieben, da die Anzahl Tage pro Jahr nicht glatt durch 7 teilbar ist.

Alternativ kann man auch die Epochen-Sekunden verwenden und gegen 604800 Sekunden (7*24*3600) prüfen:


(in der bash shell)
$(( $(date +%s) / 604800 % 2 ))


verwenden, das bleibt "ewig" im 2-Wochen-Rhythmus korrekt und liefert auch 0 oder 1 zurück.

Für "3. Sonntag im Monat" wird es komplizierter.
Da könnte man sich an das Beispiel "tzdata" anlehnen, dort werden ja über eine bestimmte Syntax (letzter Sonntag im März bzw. letzter Sonntag im Oktober) die Umstellungstermine für Sommer-/Winterzeit ermittelt.
Titel: Antw:Frage zu Zeitereignissen
Beitrag von: Damian am 18 März 2022, 15:37:19
Jede x-Woche geht in der DOIF-Bedingung mit:

$week % x == 0

z. B. jeder 2. Sonntag um 08:00 Uhr:

([08:00|So] and $week % 2 == 0)
Titel: Antw:Frage zu Zeitereignissen
Beitrag von: betateilchen am 18 März 2022, 15:54:43
Zitat von: Damian am 18 März 2022, 15:37:19
z. B. jeder 2. Sonntag um 08:00 Uhr:

genauer: jeden Sonntag in einer geraden Kalenderwoche ;)

Beim Jahreswechsel von KW53 zu KW1 findet dann drei Wochen lang keine Ausführung statt.
Titel: Antw:Frage zu Zeitereignissen
Beitrag von: Superposchi am 18 März 2022, 19:39:17
Da es sich dabei um eine Benachrichtigung für einen Service am Auto handelt (Check Öl, Scheibenwischer etc.) wäre es nicht tragisch.

Kann man mit mday den Monatsersten bestimmen? Kenne die Funktion nicht.
Wenn ja, könnte man in die Abfrage einen Zähler einbauen, der Sonntags zwischen 15 und 21 greift.
Titel: Antw:Frage zu Zeitereignissen
Beitrag von: Gisbert am 18 März 2022, 20:59:17
Hallo Superposhi,

der Beitrag von Damian liefert ja schon fast alles. Wenn du es noch mit dem Wochentag kombinierst ($wday == 0), z.b. 12 < $mday <= 19  and $wday == 0 and [12:00] - oder halt wie Damian es vorgeschlagen hat.

Viele​ Grüße​ Gisbert​
Titel: Antw:Frage zu Zeitereignissen
Beitrag von: DetlefR am 18 März 2022, 23:11:41
Hallo Superposchi,

ausgehend von Damian seinem Beispiel probier das mal.

([08:00|So] and int(($mday-1)/7)==X)

Das X steht dann für das Auftreten des Wochentages im Monat. 0 ist das erste mal.

Gruß Detlef
Titel: Antw:Frage zu Zeitereignissen
Beitrag von: Superposchi am 23 März 2022, 16:36:38
([08:00|So] and int(($mday-1)/7)==X)
Zwei Fragen:
Wenn ich Sonntag auf Samstag ändere, muss ich dann auch das -1 hinter mday anpassen?
Ist das Fhem- oder Perl-Code? buw. kann ich das X auch aus einem Reading holen?

(in der bash shell)
$(( $(date +%U) % 2 ))

Was meinst du mit "in der bash-datei"?
Titel: Antw:Frage zu Zeitereignissen
Beitrag von: DetlefR am 23 März 2022, 20:18:43
Hallo,

den Wochentag änderst du im ersten Teil. Also aus ([08:00|Sa] wird dann ([08:00|So]. int(($mday-1)/7)==X Wenn es am ersten Sonntag, Montag.. passieren soll, dann kommt anstelle  von X eine 0. Beim zweiten Sonntag eine 1 usw.
ZitatIst das Fhem- oder Perl-Code?
Das ist DOIF spezifisch. Aber wozu ein Reading. Sinnvoll ist sowieso nur 0-3. Bei 4 kann der Monat schon um sein.

Einfach mal probieren.
Titel: Antw:Frage zu Zeitereignissen
Beitrag von: Superposchi am 23 März 2022, 21:58:04
Das mit dem Reading kommt einfach daher, dass ich versuche alles so universell wie möglich zu schreiben.
Also überall da wo es geht Einstellungen aus Readings zu holen die ich über FTUI verändern kann. Einfach eine dumme Angewohnheit.

Genauso wie ich in jeden Auslöser einen Dummy einbaue mit dem ich die Funktion per FTUI ein-/ausschalten kann.
Titel: Antw:Frage zu Zeitereignissen
Beitrag von: Damian am 23 März 2022, 22:09:25
Zitat von: Superposchi am 23 März 2022, 21:58:04
Das mit dem Reading kommt einfach daher, dass ich versuche alles so universell wie möglich zu schreiben.
Also überall da wo es geht Einstellungen aus Readings zu holen die ich über FTUI verändern kann. Einfach eine dumme Angewohnheit.

Genauso wie ich in jeden Auslöser einen Dummy einbaue mit dem ich die Funktion per FTUI ein-/ausschalten kann.

Du kannst in jede Bedingung ein Reading einsetzen, das ist der Normalfall. Die einzige Frage ist: Mit oder ohne Trigger?