[gelöst] Im 10-Jahresplot stimmt die Achsenbeschriftung nicht

Begonnen von gichtl, 18 Februar 2021, 11:17:13

Vorheriges Thema - Nächstes Thema

gichtl

Im Logfile befinden sich nur die Daten für das aktuelle Jahr 2021. Die Achsenbeschriftung im 10-Jahresplot ist jedoch fehlerhaft und so macht es den Anschein als ob die Daten zu 2020 gehören würden.

rudolfkoenig


Newbee

Moin,

durch das gestrige Update 98_SVG.pm bekomme ich nun folgende Perl warnings.

2021.02.27 08:44:34 1: PERL WARNING: Use of uninitialized value $aligntext in numeric eq (==) at ./FHEM/98_SVG.pm line 1733.
2021.02.27 08:44:34 1: stacktrace:
2021.02.27 08:44:34 1:     main::__ANON__                      called by ./FHEM/98_SVG.pm (1733)
2021.02.27 08:44:34 1:     main::SVG_render                    called by ./FHEM/98_SVG.pm (1206)
2021.02.27 08:44:34 1:     main::SVG_doShowLog                 called by ./FHEM/98_SVG.pm (1097)
2021.02.27 08:44:34 1:     main::SVG_showLog                   called by ./FHEM/01_FHEMWEB.pm (984)
2021.02.27 08:44:34 1:     main::FW_answerCall                 called by ./FHEM/01_FHEMWEB.pm (596)
2021.02.27 08:44:34 1:     main::FW_Read                       called by fhem.pl (3830)
2021.02.27 08:44:34 1:     main::CallFn                        called by fhem.pl (767)


Danke

Grüße Newbee
Intel-NUC mit ubuntu server 20.04; FHEM 6.0
HM, Dect, Netatmo, Hue

rudolfkoenig


gichtl

Der Fix behebt leider das Problem nicht. Anbei ein Beispiel mit fixedrange "2011-09-01 2021-08-31". Die Beschriftung der X-Achse paßt überhaupt nicht und endet bereits im Dezember 2020. Die Daten aus Jan/Feb 2021 aus dem Logfile erscheinen somit in den April/Mai 2020 verschoben.
Ich hatte das und einige weitere Kleinigkeiten wie den falschen Wochenstart bei mir lokal gefixt. Ein entsprechender Patch dafür findet sich findet im letzten Beitrag vom Thread "Fehler in Beschriftung" von vorletzter Woche: https://forum.fhem.de/index.php/topic,118053.msg1133077.html#msg1133077


rudolfkoenig

ZitatDer Fix behebt leider das Problem nicht.
Das ist hoechstens eingeschraenkt richtig. Mit "normalen" zoom-out oder fixedrange der Sorte "2012-01-01 2021-12-31" ist das Problem behoben, "2011-09-01 2021-08-31" ist fuer mich ein Sonderfall. Ich werde das Problem untersuchen, ist aber nicht oben auf der TODO-Liste.

ZitatEin entsprechender Patch dafür findet sich findet im letzten Beitrag vom Thread "Fehler in Beschriftung"
Patches der Sorte "Behebt alle Problem auf einmal" sind zu umfangreich, damit ich die Nebeneffekte ueberblicke. Wenn das Modul spaeter gefixt oder erweitert wird, wird das zu (m)einem Problem.

gichtl

#6
Das Problem besteht auch mit "normalen" zoom-out mit endPlotToday, also einem durchaus nicht unüblichen Anwendungsfall. Die Beschriftung der X-Achse geht dann fälschlich nur vom 1.1.2011 bis 31.12.2020, und die Daten von Jan/Feb 2021 erscheinen im November/Dezember 2020.

Der zur Verfügung gestellte Patch war lediglich eine freundliche Zurverfügungstellung der Änderungen um diese ganz oder auch nur in Teilen per Cherry-Picking zu übernehmen, anstatt das Rad neu zu erfinden. Bei dem Patch hatte ich die Änderung bezüglich den falschen Wochengrenzen nicht (mehr) herausgenommen, da ich diese bereits einzeln ein paar Tage früher in dem zugehörigen Thread gepostet hatte. Falls dadurch die Änderungen zu umfangreich geworden sind, Sorry! Das ist das auch kein Problemn: Ich habe diesen (Teil-)Patch soeben aus dem Patch wieder entfernt und isoliert hier nochmal angefügt.

Für mich persönlich ist eine Untersuchung auch überhaupt nicht notwendig, daher werde ich mich auch nicht anmaßen das bei irgendjemand auf die TODO Liste zu setzen. Aber vielleicht ist der Patch für den ein- oder anderen Mitleser interessant, der auf das gleiche Problem stößt.


diff U3 old/98_SVG.pm new/98_SVG.pm
--- old/98_SVG.pm
+++ new /98_SVG.pm
@@ -1651,7 +1651,7 @@
     }
     $tstep = $step;
     $first_tag="";   $tag=". 6";
-    $aligntext = 2; $aligntics = 2;
+    $aligntext = 3; $aligntics = 3;
   }

   my $barwidth = $tstep;
@@ -1674,12 +1674,14 @@
     }

   } else { # times
-    $initoffset = int(($tstep/2)/86400)*86400 if($aligntics == 1);
-    for(my $i = $fromsec+$initoffset; $i < $tosec; $i += $tstep) {
+    for(my $i = $fromsec; $i < $tosec; $i += $tstep) {
       $i = SVG_time_align($i,$aligntics);
       $off1 = int($x+($i-$fromsec)*$tmul);
-      SVG_pO "<polyline class='SVGplot' points='$off1,$y $off1,$off2'/>";
-      SVG_pO "<polyline class='SVGplot' points='$off1,$off3 $off1,$off4'/>";
+      if ($off1 > $x+8 && $off1 < $x+$w-8)
+      {
+        SVG_pO "<polyline class='SVGplot' points='$off1,$y $off1,$off2'/>";
+        SVG_pO "<polyline class='SVGplot' points='$off1,$off3 $off1,$off4'/>";
+      }
     }

   }
@@ -1731,14 +1733,17 @@
     }

   } else { # times
-    $initoffset = 86400 if($aligntext == 1);
-    for(my $i = $fromsec+$initoffset; $i < $tosec; $i += $step) {
+    for(my $i = $fromsec; $i < $tosec; $i += $step) {
       $i = SVG_time_align($i,$aligntext);
       $off1 = int($x+($i-$fromsec)*$tmul);
       $t = SVG_fmtTime($tag, $i);
-      SVG_pO "<text x=\"$off1\" y=\"$off2\" class=\"ylabel\" " .
-                "text-anchor=\"middle\">$t</text>";
-      SVG_pO "  <polyline points=\"$off1,$y $off1,$off4\" class=\"hgrid\"/>";
+      if ($off1 > $x+8 && $off1 < $x+$w-8)
+      {
+     
+        SVG_pO "<text x=\"$off1\" y=\"$off2\" class=\"ylabel\" " .
+                  "text-anchor=\"middle\">$t</text>";
+        SVG_pO "  <polyline points=\"$off1,$y $off1,$off4\" class=\"hgrid\"/>";
+      }
     }
   }

@@ -2389,6 +2394,13 @@
       $v += 86400;
     }
   }
+  if($align == 3) {             # Look for the beginning of the year
+    for(;;) {
+      my @a = localtime($v);
+      return $v if($a[7] == 0);
+      $v += 86400;
+    }
+  }
}

sub