LogProxy SVG - undef Problem

Begonnen von rogerknop, 11 Oktober 2022, 12:39:49

Vorheriges Thema - Nächstes Thema

rogerknop

Hallo,

ich habe mir für den Gaszähler eine Monats und Tagesverbrauchsanzeige gebastelt mit LogProxy.
Es klappt soweit ganz gut, aber die Monatsübersicht produziert mir Log einträge:

2022.10.11 12:17:54 1: PERL WARNING: Argument "undef" isn't numeric in subtraction (-) at ./FHEM/99_Utils.pm line 118.
2022.10.11 12:17:54 1: PERL WARNING: Use of uninitialized value $SVG_lt in addition (+) at ./FHEM/99_Utils.pm line 121.


Inzwischen habe ich rausgefunden, dass es daran liegt, dass noch kein Monatseintrag im Log steht.
Meine gplot Datei sieht so aus:

# Created by FHEM/98_SVG.pm, 2022-02-11 15:08:19
set terminal png transparent size <SIZE> crop
set output '<OUT>.png'
set xdata time
set timefmt "%Y-%m-%d_%H:%M:%S"
set xlabel " "
set title 'Gasverbrauch pro Monat'
set ytics
set y2tics
set grid
set ylabel "m3"
set y2label "m3"

#logProxy FileLog:GaszaehlerAggrLog,offset=-60*60*12:4:GaszaehlerAggr.month.*::
#logProxy Func:plotKwhCurrent($from,$to,"gaszaehler","statValueMonth")

plot "<IN>" using 1:2 axes x1y2 title 'm3' ls l2fill lw 1 with bars
plot "<IN>" using 1:2 axes x1y2 title 'Aktuell' ls l1fill lw 1 with bars


