DOIF wird nicht ausgeführt bei Abfrage von Datumsangaben

Begonnen von Gisbert, 28 November 2017, 07:24:24

Vorheriges Thema - Nächstes Thema

Gisbert

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
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | tuya local | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY | DEYE | JK-BMS | ESPHome

Brockmann

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.

kumue

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)

Gisbert

#3
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​
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | tuya local | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY | DEYE | JK-BMS | ESPHome