Lösung: https://forum.fhem.de/index.php/topic,85792.msg782960.html#msg782960
Moin Moin,
Habe neuerdings ein komisches Verhalten.
Habe eine Instanz von RPI2 auf RPI3 mit Stretch umgezogen.
Seither dreht immer um 00:00 dewpoint durch und liefert nur noch ganze Grad zahlen, also ohne Nachkommastelle.
2018.03.16 00:00:01 1: PERL WARNING: Prototype mismatch: sub main::round ($$) vs none at /usr/share/perl/5.24/Exporter.pm line 66.
vermutete Ursache ist wohl mein at welches um 00:00 den Tagesverbrauch berechnet:
defmod Verbrauch_Tag at *00:00:01 {\
use Math::Round qw/round/;;\
\
my $wert6=ReadingsVal("Stromzaehler","total_consumption","--");;\
my $wert7=$wert6/1000;;\
my $wert8=ReadingsVal("Verbrauch","Stromzaehler","--");;\
my $wert9=$wert7-$wert8;;\
$wert9 = Math::Round::nearest('0.1',$wert9);;\
fhem("setreading Verbrauch Stromzaehler $wert7");;\
fhem("setreading Verbrauch Stromverbrauch $wert9");;\
\
WriteStatefile()\
}
Dewpoint:
defmod Aussen_Taupunkt dewpoint dewpoint Aussen_rH temperature rH taupunkt
attr Aussen_Taupunkt absFeuchte 1
Feuchtedevice dazu:
defmod Aussen_rH OWMULTI DS2438 9ACC0A010000
attr Aussen_rH IODev 1wire
attr Aussen_rH VFunction (161.29 * V / VDD - 25.8065)/(1.0546 - 0.00216 * T)
attr Aussen_rH VName rH
attr Aussen_rH VUnit %
attr Aussen_rH model DS2438
attr Aussen_rH stateFormat rH %
libmath-round-perl ist installiert.
komisch auch: Die Rundung im Verbrauchswert funktioniert. Jemand ne Idee?
btw: "Lösen" kann ich das indem ich den Raspberry neu starte. ein "rereadcfg" reicht nicht aus.
EDIT:
Ich kann den Logeintrag und den Fehler jederzeit reproduzieren mit {use Math::Round qw/round/}
in der FHEM Kommandoeingabe.
EDIT2:
FHEM und Raspbian sind Tagesaktuell.
Reicht ein stop/start von FHEM?
Eigentlich startet man ein Linux-System selten komplett durch ...
also ein rereadcfg reicht nicht.
FHEM neu starten kann ich testen. moment.
EDIT:
shutdown restart
reicht aus um den Fehler zu beheben.
Denke da ist etwas mit dem math:round Paket dass dem dewpoint nicht schmeckt.
rereadcfg <> FHEM neu starten...
Werde Dir ansonsten nicht weiterhelfen können, wollte nur Vorgreifen, damit alles Wichtige an Informationen für die Spezies vorliegt.
Zitat von: Wernieman am 16 März 2018, 14:42:55
rereadcfg <> FHEM neu starten...
ja das ist klar.
mit dem reread werden aber die Module alle neu geladen soweit ich das weis. kommt also einem reload gleich.
der FHEM Prozess selbst läuft natürlich weiter.
Statt Math::Round FHEM's round() (https://svn.fhem.de/trac/browser/trunk/fhem/FHEM/99_Utils.pm?rev=15713#L241) benutzen oder direkt sprintf().
Zitat von: dev0 am 18 März 2018, 08:16:20
Statt Math::Round FHEM's round() (https://svn.fhem.de/trac/browser/trunk/fhem/FHEM/99_Utils.pm?rev=15713#L241) benutzen oder direkt sprintf().
DANKE!
das round() kannte ich nicht. Das war damals schon ein rechter Kampf die Rundung überhaupt hinzubekommen. :-)
Eben jetzt die (für mich) neue round() Funktion getestet und für perfekt befunden.
ist noch einfacher anzuwenden als das math:round!
sprintf möchte ich nicht nutzen da es ja hinten nur Stellen abschneidet, nicht rundet. aus 1.9 würde 1 werden.muss meine Aussage zu sprintf revidieren. nach etwas suchen&lesen&testen würde das auch gehen.
Hab hier im Forum schon öfters gelesen dass sprintf nur abschneidet.
Thema gelöst, Danke nochmal!
werde das jetzt umsetzen im Echtsystem, dann den gefixten Code reinstellen und den Thread auf gelöst setzen.
Die Lösung sieht jetzt so aus:
defmod Verbrauch_Tag at *00:00:01 {\
\
my $wert6=ReadingsVal("Stromzaehler","total_consumption","--");;\
my $wert7=$wert6/1000;;\
my $wert8=ReadingsVal("Verbrauch","Stromzaehler","--");;\
my $wert9=$wert7-$wert8;;\
$wert9 = round($wert9,1);;\
fhem("setreading Verbrauch Stromzaehler $wert7");;\
fhem("setreading Verbrauch Stromverbrauch $wert9");;\
\
WriteStatefile()\
}
Das Perl Modul libmath-round-perl wird nicht mehr benötigt.