Hallo zusammen,
habe ein problemchen mit einem userreading bei dem ich eine Zeitberechnung durchführe. Die Berechnung an sich funktioniert, aber im Log sind immerwieder diese Perl Warnungen...
attr Wetter userReadings fc0_Sonnenstunden { (sunset_abs() - sunrise_abs())* ReadingsNum("Wetter", "fc0_sun", 0)/100}
Fehler:
2019.10.10 23:35:26 3: PROPLANTA: set Wetter update
2019.10.10 23:35:40 1: PERL WARNING: Argument "07:02:03" isn't numeric in subtraction (-) at (eval 7654376) line 1.
2019.10.10 23:35:40 3: eval: { (sunset_abs() - sunrise_abs())* ReadingsNum("Wetter", "fc0_sun", 0)/100}
2019.10.10 23:35:40 1: PERL WARNING: Argument "19:16:07" isn't numeric in subtraction (-) at (eval 7654376) line 1.
2019.10.10 23:35:40 3: eval: { (sunset_abs() - sunrise_abs())* ReadingsNum("Wetter", "fc0_sun", 0)/100}
Ich habe es dann mit time_str2num probiert, aber die Umsetzung ist wohl nicht ganz richtig:
attr Wetter userReadings fc0_Sonnenstunden { (time_str2num(sunset_abs()) - time_str2num(sunrise_abs()))* ReadingsNum("Wetter", "fc0_sun", 0)/100}
Grüssle, Jens
Hallo Jens,
es gibt dazu einen guten Artikel im Wiki (https://wiki.fhem.de/wiki/Zeitangaben,_rechnen_mit).
Und das Thema hatten wir hier schon mal https://forum.fhem.de/index.php?topic=86901.0
Gruß Otto
sunset_abs() / sunrise_abs() liefert nur die Uhrzeit als String, genau das was at fuer die Definition braucht.
Solche Strings kann man in perl nicht substrahieren, man muss sie erst in eine Zahl wandeln.
time_str2num ist eine moegliche Loesung, allerdings erwartet diese Funktion Datum+Uhrzeit:
{time_str2num("2000-01-01 ".sunset_abs())-time_str2num("2000-01-01 ".sunrise_abs())}
Das Wiki und das Threat hatte ich auch gefunden. Allerdings war der Threat ja nicht so ganz erfolgreich...
Ich habe es nun so gelöst :
fc0_Sonnenstunden {sprintf "%.1f", ((time_str2num("2000-01-01 ".sunset_abs())-time_str2num("2000-01-01 ".sunrise_abs())* ReadingsNum("Wetter", "fc0_sun", 0)/100)/3600)}
Danke Euch, Jens
Zitat von: Jewe am 14 Oktober 2019, 22:58:14
Allerdings war der Threat ja nicht so ganz erfolgreich...
Jetzt schon :)
Moin,
hat jemand eine Idee, woher (Modul) ich die Zeiten des Sonnenaufgang/-untergang für die nächsten 1 bis 4 Tagen bekommen kann.
Danke
cheers
mi.ke
Zitat von: mi.ke am 15 Oktober 2019, 12:35:47
Moin,
hat jemand eine Idee, woher (Modul) ich die Zeiten des Sonnenaufgang/-untergang für die nächsten 1 bis 4 Tagen bekommen kann.
Danke
cheers
mi.ke
Gehört nicht wirklich als Frage hierein,. Nennt man das nicht "kapern"?
Schau mal ins Wiki vom Modul Astro.
Oder schau in die Doku von sunrise_el
Zitatsunrise_abs_dat() and sunset_abs_dat() return the absolute time of the corresponding event to a given date(no 24 hours added).
Zitat von: rabehd am 15 Oktober 2019, 12:40:24
Gehört nicht wirklich als Frage hierein,. Nennt man das nicht "kapern"?
Schau mal ins Wiki vom Modul Astro.
Bin ich völlig anderer Meinung!
1.)
Wenn schon
fc0_Sonnenstunden, warum dann nicht auch fc1_Sonnenstunden, fc2_Sonnenstunden, fc3_Sonnenstunden.
Ausserdem bist Du ja auch nicht der Themenstarter.
2.)
In diesem Thead geht es um sunrise/sunset nicht um Astro
Zitat von: Otto123 am 15 Oktober 2019, 12:52:39
Oder schau in die Doku von sunrise_el
Otto, mal wieder ein fettes
DankeCheers
mi.ke
;D
Zitat von: Jewe am 14 Oktober 2019, 22:58:14
Das Wiki und das Threat hatte ich auch gefunden. Allerdings war der Threat ja nicht so ganz erfolgreich...
Ich habe es nun so gelöst :
fc0_Sonnenstunden {sprintf "%.1f", ((time_str2num("2000-01-01 ".sunset_abs())-time_str2num("2000-01-01 ".sunrise_abs())* ReadingsNum("Wetter", "fc0_sun", 0)/100)/3600)}
Danke Euch, Jens
Hallo Jens,
die Formel stimmt so nicht, da fehlen ein paar Klammern bzw ist eine falsch gesetzt - und man kann die Klammer für sprintf weglassen: ;)
fc0_Sonnenstunden {sprintf "%.1f", (time_str2num("2000-01-01 ".sunset_abs())-time_str2num("2000-01-01 ".sunrise_abs()))* ReadingsNum("Wetter", "fc0_sun", 0)/100/3600}
Erklärung: Die Differenz muss zuerst ausgeführt werden!
Gruß Otto
Zitat von: Otto123 am 16 Oktober 2019, 09:21:58
Hallo Jens,
die Formel stimmt so nicht, da fehlen ein paar Klammern bzw ist eine falsch gesetzt - und man kann die Klammer für sprintf weglassen: ;)
fc0_Sonnenstunden {sprintf "%.1f", (time_str2num("2000-01-01 ".sunset_abs())-time_str2num("2000-01-01 ".sunrise_abs()))* ReadingsNum("Wetter", "fc0_sun", 0)/100/3600}
Erklärung: Die Differenz muss zuerst ausgeführt werden!
Gruß Otto
Hallo Otto,
das war letzte Nacht einfach zuviel.... Danke, mit den richtigen Klammern passt es nun.
Grüssle Jens
Zitat von: Otto123 am 16 Oktober 2019, 09:21:58
Hallo Jens,
die Formel stimmt so nicht, da fehlen ein paar Klammern bzw ist eine falsch gesetzt - und man kann die Klammer für sprintf weglassen: ;)
fc0_Sonnenstunden {sprintf "%.1f", (time_str2num("2000-01-01 ".sunset_abs())-time_str2num("2000-01-01 ".sunrise_abs()))* ReadingsNum("Wetter", "fc0_sun", 0)/100/3600}
Erklärung: Die Differenz muss zuerst ausgeführt werden!
Gruß Otto
Hallo Otto,
mit den Klammern ist doch besser, sonst gibts wieder eine andere Warnung.
So passt es nun :
fc0_Sonnenstunden {sprintf "%.1f", ((time_str2num("2000-01-01 ".sunset_abs())-time_str2num("2000-01-01 ".sunrise_abs()))* ReadingsNum("Wetter", "fc0_sun", 0)/100/3600)}