Ich vermute mit einem defined() kann ich das Problem abfangen, aber bisher war ich ohne Erfolg :-(

Kann mir jemand einen tipp geben?

Danke & Grüße,
Roger

Beta-User

Zitat von: rogerknop am 11 Oktober 2022, 12:39:49
Ich vermute mit einem defined() kann ich das Problem abfangen, aber bisher war ich ohne Erfolg :-(

Kann mir jemand einen tipp geben?
Die passende defined-Abfrage(n) vielleicht irgendwo vor Zeilen #118 und #121 in die 99_Utils einbauen, den ganzen Code dann nach 99_myUtils übernehmen (und auch alles, was sich sonst noch da findet), und 99_Utils wieder herstellen?
(Falls das unklar ist, schau mal in https://svn.fhem.de/trac/browser/trunk/fhem/FHEM/99_Utils.pm#L118).
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

rogerknop

Boah das ist aber unsauber - oder?
Dann geht ja meine utils an allen zukünftigen Updates vorbei bzw. muss ich sie regelmäßig kopieren.

Beta-User

Zitat von: rogerknop am 11 Oktober 2022, 13:53:42
Boah das ist aber unsauber - oder?
"Unsauber" trifft es ganz gut ;D . Kannst uU. froh sein, dass du dir damit FHEM nicht direkt abgeschossen hast, manche Module nutzen nämlich Code aus der (allgemeinen) Datei...

Zitat
Dann geht ja meine utils an allen zukünftigen Updates vorbei bzw. muss ich sie regelmäßig kopieren.
Diesen Schluss verstehe ich nicht, aber deine Funktionen wären eben weg, wenn die 99_Utils.pm je mal wieder aktualisiert wird... (Es sei denn, du hast die vom update ausgenommen, was dann auch reichlich "unsauber" wäre...).
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

rudolfkoenig

Die Meldung kann nicht aus einem aktuellen 99_Utils.pm kommen, jedenfalls nicht, wenn die Zeilennnummer stimmern.
Und 99_Utils.pm wurde zuletzt vor anderthalb Jahren angefasst.
Will sagen: ich haette gerne die Meldungen mit einer aktuellen Version von FHEM.

Bei WARNING-Problemen bitte "attr global stacktrace 1" setzen, damit wir wissen, wer diese Funktion aufgerufen hat.

rogerknop

Habe aktualisiert und getestet bevor ich den Post hier eröffnet habe.
Der Fehler ist in dieser Zeile:

$SVG_lt = mktime(0,0,$h,$d,$m-1,$y-1900,0,0,-1);


Verursacht dadurch, dass im Einstieg der sub $str undef ist:

my ($str) = @_;


Wie gesagt liegt es da dran, dass ein keinen Wert im Log gibt.
Wenn ich manuell eine Zeile eintrage, dann verschwindet die Warnung.



Beta-User

Zitat von: rogerknop am 11 Oktober 2022, 15:08:45
Habe aktualisiert und getestet bevor ich den Post hier eröffnet habe.
Mache mal ein "update check". Da müßte was kommen, vermutlich sind irgendwo "zwischendrin" Rechte verbogen.



Habe nicht nachgeschaut, von wo aus die fragliche Funktion aufgerufen wird, aber falls es aus "plotKwhCurrent()" ist, könntest du dort einen Ersatzwert einkippen.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

rogerknop

Es ist alles aktuell. Update hat gestern einiges gefunden heute nix mehr.

Callstack für das undef im SVG_time_to_sec:

$SVG_lt = mktime(0,0,$h,$d,$m-1,$y-1900,0,0,-1);
PERL WARNING: Argument "undef" isn't numeric in subtraction (-) at ./FHEM/99_Utils.pm line 114.
Call-Stack:
  -> ./FHEM/98_logProxy.pm - 470 - main::SVG_time_to_sec
  -> ./FHEM/98_logProxy.pm - 941 - main::logProxy_shiftTime
  -> fhem.pl - 3961 - main::logProxy_Get
  -> fhem.pl - 2027 - main::CallFn
  -> fhem.pl - 1274 - main::CommandGet
  -> ./FHEM/01_FHEMWEB.pm - 2825 - main::AnalyzeCommand
  -> ./FHEM/98_SVG.pm - 1267 - main::FW_fC
  -> ./FHEM/98_SVG.pm - 1231 - main::SVG_getData
  -> ./FHEM/98_SVG.pm - 1124 - main::SVG_doShowLog
  -> ./FHEM/01_FHEMWEB.pm - 1016 - main::SVG_showLog
  -> ./FHEM/01_FHEMWEB.pm - 611 - main::FW_answerCall
  -> fhem.pl - 3961 - main::FW_Read
  -> fhem.pl - 782 - main::CallFn

rogerknop

ABER Moment! Guter Punkt... die plotKwhCurrent Funktion hatte ich aus dem Forum oder sonst wo her.
Dachte die ganze Zeit die wäre im FHEM enthalten.

rudolfkoenig

#9
#1 es wurden Fehler in zwei Zeilen gemeldet.
#2 die gezeigte Zeile befindet sich seit mindestens 2021-04-02 auf der Zeile 114.
#3 wir wissen immer noch nicht, wer SVG_time_to_sec von wo aufgerufen hat. Das kriegt man aber mit "attr global stacktrace 1" raus. Dann kann man entscheiden, wer das Problem am besten loest: der Aufrufer oder die Funktion selbst.

Aus meiner Erfahrung ist es selten zielfuehrend mit dem Support zu diskutieren.
Stattdessen folge ich deren Anweisungen bind, und komme mit eigenen Ideen erst dann, wenn sie nicht mehr weiter wissen.

Nachtrag: war wohl zu lange abgelenkt, meine Antwort berucksichtigt nur Daten bis Beitrag #5

rogerknop

Hallo Rudolf,

jetzt bin ich verwirrt.
Ich habe doch blind alles verfolgt - zumindest nach bestem Wissen und Gewissen.
Update - war gemacht.
Call Stack geschickt.
Hier nochmal mit stacktrace 1:

2022.10.11 16:22:45 1: stacktrace:
2022.10.11 16:22:45 1:     main::__ANON__                      called by ./FHEM/99_Utils.pm (114)
2022.10.11 16:22:45 1:     main::SVG_time_to_sec               called by ./FHEM/98_logProxy.pm (470)
2022.10.11 16:22:45 1:     main::logProxy_shiftTime            called by ./FHEM/98_logProxy.pm (941)
2022.10.11 16:22:45 1:     main::logProxy_Get                  called by fhem.pl (3961)
2022.10.11 16:22:45 1:     main::CallFn                        called by fhem.pl (2027)
2022.10.11 16:22:45 1:     main::CommandGet                    called by fhem.pl (1274)
2022.10.11 16:22:45 1:     main::AnalyzeCommand                called by ./FHEM/01_FHEMWEB.pm (2825)
2022.10.11 16:22:45 1:     main::FW_fC                         called by ./FHEM/98_SVG.pm (1267)
2022.10.11 16:22:45 1:     main::SVG_getData                   called by ./FHEM/98_SVG.pm (1231)
2022.10.11 16:22:45 1:     main::SVG_doShowLog                 called by ./FHEM/98_SVG.pm (1124)
2022.10.11 16:22:45 1:     main::SVG_showLog                   called by ./FHEM/01_FHEMWEB.pm (1016)
2022.10.11 16:22:45 1:     main::FW_answerCall                 called by ./FHEM/01_FHEMWEB.pm (611)
2022.10.11 16:22:45 1:     main::FW_Read                       called by fhem.pl (3961)
2022.10.11 16:22:45 1:     main::CallFn                        called by fhem.pl (782)


Übrigens wird die Funktion plotKwhCurrent erst NACH der Warnung aufgerufen.
Daher würde ich annehmen, dass der Auslöser der Warnung die folgende Zeile im gplot ist, die halt keinen Wert month findet:

#logProxy FileLog:GaszaehlerAggrLog,offset=-60*60*12:4:GaszaehlerAggr.month.*::


Ich hoffe ich habe die Informationen nun richtig weitergegeben.

Danke! Roger

rudolfkoenig

Danke, das hilft mir.

Ich meine das Problem muss in logProxy geloest werden. SVG_time_to_sec wird auch von anderen Modulen aufgerufen.
Ob man bei undef als Input die Funktion undef oder 0 zurueckgeben sollte, ist diskussionwuerdig, und versteckt nur das eigentliche Problem.

justme1968

@rogerknop:

bitte schau mal ob es reicht wenn du in 98_logProxy.pm im block # shift data and specials back die zeien 941 und 942 so änderst:

941       $main::data{"firstdate1"} = logProxy_shiftTime($main::data{"firstdate1"},
942                                                      $offset.$offset_scale) if( $offset
943                                                                                 && defined($main::data{"firstdate1"}) );
944       $main::data{"currdate1"} = logProxy_shiftTime($main::data{"currdate1"},
945                                                     $offset.$offset_scale) if( $offset
946                                                                                &6 defined($main::data{"currdate1"}) );
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

rogerknop

Hallo justme!

Das hat leider nichts bewirkt.
ABER! Die Variablen sind nicht undef sondern der String "undef".
Wenn ich das Coding erweitere dann geht es:

      $main::data{"firstdate1"} = logProxy_shiftTime($main::data{"firstdate1"},$offset.$offset_scale) if( $offset && defined($main::data{"firstdate1"}) && ($main::data{"firstdate1"} ne "undef") );
      $main::data{"currdate1"} = logProxy_shiftTime($main::data{"currdate1"},$offset.$offset_scale) if( $offset && defined($main::data{"currdate1"}) && ($main::data{"currdate1"} ne "undef") );


Vermutlich muss das Befüllen des data Hashs entsprechend angepasst werden.

Danke & Grüße,
Roger

justme1968

so auf die schnelle würde ich sagen das im string undef nichts zu suchen hat. da stimmt was nicht.

ich schaue es mir an sobald ich dazu komme.

kannst du zu dem plot file ganz oben bitte noch ein list vom svg device und ein log posten bei dem das problem auftritt?
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968