92_FileLog.pm PERL Warning Argument "xxxxx" isn't numeric in subtraction

Begonnen von wcraffonara, 03 September 2023, 06:46:43

Vorheriges Thema - Nächstes Thema

wcraffonara

Hallo,
  ich bekomme bei all meinen Devices, von denen ich mittels Filelog Sensordaten abspeichere, folgendes Perl Warning im logbook und ich verstehe nicht woran es liegt. Es handelt sich dabei um um MQTT2_DEVICE und OWTHERM devices.

2023.09.03 05:44:32 1:  PERL WARNING: Argument "IH_Temperatur" isn't numeric in subtraction (-) at ./FHEM/92_FileLog.pm line 942,  line 10.
2023.09.03 05:44:32 1:  PERL WARNING: Argument "DB_Temperatur" isn't numeric in subtraction (-) at ./FHEM/92_FileLog.pm line 942,  line 10.
2023.09.03 05:44:32 1:  PERL WARNING: Argument "MZ_Temperatur" isn't numeric in subtraction (-) at ./FHEM/92_FileLog.pm line 942,  line 10.
2023.09.03 05:44:33 1:  PERL WARNING: Argument "WZ_Temperatur" isn't numeric in subtraction (-) at ./FHEM/92_FileLog.pm line 942,  line 10.
2023.09.03 05:44:33 1:  PERL WARNING: Argument "HR_Puffer_L_Temperatur" isn't numeric in subtraction (-) at ./FHEM/92_FileLog.pm line 942,  line 10.
2023.09.03 05:44:33 1:  PERL WARNING: Argument "HR_Puffer_R_Temperatur" isn't numeric in subtraction (-) at ./FHEM/92_FileLog.pm line 942,  line 10.
2023.09.03 05:44:33 1:  PERL WARNING: Argument "AS1440" isn't numeric in subtraction (-) at ./FHEM/92_FileLog.pm line 942,  line 20.

An Zeile 10 von 92_Filelog.pm steht:
# This block is only needed when FileLog is loaded bevore FHEMWEB
sub FW_pO(@);

An Zeile 942 von 92_FileLog.pm steht:
  #############
  # Digest the input.
  # last1: first delta value after d/h change
  # last2: last delta value recorded (for the very last entry)
  # last3: last delta timestamp (d or h)
  my (@d, @fname);
  my (@min, @max, @sum, @cnt, @lastv, @lastd, @mind, @maxd, @firstv, @firstd);

  for(my $i = 0; $i < int(@a); $i++) {
    my @fld = split(":", $a[$i], 4);

    my %h;
    if($outf ne "-") {
      $fname[$i] = "$outf.$i";
      $h{fh} = new IO::File "> $fname[$i]";
      binmode($h{fh}, ":encoding(UTF-8)") if($h{fh} && $unicodeEncoding);
    }
    $h{re} = $fld[1];                                   # Filter: regexp
    $h{df} = defined($fld[2]) ? $fld[2] : "";           # default value
    $h{fn} = $fld[3];                                   # function
    $h{didx} = 10 if($fld[3] && $fld[3] eq "delta-d");  # delta idx, substr len
    $h{didx} = 13 if($fld[3] && $fld[3] eq "delta-h");

    if($fld[0] =~ m/"(.*)"/o) {
      $h{col} = $1;
      $h{type} = 0;
    } else {
      $h{col} = $fld[0]-1;
      $h{type} = 1;
    }

Der Fehler tritt im letzten ELSE-Zweig auf.

Hier ein list vom IH_Temperatur:

Internals:
   ALARM      0
   ASYNC      0
   DEF        DS18B20 FFED238A1603
   ERRCOUNT   0
   FUUID      5e079484-f33f-97b4-e76c-ecd6350e758a0e55
   INTERVAL   300
   IODev      OneWire
   NAME       IH_Temperatur
   NOTIFYDEV  global
   NR         266
   NTFY_ORDER 50-IH_Temperatur
   OW_FAMILY  28
   OW_ID      FFED238A1603
   PRESENT    1
   ROM_ID     28.FFED238A1603.2A
   STATE      T: 15.31 °C
   TYPE       OWTHERM
   eventCount 82
   owg_temp   15.3125
   owg_th     85
   owg_tl     0
   READINGS:
     2023-09-02 23:56:43   IODev           OneWire
     2023-09-03 06:37:01   state           T: 15.31 °C
     2023-09-03 06:37:01   temperature     15.3125
     2023-09-03 06:37:01   temperature_round 15.3
   tempf:
     factor     1
     offset     0
Attributes:
   IODev      OneWire
   icon       temp_temperature
   model      DS18B20
   room       Innenhof
   tempConv   onkick
   tempHigh   85
   tempLow    0
   userReadings temperature_round {sprintf("%.1f",ReadingsNum("IH_Temperatur","temperature",85))}



Weiß wer woran das liegen kann?

Vielen Dank!
lG
Walter

betateilchen

Du suchst an der falschen Stelle.

Die Warnungen treten nicht beim Loggen (durch FileLog) auf, sondern sie stammen aus FileLog_Get() und somit vermutlich aus der Erzeugung eines SVG plots mit Daten aus dem Log.
Kontrolliere Deine gplot-Definition(en), dort sollte die Ursache zu finden sein.



Noch ein Tipp abseits Deiner perl warnings:

userReadings temperature_round {sprintf("%.1f",ReadingsNum("IH_Temperatur","temperature",85))}

Das geht auch einfacher, da ReadingsNum() bereits selbst rundet, wenn man die Anzahl der Nachkommastellen als vierten Parameter angibt:

userReadings temperature_round { ReadingsNum("IH_Temperatur","temperature",85,1) }
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

rudolfkoenig

ZitatDie Warnungen treten nicht beim Loggen (durch FileLog) auf, sondern sie stammen aus FileLog_Get() und somit vermutlich aus der Erzeugung eines SVG plots mit Daten aus dem Log.
Anders formuliert: das SVG Modul kann nur mit Zahlen umgehen.
Man muss beim Filtern der Zeilen aus dem FileLog sicherstellen, dass nur Zahlen in der ausgewaehlten Spalte zurueckgeliefert werden.
Notfalls, indem man mit einer Funktion die Werte umwandelt (z.Bsp. on=>1, off=>0)

wcraffonara

Hallo,
  vielen lieben Dank! Ja, das war's! Der Fehler lag bei meinen FTUI3 Charts wo vor dem Device und Reading noch der 4: gefehlt hat, also spec="4:IH_Temperatur:temperature_round"
lG
Walter