FHEM Forum

FHEM => Automatisierung => Thema gestartet von: Jewe am 14 Oktober 2019, 21:44:47

Titel: [gelöst] userreading fehler bei Zeitberechnung
Beitrag von: Jewe am 14 Oktober 2019, 21:44:47
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
Titel: Antw:userreading fehler bei Zeitberechnung
Beitrag von: Otto123 am 14 Oktober 2019, 21:57:45
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
Titel: Antw:userreading fehler bei Zeitberechnung
Beitrag von: rudolfkoenig am 14 Oktober 2019, 22:03:31
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())}
Titel: Antw:userreading fehler bei Zeitberechnung
Beitrag 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
Titel: Antw:userreading fehler bei Zeitberechnung
Beitrag von: Otto123 am 14 Oktober 2019, 23:01:14
Zitat von: Jewe am 14 Oktober 2019, 22:58:14
Allerdings war der Threat ja nicht so ganz erfolgreich...
Jetzt schon :)
Titel: Antw:[gelöst] userreading fehler bei Zeitberechnung
Beitrag 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
Titel: Antw:[gelöst] userreading fehler bei Zeitberechnung
Beitrag von: rabehd am 15 Oktober 2019, 12:40:24
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.
Titel: Antw:[gelöst] userreading fehler bei Zeitberechnung
Beitrag von: Otto123 am 15 Oktober 2019, 12:52:39
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).
Titel: Antw:[gelöst] userreading fehler bei Zeitberechnung
Beitrag von: mi.ke am 15 Oktober 2019, 14:57:59
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 Danke

Cheers
mi.ke
Titel: Antw:[gelöst] userreading fehler bei Zeitberechnung
Beitrag von: rabehd am 15 Oktober 2019, 15:04:36
 ;D
Titel: Antw:userreading fehler bei Zeitberechnung
Beitrag von: Otto123 am 16 Oktober 2019, 09:21:58
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
Titel: Antw:userreading fehler bei Zeitberechnung
Beitrag von: Jewe am 16 Oktober 2019, 09:48:37
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
Titel: Antw:userreading fehler bei Zeitberechnung
Beitrag von: Jewe am 18 Oktober 2019, 10:39:45
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)}