FHEM Forum

FHEM => Frontends => SVG / Plots / logProxy => Thema gestartet von: rogerknop am 11 Oktober 2022, 12:39:49

Titel: LogProxy SVG - undef Problem
Beitrag von: rogerknop am 11 Oktober 2022, 12:39:49
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
Titel: Antw:LogProxy SVG - undef Problem
Beitrag von: Beta-User am 11 Oktober 2022, 13:01:15
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).
Titel: Antw:LogProxy SVG - undef Problem
Beitrag von: rogerknop am 11 Oktober 2022, 13:53:42
Boah das ist aber unsauber - oder?
Dann geht ja meine utils an allen zukünftigen Updates vorbei bzw. muss ich sie regelmäßig kopieren.
Titel: Antw:LogProxy SVG - undef Problem
Beitrag von: Beta-User am 11 Oktober 2022, 13:57:51
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...).
Titel: Antw:LogProxy SVG - undef Problem
Beitrag von: rudolfkoenig am 11 Oktober 2022, 14:05:56
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.
Titel: Antw:LogProxy SVG - undef Problem
Beitrag von: rogerknop am 11 Oktober 2022, 15:08:45
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.


Titel: Antw:LogProxy SVG - undef Problem
Beitrag von: Beta-User am 11 Oktober 2022, 15:14:34
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.
Titel: Antw:LogProxy SVG - undef Problem
Beitrag von: rogerknop am 11 Oktober 2022, 15:25:13
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
Titel: Antw:LogProxy SVG - undef Problem
Beitrag von: rogerknop am 11 Oktober 2022, 15:26:47
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.
Titel: Antw:LogProxy SVG - undef Problem
Beitrag von: rudolfkoenig am 11 Oktober 2022, 15:37:49
#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
Titel: Antw:LogProxy SVG - undef Problem
Beitrag von: rogerknop am 11 Oktober 2022, 16:26:03
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
Titel: Antw:LogProxy SVG - undef Problem
Beitrag von: rudolfkoenig am 11 Oktober 2022, 17:41:37
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.
Titel: Antw:LogProxy SVG - undef Problem
Beitrag von: justme1968 am 11 Oktober 2022, 18:16:06
@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"}) );
Titel: Antw:LogProxy SVG - undef Problem
Beitrag von: rogerknop am 11 Oktober 2022, 20:45:11
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
Titel: Antw:LogProxy SVG - undef Problem
Beitrag von: justme1968 am 11 Oktober 2022, 21:19:54
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?
Titel: Antw:LogProxy SVG - undef Problem
Beitrag von: rogerknop am 11 Oktober 2022, 22:44:19
Super Danke!
Hat ja auch Zeit.


Internals:
   DEF        logProx:SVG_GaszaehlerAggrLogMonth:CURRENT
   FUUID      633be6c6-f33f-0fde-8b14-6600cde11b6b9c28
   GPLOTFILE  SVG_GaszaehlerAggrLogMonth
   LOGDEVICE  logProx
   LOGFILE    CURRENT
   NAME       SVG_GaszaehlerAggrLogMonth
   NR         802
   STATE      initialized
   TYPE       SVG
Attributes:
   fixedrange year
   room       Verbrauch
   sortby     200