Guten Abend,
ich habe bei mir eine Vielzahl von PEARL WARNING, die wie folgt aussehen. Dies ist nur ein kleiner Auszug.
2018.07.18 22:30:04 1: PERL WARNING: Argument "normal" isn't numeric in subtraction (-) at (eval 117) line 1, <GEN17> line 37.
2018.07.18 22:30:04 3: eval: 100-$fld[3]
2018.07.18 22:30:04 1: stacktrace:
2018.07.18 22:30:04 1: main::__ANON__ called by (eval 117) (1)
2018.07.18 22:30:04 1: (eval) called by ./FHEM/92_FileLog.pm (813)
2018.07.18 22:30:04 1: main::FileLog_Get called by fhem.pl (3584)
2018.07.18 22:30:04 1: main::CallFn called by fhem.pl (1861)
2018.07.18 22:30:04 1: main::CommandGet called by fhem.pl (1209)
2018.07.18 22:30:04 1: main::AnalyzeCommand called by ./FHEM/01_FHEMWEB.pm (2525)
2018.07.18 22:30:04 1: main::FW_fC called by ./FHEM/98_SVG.pm (1246)
2018.07.18 22:30:04 1: main::SVG_getData called by ./FHEM/98_SVG.pm (1214)
2018.07.18 22:30:04 1: main::SVG_doShowLog called by ./FHEM/98_SVG.pm (1108)
2018.07.18 22:30:04 1: main::SVG_showLog called by ./FHEM/01_FHEMWEB.pm (884)
2018.07.18 22:30:04 1: main::FW_answerCall called by ./FHEM/01_FHEMWEB.pm (538)
2018.07.18 22:30:04 1: main::FW_Read called by fhem.pl (3584)
2018.07.18 22:30:04 1: main::CallFn called by fhem.pl (723)
2018.07.18 22:30:04 1: PERL WARNING: Argument "normal" isn't numeric in subtraction (-) at (eval 119) line 1, <GEN17> line 44.
2018.07.18 22:30:04 3: eval: 100-$fld[3]
2018.07.18 22:30:04 1: stacktrace:
2018.07.18 22:30:04 1: main::__ANON__ called by (eval 119) (1)
2018.07.18 22:30:04 1: (eval) called by ./FHEM/92_FileLog.pm (813)
2018.07.18 22:30:04 1: main::FileLog_Get called by fhem.pl (3584)
2018.07.18 22:30:04 1: main::CallFn called by fhem.pl (1861)
2018.07.18 22:30:04 1: main::CommandGet called by fhem.pl (1209)
2018.07.18 22:30:04 1: main::AnalyzeCommand called by ./FHEM/01_FHEMWEB.pm (2525)
2018.07.18 22:30:04 1: main::FW_fC called by ./FHEM/98_SVG.pm (1246)
2018.07.18 22:30:04 1: main::SVG_getData called by ./FHEM/98_SVG.pm (1214)
2018.07.18 22:30:04 1: main::SVG_doShowLog called by ./FHEM/98_SVG.pm (1108)
2018.07.18 22:30:04 1: main::SVG_showLog called by ./FHEM/01_FHEMWEB.pm (884)
2018.07.18 22:30:04 1: main::FW_answerCall called by ./FHEM/01_FHEMWEB.pm (538)
2018.07.18 22:30:04 1: main::FW_Read called by fhem.pl (3584)
2018.07.18 22:30:04 1: main::CallFn called by fhem.pl (723)
Wie bekomme ich heraus, welche Datei hierfür verantwortlich ist? Eine Datei 92_FileLog.pm gibt es bei mir nicht.
VG
tfhem
Zitat von: tfhem am 18 Juli 2018, 22:35:00
Wie bekomme ich heraus, welche Datei hierfür verantwortlich ist? Eine Datei 92_FileLog.pm gibt es bei mir nicht.
das kann ich nicht glauben.... und du solltest es nochmal wirklich kontrollieren!!
sieht für mich nach einem SVG problem aus, bzw. die Daten die er zusammenbauen will
eval: 100-$fld[3]
und da wird vermutlich
$fld[3] -> normal sein, und das kann er nicht rechnen.
Zitat von: nils_ am 19 Juli 2018, 09:34:03
und da wird vermutlich $fld[3] -> normal sein, und das kann er nicht rechnen.
numerische Operationen mit Texten sind immer schwierig 8)
Zitat von: betateilchen am 19 Juli 2018, 10:20:34
numerische Operationen mit Texten sind immer schwierig 8)
:P :P :P
"eins" + "drei" = "acht"
Zitat von: nils_ am 19 Juli 2018, 10:48:07
"eins" + "drei" = "acht"
Und "Polizist" + 3 = 11, weil ein Polizist ja immer acht gibt...
::) Das war wohl gestern zu spät für mich. Wenn man im richtigen Ordner schaut, gibt es die Datei natürlich. Aber wie komme ich nun dahinter, was den Fehler verursacht?
Folgendes steht in dem Abschnitt der Datei, der zu Zeile 813 gehört.
RESCAN:
for(;;) {
my $l;
if($rescan) {
last if($rescanIdx<1 || !$rescanNum);
$l = $rescanArr[$rescanIdx--];
} else {
$l = <$ifh> if($ifh);
last if(!$l);
if($reformatFn) { no strict; $l = &$reformatFn($l); use strict; }
}
next if($l lt $from && !$rescan);
last if($l gt $to);
my @fld = split("[ \r\n]+", $l); # 40% CPU
for my $i (0..int(@a)-1) { # Process each req. field
my $h = $d[$i];
next if($rescan && $h->{ret});
my @missingvals;
next if($h->{re} && $l !~ m/$h->{re}/); # 20% CPU
my $col = $h->{col};
my $t = $h->{type};
my $val = undef;
my $dte = $fld[0];
if($t == 0) { # Fixed text
$val = $col;
} elsif($t == 1) { # The column
$val = $fld[$col] if(defined($fld[$col]));
} elsif($t == 2) { # delta-h or delta-d
next if($rescan);
my $hd = $h->{didx}; # TimeStamp-Length
my $ld = substr($fld[0],0,$hd); # TimeStamp-Part (hour or date)
if(!defined($h->{last1}) || $h->{last3} ne $ld) {
if(defined($h->{last1})) {
my @lda = split("[_:]", $lastdate{$hd});
my $ts = "12:00:00"; # middle timestamp
$ts = "$lda[1]:30:00" if($hd == 13);
my $v = $fld[$col]-$h->{last1};
# $v = 0 if($v < 0); # Skip negative delta (why?)
$dte = "$lda[0]_$ts";
$val = sprintf("%g", $v);
if($hd == 13) { # Generate missing 0 values / hour
my @cda = split("[_:]", $ld);
for(my $mi = $lda[1]+1; $mi < $cda[1]; $mi++) {
push @missingvals, sprintf("%s_%02d:30:00 0\n", $lda[0], $mi);
}
}
}
$h->{last1} = $fld[$col];
$h->{last3} = $ld;
}
$h->{last2} = $fld[$col];
$lastdate{$hd} = $fld[0];
} elsif($t == 3) { # int function
$val = $1 if($fld[$col] =~ m/^(\d+).*/o);
} else { # evaluate
$cmdFromAnalyze = $h->{fn};
$val = eval($cmdFromAnalyze)
$cmdFromAnalyze = undef;
}
Zeile 813 ist $val = eval($cmdFromAnalyze)
Oder sollte ich besser die ganze Datei hier einfügen?
Das Problem ist nicht das FileLog.
Die Ursache für Deine perl Warnung ist Dein Versuch, einen Reading-Wert, der ein Text ist ("normal") zum Rechnen (100 - "normal") zu verwenden. Das ganze passiert beim Erzeugen des SVG plots.
Dann wird es wohl an diesem liegen?
Nur, was muss ich da ändern um den Fehler zu vermeiden? Ich meine der Plot wurde automatisch angelegt.
Zitat von: tfhem am 19 Juli 2018, 21:31:21
Dann wird es wohl an diesem liegen?
Glaube ich nicht, da wird mit dem Reading "position" gerechnet, und da stehen numerische Werte drin.
Das "normal" steht aber in positionMode und das kommt in dem von Dir gezeigten Plot nicht vor.
Zitat von: tfhem am 19 Juli 2018, 21:31:21
Nur, was muss ich da ändern um den Fehler zu vermeiden? Ich meine der Plot wurde automatisch angelegt.
Das glaube ich auch nicht.
Ich dachte der wäre es, weil er in der Nach so seltsame Werte anzeigt.
Es gibt nur zwei weitere Plots. Ist es einer von diesen?
Es lag wohl doch an dem ersten von mir geposteten Plot. Nachdem ich diesen geloescht hatte, kommen keine Fehlermeldungen mehr. Nur, was war daran falsch?
wahrscheinlich liegt es nicht nur am ersten svg, sondern an allen.
der eintrag "position" in der spalte regex ist in diesem filelog nicht eindeutig. du suchst eigentlich nach dem string "position:". allerdings matched die regex auch auf "positionMode:".
da in der spalte regex kein doppelpunkt erlaubt ist, setze ersatzweise folgendes ein:
position\x3a
aktuell ist der fehler wahrscheinlich fort, da im angezeigten plotzeitraum kein eintrag "positionMode:" im filelog existiert.
Auch nach ein paar Tagen der Entfernung des SVGs erfolgt keine Fehlermeldung mehr.