Hallo,
ich habe in meinem Logfile haufenweise diese Meldung:
PERL WARNING: Use of uninitialized value in division (/) at (eval 49815) line 1.
2020.11.11 10:23:42 3: eval: {((split ' ',ReadingsVal($NAME,"root",0))[4])/1024}
Nach ausgiebiger Suche im Forum bin ich nicht über etwas gestolpert, was mich näher an die Ursache führt.
Bei ähnlichen Meldungen, die im Forum besprochen werden, ist immer eine *.pm Datei erwähnt, in der es Probleme gibt - die sehe ich hier aber nicht.
Hat jemand ne Idee, wo ich tiefer "buddeln" kann?
Gruß
Alex
1. KEIN Fehler, eine Warnung ;)
2. aktiviere StackTrace, dann wird auch die "gesuchte" .pm "gemeldet" ;)
attr global stacktrace 1
Gruß, Joachim
eventuell ein userreading.
durchsuche mal deine fhem.cfg nach der angegebenen "split" funktion.
Klingt nach einem SYSMON (http://fhem.de/commandref.html#SYSMON) Device - da würde so eine Funktion gerade den benutzten Speicher auf dem Medium in GB umrechnen.
fhem/trunk $ grep -l -iR '[4])/1024' *
Keine Datei gefunden. Ist wohl entweder Code aus einem anderen Modul oder von dir selbst.
Wow - Jungs, ihr seid ja rasend schnell! Danke!
Ich schmöker' mal im System rum und meld mich nochmal.
Sodele:
Jetzt ist wieder Ruhe im Karton. Es war tatsächlich ein UserReading in einem Sysmon-Device.
Hier ein exemplarischer Auszug aus der fhem.cfg:
root_giga {((split ' ',ReadingsVal($NAME,"root",0))[4])/1024}
define FhemSchaltschrankSysMon dummy
setuuid FhemSchaltschrankSysMon 5df23732-f33f-57e4-8bb6-f44bc4d95e39479b
attr FhemSchaltschrankSysMon DbLogExclude .*
attr FhemSchaltschrankSysMon alias Fhem Schaltschrank
attr FhemSchaltschrankSysMon event-on-change-reading state
attr FhemSchaltschrankSysMon group Geräte
attr FhemSchaltschrankSysMon icon system_fhem
attr FhemSchaltschrankSysMon room Infrastruktur->System-Status
attr FhemSchaltschrankSysMon stateFormat Temperatur: cpu_temp_avg°C <br />CPU: CPULast <br />RAM: ram <br />Festplatte: root <br />Letzter Systemstart: starttime_text
attr FhemSchaltschrankSysMon userReadings CPULast { \
my @wort = split / /, ReadingsVal($NAME,"loadavg",0);;\
return $wort[0]/4*100;;\
}, \
Wenn ich mich noch richtig erinner, wollte ich anno dazumal die Ausgabe der ermittelten Werte formatieren. Das rannte so also schon ne Weile so.
Ich nehme an, dass das hier:
attr FhemSchaltschrankSysMon userReadings CPULast { \
my @wort = split / /, ReadingsVal($NAME,"loadavg",0);;\
return $wort[0]/4*100;;\
}
den Ärger verursacht, oder?
Wo hab ich denn da Eurer Meinung nach den Bock geschossen?
Gruß
Alex
Zitatdefine FhemSchaltschrankSysMon dummy
dummy? Ich dachte das ist ein SYSMON-Device?
ZitatIch nehme an, dass das hier:
Code: [Auswählen]
attr FhemSchaltschrankSysMon userReadings CPULast { \
my @wort = split / /, ReadingsVal($NAME,"loadavg",0);;\
return $wort[0]/4*100;;\
}
den Ärger verursacht, oder?
Nein, das passt nicht zur Fehlermeldung.
Ja und nein ;-)
Ich habe drei dieser Devices - ein SysMon direkt auf dieser Instanz und zwei davon als Dummy von zwei weiteren FHEM-Instanzen (per FHEM2FHEM eingebunden).
Der Auszug war tatsächlich von nem Dummy rauskopiert.
Auf allen dreien (sowohl SysMon als auch Dummy) hatte ich das unserreading gesetzt. Hab das nun bei allen erstmal entfernt.
Die erste Zeile passt doch zu der fraglichen Meldung?
Zitatroot_giga {((split ' ',ReadingsVal($NAME,"root",0))[4])/1024}
falsch ist die nicht, aber bei dem Ausspruch
ein exemplarischer Auszug aus der fhem.cfg: ahne ich noch was ::)
Zitat von: Otto123 am 11 November 2020, 15:44:58
Die erste Zeile passt doch zu der fraglichen Meldung?
falsch ist die nicht, aber bei dem Ausspruch ein exemplarischer Auszug aus der fhem.cfg: ahne ich noch was ::)
Aber nicht zum ge
listeten Device. Da fehlt das "Fleisch", nämlich das Device, in dem
root_giga spezifiziert ist. Das gehört ja zu dem Device "davor", wo auch immer die Konfiguration angelegt ist.
aber hierzu passt es
Zitat2020.11.11 10:23:42 3: eval: {((split ' ',ReadingsVal($NAME,"root",0))[4])/1024}
Es ist ja auch kein list, das ist einfach ein Stück fhem.cfg ;) zufällig mit der ersten fraglichen Zeile ;)
Also ein list root_giga wäre besser :)
Zitat von: Otto123 am 11 November 2020, 16:23:44
Es ist ja auch kein list, das ist einfach ein Stück fhem.cfg ;) zufällig mit der ersten fraglichen Zeile ;)
Um genau zu sein habe ich auf seine Frage geantwortet, ob der von ihm explizit zitierte Konfigurationsteil das Problem verursacht - und nein, das tut er nicht. Da wir aber nicht wissen, zu welchem Device
root_giga gehört, tappen wir weiterhin im Dunklen.
Der o.g. Auschnitt war tatsächlich nur aus der fhem.cgf rauskopiert und damit natürlich nicht das "ganze Bild". Mir ging es ja auch zunächst nur um den Code, den ich im UserReading hatte.
Ich hatte das UserReading zwischenzeitlich komplett entfernt und das Logfile dann war auch tatsächlich nicht mehr voll mit Warnings. Jetzt habe ich es zu Analysezwecken wieder so rekonstruiert, wie es ursprünglich war:
Hier das list:
Internals:
DEF 1 1 1 10
FUUID 5e394868-f33f-57e4-0ead-d263fe1b05443d36
INTERVAL_BASE 60
INTERVAL_MULTIPLIERS 1 1 1 10
MODE local
NAME FHEMServer_Sysmon
NR 261
STATE Temperatur: 57.1°C <br />CPU: 28.5 <br />RAM: Total: 926.08 MB, Used: 492.71 MB, 53.20 %, Free: 64.56 MB <br />Festplatte: Total: 29134 MB, Used: 5756 MB, 21 %, Available: 22163 MB at / <br />Letzter Systemstart: 11.11.2020 13:13:51
TYPE SYSMON
READINGS:
2020-11-12 09:43:04 CPULast 28.5
2020-11-12 09:43:02 cpu0_freq 1400
2020-11-12 09:43:02 cpu0_freq_stat 600.00 1400.00 1373.29
2020-11-12 09:43:04 cpu0_idle_stat 18.98 93.89 83.75
2020-11-12 09:43:02 cpu1_freq 1400
2020-11-12 09:43:02 cpu1_freq_stat 600.00 1400.00 1373.29
2020-11-12 09:43:04 cpu1_idle_stat 0.08 94.60 62.26
2020-11-12 09:43:02 cpu2_freq 1400
2020-11-12 09:43:02 cpu2_freq_stat 600.00 1400.00 1373.29
2020-11-12 09:43:04 cpu2_idle_stat 4.29 94.75 62.97
2020-11-12 09:43:02 cpu3_freq 1400
2020-11-12 09:43:02 cpu3_freq_stat 600.00 1400.00 1373.29
2020-11-12 09:43:04 cpu3_idle_stat 23.01 91.67 85.16
2020-11-11 20:15:01 cpu_bogomips 89.60
2020-11-12 09:43:04 cpu_core_count 4
2020-11-12 09:43:02 cpu_freq 1400
2020-11-12 09:43:02 cpu_freq_stat 600.00 1400.00 1373.29
2020-11-12 09:43:04 cpu_idle_stat 24.75 85.73 73.29
2020-11-11 20:15:01 cpu_model_name ARMv7 Processor rev 4 (v7l)
2020-11-12 09:43:04 cpu_temp 56.92
2020-11-12 09:43:04 cpu_temp_avg 57.1
2020-11-12 09:43:04 cpu_temp_stat 52.08 66.60 57.11
2020-11-12 09:43:04 eth0 RX: 2542.74 MB, TX: 1409.45 MB, Total: 3952.19 MB
2020-11-12 09:43:04 eth0_diff RX: 1.34 MB, TX: 0.74 MB, Total: 2.08 MB
2020-11-12 09:43:04 eth0_ip 192.168.33.48
2020-11-12 09:43:04 eth0_rx 2666252697
2020-11-12 09:43:04 eth0_speed 1000
2020-11-12 09:43:04 eth0_tx 1477918126
2020-11-12 09:43:04 fhemstarttime 1605122043
2020-11-12 09:43:04 fhemstarttime_text 11.11.2020 20:14:03
2020-11-12 09:43:04 fhemuptime 48539
2020-11-12 09:43:04 fhemuptime_text 0 days, 13 hours, 28 minutes
2020-11-12 09:40:02 fs_root Total: 29134 MB, Used: 5756 MB, 21 %, Available: 22163 MB at /
2020-11-12 09:43:04 idletime 51993 70.50 %
2020-11-12 09:43:04 idletime_text 0 days, 14 hours, 26 minutes (70.50 %)
2020-11-12 09:43:04 loadavg 1.14 1.25 1.21
2020-11-11 20:15:01 perl_version v5.28.1
2020-11-12 09:43:04 ram Total: 926.08 MB, Used: 492.71 MB, 53.20 %, Free: 64.56 MB
2020-11-12 09:43:04 ram_used_stat 405.09 797.39 494.07
2020-11-12 09:43:04 starttime 1605096831
2020-11-12 09:43:04 starttime_text 11.11.2020 13:13:51
2020-11-12 09:43:04 stat_cpu 5927497 2391 1193933 20797590 495128 0 273878
2020-11-12 09:43:04 stat_cpu0 1251958 786 172546 5349229 75925 0 248838
2020-11-12 09:43:04 stat_cpu0_diff 464 1 78 5094 128 0 45
2020-11-12 09:43:04 stat_cpu0_percent 7.99 0.02 1.34 87.68 2.20 0.00 0.77
2020-11-12 09:43:04 stat_cpu0_text user: 7.99 %, nice: 0.02 %, sys: 1.34 %, idle: 87.68 %, io: 2.20 %, irq: 0.00 %, sirq: 0.77 %
2020-11-12 09:43:04 stat_cpu1 2016059 451 254368 4916937 131889 0 9519
2020-11-12 09:43:04 stat_cpu1_diff 2383 0 195 3393 3 0 3
2020-11-12 09:43:04 stat_cpu1_percent 39.87 0.00 3.26 56.77 0.05 0.00 0.05
2020-11-12 09:43:04 stat_cpu1_text user: 39.87 %, nice: 0.00 %, sys: 3.26 %, idle: 56.77 %, io: 0.05 %, irq: 0.00 %, sirq: 0.05 %
2020-11-12 09:43:04 stat_cpu2 2059214 679 260985 4831742 163553 0 9851
2020-11-12 09:43:04 stat_cpu2_diff 1454 0 115 4370 27 0 5
2020-11-12 09:43:04 stat_cpu2_percent 24.35 0.00 1.93 73.19 0.45 0.00 0.08
2020-11-12 09:43:04 stat_cpu2_text user: 24.35 %, nice: 0.00 %, sys: 1.93 %, idle: 73.19 %, io: 0.45 %, irq: 0.00 %, sirq: 0.08 %
2020-11-12 09:43:04 stat_cpu3 600266 475 506034 5699681 123760 0 5670
2020-11-12 09:43:04 stat_cpu3_diff 600 0 389 4615 41 0 4
2020-11-12 09:43:04 stat_cpu3_percent 10.62 0.00 6.89 81.70 0.73 0.00 0.07
2020-11-12 09:43:04 stat_cpu3_text user: 10.62 %, nice: 0.00 %, sys: 6.89 %, idle: 81.70 %, io: 0.73 %, irq: 0.00 %, sirq: 0.07 %
2020-11-12 09:43:04 stat_cpu_diff 4901 1 777 17472 198 0 57
2020-11-12 09:43:04 stat_cpu_percent 20.94 0.00 3.32 74.65 0.85 0.00 0.24
2020-11-12 09:43:04 stat_cpu_text user: 20.94 %, nice: 0.00 %, sys: 3.32 %, idle: 74.65 %, io: 0.85 %, irq: 0.00 %, sirq: 0.24 %
2020-11-12 09:43:04 swap Total: 100.00 MB, Used: 97.23 MB, 97.23 %, Free: 2.77 MB
2020-11-12 09:43:04 swap_used_stat 0.00 100.00 97.22
2020-11-12 09:43:04 uptime 73750
2020-11-12 09:43:04 uptime_text 0 days, 20 hours, 29 minutes
2020-11-12 09:43:04 wlan0 RX: 0.00 MB, TX: 0.00 MB, Total: 0 MB
2020-11-12 09:43:04 wlan0_diff RX: 0.00 MB, TX: 0.00 MB, Total: 0.00 MB
2020-11-12 09:43:04 wlan0_rx 0
2020-11-12 09:43:04 wlan0_tx 0
helper:
sys_cpu0_freq 1
sys_cpu0_temp 0
sys_cpu1_freq 1
sys_cpu1_temp 0
sys_cpu2_freq 1
sys_cpu2_temp 0
sys_cpu3_freq 1
sys_cpu3_temp 0
sys_cpu4_freq 0
sys_cpu4_temp 0
sys_cpu5_freq 0
sys_cpu5_temp 0
sys_cpu6_freq 0
sys_cpu6_temp 0
sys_cpu7_freq 0
sys_cpu7_temp 0
sys_cpu_freq_rpi_bbb 1
sys_cpu_temp_rpi 1
sys_fb 0
sys_power_ac 0
sys_power_bat 0
sys_power_usb 0
u_first_mark 1
cur_readings_map:
cpu0_freq CPU frequency (core 0)
cpu0_freq_stat CPU frequency (core 0) stat
cpu0_idle_stat CPU0 min/max/avg (idle)
cpu1_freq CPU frequency (core 1)
cpu1_freq_stat CPU frequency (core 1) stat
cpu1_idle_stat CPU1 min/max/avg (idle)
cpu2_freq CPU frequency (core 2)
cpu2_freq_stat CPU frequency (core 2) stat
cpu2_idle_stat CPU2 min/max/avg (idle)
cpu3_freq CPU frequency (core 3)
cpu3_freq_stat CPU frequency (core 3) stat
cpu3_idle_stat CPU3 min/max/avg (idle)
cpu4_idle_stat CPU4 min/max/avg (idle)
cpu5_idle_stat CPU5 min/max/avg (idle)
cpu6_idle_stat CPU6 min/max/avg (idle)
cpu7_idle_stat CPU7 min/max/avg (idle)
cpu_bogomips BogoMIPS
cpu_core_count Number of CPU cores
cpu_freq CPU frequency
cpu_freq_stat CPU frequency stat
cpu_idle_stat CPU min/max/avg (idle)
cpu_model_name CPU model name
cpu_temp CPU temperature
cpu_temp_avg Average CPU temperature
cpu_temp_stat CPU temperature stat
date Date
eth0 Network adapter eth0
eth0_diff Network adapter eth0 (diff)
eth0_ip Network adapter eth0 (IP)
eth0_ip6 Network adapter eth0 (IP6)
eth0_rx Network adapter eth0 (RX)
eth0_speed Network adapter eth0 (speed)
eth0_tx Network adapter eth0 (TX)
fhemstarttime Fhem start time
fhemstarttime_text Fhem start time
fhemuptime System up time
fhemuptime_text FHEM up time
fs_root Root
fs_root_free Root (free)
fs_root_used Root (used)
fs_root_used_percent Root (used %)
idletime Idle time
idletime_text Idle time
io_sda TEST
io_sda_diff TEST
io_sda_raw TEST
loadavg Load average
loadavg_1 Load average 1
loadavg_15 Load average 15
loadavg_5 Load average 5
perl_version Perl Version
ram RAM
ram_free RAM free
ram_free_percent RAM free %
ram_total RAM total
ram_used RAM used
ram_used_stat RAM used stat
starttime System start time
starttime_text System start time
stat_cpu CPU statistics
stat_cpu0 CPU0 statistics
stat_cpu0_diff CPU0 statistics (diff)
stat_cpu0_percent CPU0 statistics (diff, percent)
stat_cpu0_text CPU0 statistics (text)
stat_cpu1 CPU1 statistics
stat_cpu1_diff CPU1 statistics (diff)
stat_cpu1_percent CPU1 statistics (diff, percent)
stat_cpu1_text CPU1 statistics (text)
stat_cpu2 CPU2 statistics
stat_cpu2_diff CPU2 statistics (diff)
stat_cpu2_percent CPU2 statistics (diff, percent)
stat_cpu2_text CPU2 statistics (text)
stat_cpu3 CPU3 statistics
stat_cpu3_diff CPU3 statistics (diff)
stat_cpu3_percent CPU3 statistics (diff, percent)
stat_cpu3_text CPU3 statistics (text)
stat_cpu4 CPU4 statistics
stat_cpu4_diff CPU4 statistics (diff)
stat_cpu4_percent CPU4 statistics (diff, percent)
stat_cpu4_text CPU4 statistics (text)
stat_cpu5 CPU5 statistics
stat_cpu5_diff CPU5 statistics (diff)
stat_cpu5_percent CPU5 statistics (diff, percent)
stat_cpu5_text CPU5 statistics (text)
stat_cpu6 CPU6 statistics
stat_cpu6_diff CPU6 statistics (diff)
stat_cpu6_percent CPU6 statistics (diff, percent)
stat_cpu6_text CPU6 statistics (text)
stat_cpu7 CPU7 statistics
stat_cpu7_diff CPU7 statistics (diff)
stat_cpu7_percent CPU7 statistics (diff, percent)
stat_cpu7_text CPU7 statistics (text)
stat_cpu_diff CPU statistics (diff)
stat_cpu_idle_percent CPU statistics idle %
stat_cpu_io_percent CPU statistics io %
stat_cpu_irq_percent CPU statistics irq %
stat_cpu_nice_percent CPU statistics nice %
stat_cpu_percent CPU statistics (diff, percent)
stat_cpu_sirq_percent CPU statistics sirq %
stat_cpu_sys_percent CPU statistics sys %
stat_cpu_text CPU statistics (text)
stat_cpu_user_percent CPU statistics user %
swap swap
swap_free swap free
swap_total swap total
swap_used swap used
swap_used_percent swap used %
swap_used_stat swap used stat
uptime System up time
uptime_text System up time
wlan0 Network adapter wlan0
wlan0_diff Network adapter wlan0 (diff)
wlan0_ip Network adapter wlan0 (IP)
wlan0_ip6 Network adapter wlan0 (IP6)
wlan0_rx Network adapter wlan0 (RX)
wlan0_speed Network adapter wlan0 (speed)
wlan0_tx Network adapter wlan0 (TX)
excludes:
Attributes:
DbLogExclude .*
alias FHEM Serverschrank
event-on-change-reading state
filesystems fs_root:/:Root
group Geräte
icon system_fhem
room Infrastruktur->System-Status
stateFormat Temperatur: cpu_temp_avg°C <br />CPU: CPULast <br />RAM: ram <br />Festplatte: fs_root <br />Letzter Systemstart: starttime_text
userReadings CPULast {
my @wort = split / /, ReadingsVal($NAME,"loadavg",0);
return $wort[0]/4*100;
}
Was mich allerdings beim Analysieren mittlerweile auch beschäftigt, ist der eigentliche Inhalt, den ich da zusammen geschustert habe. Wobei das glaube ich, in einem gesonderten Diskussionsstrang behandelt werden sollte, ums nicht unnötig kompliziert zu machen. :-)
Aber es ist nach wie vor nicht ansatzweise der Code, der in der Fehlermeldung war (und im Post #9 extrahiert) ::)
Das stimmt, das ist aber der Relevante.
Mit dieser unterschiedlichen Einstellung zu Relevanz wird sich das Warnsystem von Perl und Du aber wohl nie in Übereinstimmung finden. ;D
Egal - dann machen wir hier einfach einen Haken dran ;)
Das kann auch nicht das richtige Device sein, denn da fehlt wieder der Teil, der in deiner Fehlermeldung bemängelt wird. Ich zitiere dich noch mal:
ZitatPERL WARNING: Use of uninitialized value in division (/) at (eval 49815) line 1.
2020.11.11 10:23:42 3: eval: {((split ' ',ReadingsVal($NAME,"root",0))[4])/1024}
In deinem Listing fehlt
split auf
root komplett, also hast du entweder das falsche Device gelistet oder aber nicht wieder so rekonstruiert, wie es den Fehler geworfen hat.
Davon ab:
CPULast {
my @wort = split / /, ReadingsVal($NAME,"loadavg",0);
return $wort[0]/4*100;
}
Man sollte niemals ein userReading ohne Einschränkungen machen -
CPULast wird nun für jedes aktualisierte Reading im Device aufgerufen, anstatt nur für
loadavg. Du kannst das so einschränken:
CPULast:loadavg:.+ {
my @wort = split / /, ReadingsVal($NAME,"loadavg",0);
return $wort[0]/4*100;
}
Du kannst das auch einfacher schreiben:
CPULast:loadavg:.+ {
return ( ReadingsNum($NAME, q(loadavg), 0) / 4 * 100)
}
Man kann in dem Fall sogar das return einsparen (@Christoph oder ist das nicht zu empfehlen?):
CPULast:loadavg:.+ { ReadingsNum($NAME, q(loadavg), 0) / 4 * 100 },
root_giga:root:.+ {(split ' ',ReadingsVal($NAME,q(root),q(0 1 2 3 4)))[4] / 1024}
Das zweite Beispiel ist für den Fall, dass es nicht die erste Zahl im Reading sein soll :) (wie im von Perl bemängeltem Code Teil - wo offenbar der Inhalt von root nicht aus mehren Elementen bestand)
Edit: Wobei ich jetzt feststellen muss: Der Code an sich ist richtig, aber das Reading root (in meinem Stino uralt sysmon Device) wird irgendwie speziell behandelt. Das userReading wird so nicht geschrieben. Liegt eventuell an einem speziellen event-on-update-reading? :-[
1. falls es das "relevante" device ist, macht doch eine abfrage auf ein reading "root" überhaupt keinen sinn, da es gar nicht existiert.
wenn schon, dann auf "fs_root".
2. "attr event-on-change-reading state"
in einem "normalen" modul, das kein reading state hat, würde dieses attribut NULL events erzeugen.
also auch keine userreadings.