FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: Marko1976 am 05 April 2026, 11:38:46

Titel: Gleiche Bedingung, andere Aktivierung?
Beitrag von: Marko1976 am 05 April 2026, 11:38:46
Irgendwie verstehe ich das nicht, ich dachte eigentlich es gelöst zu haben. Doch nun kommt die nächste Unklarheit.

Wie in diesem Threat DOIF-Bedingung funktioniert nicht - Klammersetzung bei Berechnung (https://forum.fhem.de/index.php?topic=144339.new;topicseen#new) nachzulesen gab es ja ursprünglich ein Problem mit der Berechnung (mein Fehler in der Rechenlogik). Das funktioniert jetzt soweit auch und das DOIF wird erst nach der entsprechenden Anzahl von Intervalltagen erneut ausgelöst (wobie ja genaugenommen ja auch da schon wieder ein Tag zu viel vergagen ist für das erste DOIF).
Doch nun taucht ein neues Problem auf. Ich habe mehrere dieser DOIF's für verschiedene Arbeiten (siehe unten). Alle sind gleich aufgebaut und unterscheiden sich eigentlich nur in Kleinigkeiten wie dem Ansagetext, der Aufgabe an sich und  (und das ist wichtig) in den Intervalltagen.
Die Bedingung lautet ja immer: aktuelles Tag im Jahr als Ganzzahl >= Tag im Jahr des letzten Ausführungsdatums als Ganzzahl + Intervalltage
Und obwohl das letzte Ausführungsdatum gleich aber die Intervalltage unterschiedlich sind werden 4 DOIF's immer gleichzeitig ausgelöst. Alle haben verschiedene Intervalltage.

Ich poste mal als Beispiel die Bedingungen und die Readings von zwei der betroffenen DOIF's:
(xxx)
{Ansage("Blumen gegossen", "Echo_Wohnzimmer,Echo_Schlafzimmer,Echo_Kueche")} (setreading $SELF execution {(int(POSIX::strftime("%j", localtime)))})
## (set Pushmsg msg title="Hausarbeit" device="GalaxyS25ultra_Marko,GalaxyS25ultra_Marion" priority="0" message="Blumen gegossen")

##  DOELSEIF (([?$SELF:switch] eq "on") and [00:01] and ($yday % [?$SELF:Intervall] == 0))
##  ()

DOELSEIF (([?$SELF:switch] eq "on") and ([00:01]) and ($yday >= [?$SELF:execution] + [?$SELF:Intervall]))
()

Readings
Intervall
3
2026-02-22 16:45:49
cmd
2
2026-04-05 00:01:00
cmd_event
timer_1
2026-04-05 00:01:00
cmd_nr
2
2026-04-05 00:01:00
execution
90
2026-03-31 11:54:37
mode
enabled
2026-03-31 11:53:55
notification_push
on
2026-02-22 10:55:24
notification_voice
on
2026-02-22 10:58:02
state
aktiv
2026-04-05 00:01:00
switch
on
2026-02-25 14:28:52
timer_01_c02
06.04.2026 00:01:00
2026-04-05 00:01:00
workingLabel
Blumen gießen
2026-02-20 09:52:18
workingState
aktiv
2026-04-05 00:01:00

(xxx)
{Ansage("Heizungsbefeuchtung aufgefüllt", "Echo_Wohnzimmer,Echo_Schlafzimmer,Echo_Kueche")} (setreading $SELF execution {(int(POSIX::strftime("%j", localtime)))-1})
## (set Pushmsg msg title="Hausarbeit" device="GalaxyS25ultra_Marko,GalaxyS25ultra_Marion" priority="0" message="Heizungsbefeuchtung aufgefüllt")

DOELSEIF (([?$SELF:switch] eq "on") and ([00:01]) and ($yday >= [?$SELF:execution] + [?$SELF:Intervall]))
()

ntervall
5
2026-03-29 10:21:28
cmd
2
2026-04-05 00:01:00
cmd_event
timer_1
2026-04-05 00:01:00
cmd_nr
2
2026-04-05 00:01:00
execution
89
2026-03-31 11:53:24
mode
enabled
2026-03-31 11:53:14
notification_push
on
2026-03-10 13:07:28
notification_voice
on
2026-03-10 13:07:51
state
aktiv
2026-04-05 00:01:00
switch
on
2026-02-25 15:55:02
timer_01_c02
06.04.2026 00:01:00
2026-04-05 00:01:00
workingLabel
Heizungsbefeuchter auffüllen
2026-02-25 13:46:13
workingState
aktiv
Wie man sieht ist die letzte Ausführung beides gleich, am 90 Tag des Jahres, doch die Intervalltage sind einmal 3 und beim anderen 5. Somit sollte das erste DOIF wahr werden wenn die Ganzzahl des aktuellen Datums 93 ist und beim zweiten DOIF 95 oder eben jeweils größer.

Wie kann eine unterschiedliche Berechnung zum gleichen Ergebnis kommen:
Aktuelles Datum als Ganzzahl   >=   Letzte Ausführung als Ganzzahl   +   Intervall
           94                  >=              90                    +        3
           94                  >=              90                    +        5

Ich kenne als Verweis auf das eigene Device eigentlich immer nur $name nicht $self. Kann da vielleicht der Fehler drin liegen?