Hallo,
ich hab eine Weihnachtsbeleuchtung an der Haustür, die morgens und abends angehen soll.
Dazu hab ich DOIF eingesetzt. Um nicht jedes Jahr den Anfangstag (Ende November) und Endtag (Anfang Januar) einzugeben, werden diese Tage abgefragt (mit $md ge "11-24" ).
Leider tut das DOIF nichts. Ich bin mir ziemlich sicher, dass die Schaltung genauso im letzen Jahr funktioniert hat. Was mache ich falsch und wie kann ich es besser machen?
Anbei ein list des DOIFs (um 7:07 hab ich manuell den 1. Befehl ausgeführt):
Internals:
CFGFN ./FHEM/Aussenbeleuchtung.cfg
DEF ([06:30|8] and $md ge "11-24" and $md le "01-10" and [Feiertag.NRW] == 0 and sunrise_abs(1130) gt $hms)
(set Schalter.1 on-till {sunrise_abs(2090,"5:00","9:30")})
DOELSEIF (([07:15|7] or ([07:15] and [Feiertag.NRW] == 1)) and $md ge "11-24" and $md le "01-10" and sunrise_abs(1130) gt $hms)
(set Schalter.1 on-till {sunrise_abs(2090,"5:00","9:30")})
DOELSEIF ([{sunset_abs(-1200,"15:00","23:00")}] and $md ge "11-24" and $md le "01-10")
(set Schalter.1 on-till {sunset_abs(2700,"23:17:26","23:33:43")})
NAME Schalter.1.Schaltzeit
NR 135
NTFY_ORDER 50-Schalter.1.Schaltzeit
STATE cmd_1
TYPE DOIF
READINGS:
2017-11-28 02:39:15 Device Feiertag.NRW
2017-11-28 07:07:00 cmd 1
2017-11-28 07:07:00 cmd_event set_cmd_1
2017-11-28 07:07:00 cmd_nr 1
2017-11-28 02:39:15 e_Feiertag.NRW_STATE 0
2017-11-28 07:07:00 state cmd_1
2017-11-28 06:30:00 timer_01_c01 29.11.2017 06:30:00|8
2017-11-27 14:39:12 timer_02_c02 28.11.2017 07:15:00|7
2017-11-27 14:39:12 timer_03_c02 28.11.2017 07:15:00
2017-11-27 16:49:38 timer_04_c03 28.11.2017 16:49:38
condition:
0 DOIF_time_once($hash,0,$wday,"8") and $md ge "11-24" and $md le "01-10" and InternalDoIf($hash,'Feiertag.NRW','STATE') == 0 and sunrise_abs(1130) gt $hms
1 (DOIF_time_once($hash,1,$wday,"7") or (DOIF_time_once($hash,2,$wday) and InternalDoIf($hash,'Feiertag.NRW','STATE') == 1)) and $md ge "11-24" and $md le "01-10" and sunrise_abs(1130) gt $hms
2 DOIF_time_once($hash,3,$wday) and $md ge "11-24" and $md le "01-10"
days:
0 8
1 7
devices:
0 Feiertag.NRW
1 Feiertag.NRW
all Feiertag.NRW
do:
0:
0 set Schalter.1 on-till {sunrise_abs(2090,"5:00","9:30")}
1:
0 set Schalter.1 on-till {sunrise_abs(2090,"5:00","9:30")}
2:
0 set Schalter.1 on-till {sunset_abs(2700,"23:17:26","23:33:43")}
3:
helper:
event timer_1
globalinit 1
last_timer 4
sleeptimer -1
triggerDev
triggerEvents:
timer_1
triggerEventsState:
state: 0
internals:
0 Feiertag.NRW:STATE
1 Feiertag.NRW:STATE
all Feiertag.NRW:STATE
interval:
itimer:
localtime:
0 1511933400
1 1511849700
2 1511849700
3 1511884178
readings:
realtime:
0 06:30:00
1 07:15:00
2 07:15:00
3 16:49:38
regexp:
0:
1:
2:
all:
state:
STATE:
time:
0 06:30:00
1 07:15:00
2 07:15:00
3 {sunset_abs(-1200,"15:00","23:00")}
timeCond:
0 0
1 1
2 1
3 2
timer:
0 0
1 0
2 0
3 0
timers:
0 0
1 1 2
2 3
trigger:
triggertime:
1511849700:
localtime 1511849700
hash:
1511884178:
localtime 1511884178
hash:
1511933400:
localtime 1511933400
hash:
Attributes:
devStateIcon .*:fts_shutter_1w_0
do always
icon FS20.off
room CUL_HM,Mobile
Viele Grüße Gisbert
Das kann so im letzten Jahr nicht funktioniert haben, weil Damian $md erst im Februar eingeführt hat.
Und ich denke, dass es genau daran liegt. Die Bedingungen
$md ge "11-24" and $md le "01-10"
schließen sich gegenseitig aus, weil sie sich ohne Jahresangabe auf dasselbe Jahr beziehen. Und da kann ein Datum nicht gleichzeitig nach dem 24.11 und vor dem 10.1. liegen. Insofern kann diese Bedingung niemals wahr sein.
so sollte es doch gehen... die $md's in klammern und mit or verknüpft...
([06:30|8] and ($md ge "11-24" or $md le "01-10") and [Feiertag.NRW] == 0 and sunrise_abs(1130) gt $hms)
Hallo Brockmann und kumue,
nach 10 Monaten lässt dann die Erinnerung bei mir nach; da hat meine Erinnerung mich getäuscht. Aber ich hätte schwören können, dass es genau so schon funktioniert hat. Das Argument, dass sich die Monatsangaben auf das gleiche Jahr beziehen, kann ich nachvollziehen. Wenn es aber in der Zeitangabe über einen Tag hinaus geht, dann wird die 2. Zeit doch dem neuen Tag zugeordnet. Ich hab vermutet, dass es sich bei Monatsangaben gleich verhält, mein Irrtum.
Ich hab's umgestellt und werde morgen früh sehen, ob es funktioniert hat.
[Edit]: Die Umstellung war richtig, jetzt funktioniert das DOIF wie erwartet.
Viele Grüße Gisbert