Hallo Miteinander!
Ich habe in DOIF, welches verschiedene, periodisch wiederkehrende Dinge erledigt. Bis vor einigen Monaten hat auch alles funktioniert.
Doch nun schlagen die wochentagsabhängigen Bedingungen nicht mehr zu. Ich habe dann mal einen Ausdruck mit der Perl-Variante ausprobiert, das funzt leider auch nicht.
Wenn ich mit "set cmd..." teste, so wird der jeweilige Ausführungsteil ausgeführt. Bei einer Anpassung der Zeit zum Testen auf die folgenden Minuten und speichern, springt der Ausführungsteil auch an. Wenn ich wieder die gewünschten Tage und Zeiten (Mittwoch bzw. Donnerstag 18 Uhr) eingebe, warte ich vergebens auf die Telegrammmeldungen.
Hier das DOIF:
Internals:
CFGFN ./FHEM/85_System.cfg
DEF ([08:05])(
setreading KU_Sensor Batteriewechsel {([KU_Sensor:Batteriewechsel]+1)},
setreading WZ_Sensor Batteriewechsel {([WZ_Sensor:Batteriewechsel]+1)},
setreading AZ_Sensor Batteriewechsel {([AZ_Sensor:Batteriewechsel]+1)},
setreading WZ_Fenster Batteriewechsel {([WZ_Sensor:Batteriewechsel]+1)},
setreading KU_Fenster Batteriewechsel {([KU_Fenster:Batteriewechsel]+1)},
setreading SZ_Fenster Batteriewechsel {([SZ_Fenster:Batteriewechsel]+1)},
setreading AZ_Fenster Batteriewechsel {([AZ_Fenster:Batteriewechsel]+1)},
setreading BD_Fenster Batteriewechsel {([BD_Fenster:Batteriewechsel]+1)},
setreading BD_Hk4 Batteriewechsel {([BD_Hk4:Batteriewechsel]+1)},
setreading BD_Regler Batteriewechsel {([BD_Regler:Batteriewechsel]+1)},
setreading BD_T6 Batteriewechsel {([BD_T6:Batteriewechsel]+1)},
setreading FL_Tuer Batteriewechsel {([FL_Tuer:Batteriewechsel]+1)},
setreading FL_T6 Batteriewechsel {([FL_T6:Batteriewechsel]+1)},
setreading WZ_Balkon Batteriewechsel {([WZ_Balkon:Batteriewechsel]+1)},
setreading WZ_Hk0 Batteriewechsel {([WZ_Hk0:Batteriewechsel]+1)},
setreading WZ_Hk1 Batteriewechsel {([WZ_Hk1:Batteriewechsel]+1)}
)
DOELSEIF
([07:00] or [08:00] or [10:00] or [12:00] or [16:00] or [18:00] or [{sunset(0,"17:00","22:00")}])({Log 1, "Min ist ".ReadingsVal("Wetter_Pro","fc0_tempMin",0). "°C Max ist ".ReadingsVal("Wetter_Pro","fc0_tempMax",0)."°C Himmel ist zu ".ReadingsVal("Wetter_Borsdorf","cloudCover",0)."% bedeckt und Bedingung: ".ReadingsVal("Wetter_Borsdorf","condition",0)})
DOELSEIF
([23:59] or [00:01])(trigger addLog)
DOELSEIF
([21:35])({fhem("set BAjetzt " . (ReadingsVal("BAmorgen","state","frei"))),Log 1, "Betriebsart ist jetzt: ".ReadingsVal("BAmorgen","state","frei")})
DOELSEIF
([23:45])(set Nachrichten cmdSendSilent {plotAsPng('weblink_001WZ')},set Nachrichten cmdSendSilent {plotAsPng('weblink_004BD')})
DOELSEIF
([03:55]) (set Sonnenaufgang {(sunrise())}, set Sonnenuntergang {(sunset())})
DOELSEIF
([18:00|3] and ($yday/2 ne int($yday/2)))(set Nachrichten message Bitte Mülltonne zur Leerung bereitstellen!)(IF ([androidandrea] eq "present")(set Nachrichten message @Andrea Bitte Mülltonne zur Leerung bereitstellen!))
DOELSEIF
([18:00] and ($wday= 4))(set Nachrichten message Bitte Abtreter herein holen!)(IF ([androidandrea] eq "present")(set Nachrichten message @Andrea Bitte Abtreter herein holen!))
DOELSEIF
([08:05|6] and [Heizung] eq "Aus")(set WZ_Hk0_Clima controlManu on,set WZ_Hk1_Clima controlManu on,set BD_Hk4_Clima controlManu on)
DOELSEIF
([01:00] and ($mday= 1))(setreading BD_Luefter_Sw_01 Schwelle {(80-abs($month-7)*2)})
DOELSEIF
([19:00|1] and [Heizung] eq "Ein")(set WZ_Hk0_Clima regSet decalcWeekday Sun,set WZ_Hk1_Clima regSet decalcWeekday Sun, setBD_Hk4_Clima regSet decalcWeekday Sun) ## (set Nachrichten message INFO Entkalkung jetzt Sonntags)
DOELSEIF
([19:00|3] and [Heizung] eq "Ein")(set WZ_Hk0_Clima regSet decalcWeekday Tue,set WZ_Hk1_Clima regSet decalcWeekday Tue, setBD_Hk4_Clima regSet decalcWeekday Tue) ## (set Nachrichten message INFO Entkalkung jetzt Dienstags)
DOELSEIF
([19:00|5] and [Heizung] eq "Ein")(set WZ_Hk0_Clima regSet decalcWeekday Thu,set WZ_Hk1_Clima regSet decalcWeekday Thu,set BD_Hk4_Clima regSet decalcWeekday Thu) ## (set Nachrichten message INFO Entkalkung jetzt Donnerstags)
FUUID 5c443db1-f33f-b425-e4d1-244d8dfc23a6e705
MODEL FHEM
NAME Daily_Events
NR 622
NTFY_ORDER 50-Daily_Events
STATE cmd_2
TYPE DOIF
VERSION 19786 2019-07-05 21:47:08
READINGS:
2019-09-07 16:00:00 cmd 2
2019-09-07 16:00:00 cmd_event timer_6
2019-09-07 16:00:00 cmd_nr 2
2019-09-01 17:05:34 mode enabled
2019-09-07 16:00:00 state cmd_2
2019-09-07 08:05:00 timer_01_c01 08.09.2019 08:05:00
2019-09-07 07:00:00 timer_02_c02 08.09.2019 07:00:00
2019-09-07 08:00:00 timer_03_c02 08.09.2019 08:00:00
2019-09-07 10:00:00 timer_04_c02 08.09.2019 10:00:00
2019-09-07 12:00:00 timer_05_c02 08.09.2019 12:00:00
2019-09-07 16:00:00 timer_06_c02 08.09.2019 16:00:00
2019-09-06 18:00:00 timer_07_c02 07.09.2019 18:00:00
2019-09-06 20:21:14 timer_08_c02 07.09.2019 20:18:54
2019-09-06 23:59:00 timer_09_c03 07.09.2019 23:59:00
2019-09-07 00:01:00 timer_10_c03 08.09.2019 00:01:00
2019-09-06 21:35:00 timer_11_c04 07.09.2019 21:35:00
2019-09-06 23:45:00 timer_12_c05 07.09.2019 23:45:00
2019-09-07 03:55:00 timer_13_c06 08.09.2019 03:55:00
2019-09-06 18:00:00 timer_14_c07 07.09.2019 18:00:00|3
2019-09-06 18:00:00 timer_15_c08 07.09.2019 18:00:00
2019-09-07 08:05:00 timer_16_c09 08.09.2019 08:05:00|6
2019-09-07 01:00:00 timer_17_c10 08.09.2019 01:00:00
2019-09-06 19:00:00 timer_18_c11 07.09.2019 19:00:00|1
2019-09-06 19:00:00 timer_19_c12 07.09.2019 19:00:00|3
2019-09-06 19:00:00 timer_20_c13 07.09.2019 19:00:00|5
Regex:
accu:
attr:
cmdState:
wait:
waitdel:
condition:
0 ::DOIF_time_once($hash,0,$wday)
1 ::DOIF_time_once($hash,1,$wday) or ::DOIF_time_once($hash,2,$wday) or ::DOIF_time_once($hash,3,$wday) or ::DOIF_time_once($hash,4,$wday) or ::DOIF_time_once($hash,5,$wday) or ::DOIF_time_once($hash,6,$wday) or ::DOIF_time_once($hash,7,$wday)
10 ::DOIF_time_once($hash,17,$wday,"1") and ::InternalDoIf($hash,'Heizung','STATE') eq "Ein"
11 ::DOIF_time_once($hash,18,$wday,"3") and ::InternalDoIf($hash,'Heizung','STATE') eq "Ein"
12 ::DOIF_time_once($hash,19,$wday,"5") and ::InternalDoIf($hash,'Heizung','STATE') eq "Ein"
2 ::DOIF_time_once($hash,8,$wday) or ::DOIF_time_once($hash,9,$wday)
3 ::DOIF_time_once($hash,10,$wday)
4 ::DOIF_time_once($hash,11,$wday)
5 ::DOIF_time_once($hash,12,$wday)
6 ::DOIF_time_once($hash,13,$wday,"3") and ($yday/2 ne int($yday/2))
7 ::DOIF_time_once($hash,14,$wday) and ($wday= 4)
8 ::DOIF_time_once($hash,15,$wday,"6") and ::InternalDoIf($hash,'Heizung','STATE') eq "Aus"
9 ::DOIF_time_once($hash,16,$wday) and ($mday= 1)
days:
13 3
15 6
17 1
18 3
19 5
devices:
10 Heizung
11 Heizung
12 Heizung
8 Heizung
all Heizung
do:
0:
0 setreading KU_Sensor Batteriewechsel {([KU_Sensor:Batteriewechsel]+1)}, setreading WZ_Sensor Batteriewechsel {([WZ_Sensor:Batteriewechsel]+1)}, setreading AZ_Sensor Batteriewechsel {([AZ_Sensor:Batteriewechsel]+1)}, setreading WZ_Fenster Batteriewechsel {([WZ_Sensor:Batteriewechsel]+1)}, setreading KU_Fenster Batteriewechsel {([KU_Fenster:Batteriewechsel]+1)}, setreading SZ_Fenster Batteriewechsel {([SZ_Fenster:Batteriewechsel]+1)}, setreading AZ_Fenster Batteriewechsel {([AZ_Fenster:Batteriewechsel]+1)}, setreading BD_Fenster Batteriewechsel {([BD_Fenster:Batteriewechsel]+1)}, setreading BD_Hk4 Batteriewechsel {([BD_Hk4:Batteriewechsel]+1)}, setreading BD_Regler Batteriewechsel {([BD_Regler:Batteriewechsel]+1)}, setreading BD_T6 Batteriewechsel {([BD_T6:Batteriewechsel]+1)}, setreading FL_Tuer Batteriewechsel {([FL_Tuer:Batteriewechsel]+1)}, setreading FL_T6 Batteriewechsel {([FL_T6:Batteriewechsel]+1)}, setreading WZ_Balkon Batteriewechsel {([WZ_Balkon:Batteriewechsel]+1)}, setreading WZ_Hk0 Batteriewechsel {([WZ_Hk0:Batteriewechsel]+1)}, setreading WZ_Hk1 Batteriewechsel {([WZ_Hk1:Batteriewechsel]+1)}
1:
0 {Log 1, "Min ist ".ReadingsVal("Wetter_Pro","fc0_tempMin",0). "°C Max ist ".ReadingsVal("Wetter_Pro","fc0_tempMax",0)."°C Himmel ist zu ".ReadingsVal("Wetter_Borsdorf","cloudCover",0)."% bedeckt und Bedingung: ".ReadingsVal("Wetter_Borsdorf","condition",0)}
10:
0 set WZ_Hk0_Clima regSet decalcWeekday Sun,set WZ_Hk1_Clima regSet decalcWeekday Sun, setBD_Hk4_Clima regSet decalcWeekday Sun
11:
0 set WZ_Hk0_Clima regSet decalcWeekday Tue,set WZ_Hk1_Clima regSet decalcWeekday Tue, setBD_Hk4_Clima regSet decalcWeekday Tue
12:
0 set WZ_Hk0_Clima regSet decalcWeekday Thu,set WZ_Hk1_Clima regSet decalcWeekday Thu,set BD_Hk4_Clima regSet decalcWeekday Thu
13:
2:
0 trigger addLog
3:
0 {fhem("set BAjetzt " . (ReadingsVal("BAmorgen","state","frei"))),Log 1, "Betriebsart ist jetzt: ".ReadingsVal("BAmorgen","state","frei")}
4:
0 set Nachrichten cmdSendSilent {plotAsPng('weblink_001WZ')},set Nachrichten cmdSendSilent {plotAsPng('weblink_004BD')}
5:
0 set Sonnenaufgang {(sunrise())}, set Sonnenuntergang {(sunset())}
6:
0 set Nachrichten message Bitte Mülltonne zur Leerung bereitstellen!
1 IF ([androidandrea] eq "present")(set Nachrichten message @Andrea Bitte Mülltonne zur Leerung bereitstellen!)
7:
0 set Nachrichten message Bitte Abtreter herein holen!
1 IF ([androidandrea] eq "present")(set Nachrichten message @Andrea Bitte Abtreter herein holen!)
8:
0 set WZ_Hk0_Clima controlManu on,set WZ_Hk1_Clima controlManu on,set BD_Hk4_Clima controlManu on
9:
0 setreading BD_Luefter_Sw_01 Schwelle {(80-abs($month-7)*2)}
helper:
event timer_6
globalinit 1
last_timer 20
sleeptimer -1
timerdev
timerevent timer_6
timereventsState
triggerDev
DOIF_eventas:
cmd_nr: 2
cmd: 2
cmd_event: timer_6
state: cmd_2
timerevents:
timer_6
triggerEvents:
timer_6
internals:
10 Heizung:STATE
11 Heizung:STATE
12 Heizung:STATE
8 Heizung:STATE
all Heizung:STATE
interval:
intervalfunc:
itimer:
localtime:
0 1567922700
1 1567918800
10 1567884900
11 1567892700
12 1567907700
13 1567872000
14 1567872000
15 1567922700
16 1567897200
17 1567875600
18 1567875600
19 1567875600
2 1567922400
3 1567929600
4 1567936800
5 1567951200
6 1567872000
7 1567880334
8 1567893540
9 1567893660
readings:
realtime:
0 08:05:00
1 07:00:00
10 21:35:00
11 23:45:00
12 03:55:00
13 18:00:00
14 18:00:00
15 08:05:00
16 01:00:00
17 19:00:00
18 19:00:00
19 19:00:00
2 08:00:00
3 10:00:00
4 12:00:00
5 16:00:00
6 18:00:00
7 20:18:54
8 23:59:00
9 00:01:00
time:
0 08:05:00
1 07:00:00
10 21:35:00
11 23:45:00
12 03:55:00
13 18:00:00
14 18:00:00
15 08:05:00
16 01:00:00
17 19:00:00
18 19:00:00
19 19:00:00
2 08:00:00
3 10:00:00
4 12:00:00
5 16:00:00
6 18:00:00
7 {sunset(0,"17:00","22:00")}
8 23:59:00
9 00:01:00
timeCond:
0 0
1 1
10 3
11 4
12 5
13 6
14 7
15 8
16 9
17 10
18 11
19 12
2 1
3 1
4 1
5 1
6 1
7 1
8 2
9 2
timer:
0 0
1 0
10 0
11 0
12 0
13 0
14 0
15 0
16 0
17 0
18 0
19 0
2 0
3 0
4 0
5 0
6 0
7 0
8 0
9 0
timers:
0 0
1 1 2 3 4 5 6 7
10 17
11 18
12 19
2 8 9
3 10
4 11
5 12
6 13
7 14
8 15
9 16
triggertime:
1567872000:
localtime 1567872000
hash:
1567875600:
localtime 1567875600
hash:
1567880334:
localtime 1567880334
hash:
1567884900:
localtime 1567884900
hash:
1567892700:
localtime 1567892700
hash:
1567893540:
localtime 1567893540
hash:
1567893660:
localtime 1567893660
hash:
1567897200:
localtime 1567897200
hash:
1567907700:
localtime 1567907700
hash:
1567918800:
localtime 1567918800
hash:
1567922400:
localtime 1567922400
hash:
1567922700:
localtime 1567922700
hash:
1567929600:
localtime 1567929600
hash:
1567936800:
localtime 1567936800
hash:
1567951200:
localtime 1567951200
hash:
uiState:
uiTable:
Attributes:
do always
room 085System
Es geht um die Timer 14 und 15.
Falls noch Input fehlt, dann bitte fragen.
Habt ihr eine Idee, wo das Problem liegt?
Danke für eure Hilfe und ein schönes WE.
([18:00] and ($wday= 4))
Zahlenvergleich mit ==
@Damian: Danke für den Tipp. Komischer Weise funzt aber die nächste Bedingung auch so:
([01:00] and ($mday= 1))(setreading BD_Luefter_Sw_01 Schwelle {(80-abs($month-7)*2)})
Aber das ist nicht das Problem, wie gesagt der Perlausdruck war nur ein Test, um das Problem einzugrenzen. Ich habe es aber angepasst...
Die Fage zielt auf diesen Zweig ab:
([18:00|3] and ($yday/2 ne int($yday/2)))(set Nachrichten message Bitte Mülltonne zur Leerung bereitstellen!)(IF ([androidandrea] eq "present")(set Nachrichten message @Andrea Bitte Mülltonne zur Leerung bereitstellen!))
und die nächste, die original so definirt war:
([18:00|4] )(set Nachrichten message Bitte Abtreter herein holen!)(IF ([androidandrea] eq "present")(set Nachrichten message @Andrea Bitte Abtreter herein holen!))
Woher hast du die Abfrage?
$yday/2 ne int($yday/2)
Wie meinst du das?
Ich prüfe, ob es eine gerade/ungerade Tagresnummer ist. So bekomme ich die Meldung nur in jeder zweiten Woche.
Zitat von: locodriver am 08 September 2019, 18:43:52
Wie meinst du das?
Ich prüfe, ob es eine gerade/ungerade Tagresnummer ist. So bekomme ich die Meldung nur in jeder zweiten Woche.
Dann eher:
$yday % 2
ist bei ungerade wahr. Ansonsten kann ich dir mit den bisherigen Informationen nicht sagen, warum es nicht funktioniert.
Hmmm... Ich stehe gerade etwas auf dem Schlauch: Wie müsste dann die Abfrage heißen?
([18:00|3] and $yday % 2)...
Ah, danke. Ich werde das mal testen und berichten...
Nach längerer Zeit eine Rückmeldung von mir.
Das Problem saß wieder mal vor dem Rechner... Vor einiger Zeit habe ich ab Timer 3 einige Zeiten ergänzt und dabei nicht bedacht, dass die gleichen Zeitangaben ohne weitere Bedingungen in einem DOIF nur einmal funzen bzw. der erste Zweig der zutrifft.
Also habe ich die Zeitangaben der beiden Timer verändert und alles ist gut. Es dauert manchmal etwas, bis man den Fehler bemerkt...
Schönens Adventswochenende!