gelöst - {use Math::Round qw/round/} perl 5.24.1 und 98_dewpoint.pm Problem

Begonnen von Frank_Huber, 16 März 2018, 09:49:49

Vorheriges Thema - Nächstes Thema

Frank_Huber

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.

Wernieman

Reicht ein stop/start von FHEM?

Eigentlich startet man ein Linux-System selten komplett durch ...
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

Frank_Huber

#2
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.

Wernieman

rereadcfg <> FHEM neu starten...

Werde Dir ansonsten nicht weiterhelfen können, wollte nur Vorgreifen, damit alles Wichtige an Informationen für die Spezies vorliegt.
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

Frank_Huber

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.

dev0


Frank_Huber

#6
Zitat von: dev0 am 18 März 2018, 08:16:20
Statt Math::Round FHEM's round() 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.

Frank_Huber

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.