DOIF mit sunrise/sunset schaltet falsch (nach Update)...

Begonnen von Morgennebel, 14 Mai 2016, 16:33:09

Vorheriges Thema - Nächstes Thema

Morgennebel

Moin,


folgendes DOIF




([05:30-{sunrise("REAL",0,"05:30","09:00")}|8] or
[06:30-{sunrise("REAL",0,"06:30","09:30")}|7] or
[{sunset("REAL",0,"15:00","21:30")}-22:15] or
([{sunset("REAL",0,"15:00","21:30")}-01:30] and [PresTVWintergarten:presence] eq "present"))
    (set D_TimerAussenlicht on, set Aussenlicht on)   ## Cmd1 
DOELSE
    (set D_TimerAussenlicht off, set Aussenlicht off) ## Cmd2


bzw.


Internals:
   CFGFN      ./FHEM/fhem-timers.cfg
   DEF        ([05:30-{sunrise("REAL",0,"05:30","09:00")}|8] or
[06:30-{sunrise("REAL",0,"06:30","09:30")}|7] or
[{sunset("REAL",0,"15:00","21:30")}-22:15] or
([{sunset("REAL",0,"15:00","21:30")}-01:30] and [PresTVWintergarten:presence] eq "present"))
    (set D_TimerAussenlicht on, set Aussenlicht on)   ## Cmd1
DOELSE
    (set D_TimerAussenlicht off, set Aussenlicht off) ## Cmd2
   NAME       DI_TimerPresenceAussenlichtOnOff
   NR         769
   NTFY_ORDER 50-DI_TimerPresenceAussenlichtOnOff
   STATE      cmd_1
   TYPE       DOIF
   Readings:
     2016-05-14 15:47:36   Device          PresTVWintergarten
     2016-05-14 15:46:17   cmd             1
     2016-05-14 15:46:17   cmd_event       PresTVWintergarten
     2016-05-14 15:46:17   cmd_nr          1
     2016-05-14 15:47:36   e_PresTVWintergarten_presence present
     2016-05-14 15:46:17   state           cmd_1
     2016-05-14 08:41:02   timer_1_c1      15.05.2016 05:30:00|8
     2016-05-14 08:41:02   timer_2_c1      15.05.2016 05:30:00|8
     2016-05-14 08:41:02   timer_3_c1      15.05.2016 06:30:00|7
     2016-05-14 08:41:02   timer_4_c1      15.05.2016 06:30:00|7
     2016-05-14 08:41:02   timer_5_c1      14.05.2016 21:14:24
     2016-05-14 08:41:02   timer_6_c1      14.05.2016 22:15:00
     2016-05-14 08:41:02   timer_7_c1      14.05.2016 21:14:24
     2016-05-14 08:41:02   timer_8_c1      15.05.2016 01:30:00
   Condition:
     0          DOIF_time($hash,$hash->{realtime}{0},$hash->{realtime}{1},$wday,$hms,"8") or  DOIF_time($hash,$hash->{realtime}{2},$hash->{realtime}{3},$wday,$hms,"7") or  DOIF_time($hash,$hash->{realtime}{4},$hash->{realtime}{5},$wday,$hms,"") or  (DOIF_time($hash,$hash->{realtime}{6},$hash->{realtime}{7},$wday,$hms,"") and ReadingValDoIf($hash,'PresTVWintergarten','presence','','',AttrVal($hash->{NAME},'notexist',undef)) eq "present")
   Days:
     0          8
     1          8
     2          7
     3          7
   Devices:
     0           PresTVWintergarten
     all         PresTVWintergarten
   Do:
     0:
       0          set D_TimerAussenlicht on, set Aussenlicht on
     1:
       0          set D_TimerAussenlicht off, set Aussenlicht off
   Helper:
     event      presence: present
     globalinit 1
     last_timer 8
     sleeptimer -1
     timerdev   PresTVWintergarten
     timerevent presence: present
     triggerDev PresTVWintergarten
     timerevents:
       presence: present
     timereventsState:
       presence: present
     triggerEvents:
       presence: present
     triggerEventsState:
       presence: present
   Internals:
   Interval:
     0          -1
     1          0
     2          -1
     3          2
     4          -1
     5          4
     6          -1
     7          6
   Itimer:
   Localtime:
     0          1463283000
     1          1463283000
     2          1463286600
     3          1463286600
     4          1463253264
     5          1463256900
     6          1463253264
     7          1463268600
   Readings:
     0           PresTVWintergarten:presence
     all         PresTVWintergarten:presence
   Realtime:
     0          05:30:00
     1          05:30:00
     2          06:30:00
     3          06:30:00
     4          21:14:24
     5          22:15:00
     6          21:14:24
     7          01:30:00
   Regexp:
     0:
     All:
   State:
   Time:
     0          05:30:00
     1          {sunrise("REAL",0,"05:30","09:00")}
     2          06:30:00
     3          {sunrise("REAL",0,"06:30","09:30")}
     4          {sunset("REAL",0,"15:00","21:30")}
     5          22:15:00
     6          {sunset("REAL",0,"15:00","21:30")}
     7          01:30:00
   Timecond:
     0          0
     1          0
     2          0
     3          0
     4          0
     5          0
     6          0
     7          0
   Timer:
     0          0
     1          0
     2          0
     3          0
     4          0
     5          0
     6          0
     7          0
   Timers:
     0           0  1  2  3  4  5  6  7
   Trigger:
   Triggertime:
     1463253264:
       localtime  1463253264
       Hash:
     1463256900:
       localtime  1463256900
       Hash:
     1463268600:
       localtime  1463268600
       Hash:
     1463283000:
       localtime  1463283000
       Hash:
     1463286600:
       localtime  1463286600
       Hash:
