Hallo zusammen,
Mein DOIF funktioniert seit dem lezten Update nicht mehr korrekt, genauer gesagt, es schaltet, aber der Log wird mit PERL-Error Meldungen vollgeballert.
Das DOIF sieht wie folgt aus:
DOIF ([([{max("16:30","[Balve:ss_weather]")}]+int(rand(30)))] and [?16:30-21:45]) (set Gosund2 on) DOELSEIF ([23:00]) (set Gosund2 off)
So wie es ausschaut, hat DOIF seit neustem Probleme mit der max-Funktion.
Wie muss das DOIF denn nun aussehen, wenn die Beleuchtung zum Sonnenutergang schalten soll, jedoch frühestens um 16:30 Uhr?
Zitat von: Feinfinger am 10 Februar 2021, 15:37:56
wenn die Beleuchtung zum Sonnenutergang schalten soll, jedoch frühestens um 16:30 Uhr?
Die Frage kann ich beantworten, den Rest leider nicht. ;)
[{sunset("REAL",0,"16:30")}]
https://fhem.de/commandref_DE.html#SUNRISE_EL
Wie ich dir schon geschrieben habe, liegt es an deiner max Funktion, wenn es nicht funktioniert und nicht am DOIF:
Internals:
CFGFN
DEF ([([{max("16:30","[test:ss_weather]")}]+int(rand(30)))] and [?16:30-21:45]) (set Gosund2 on) DOELSEIF ([23:00]) (set Gosund2 off)
FUUID 6023f37b-f33f-30f6-ce89-d969fb62cdd8b1f6
MODEL FHEM
NAME di_max
NOTIFYDEV global,test
NR 130014
NTFY_ORDER 50-di_max
STATE initialized
TYPE DOIF
READINGS:
2021-02-10 15:55:13 cmd 0
2021-02-10 15:55:13 mode enabled
2021-02-10 15:55:13 state initialized
2021-02-10 15:55:49 timer_01_c01 10.02.2021 17:40:14
2021-02-10 15:55:13 timer_02_c01 10.02.2021 16:30:00
2021-02-10 15:55:13 timer_03_c01 10.02.2021 21:45:00
2021-02-10 15:55:13 timer_04_c02 10.02.2021 23:00:00
und
Internals:
FUUID 5dea4680-f33f-63f4-1b84-51156c05376e279a
NAME test
NR 561
STATE ???
TYPE dummy
READINGS:
2021-02-10 15:55:49 ss_weather 17:40
und es gibt keine Warnungen bei mir im Log!
Zitat von: Damian am 10 Februar 2021, 16:01:02
Wie ich dir schon geschrieben habe, liegt es an deiner max Funktion, wenn es nicht funktioniert und nicht am DOIF:
Ich nutze aber keine selbst erstellte max-Routine, vielleicht habe ich mich da falsch ausgedrückt.
Wie gesagt, bis zum update gestern lief es ja ohne die Fehler.
Wenn ich die Routine "versehentlich" oder "nicht bewusst" von jemandem aus dem Forum übernommen haben sollte, wo müsste ich denn danach suchen?
In der myUtils ist nichts zu finden.
In der 99_Utils.pm.
Es ist auch möglich, dass ein von Dir verwendetes Modul use List::Util::max exportiert und damit die max-Funktion aus der 99_Utils.pm überschreibt.
Statt
[([{max("16:30","[Balve:ss_weather]")}]+int(rand(30)))] and [?16:30-21:45]
würde ich
[{sunset_abs("REAL", 300, "16:30","21:30")}-[21:45]]
nehmen
@rabehd Da stimmen ein paar Klammern nicht. Und mit seinem Zufalls Plus würde ich es so machen. Wobei ich jetzt nicht weiß woher die 21:30 kommt ;)
Da diese Forderung nicht stand, würde ich die Grenze nach oben weglassen:
defmod d_test DOIF ([{sunset("REAL", int(rand(30)), "16:30")}-21:45]) ()
Einverstanden.
Ich habe es auch nur als Anregung auf einem meiner DOIF rauskopiert, da hängen noch ein paar Bedingungen dran (Anwesenheit, Party, Alarm...).
Danke für die Hilfe.
Damit kann man als ,,Normalo" auch was anfangen!
Zitat von: Ellert am 10 Februar 2021, 17:58:03
Es ist auch möglich, dass ein von Dir verwendetes Modul use List::Util::max exportiert und damit die max-Funktion aus der 99_Utils.pm überschreibt.
Gibt es einen Weg das herauszufinden?
Ich bin mir wegen int(rand(30)) nicht sicher, ob es den gleichen Einfluss hat wie ursprünglich gedacht. Hier ist es ein Offset in Sekunden.
Zitat von: Feinfinger am 10 Februar 2021, 19:52:17
Gibt es einen Weg das herauszufinden?
In den von Dir verwendeten Modulen, die auch im Update enthalten waren, suchen.
Zitat von: Otto123 am 10 Februar 2021, 22:24:54
Ich bin mir wegen int(rand(30)) nicht sicher, ob es den gleichen Einfluss hat wie ursprünglich gedacht. Hier ist es ein Offset in Sekunden.
Diese 30 Sekunden rühren daher, das ich mit einem zweiten DOIF zur mit dem gleichen Reading (twilight:ss_indoor) eine zweite Lampe schalte. Damit die nicht immer gleichzeitig angehen habe ich mir damit eine "Anwesenheitssimulation-light" gebastelt.
Habe aber nun deinen Lösungsansatz genommen und für mich angepasst.
Damit ich mir jetzt auch noch das zweite DOIF spare, muss ich nur noch ne Möglichkeit finden, den zweiten set Befehl per Zufallstimer innerhalb von 30 Sekunden auszuführen.
defmod d_test DOIF ([{sunset("HORIZON=2.0", "16:30")}-21:45]) (set Lampe1 on) DOELSEIF ([{sunset("HORIZON=2.0", int(rand(30)), "16:30")}-21:45]) (set Lampe2 on) DOELSEIF ([23:00]) (set Lampe1 off,set Lampe2 off) DOELSE
Sollte doch so passen, oder kann man das verschönern?
Zitatden zweiten set Befehl per Zufallstimer innerhalb von 30 Sekunden auszuführen.
Das sollte mit dem wait-Attribut gehen.
Siehe Beispiel in der comandref.
Moin,
ich weiß nicht wie tolerant sunrise_el mit seinen Parametern ist. Aber ich würde schon wegen der Übersichtlichkeit und dem späterem Verständnis die Verzögerung nicht komplett weglassen sondern auf null setzen:
sunset("HORIZON=2.0",0,"16:30")
Ich habe es zumindest nie probiert den 2. Parameter einfach wegzulassen.
Gruß Otto