FHEM Forum

FHEM => Sonstiges => Thema gestartet von: wcraffonara am 03 September 2023, 06:46:43

Titel: 92_FileLog.pm PERL Warning Argument "xxxxx" isn't numeric in subtraction
Beitrag von: wcraffonara am 03 September 2023, 06:46:43
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
Titel: Aw: 92_FileLog.pm PERL Warning Argument "xxxxx" isn't numeric in subtraction
Beitrag von: betateilchen am 03 September 2023, 12:18:25
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) }
Titel: Aw: 92_FileLog.pm PERL Warning Argument "xxxxx" isn't numeric in subtraction
Beitrag von: rudolfkoenig am 03 September 2023, 13:09:26
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)
Titel: Aw: 92_FileLog.pm PERL Warning Argument "xxxxx" isn't numeric in subtraction
Beitrag von: wcraffonara am 09 September 2023, 22:56:22
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