Attributes:
   room       Aussen


hat mehrere Monate tadellos funktioniert.

Seit einem der letzten Updates funktioniert das Zusammenspiel mit sunrise/sunset nicht mehr - Lampen gehen nachts nicht aus oder werden schon um 16:00 Uhr eingeschaltet - obwohl der Sonnenuntergang erst um 21 Uhr ist.

Logfile:


2016-05-13_21:12:43 DI_TimerPresenceAussenlichtOnOff cmd_event: timer_5
2016-05-13_21:12:43 DI_TimerPresenceAussenlichtOnOff cmd_1
2016-05-14_00:37:20 DI_TimerPresenceAussenlichtOnOff cmd_nr: 2
2016-05-14_00:37:20 DI_TimerPresenceAussenlichtOnOff cmd: 2
2016-05-14_00:37:20 DI_TimerPresenceAussenlichtOnOff cmd_event: PresTVWintergarten
2016-05-14_00:37:20 DI_TimerPresenceAussenlichtOnOff cmd_2
2016-05-14_06:30:00 DI_TimerPresenceAussenlichtOnOff cmd_nr: 1
2016-05-14_06:30:00 DI_TimerPresenceAussenlichtOnOff cmd: 1
2016-05-14_06:30:00 DI_TimerPresenceAussenlichtOnOff cmd_event: timer_3
2016-05-14_06:30:00 DI_TimerPresenceAussenlichtOnOff cmd_1
2016-05-14_08:41:02 DI_TimerPresenceAussenlichtOnOff cmd: 0
2016-05-14_08:41:02 DI_TimerPresenceAussenlichtOnOff initialized
2016-05-14_15:46:17 DI_TimerPresenceAussenlichtOnOff cmd_nr: 1
2016-05-14_15:46:17 DI_TimerPresenceAussenlichtOnOff cmd: 1
2016-05-14_15:46:17 DI_TimerPresenceAussenlichtOnOff cmd_event: PresTVWintergarten
2016-05-14_15:46:17 DI_TimerPresenceAussenlichtOnOff cmd_1


Zum einen zu sehen, daß morgens um 06:30 das Licht anging (sollte aber aus bleiben, da der Sonnenaufgang früher war) und nicht wieder ausging und
daß um 15:46 mit dem Event PresTVWintergarten das Licht ebenfalls aktiviert wurde - obwohl der Sonnenaufgang noch nicht erreicht wurde.

Das DOIF lief mehrere Wochen einwandfrei...

Danke, -MN
Einziger Spender an FHEM e.V. mit Dauerauftrag seit >= 24 Monaten

FHEM: MacMini/ESXi, 2-3 FHEM Instanzen produktiv
In-Use: STELLMOTOR, VALVES, PWM-PWMR, Xiaomi, Allergy, Proplanta, UWZ, MQTT,  Homematic, Luftsensor.info, ESP8266, ESERA

Damian

"hat mehrere Monate tadellos funktioniert"

ja, bis Sonnenaufgang vor 5:30 kam ;)

Das hat weniger mit einem Update zu tun, als mit deiner Zeitintervall-Definition.

