DOIF triggern am 1. eines Monats

Begonnen von AnBad, 10 Februar 2024, 10:01:34

Vorheriges Thema - Nächstes Thema

AnBad

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

Damian

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)
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

AnBad


chr2k

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

betateilchen

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)
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Damian

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...)
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

chr2k

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

Damian

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
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Damian

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.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

chr2k

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


chr2k

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.

Per

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.

Damian

#12
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.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF