Hallo, seit Monaten und auch in der aktuellen Version finde ich viele dieser Warnungen im Log:
PERL WARNING: Argument "undef" isn't numeric in subtraction (-) at ./FHEM/99_Utils.pm line 114.
Die Warnung resultiert daraus, dass SVG_time_to_sec() mit dem String (!) "undef" aufgerufen wird, was nicht abgefangen wird.
Das Stacktrace dazu: 2024.04.03 22:06:33 1: stacktrace:
2024.04.03 22:06:33 1: main::__ANON__ called by ./FHEM/99_Utils.pm (114)
2024.04.03 22:06:33 1: main::SVG_time_to_sec called by ./FHEM/98_logProxy.pm (470)
2024.04.03 22:06:33 1: main::logProxy_shiftTime called by ./FHEM/98_logProxy.pm (941)
2024.04.03 22:06:33 1: main::logProxy_Get called by fhem.pl (3985)
2024.04.03 22:06:33 1: main::CallFn called by fhem.pl (2035)
2024.04.03 22:06:33 1: main::CommandGet called by fhem.pl (1282)
2024.04.03 22:06:33 1: main::AnalyzeCommand called by ./FHEM/01_FHEMWEB.pm (2866)
2024.04.03 22:06:33 1: main::FW_fC called by ./FHEM/98_SVG.pm (1270)
2024.04.03 22:06:33 1: main::SVG_getData called by ./FHEM/98_SVG.pm (1234)
2024.04.03 22:06:33 1: main::SVG_doShowLog called by ./FHEM/98_SVG.pm (1127)
2024.04.03 22:06:33 1: main::SVG_showLog called by ./FHEM/01_FHEMWEB.pm (1016)
2024.04.03 22:06:33 1: main::FW_answerCall called by ./FHEM/01_FHEMWEB.pm (609)
2024.04.03 22:06:33 1: main::FW_Read called by fhem.pl (3985)
2024.04.03 22:06:33 1: main::CallFn called by fhem.pl (786)2024.04.03 22:06:33 1: stacktrace:
2024.04.03 22:06:33 1: main::__ANON__ called by ./FHEM/99_Utils.pm (114)
2024.04.03 22:06:33 1: main::SVG_time_to_sec called by ./FHEM/98_logProxy.pm (470)
2024.04.03 22:06:33 1: main::logProxy_shiftTime called by ./FHEM/98_logProxy.pm (941)
2024.04.03 22:06:33 1: main::logProxy_Get called by fhem.pl (3985)
2024.04.03 22:06:33 1: main::CallFn called by fhem.pl (2035)
2024.04.03 22:06:33 1: main::CommandGet called by fhem.pl (1282)
2024.04.03 22:06:33 1: main::AnalyzeCommand called by ./FHEM/01_FHEMWEB.pm (2866)
2024.04.03 22:06:33 1: main::FW_fC called by ./FHEM/98_SVG.pm (1270)
2024.04.03 22:06:33 1: main::SVG_getData called by ./FHEM/98_SVG.pm (1234)
2024.04.03 22:06:33 1: main::SVG_doShowLog called by ./FHEM/98_SVG.pm (1127)
2024.04.03 22:06:33 1: main::SVG_showLog called by ./FHEM/01_FHEMWEB.pm (1016)
2024.04.03 22:06:33 1: main::FW_answerCall called by ./FHEM/01_FHEMWEB.pm (609)
2024.04.03 22:06:33 1: main::FW_Read called by fhem.pl (3985)
2024.04.03 22:06:33 1: main::CallFn called by fhem.pl (786)
In der fhem.pl finden sich eine Reihe dieser Stringzuweisungen ("undef").
Ich habe Zeile 114 in ./FHEM/99_Utils.pm wie folgt erweitert: if(!$str || $str eq 'undef') {
Damit ist Ruhe.
Vielleicht hat ein sich zuständig fühlender Entwickler Interesse, dem nachzugehen oder das einfach so erweitert einzuchecken!?
Grüße
Joachim
Hallo Jochen,
von wo wird den SVG_time_to_sec($) mit dem Parameter "undef" aufgerufen. Dass ist doch das eigentliche Problem. Hast Du mal deine *.gplot und Deine fhem.cfg nach "undef" durchsucht?
Im Perl Universum ist undef oder undef() eine Funktion und setzt den Wert einer Variablen auf "nicht definiert". Der richtige Aufruf der SVG_time_to_sec($) wäre also SVG_time_to_sec(undef) und nicht SVG_time_to_sec("undef").
Grüße Jörg
Zitat von: Fakenius am 04 April 2024, 11:52:05Wie ich geschrieben habe, findet sich z.B. in der fhem.pl in Zeile 2604 die Zuweisung "undef" (als String):
Ja. Und an der Stelle ist das so auch völlig korrekt, weil dieser String auch als String ausgegeben wird.
Zitat von: Fakenius am 04 April 2024, 11:52:05Von so etwas wird es vermutlich irgendwo herkommen.
Das glaube ich eher nicht.
Zeig mal bitte das raw def Deines SVG devices.
Zitat von: Fakenius am 04 April 2024, 16:07:21... das wird Dich wohl nicht weiterbringen
Doch, das hat mich schon weitergebracht. Zum Zeitpunkt meiner Frage wusste ich schon, dass die Meldung durch eine Offset Berechnung verursacht wird. Meine Frage zielte deshalb darauf ab, herauszufinden, ob Du ein Attribut mit einem offset gesetzt hast - was aber nicht der Fall ist.
In diesem Fall wäre meine nächste Frage nach dem Inhalt des gplot-Files gewesen, das hast Du ja gleich mit beantwortet und sogar genau die Zeile geliefert, die ich sehen wollte - die mit einem Offset.
Zitat von: Fakenius am 04 April 2024, 16:32:33die sub logProxy_shiftTime($$) in der 98_logProxy.pm ist diejenige, die SVG_time_to_sec mit "undef" aufruft
Noch immer glaube ich nicht daran, dass die Funktion mit "undef" (als String) aufgerufen wird.
Bau doch mal in der SVG_time_to_sec() eine Debug Ausgabe ein, damit man sieht, womit die Funktion wirklich aufgerufen wird.
logProxy_shiftTime ruft SVG_time_to_sec mit einem String auf, was nicht wie YYYY-MM-DD_HH:MM:SS aufgebaut ist, sonder eher wie AAAA.
Dadurch wird $m (entspricht MM) zu undef, und perl beschwert sich bei $m-1.
Beim logProxy_shiftTime Aufruf in der Zeile 941 hat also $main::data{"firstdate1"} das falsche Format.
firstdate1 wird in FileLog_get berechnet, offensichtlich gelang das in diesem Fall nicht, z.Bsp. weil im abgefragten Intervall keine Daten waren.