Nach Update gestern falsche Zeitberechnung

Begonnen von bmwfan, 14 Juni 2021, 07:52:43

Vorheriges Thema - Nächstes Thema

bmwfan

Hallo,

ich habe gestern ein Update auf Version
Zitat$Id: 98_DOIF.pm 24595 2021-06-06 17:52:38Z Damian $
durchgeführt und erhalte nun in mehreren Abfragen falsche Zeitberechnungen.

Ich verwende folgende Formel zur Bestimmung der Zeit, um damit stündlich ab Sonnenaufgang zu prüfen, ob die Bedingungen für das Schließen der Jalousien erfüllt sind.
([([[di_Tageslicht:SunUpTime]] + [01:30])-12:00,+[1]:00])
Aktuell ist Sonnenaufgang 04:54. Bis vor dem Update stand dann auch die korrekte Zeit (04:54 + 01:30) im DOIF in den Timern timer_01_c01, timer_04_c02 und timer_07_c03. Nach dem Update aber die Zeit 11:11.

Hier noch das ganze List dieses DOIF (allerdings etwas länger, deshalb habe ich den fraglichen Teil (siehe oben) herausgezogen.
Internals:
   DEF        (([?Wetter_Pro:fc0_tempMax] >= 20 and ([?Wetter_Pro:fc0_weatherMorning] =~ "sonnig" or [?Wetter_Pro:fc0_weatherMorning] =~ "heiter")) and ($month >= 4 && $month <= 10) and ([([[di_Tageslicht:SunUpTime]] + [01:30])-12:00,+[1]:00]) and [?du_Beschattung_Haus_morgens] ne "ja") (set du_Beschattung_Haus_morgens ja) ## Beschattung notwendig wenn Vorhersage Aussentemp. >= 20 °C UND (heiter oder sonnig) und immer nur zwischen April und Oktober, Überprüfung jede Stunde, wenn Dummy Beschatten nicht auf ja (sonst jede Stunde trigger) Geht nicht ([06:00-12:00,+01:00])
DOELSEIF ((([?Wetter_Pro:fc0_tempMax] > 22 and [?Wetter_Pro:fc0_weatherDay] =~ "unterschiedlich bewölkt") or  [?Wetter_Pro:fc0_tempMax] > 23) and ($month >= 4 && $month <= 10) and ([([[di_Tageslicht:SunUpTime]] + [01:30])-12:00,+[1]:00]) and [?du_Beschattung_Haus_morgens] ne "ja") (set du_Beschattung_Haus_morgens ja) ## Beschattung notwendig wenn Vorhersage Aussentemp. > 22 °C UND unterschiedlich bewölkt ODER Aussentemp. > 23 °C und immer nur zwischen April und Oktober, Überprüfung jede Stunde, wenn Dummy Beschatten nicht auf ja (sonst jede Stunde trigger)
DOELSEIF (([?Wetter_Pro:fc0_weatherMorning] =~ "sonnig" or [?Wetter_Pro:fc0_weatherMorning] =~ "heiter" or [?Wetter_Pro:fc0_weatherMorning] =~ "unterschiedlich bewölkt" or [?Wetter_Pro:fc0_weatherMorning] =~ "wolkig") and ($month >= 4 && $month <= 10) and ([([[di_Tageslicht:SunUpTime]] + [01:30])-12:00,+[1]:00]) and [?du_Beschattung_Haus_morgens] eq "nein") (set du_Beschattung_Haus_morgens Fenster) ## Beschattung notwendig wenn Vorhersage Wetter (heiter oder sonnig oder unterschiedlich bewölkt) und immer nur zwischen November und April, Überprüfung jede Stunde  Muss noch bei Monaten angepaßt werden
DOELSEIF ([23:59]) (set du_Beschattung_Haus_morgens nein) ## Merker zurücksetzen
   FUUID      5c4c3934-f33f-6b6f-15db-69337ccabe962381
   MODEL      FHEM
   NAME       di_Beschattung_Haus_morgens
   NOTIFYDEV  di_Tageslicht,global
   NR         1685
   NTFY_ORDER 50-di_Beschattung_Haus_morgens
   STATE       Nur Fenster
   TYPE       DOIF
   VERSION    24595 2021-06-06 17:52:38
   READINGS:
     2021-06-14 07:33:41   cmd             3
     2021-06-14 07:33:41   cmd_event       set_cmd_3
     2021-06-14 07:33:41   cmd_nr          3
     2021-05-31 09:29:03   mode            enabled
     2021-06-14 07:33:41   state            Nur Fenster
     2021-06-14 04:54:31   timer_01_c01    14.06.2021 11:11:00
     2021-06-13 12:00:00   timer_02_c01    14.06.2021 12:00:00
     2021-06-14 04:54:31   timer_04_c02    14.06.2021 11:11:00
     2021-06-13 12:00:00   timer_05_c02    14.06.2021 12:00:00
     2021-06-14 04:54:31   timer_07_c03    14.06.2021 11:11:00
     2021-06-13 12:00:00   timer_08_c03    14.06.2021 12:00:00
     2021-06-13 23:59:00   timer_10_c04    14.06.2021 23:59:00
     2021-06-13 11:00:01   wait_timer      no timer
   Regex:
     accu:
     collect:
     itimer:
       di_Tageslicht:
         itimer:
           SunUpTime  ^di_Tageslicht$:^SunUpTime:
   attr:
     cmdState:
       0:
         Beschatten Alles 20
       1:
          Beschatten Alles 22
       2:
          Nur Fenster
       3:
          Dummy
     wait:
       0:
         rand(5)
       1:
         rand(5)
       2:
         rand(5)
       3:
         0
     waitdel:
   condition:
     0          (::ReadingValDoIf($hash,'Wetter_Pro','fc0_tempMax') >= 20 and (::ReadingValDoIf($hash,'Wetter_Pro','fc0_weatherMorning') =~ "sonnig" or ::ReadingValDoIf($hash,'Wetter_Pro','fc0_weatherMorning') =~ "heiter")) and ($month >= 4 && $month <= 10) and (::DOIF_time($hash,0,1,$wday,$hms)) and ::InternalDoIf($hash,'du_Beschattung_Haus_morgens','STATE') ne "ja"
     1          ((::ReadingValDoIf($hash,'Wetter_Pro','fc0_tempMax') > 22 and ::ReadingValDoIf($hash,'Wetter_Pro','fc0_weatherDay') =~ "unterschiedlich bewölkt") or  ::ReadingValDoIf($hash,'Wetter_Pro','fc0_tempMax') > 23) and ($month >= 4 && $month <= 10) and (::DOIF_time($hash,3,4,$wday,$hms)) and ::InternalDoIf($hash,'du_Beschattung_Haus_morgens','STATE') ne "ja"
     2          (::ReadingValDoIf($hash,'Wetter_Pro','fc0_weatherMorning') =~ "sonnig" or ::ReadingValDoIf($hash,'Wetter_Pro','fc0_weatherMorning') =~ "heiter" or ::ReadingValDoIf($hash,'Wetter_Pro','fc0_weatherMorning') =~ "unterschiedlich bewölkt" or ::ReadingValDoIf($hash,'Wetter_Pro','fc0_weatherMorning') =~ "wolkig") and ($month >= 4 && $month <= 10) and (::DOIF_time($hash,6,7,$wday,$hms)) and ::InternalDoIf($hash,'du_Beschattung_Haus_morgens','STATE') eq "nein"
     3          ::DOIF_time_once($hash,9,$wday)
   days:
   do:
     0:
       0          set du_Beschattung_Haus_morgens ja
     1:
       0          set du_Beschattung_Haus_morgens ja
     2:
       0          set du_Beschattung_Haus_morgens Fenster
     3:
       0          set du_Beschattung_Haus_morgens nein
     4:
   helper:
     DEVFILTER  ^global$|^di_Tageslicht$
     NOTIFYDEV  global|di_Tageslicht
     event      timer_10
     globalinit 1
     last_timer 10
     sleepdevice timer_3
     sleepsubtimer -1
     sleeptimer -1
     timerdev   
     timerevent timer_10
     triggerDev
     timerevents:
       timer_10
     timereventsState:
       timer_10
   internals:
     all         du_Beschattung_Haus_morgens:STATE
   interval:
     0          -1
     1          0
     3          -1
     4          3
     6          -1
     7          6
   intervalfunc:
     2          ::DOIF_time($hash,0,1,$wday,$hms)
     5          ::DOIF_time($hash,3,4,$wday,$hms)
     8          ::DOIF_time($hash,6,7,$wday,$hms)
   intervaltimer:
     0          2
     1          2
     3          5
     4          5
     6          8
     7          8
   localtime:
     0          1623661860
     1          1623664800
     3          1623661860
     4          1623664800
     6          1623661860
     7          1623664800
     9          1623707940
   perlblock:
   realtime:
     0          11:11:00
     1          12:00:00
     3          11:11:00
     4          12:00:00
     6          11:11:00
     7          12:00:00
     9          23:59:00
   time:
     0          ([[di_Tageslicht:SunUpTime]]+[01:30])
     1          12:00:00
     2          +[1]:00
     3          ([[di_Tageslicht:SunUpTime]]+[01:30])
     4          12:00:00
     5          +[1]:00
     6          ([[di_Tageslicht:SunUpTime]]+[01:30])
     7          12:00:00
     8          +[1]:00
     9          23:59:00
   timeCond:
     0          0
     1          0
     2          0
     3          1
     4          1
     5          1
     6          2
     7          2
     8          2
     9          3
   timer:
     0          0
     1          0
     2          0
     3          0
     4          0
     5          0
     6          0
     7          0
     8          0
     9          0
   timers:
     0           0  1  2
     1           3  4  5
     2           6  7  8
     3           9
   triggertime:
     1623661860:
       localtime  1623661860
       hash:
     1623664800:
       localtime  1623664800
       hash:
     1623707940:
       localtime  1623707940
       hash:
   uiState:
   uiTable:
Attributes:
   cmdState   Beschatten Alles 20 | Beschatten Alles 22 | Nur Fenster | Dummy
   comment    09.05: Beschattungsstart immer 90 Min. nach Sonnenaufgang
   initialize nein
   room       1.2_Kueche,9.8.1_DOIF
   timerWithWait 1
   wait       rand(5):rand(5):rand(5):0


Damit ermittele ich die Zeit des Sonnenaufganges (reading Sonnenaufgang stimmt nicht, wird aber nicht verwendet. Habe es mit SunUpTime dann hinbekommen):
Internals:
   DEF        ([{sunrise("HORIZON=-4")}]) (set du_Tageslicht hell)
DOELSEIF ([{sunset("HORIZON=-3")}]) (set du_Tageslicht dunkel)
   FUUID      5c4c3931-f33f-6b6f-479e-df5724a54a7d2405
   MODEL      FHEM
   NAME       di_Tageslicht
   NOTIFYDEV  global
   NR         1324
   NTFY_ORDER 50-di_Tageslicht
   STATE      hell
   TYPE       DOIF
   VERSION    24595 2021-06-06 17:52:38
   READINGS:
     2021-06-14 04:54:31   Sonnenaufgang   14
     2021-06-14 04:54:31   Sonnenuntergang 21:38
     2021-06-14 04:54:31   SunDownTimeKor  21:08
     2021-06-14 04:54:31   SunUpTime       04:54
     2021-06-14 04:54:31   cmd             1
     2021-06-14 04:54:31   cmd_event       timer_1
     2021-06-14 04:54:31   cmd_nr          1
     2021-03-21 14:28:32   mode            enabled
     2021-06-14 04:54:31   state           hell
     2021-06-14 04:54:31   timer_01_c01    15.06.2021 04:54:24
     2021-06-13 21:38:21   timer_02_c02    14.06.2021 21:38:53
   Regex:
     accu:
     collect:
   attr:
     cmdState:
       0:
         hell
       1:
          dunkel
     waitdel:
   condition:
     0          ::DOIF_time_once($hash,0,$wday)
     1          ::DOIF_time_once($hash,1,$wday)
   days:
   do:
     0:
       0          set du_Tageslicht hell
     1:
       0          set du_Tageslicht dunkel
     2:
   helper:
     DEVFILTER  ^global$
     NOTIFYDEV  global
     event      timer_1
     globalinit 1
     last_timer 2
     sleeptimer -1
     timerdev   
     timerevent timer_1
     triggerDev
     timerevents:
       timer_1
     timereventsState:
       timer_1
     triggerEvents:
       timer_1
     triggerEventsState:
       timer_1
   interval:
   intervalfunc:
   localtime:
     0          1623725664
     1          1623699533
   perlblock:
   realtime:
     0          04:54:24
     1          21:38:53
   time:
     0          {sunrise("HORIZON=-4")}
     1          {sunset("HORIZON=-3")}
   timeCond:
     0          0
     1          1
   timer:
     0          0
     1          0
   timers:
     0           0
     1           1
   triggertime:
     1623699533:
       localtime  1623699533
       hash:
     1623725664:
       localtime  1623725664
       hash:
   uiState:
   uiTable:
Attributes:
   cmdState   hell | dunkel
   comment    SunDownTimeKor: Sonnenuntergang minus 30 Minuten.
   do         always
   initialize hell
   room       9.8.1_DOIF
   userReadings Sonnenaufgang {ReadingsTimestamp($name,"timer_01_c01","") =~ /^(\d+)-(\d+)-(\d+)\s(\d+:\d+):(\d+)$/;return "$3";},
Sonnenuntergang {ReadingsTimestamp($name,"timer_02_c02","") =~ /^(\d+)-(\d+)-(\d+)\s(\d+:\d+):(\d+)$/;return "$4";},
SunUpTime {POSIX::strftime("%H:%M",localtime(time_str2num(ReadingsTimestamp($name,"timer_01_c01","2000-01-01 00:00:00"))))},
SunDownTimeKor  {POSIX::strftime("%H:%M",localtime(time_str2num(ReadingsTimestamp($name,"timer_02_c02","2000-01-01 00:00:00"))-30*60))},
   verbose    1


Ist jemand bekannt, ob es im DOIF eine Änderung gab, sodaß diese Art der Zeitberechnung nicht mehr funktioniert oder kann mir Tipps geben, worand as liegen kann?

Grüße Jürgen
Synology DS720+ mit Docker-Container und Haupt-FHEM, HW-LAN, Jalousienaktoren; Raspi 3B+ mit piVCCU ohne FHEM-Instanz, CUL, JeeLink; Raspi 3B+ mit FHEM und HMUARTUSB,  Raspi 3B+ mit HMUARTGPIO, 1-wire, ebusd

Damian

#1
An dieser Stelle hat sich seit langer Zeit Modul nichts geändert. Nach einem Neustart wird die Zeit neu eingelesen. Vielleicht war sie zu diesem Zeitpunkt anders. Sonst ist eine Analyse im Nachhinein schwierig.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

bmwfan

Dann warte ich einmal den Tageswechsel heute Nacht ab und schaue, ob dann die Zeiten wieder stimmen. Ich war der Meinung, dass wegen der stündlichen Aktualisierung auch nach einem Neustart spätestens nach 1 Stunde die Zeiten wieder stimmen, was aber nicht so war.

Danke für die Info
Synology DS720+ mit Docker-Container und Haupt-FHEM, HW-LAN, Jalousienaktoren; Raspi 3B+ mit piVCCU ohne FHEM-Instanz, CUL, JeeLink; Raspi 3B+ mit FHEM und HMUARTUSB,  Raspi 3B+ mit HMUARTGPIO, 1-wire, ebusd

McShire

Hallo Jürgen,

Schau mal unter
https://wiki.fhem.de/wiki/Zeitangaben,_rechnen_mit
Vielleicht kann man davon etwas nutzen zur Vereinfachung.

Die periodische Prüfung würde ich mit einem at device machen.

Grüße
Werner

Damian

Zitat von: bmwfan am 14 Juni 2021, 14:15:36
Dann warte ich einmal den Tageswechsel heute Nacht ab und schaue, ob dann die Zeiten wieder stimmen. Ich war der Meinung, dass wegen der stündlichen Aktualisierung auch nach einem Neustart spätestens nach 1 Stunde die Zeiten wieder stimmen, was aber nicht so war.

Danke für die Info

Ich brauche einen nachvollziehbaren Fall, damit ich es analysieren kann.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF