FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: MagicB85 am 31 Januar 2021, 21:56:22

Titel: UserReading liefert falsche nächste Schaltzeit
Beitrag von: MagicB85 am 31 Januar 2021, 21:56:22
Hallo,
ich habe heute ein Problem mit meinem DOIF zum Schalten der Aussenbeleuchtung bzw. dem zugehörigen UserReading festgestellt.

Hier die Definition des DOIF:

([({sunset("CIVIL",0,"17:00","21:00")}-int(rand(900)))] or [07:00]) (set HM_40D65A on) DOELSEIF ([({sunrise("REAL",0,"7:30","09:30")}+int(rand(900)))] or [23:00]) (set HM_40D65A off)

Das UserReading:

Next { if(ReadingsVal($name, "mode", "") eq "enabled") { min(ReadingsVal($name, "timer_01_c01", ""), ReadingsVal($name, "timer_02_c01", ""), ReadingsVal($name, "timer_03_c02", ""), ReadingsVal($name, "timer_04_c02", "")) } else { "" } }

Dies hat die letzten Tage bis heute wunderbar funktioniert. Doch aktuell liefert es mir als nächste Schaltzeit das Einschalten um 01.02.2021 07:00:00 anstelle des Ausschaltens um 31.01.2021 23:00:00.

Hier der Auszug aus dem list:


2021-01-31 21:50:48   Next            01.02.2021 07:00:00
     2021-01-29 08:36:22   cmd             2
     2021-01-29 08:36:22   cmd_event       timer_3
     2021-01-29 08:36:22   cmd_nr          2
     2021-01-31 21:50:48   mode            enabled
     2021-01-31 21:36:44   state           off
     2021-01-31 21:11:14   timer_01_c01    01.02.2021 17:53:09
     2021-01-31 21:11:14   timer_02_c01    01.02.2021 07:00:00
     2021-01-31 21:11:14   timer_03_c02    01.02.2021 08:26:56
     2021-01-31 21:11:14   timer_04_c02    31.01.2021 23:00:00


Vielleicht hat ja jemand von euch eine Idee woran das liegt.
Danke für eure Unterstützung vorab!

Viele Grüße Björn
Titel: Antw:UserReading liefert falsche nächste Schaltzeit
Beitrag von: Damian am 31 Januar 2021, 22:53:33
siehe: https://fhem.de/commandref_DE.html#DOIF_timerevent
Titel: Antw:UserReading liefert falsche nächste Schaltzeit
Beitrag von: xenos1984 am 01 Februar 2021, 07:47:12
Du vergleichst dort Datumsangaben mit der Funktion min. Diese konvertiert die Ausdrücke vorher in Zahlenwerte, und 1 ist eben kleiner als 31. Um den frühesten Zeitpunkt zu bekommen, müsstest du also vorher z.B. in UNIX Timestamps konvertieren.

http://perldoc.perl.org/List::Util#min
Titel: Antw:UserReading liefert falsche nächste Schaltzeit
Beitrag von: Damian am 01 Februar 2021, 12:42:34
Zitat von: xenos1984 am 01 Februar 2021, 07:47:12
Du vergleichst dort Datumsangaben mit der Funktion min. Diese konvertiert die Ausdrücke vorher in Zahlenwerte, und 1 ist eben kleiner als 31. Um den frühesten Zeitpunkt zu bekommen, müsstest du also vorher z.B. in UNIX Timestamps konvertieren.

http://perldoc.perl.org/List::Util#min

Nicht ganz, die Funktion min in FHEM vergleicht lexikografisch (da bin ich selbst schon mal drauf reingefallen) und nicht numerisch. Das ist aber dennoch hier nicht zielführend, denn 31.01.2021 ist größer als 01.02.2021, es ist aber vor dem 01.02 und nicht danach.

Man müsste den Zeitpunkt entweder anders darstellen: JJJJ-MM-TT HH:MM:SS oder eben wie vorgeschlagen in UNIX Timestamps konvertieren, dann aber mit minNum das Minimum bestimmten.