Perl-Fehlermeldungen im Logfile

Begonnen von kptkip, 11 November 2020, 10:29:42

Vorheriges Thema - Nächstes Thema

kptkip

 Das stimmt, das ist aber der Relevante.
FHEM Revision: 22312 auf RasPI3B+,1xNeumannCUL,HMLAN,1xRasPi3B+,2xRasPI ZERO W
CUL_HM:HM-Sec-SCo, HM-CC-RT-DN
Fritz: Fritz!Box 6590C,DECT301,DECT200
Shelly:Shelly1,Shelly2, ShellyBulb Xiaomi: Schalter, Fensterkontakte HUE: ConbeeII
Tasmota:SonoffBridge, Stecker

Otto123

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 ;)
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Christoph Morrison

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


Otto123

#18
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?  :-[
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

frank

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.
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