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
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)
Sehr schön,
danke schön..
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
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)
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...)
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
Zitat von: chr2k am 12 Mai 2025, 02:14:39Zitat 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
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.
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
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.
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.
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.