PEARL WARNING called by ./FHEM/92_FileLog.pm

Begonnen von tfhem, 18 Juli 2018, 22:35:00

Vorheriges Thema - Nächstes Thema

tfhem

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

nils_

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.
viele Wege in FHEM es gibt!

betateilchen

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)
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

nils_

Zitat von: betateilchen am 19 Juli 2018, 10:20:34
numerische Operationen mit Texten sind immer schwierig  8)
:P :P :P


"eins" + "drei" = "acht"
viele Wege in FHEM es gibt!

betateilchen

Zitat von: nils_ am 19 Juli 2018, 10:48:07
"eins" + "drei" = "acht"

Und "Polizist" + 3 = 11, weil ein Polizist ja immer acht gibt...
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

tfhem

 ::) 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?

betateilchen

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.

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

tfhem

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.

betateilchen

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.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

tfhem

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?

tfhem

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?

frank

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.
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

tfhem

Auch nach ein paar Tagen der Entfernung des SVGs erfolgt keine Fehlermeldung mehr.