Das erste Intervall [05:30-05:30] ist immer wahr (von 05:30 bis 05:29:59 des nächsten Tages).

Daher solltest du deine Intervallgrenzen so wählen, dass sie nicht gleich sein können.

Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Morgennebel

#2
Hi Damian,


danke für Deine Mühe und Deine Erläuterungen.

In den Readings des DOIFs werden die Zeiten immer als Datum + Uhrzeit angegeben. Da lese ich jetzt:


timer_1_c1        15.05.2016 05:30:00|8          2016-05-14 08:41:02
timer_2_c1        15.05.2016 05:30:00|8          2016-05-14 08:41:02
timer_3_c1        15.05.2016 06:30:00|7          2016-05-14 08:41:02
timer_4_c1        15.05.2016 06:30:00|7          2016-05-14 08:41:02
timer_5_c1        14.05.2016 21:14:24             2016-05-14 08:41:02
timer_6_c1        14.05.2016 22:15:00             2016-05-14 08:41:02
timer_7_c1        14.05.2016 21:14:24             2016-05-14 08:41:02
timer_8_c1        15.05.2016 01:30:00             2016-05-14 08:41:02


timer_1_c1 (feste Startzeit) ist identisch zu timer_2_c1 (sunrise-Funktion). Du hattest zu einer anderen Frage von mir geschrieben, daß

    [Zeit1-Zeit1]

derzeit fehlerhaft auf TRUE gesetzt wird und dazu ein Update avisiert.

Wird bei diesen Zeitvergleichen auch das Datum mit berücksichtigt oder nur die Uhrzeit?

Danke Dir,

Ciao, -MN
Einziger Spender an FHEM e.V. mit Dauerauftrag seit >= 24 Monaten

FHEM: MacMini/ESXi, 2-3 FHEM Instanzen produktiv
In-Use: STELLMOTOR, VALVES, PWM-PWMR, Xiaomi, Allergy, Proplanta, UWZ, MQTT,  Homematic, Luftsensor.info, ESP8266, ESERA

Damian

#3
Zitat von: Morgennebel am 14 Mai 2016, 18:24:17
Hi Damian,


danke für Deine Mühe und Deine Erläuterungen.

In den Readings des DOIFs werden die Zeiten immer als Datum + Uhrzeit angegeben. Da lese ich jetzt:


timer_1_c1        15.05.2016 05:30:00|8          2016-05-14 08:41:02
timer_2_c1        15.05.2016 05:30:00|8          2016-05-14 08:41:02
timer_3_c1        15.05.2016 06:30:00|7          2016-05-14 08:41:02
timer_4_c1        15.05.2016 06:30:00|7          2016-05-14 08:41:02
timer_5_c1        14.05.2016 21:14:24             2016-05-14 08:41:02
timer_6_c1        14.05.2016 22:15:00             2016-05-14 08:41:02
timer_7_c1        14.05.2016 21:14:24             2016-05-14 08:41:02
timer_8_c1        15.05.2016 01:30:00             2016-05-14 08:41:02


timer_1_c1 (feste Startzeit) ist identisch zu timer_2_c1 (sunrise-Funktion). Du hattest zu einer anderen Frage von mir geschrieben, daß

    [Zeit1-Zeit1]

derzeit fehlerhaft auf TRUE gesetzt wird und dazu ein Update avisiert.

Wird bei diesen Zeitvergleichen auch das Datum mit berücksichtigt oder nur die Uhrzeit?

Danke Dir,

Ciao, -MN

Ein Zeitintervall [Anfang-Ende] ist ab Anfang bis Ende ausschließlich wahr. Nun stellt sich die Frage: Was soll bei Gleichheit sein?

Da Anfang gleich Ende ist gibt es nur einen Trigger: Anfang wahr und gleichtzeitig Ende unwahr? Oder ist das eher der Fall: Ende kleiner Anfang, dann ist das Intervall von Anfang zum Ende des nächsten Tages wahr, bei Anfang=Ende also immer wahr.

Womöglich, wäre der beste Fall bei Gleichheit die Auswertung der Bedingung erst gar nicht vorzunehmen, also kein Trigger - das müsste ich aber erst sauber im Code Abfangen.

Du kannst erst mal bei dir definieren:

[05:30-{sunrise("REAL",0,"05:31","09:00")}|8] or
[06:30-{sunrise("REAL",0,"06:31","09:30")}|7]

Dann kann, wie schon geschrieben, der Fall gar nicht eintreten.

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF