FHEM Forum

FHEM => Sonstiges => Thema gestartet von: Joachim am 14 September 2015, 15:48:39

Titel: fhem.pl Problem durch Exponentialschreibweise
Beitrag von: Joachim am 14 September 2015, 15:48:39
Moin @ all,
schon seit längerem störten mich die PERL WARNING's die durch  Exponentialschreibweise im Log entstehen.
Vielleicht gibt es da eine einfache Lösung, wie man das allgemein beseitigen kann.

2015.09.14 14:31:30.912 1: PERL WARNING: Argument "-9.04265018054735-05" isn't numeric in subtraction (-) at fhem.pl line 3882.
2015.09.14 14:32:30.982 1: PERL WARNING: Argument "-9.13485735971612-05" isn't numeric in subtraction (-) at fhem.pl line 3882.
2015.09.14 14:34:31.124 1: PERL WARNING: Argument "-9.30104909796965-05" isn't numeric in subtraction (-) at fhem.pl line 3882.
2015.09.14 14:35:31.195 1: PERL WARNING: Argument "-4.4240606247368-05" isn't numeric in subtraction (-) at fhem.pl line 3882.
2015.09.14 14:36:31.267 1: PERL WARNING: Argument "-9.39882725349752-05" isn't numeric in subtraction (-) at fhem.pl line 3882.
2015.09.14 14:38:31.400 1: PERL WARNING: Argument "-4.56078509107552-05" isn't numeric in subtraction (-) at fhem.pl line 3882.
2015.09.14 14:39:31.486 1: PERL WARNING: Argument "-4.52420901337368-05" isn't numeric in subtraction (-) at fhem.pl line 3882.
2015.09.14 14:42:31.699 1: PERL WARNING: Argument "-4.62037306071755-05" isn't numeric in subtraction (-) at fhem.pl line 3882.
2015.09.14 15:14:34.616 1: PERL WARNING: Argument "9.40659900981093-05" isn't numeric in subtraction (-) at fhem.pl line 3882.

natürlich könnte man das in den entsprechenden Modulen durch begrenzen der Nachkommastellen abfangen, sinnvoller wäre es wahrscheinlich, das in der fhem.pl abzufangen.

Gruß Joachim
Titel: Antw:fhem.pl Problem durch Exponentialschreibweise
Beitrag von: henryk am 15 September 2015, 03:04:37
Hmm, das matcht bei mir nicht genau, aber kannst du bestätigen, dass deine Zeile 3882 diese hier ist:
} elsif( abs($value-$last_value) < $threshold ) {

Dann ist das Problem ein paar Zeilen drüber:
$value =~ s/[^\d\.\-]//g; # We expect only numbers here.
sollte
$value =~ s/[^\d\.\-eE]//g; # We expect only numbers here.
heissen, denn auch -9.04265018054735E-05 ist eine gültige Zahl in Perl.
Titel: Antw:fhem.pl Problem durch Exponentialschreibweise
Beitrag von: Joachim am 15 September 2015, 20:13:18
Moin henryk,
du liegst richtig mit Deiner Vermutung, mit Deiner Vorgeschlagenen Änderung scheint es zu gehen.
Werde das mal einige Zeit beobachten.
Danke für Deine Hilfe.

@ Rudi,
was hälst Du davon, das so an allen entsprechenden Stellen in der fhem.pl einzubauen?

Gruß Joachim
Titel: Antw:fhem.pl Problem durch Exponentialschreibweise
Beitrag von: Joachim am 20 September 2015, 18:31:14
Moin Rudi, moin henryk,

habe das ganze jetzt einige Tage beobachtet, die Perl Warnung ist weg.
hier mal das diff:
--- fhem.pl 2015-09-20 18:15:23.504407673 +0200
+++ fhem_neu.pl 2015-09-20 18:14:13.471462648 +0200
@@ -3876,7 +3876,7 @@
         && $eocrv[0] =~ m/.*:(.*)/ ) {
       my $threshold = $1;

-      $value =~ s/[^\d\.\-]//g; # We expect only numbers here.
+      $value =~ s/[^\d\.\-eE]//g; # We expect only numbers here.
       my $last_value = $hash->{".attreocr-threshold$reading"};
       if( !defined($last_value) ) {
         $hash->{".attreocr-threshold$reading"} = $value;


wäre schön, wenn Du, Rudi, es einbauen könntest.

Gruß Joachim
Titel: Antw:fhem.pl Problem durch Exponentialschreibweise
Beitrag von: stromer-12 am 20 September 2015, 18:35:59
Das Problem hatte ich auch schon mal vor längerer Zeit hier gepostet.
Titel: Antw:fhem.pl Problem durch Exponentialschreibweise
Beitrag von: rudolfkoenig am 22 September 2015, 09:24:53
Um es klar zu sagen: das Problem betrifft Faelle mit event-on-change-reading in der Variante mit threshold, wo die Eingangsdaten in der exponentiellen Schreibweise (1.5e-5) reinkommen.

Der vorgeschlagene Patch verursacht leider auch neue Probleme:
1 liter -> 1e
1 feet -> 1ee
open -> e


Ich habe den vorgeschlagenen Patch erweitert, damit es auch in den erwaehnten Faellen funktioniert, bitte testen. Ja, es ist mir bewusst, dass es immer noch nicht perfekt ist, z.Bsp. wird "1.5e-5 liter" ignoriert.
Titel: Antw:fhem.pl Problem durch Exponentialschreibweise
Beitrag von: henryk am 22 September 2015, 11:11:20
Ja, na gut. Was du jetzt eingebaut hast ist so komplex, dass ich auf Anhieb gar nicht sagen kann, was es tut. Es kommt natürlich alles auf das Ziel an. Wenn das Ziel ist, die erste Zahl in einem Wert zu extrahieren, dann kann man das natürlich auch mit einem einzigen Regex relativ korrekt erledigen (jetzt nur für Dezimalzahlen, Hex, Binär und Oktal hat auch der alte Code nicht gekonnt):

$value =~ s/^.*?([+-]?\d*\.?\d+(?:e[+-]?\d+)?).*$/$1/si;


Das verabeitet zum Beispiel "content: .3E6 liter" problemlos.