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
siehe: https://fhem.de/commandref_DE.html#DOIF_timerevent
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
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.