BUG: Zeitumstellung -> "back to the past is not allowed"

Begonnen von Morgennebel, 27 März 2016, 08:27:53

Vorheriges Thema - Nächstes Thema

Morgennebel

Guten Morgen,


heute morgen ist meine Fussbodenheizung ausgefallen:


Internals:
   DEF        ([+0:01] and
  ([?OG.Flur.Fussboden.Links_Sw_FBInekeArbeitszimmer] eq "on" or
   [?OG.Flur.Fussboden.Links_Sw_FBInekeSchlafzimmer] eq "on" or
   [?OG.Flur.Fussboden.Links_Sw_FBLennartLinks] eq "on" or
   [?OG.Flur.Fussboden.Links_Sw_FBLennartRechts] eq "on" or
   [?OG.Flur.Fussboden.Rechts_Sw_FBBadLinks] eq "on" or
   [?OG.Flur.Fussboden.Rechts_Sw_FBBadRechts] eq "on" or
   [?OG.Flur.Fussboden.Rechts_Sw_FBFlur] eq "on"))
  (set D_EG.HWR.FussbodenAnforderung on)
DOELSE
  (set D_EG.HWR.FussbodenAnforderung off)
   NAME       DI_EG.HWR.FussbodenpumpeAnforderung
   NR         974
   NTFY_ORDER 50-DI_EG.HWR.FussbodenpumpeAnforderung
   STATE      cmd_2
   TYPE       DOIF
   Readings:
     2016-03-26 10:30:34   cmd_event       timer_1
     2016-03-26 10:30:34   cmd_nr          2
     2016-03-26 10:30:34   state           cmd_2
     2016-03-27 01:59:18   timer_1_c1      back to the past ist not allowed
     2016-03-21 17:04:23   wait_timer      no timer
   Condition:
     0          DOIF_time_once($hash,$hash->{timer}{0},$wday,"") and   (InternalDoIf($hash,'OG.Flur.Fussboden.Links_Sw_FBInekeArbeitszimmer','STATE','','',AttrVal($hash->{NAME},'notexist',undef)) eq "on" or    InternalDoIf($hash,'OG.Flur.Fussboden.Links_Sw_FBInekeSchlafzimmer','STATE','','',AttrVal($hash->{NAME},'notexist',undef)) eq "on" or   InternalDoIf($hash,'OG.Flur.Fussboden.Links_Sw_FBLennartLinks','STATE','','',AttrVal($hash->{NAME},'notexist',undef)) eq "on" or   InternalDoIf($hash,'OG.Flur.Fussboden.Links_Sw_FBLennartRechts','STATE','','',AttrVal($hash->{NAME},'notexist',undef)) eq "on" or   InternalDoIf($hash,'OG.Flur.Fussboden.Rechts_Sw_FBBadLinks','STATE','','',AttrVal($hash->{NAME},'notexist',undef)) eq "on" or   InternalDoIf($hash,'OG.Flur.Fussboden.Rechts_Sw_FBBadRechts','STATE','','',AttrVal($hash->{NAME},'notexist',undef)) eq "on" or   InternalDoIf($hash,'OG.Flur.Fussboden.Rechts_Sw_FBFlur','STATE','','',AttrVal($hash->{NAME},'notexist',undef)) eq "on")
   Days:
   Devices:
   Do:
     0:
       0          set D_EG.HWR.FussbodenAnforderung on
     1:
       0          set D_EG.HWR.FussbodenAnforderung off
   Helper:
     event      timer_1
     globalinit 1
     last_timer 1
     sleeptimer -1
     timerdev
     timerevent timer_1
     triggerDev
     timerevents:
       timer_1
     triggerEvents:
       timer_1
   Internals:
     0           OG.Flur.Fussboden.Links_Sw_FBInekeArbeitszimmer:STATE OG.Flur.Fussboden.Links_Sw_FBInekeSchlafzimmer:STATE OG.Flur.Fussboden.Links_Sw_FBLennartLinks:STATE OG.Flur.Fussboden.Links_Sw_FBLennartRechts:STATE OG.Flur.Fussboden.Rechts_Sw_FBBadLinks:STATE OG.Flur.Fussboden.Rechts_Sw_FBBadRechts:STATE OG.Flur.Fussboden.Rechts_Sw_FBFlur:STATE
     all         OG.Flur.Fussboden.Links_Sw_FBInekeArbeitszimmer:STATE OG.Flur.Fussboden.Links_Sw_FBInekeSchlafzimmer:STATE OG.Flur.Fussboden.Links_Sw_FBLennartLinks:STATE OG.Flur.Fussboden.Links_Sw_FBLennartRechts:STATE OG.Flur.Fussboden.Rechts_Sw_FBBadLinks:STATE OG.Flur.Fussboden.Rechts_Sw_FBBadRechts:STATE OG.Flur.Fussboden.Rechts_Sw_FBFlur:STATE
   Interval:
   Itimer:
   Localtime:
     0          1459040357
   Readings:
   Realtime:
     0          01:59:17
   Regexp:
   State:
   Time:
     0          +0:01
   Timecond:
     0          0
   Timer:
     0          0
   Timers:
     0           0
   Triggertime:
