Gelöst: Userreadings nach Neustart aktualisieren

Begonnen von bmwfan, 11 Juli 2021, 17:44:09

Vorheriges Thema - Nächstes Thema

bmwfan

Hallo,

ich habe nach einem Neustart von FHEM das Problem, dass die Userreadings im DOIF nicht aktualisiert werden und somit falsche Zeiten im Programm verwendet werden. Ich kann zwar manuell cmd1 (für Tageslicht hell) oder cmd2 (für Tageslicht dunkel) ausführen, die zugehörigen userreadings (sonnenuntergang...) werden aber nicht aktualisiert. Gibt es eine Möglichkeit, diese manuell oder besser automatisiert bei einem Neustart von FHEM (nach Update oder wie heute morgen, als der FI im Erdgeschoß ausgelöst hat) zu aktualisieren?

Anbei das List des DOIF nach einem Neustart heute morgen. SunDownTimeKor und Sonnenuntergang zeigen völlig falsche Werte an. Sonnenuntergang ist die Zeit des Neustarts, SunDownTimeKor die abzgl. 30 Minuten.

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    24643 2021-06-16 07:26:15
   OLDREADINGS:
   READINGS:
     2021-07-11 17:24:12   Sonnenuntergang 09:50
     2021-07-11 17:24:12   SunDownTimeKor  09:20
     2021-07-11 17:24:12   SunUpTime       09:50
     2021-07-11 17:24:12   cmd             1
     2021-07-11 17:24:12   cmd_event       set_cmd_1
     2021-07-11 17:24:12   cmd_nr          1
     2021-03-21 14:28:32   mode            enabled
     2021-07-11 17:24:12   state           hell
     2021-07-11 09:50:32   timer_01_c01    12.07.2021 05:08:07
     2021-07-11 09:50:32   timer_02_c02    11.07.2021 21:36:14
   Regex:
     accu:
     collect:
   attr:
     cmdState:
       0:
         hell
       1:
          dunkel
   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
     globalinit 1
     last_timer 2
     sleeptimer -1
     triggerDev
   intervalfunc:
   localtime:
     0          1626059287
     1          1626032174
   perlblock:
   realtime:
     0          05:08:07
     1          21:36:14
   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:
     1626032174:
       localtime  1626032174
       hash:
     1626059287:
       localtime  1626059287
       hash:
   uiState:
   uiTable:
Attributes:
   cmdState   hell | dunkel
   comment    SunDownTimeKor: Sonnenuntergang minus 30 Minuten.
   do         always
   initialize initialized
   room       9.8.1_DOIF
   userReadings 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


Grüße Jürgen

Ergänzung 13.07:
Ich vermute, da es keine Antworten gab, dass entweder die Lösung trivial ist und ich sie nur nicht gefunden habe oder dass es nicht möglich ist, userreadings nach einem reboot automatisch zu aktualisieren.

Bei Möglichkeit 1 (ich habe es nicht gefunden): Kann mir vielleicht jemand einen Tip geben?
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

Die Timer-Readings des DOIF sind nicht offiziell. Die würde ich als User nicht auswerten.

Besser ist es mit indirekten Zeitangaben im DOIF zu arbeiten: https://fhem.de/commandref_DE.html#DOIF_Indirekten_Zeitangaben
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

bmwfan

Es schien mir der einfachste Weg und ich dachte, wenn ich die Schaltzeiten nur einmal speichere und mehrfach im Programm verwende ist das zeitsparender, als immer das Modul aufzurufen, um die Zeit zu ermitteln.

Dann mache ich mich auf, die vielen Programmstellen zu ändern und immer die Funktion sunriese oder sunset einzubauen.

Danke
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

Zitat von: bmwfan am 13 Juli 2021, 20:15:54
Es schien mir der einfachste Weg und ich dachte, wenn ich die Schaltzeiten nur einmal speichere und mehrfach im Programm verwende ist das zeitsparender, als immer das Modul aufzurufen, um die Zeit zu ermitteln.

Genau das kannst du über indirekte Zeiten realisieren, dann brauchst du nur die Zeiten in den Readings anpassen und musst die DOIF-Definitionen nicht anpacken.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF