FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: misux am 19 Oktober 2023, 05:50:37

Titel: Sunrise neu ausführen nach neustart...?
Beitrag von: misux am 19 Oktober 2023, 05:50:37
GUten Morgen!

Heut eNacht hat sich meine piVCCU3 schlafen gelegt sodass sie nicht mehr ansprechbar war... Also musste ich die Raspberry neustarten....

Problem:

Ich habe ein DOIF:
Internals:
   DEF        ([{sunset("HORIZON=-2.5")}-{sunrise("HORIZON=-1.0")}])
DOELSE

   FUUID      61d61a67-f33f-e7ed-6082-b93301342ae4ad90
   FVERSION   98_DOIF.pm:0.277400/2023-07-10
   MODEL      FHEM
   NAME       TageslichtOutdoor
   NOTIFYDEV  global
   NR         171
   NTFY_ORDER 50-TageslichtOutdoor
   STATE      Nacht
   TYPE       DOIF
   VERSION    27740 2023-07-10 09:31:11
   eventCount 1
   READINGS:
     2023-10-19 04:23:26   cmd             1
     2023-10-19 04:23:26   cmd_event       set_Nacht_cmd_1
     2023-10-19 04:23:26   cmd_nr          1
     2022-01-22 10:08:42   mode            enabled
     2023-10-19 04:23:26   state           Nacht
     2023-10-19 04:16:36   timer_01_c01    19.10.2023 18:32:52
     2023-10-19 04:16:36   timer_02_c01    19.10.2023 07:52:36
   Regex:
     accu:
     bar:
     barAvg:
     collect:
   attr:
     cmdState:
       0:
         Nacht
       1:
         Tag
   condition:
     0          ::DOIF_time($hash,0,1,$wday,$hms)
   days:
   do:
     0:
       0         
     1:
       0         
   helper:
     NOTIFYDEV  global
     globalinit 1
     last_timer 2
     sleeptimer -1
   hmccu:
   interval:
     0          -1
     1          0
   intervalfunc:
   localtime:
     0          1697733172
     1          1697694756
   perlblock:
   realtime:
     0          18:32:52
     1          07:52:36
   time:
     0          {sunset("HORIZON=-2.5")}
     1          {sunrise("HORIZON=-1.0")}
   timeCond:
     0          0
     1          0
   timer:
     0          0
     1          0
   timers:
     0           0  1
   triggertime:
     1697694756:
       localtime  1697694756
       hash:
     1697733172:
       localtime  1697733172
       hash:
   uiState:
   uiTable:
Attributes:
   checkall   all
   cmdState   Nacht|Tag
   do         always
   event-on-change-reading state
   group      DOIF Status
   room       Astro & Wetter,DOIF
   webCmd     Tag:Nacht

Wenn ich fhem neustarte wird leider nicht der aktuelle Wert übernommen. Also war heute um 04Uhr morgens nach dem Start "Tag" Das hat meine Lichtsteuerung etwas durcheinander gebracht...

Lässt sich dieses DOIF so anpassen sodass nach einem Neustart der aktuelle Wert (Tag:Nacht) gesetzt wird?

Vielen Dank!
Titel: Aw: Sunrise neu ausführen nach neutart...?
Beitrag von: betateilchen am 19 Oktober 2023, 09:56:06
Das Problem ist, dass sunset() nach dem Neustart den Sonnenuntergang von heute berechnet und nicht mehr den von gestern.

Warum brauchst Du das DOIF eigentlich, um festzustellen, ob Tag oder Nacht ist?
Dafür hat FHEM doch die Funktion isday(), die genau das gleiche tut und deren Ergebnis man einfach als Bedingung verwenden kann.
Titel: Aw: Sunrise neu ausführen nach neutart...?
Beitrag von: misux am 19 Oktober 2023, 10:45:18
Hmm...

Auf die Auswertung Tag oder Nacht greifen mehrere andere DOIFs um dinge zu tun...

Das von mir erstellte DOIF st ja an meine Gegebenheiten angepasst mit HORIZON... isday ist doch festgelegt auf HORIZON-6 wenn ich das richtig intepretiert habe... Oder bin ich da auf dem falschen Weg?

Lässt sich denn die isday Ausgabe an die eigenen Gegebenheiten anpassen?
Oder ist es vielleicht einfacher das DOIF irgendwie zu optimieren....?
Titel: Aw: Sunrise neu ausführen nach neustart...?
Beitrag von: Otto123 am 19 Oktober 2023, 13:35:02
Zitat von: misux am 19 Oktober 2023, 10:45:18Lässt sich denn die isday Ausgabe an die eigenen Gegebenheiten anpassen?
Ja - Auszug aus der commandref
ZitatAll functions take up to four arguments:
altitude (optional) altitude defines a horizon value which then is used instead of the $defaultaltit in SUNRISE_EL.pm.
Possible values are: "REAL", "CIVIL", "NAUTIC", "ASTRONOMIC" or a positive or negative number prefixed with "HORIZON="
REAL is 0, CIVIL is -6, NAUTIC is -12, ASTRONOMIC is -18 degrees above horizon.
time-offset in seconds, which will be added to the event.
min and max values (format: "HH:MM"). If min < max, than the day starts not before min, and ends not after max. If min > max, than the day starts not after max, and ends not before min.

isday() can be used in some notify or at commands to check if the sun is up or down. isday() ignores the time-offset parameter, but respects min and max.