Attributes:
   room       EG.HWR
   wait       300,1800


Dieses DOIF steuert die Anforderung von Fußbodenwärme und meldet den Fehler:


cmd_event   timer_1  2016-03-26 10:30:34
cmd_nr        2             2016-03-26 10:30:34
state           cmd_2     2016-03-26 10:30:34
timer_1_c1  back to the past ist not allowed   2016-03-27 01:59:18
wait_timer   no timer  2016-03-21 17:04:23


Die Zeitumstellung erfolgte um 2:00 Uhr und hat DOIF verwirrt...

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

FunkOdyssey

Dito. Davon war ich auch mehrfach betroffen. U.a. meine Zirkulation blieb aus. :-)

Damian

Ja. Muss ich mir mal anschauen. Eigentlich müsste er sich nach einer Stunde wieder gefangen haben.

Gruß

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

Morgennebel

Danke, Damian,


die nächste Umstellung ist in sechs Monaten - also nicht so kritisch.

Bei mir half nur ein "shutdown restart".

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

Zitat von: Morgennebel am 27 März 2016, 08:55:03
Danke, Damian,


die nächste Umstellung ist in sechs Monaten - also nicht so kritisch.

Bei mir half nur ein "shutdown restart".

Ciao, -MN

"back to the past" gibt´s erst in einem Jahr ;)
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Damian

Habe es gefixed.
Dann warten wir die nächste Zeitumstellung ab :)

Gruß

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

FunkOdyssey


Reinerlein

Hi,

wieso eigentlich "back to the past"?
Die Uhr wurde doch eine Stunde vorgestellt. Es gab diese Nacht die Zeiten zwischen 2:00 und 2:59 einfach nicht, weil nach 1:59 direkt 3:00 Uhr folgte. Das lag doch alles in der Zukunft...

Bei der Winterzeit wird es die Stunde doppelt geben... das ist für solche Planaufgaben doch viel schlimmer, oder?
Da besteht doch die Gefahr der Doppeltausführung solcher Codeschnipsel :)

Grüße
Reinerlein

Damian

Zitat von: Reinerlein am 27 März 2016, 12:07:11
Hi,

wieso eigentlich "back to the past"?
Die Uhr wurde doch eine Stunde vorgestellt. Es gab diese Nacht die Zeiten zwischen 2:00 und 2:59 einfach nicht, weil nach 1:59 direkt 3:00 Uhr folgte. Das lag doch alles in der Zukunft...

Bei der Winterzeit wird es die Stunde doppelt geben... das ist für solche Planaufgaben doch viel schlimmer, oder?
Da besteht doch die Gefahr der Doppeltausführung solcher Codeschnipsel :)

Grüße
Reinerlein

Das hängt ja davon ab, wie man die Zeitumstellung in seinem Programm berücksichtigt hat, die kritische Stelle in DOIF sah so aus:

  if ($isdst_now != $isdst) {
    if ($isdst_now == 1) {
      $next_time+=3600 if ($isdst == 0);
    } else {
      $next_time-=3600 if ($isdst == 1);
    }
  }
  if ($next_time < $now) {
    readingsSingleUpdate ($hash,"timer_".($nr+1)."_c".($cond+1),"back to the past ist not allowed",AttrVal($hash->{NAME},"timerevent","")?1:0);
    return("timer_".($nr+1)."_c".($cond+1),"back to the past ist not allowed");
}


nun sieht sie anders aus ;)

Gruß

Damian


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

Per

Zitat von: Morgennebel am 27 März 2016, 08:27:53

Internals:
   DEF        ([+0:01] and...

Darf man fragen, warum du diesen prozessorlastigen Modus verwendest?

Morgennebel

Hi Per,


ein Aufruf je Minute "prozessorlastig"...? :)

Ganz ehrlich ist die Installation eher "Proof-of-Concept" zur Behebung der meisten Probleme mit meiner Heizung, bis die neue Heizung da ist und genügend Geld für einen Aufbau als Feldverteiler mit Klemmblöcken auf Hutschienen usw. Solange der ODROID nicht ächzt und stöhnt, kümmere ich mich erstmal um andere Dinge...

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