FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: AnBad am 10 Februar 2024, 10:01:34

Titel: DOIF triggern am 1. eines Monats
Beitrag von: AnBad am 10 Februar 2024, 10:01:34
Hallo,
kann man eine DOIF triggern zum Beispiel "Am ersten Tag eines Monats um 18:00 Uhr" oder "Am ersten Montag eines Monats um 18:00 Uhr".
Sicherlich im Perl-Modus mit einem etwas aufwendiger Code oder geht es auch ganz einfach?
define di_radio DOIF {if ([06:30|Mo We] or [08:30|WE]) {fhem_set"radio on"}}Vielen Dank
Titel: Aw: DOIF triggern am 1. eines Monats
Beitrag von: Damian am 10 Februar 2024, 10:21:19
Zitat von: AnBad am 10 Februar 2024, 10:01:34Hallo,
kann man eine DOIF triggern zum Beispiel "Am ersten Tag eines Monats um 18:00 Uhr" oder "Am ersten Montag eines Monats um 18:00 Uhr".
Sicherlich im Perl-Modus mit einem etwas aufwendiger Code oder geht es auch ganz einfach?
define di_radio DOIF {if ([06:30|Mo We] or [08:30|WE]) {fhem_set"radio on"}}Vielen Dank

Du kannst Zeitvariablen im DOIF benutzen

erster Tag des Monats wäre dann:
([18:00] and $mday=1)
erster Montag eines Monats wäre dann:

([18:00|Mo] and $mday < 8)
Titel: Aw: DOIF triggern am 1. eines Monats
Beitrag von: AnBad am 10 Februar 2024, 11:56:14
Sehr schön,
danke schön..
Titel: Aw: DOIF triggern am 1. eines Monats
Beitrag von: chr2k am 10 Mai 2025, 15:38:26
Zitat von: Damian am 10 Februar 2024, 10:21:19Du kannst Zeitvariablen im DOIF benutzen

erster Tag des Monats wäre dann:
([18:00] and $mday=1)

Hallo Damian,
hallo an alle,

wenn ich

defmod Stromzaehler DOIF ([00:01] and $mday=1) (set...)
nutze um am 1. eines Monats den set Befehl auszuführen, wird das DOIF aber jede Nacht um 0:01 Uhr ausgeführt.


Weiß jemand Rat?


Danke.


Gruß

Christian
Titel: Aw: DOIF triggern am 1. eines Monats
Beitrag von: betateilchen am 10 Mai 2025, 19:43:35
Zitat von: chr2k am 10 Mai 2025, 15:38:26um am 1. eines Monats den set Befehl auszuführen, wird das DOIF aber jede Nacht um 0:01 Uhr ausgeführt.

ohne DOIF völlig simpel mit einem at:

defmod Stromzaehler at *{at_ultimo()} sleep 120; set bla blub
at_ultimo() ohne jeglichen Parameter führt dazu, dass der Ausführungsteil am letzten Tag eines Monats um 23:59:00 gestartet wird. Wenn nun der erste Befehl im Ausführungsteil "sleep 120" lautet, beginnt die Ausführung des eigentliche set-Befehls um 00:01 Uhr des Folgetags (= Monatserster)
Titel: Aw: DOIF triggern am 1. eines Monats
Beitrag von: Damian am 10 Mai 2025, 21:16:22
Zitat von: chr2k am 10 Mai 2025, 15:38:26Hallo Damian,
hallo an alle,

wenn ich

defmod Stromzaehler DOIF ([00:01] and $mday=1) (set...)
nutze um am 1. eines Monats den set Befehl auszuführen, wird das DOIF aber jede Nacht um 0:01 Uhr ausgeführt.

ja, es fehlte noch ein Gleichheitszeichen:

defmod Stromzaehler DOIF ([00:01] and $mday==1) (set...)
Titel: Aw: DOIF triggern am 1. eines Monats
Beitrag von: chr2k am 12 Mai 2025, 02:14:39
Zitat von: betateilchen am 10 Mai 2025, 19:43:35ohne DOIF völlig simpel mit einem at:
...
at_ultimo()

Danke für den Tipp, darüber war ich dann zwischen meinem und deinem Post auch gestolpert. Auch eine gute Idee die ganze Sache noch verzögert bearbeiten zu lassen.

Nicht destotrotz hätte ich gerne gewusst wie es im DOIF funktioniert.





Zitat von: Damian am 10 Mai 2025, 21:16:22ja, es fehlte noch ein Gleichheitszeichen:

defmod Stromzaehler DOIF ([00:01] and $mday==1) (set...)


Funktioniert leider auch nicht. Sprich: Es wird jeden Tag ausgeführt
Titel: Aw: DOIF triggern am 1. eines Monats
Beitrag von: Damian am 12 Mai 2025, 07:50:17
Zitat von: chr2k am 12 Mai 2025, 02:14:39
Zitat von: betateilchen am 10 Mai 2025, 19:43:35ohne DOIF völlig simpel mit einem at:
...
at_ultimo()

Danke für den Tipp, darüber war ich dann zwischen meinem und deinem Post auch gestolpert. Auch eine gute Idee die ganze Sache noch verzögert bearbeiten zu lassen.

Nicht destotrotz hätte ich gerne gewusst wie es im DOIF funktioniert.





Zitat von: Damian am 10 Mai 2025, 21:16:22ja, es fehlte noch ein Gleichheitszeichen:

defmod Stromzaehler DOIF ([00:01] and $mday==1) (set...)


Funktioniert leider auch nicht. Sprich: Es wird jeden Tag ausgeführt

Poste mal list von der Ausführung
Titel: Aw: DOIF triggern am 1. eines Monats
Beitrag von: Damian am 12 Mai 2025, 17:31:01
Kann ich nicht bestätigen, denn:

CFGFN     
   DEF        ([17:26] and $mday==13) (set bla on)
   FUUID      68221293-f33f-30f6-dc55-898a7ac693944342
   MODEL      FHEM
   NAME       di_mday
   NOTIFYDEV  global
   NR         321112
   NTFY_ORDER 50-di_mday
   STATE      cmd_2
   TYPE       DOIF
   VERSION    29460 2024-12-29 20:25:48
   eventCount 6
   READINGS:
     2025-05-12 17:26:00   cmd             2
     2025-05-12 17:26:00   cmd_event       timer_1
     2025-05-12 17:26:00   cmd_nr          2
     2025-05-12 17:25:18   mode            enabled
     2025-05-12 17:26:00   state           cmd_2
     2025-05-12 17:26:00   timer_01_c01    13.05.2025 17:26:00

Es wird jeden Tag getriggert, allerdings ist die Bedingung nur am besagten Tag wahr. Heute wurde zwar getriggert, aber die Bedingung war nicht wahr, daher wurde der Befehl cmd_1 nicht ausgeführt, sondern cmd_2. Wenn ich statt $mday==13 $mday==12 angebe, wird heute cmd_1 ausgeführt - funktioniert, wie programmiert.
Titel: Aw: DOIF triggern am 1. eines Monats
Beitrag von: chr2k am 13 Mai 2025, 11:24:17
Zitat von: Damian am 12 Mai 2025, 07:50:17Poste mal list von der Ausführung

Ich hoffe das ist das was du nachgefragt hast


Internals:
   CFGFN     
   DEF        ([14:00] and ($mday==28)) (set TelegramBot _msg Stromzählerstand Wohnung DG1/2: [DVES_39E2B4:MT681_E_in]kWh)
   FUUID      681cf214-f33f-8b6f-373c-5f26bd33b2bab54c
   MODEL      FHEM
   NAME       Stromzaehler_WohnungOG
   NOTIFYDEV  global
   NR         412
   NTFY_ORDER 50-Stromzaehler_WohnungOG
   STATE      initialized
   TYPE       DOIF
   VERSION    29460 2024-12-29 20:25:48
   eventCount 38
   .attraggr:
   .attrminint:
   READINGS:
     2025-05-12 02:15:40   cmd             0
     2025-05-12 02:15:40   mode            enabled
     2025-05-12 02:15:40   state           initialized
     2025-05-12 14:00:02   timer_01_c01    13.05.2025 14:00:00
   Regex:
     accu:
     bar:
     barAvg:
     collect:
   attr:
     cmdState:
     wait:
     waitdel:
   condition:
     0          ::DOIF_time_once($hash,0,$wday) and ($mday==28)
   days:
   do:
     0:
       0          set TelegramBot _msg Stromzählerstand Wohnung DG1/2: [DVES_39E2B4:MT681_E_in]kWh
     1:
   helper:
     NOTIFYDEV  global
     event      timer_1
     globalinit 1
     last_timer 1
     sleeptimer -1
     triggerDev
     triggerEvents:
       timer_1
     triggerEventsState:
       timer_1
   hmccu:
   interval:
   intervalfunc:
   localtime:
     0          1747137600
   realtime:
     0          14:00:00
   time:
     0          14:00:00
   timeCond:
     0          0
   timer:
     0          0
   timers:
     0           0
   triggertime:
     1747137600:
       localtime  1747137600
       hash:
   uiState:
   uiTable:
Attributes:
   do         always
   room       Logik

Titel: Aw: DOIF triggern am 1. eines Monats
Beitrag von: chr2k am 13 Mai 2025, 11:27:22
Zitat von: Damian am 12 Mai 2025, 17:31:01Kann ich nicht bestätigen, denn:

...

Es wird jeden Tag getriggert, allerdings ist die Bedingung nur am besagten Tag wahr. Heute wurde zwar getriggert, aber die Bedingung war nicht wahr, daher wurde der Befehl cmd_1 nicht ausgeführt, sondern cmd_2. Wenn ich statt $mday==13 $mday==12 angebe, wird heute cmd_1 ausgeführt - funktioniert, wie programmiert.



Ich bin halt wegen dem Reading "timer_01_c01" irritiert. Weil das zeigt immer den nächsten Tag und wie jeweilige Uhrzeit an. Ich war der Meinung dass dort das Datum der der nächsten Ausführung stehen müsste.
Titel: Aw: DOIF triggern am 1. eines Monats
Beitrag von: Per am 13 Mai 2025, 12:18:04
Da steht die Ausführung des DOIF, aber nicht des Cmd-Teils, weil die Bedingungen erst zum jeweiligen Zeitpunkt geprüft werden (können), wenn du z.B. gegen eine Temperatur vergleichen würdest, wüsstest du die doch noch gar nicht.
Titel: Aw: DOIF triggern am 1. eines Monats
Beitrag von: Damian am 13 Mai 2025, 16:42:32
Zitat von: chr2k am 13 Mai 2025, 11:27:22Ich bin halt wegen dem Reading "timer_01_c01" irritiert. Weil das zeigt immer den nächsten Tag und wie jeweilige Uhrzeit an. Ich war der Meinung dass dort das Datum der der nächsten Ausführung stehen müsste.

ja, es ist so wie Per schon geschrieben hat: Es ist der Zeitpunkt der nächsten Ausführung des DOIF-Devices für diesen Zweig. Zur Ausführung gehört ja auch die Überprüfung der Bedingung, sonst hätte sie keine Bedeutung und die ist halt an 353 (365-12) Tagen eines nicht Schaljahres in diesem Fall nicht wahr, daher wird der Befehl an diesen Tagen auch nicht ausgeführt.