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
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) }
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)
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