Neuigkeiten:

Am Sonntag den 8.12.2024 kann es ab ca. 8:00 Uhr zu kurzzeitigen Einschränkungen / Ausfällen bei den Diensten des FHEM Vereines kommen.
Die Server müssen mal gewartet und dabei neu gestartet werden ;)

Hauptmenü

SVG: Darstellung gruppierter Balken

Begonnen von Hadl, 09 November 2024, 13:48:54

Vorheriges Thema - Nächstes Thema

Hadl

Hallo zusammen,
ich wollte eine schöne Darstellung der Statistikdaten (Stunden, Tage, Monate) meiner PV Anlage haben.
Die Daten werden vom Statistikmodul geschrieben und werden somit immer zum Stundenwechsel, Tageswechsel usw. geschrieben.

Mit den vorhandenen Möglichkeiten als "Bars" waren die Balken immer so breit wie eine Stunde/Tag, aber alle gleichzeitig angezeigten Werte haben sich überlagert. Das war schnell unübersichtlich.

Dieser Vorschlag mit den "Needles" und die Art und Weiße wie es mein PV Hersteller darstellt hat mich dann auf die Idee gebracht, dies als Gruppierte Balken darstellen zu wollen.
https://forum.fhem.de/index.php?topic=137386.0

Das ganze sollte ohne den komplexen Umweg über LogProxy möglich sein.

Also hab ich mich dran gemacht und im SVG Modul den Typ "gbars" für grouped bars implementiert.
Zusätzlich hab ich noch als Unterschied zu den Bars, diese immer bei 0 anfangen lassen, so das ich auch negative Werte mit negativen Bars darstellen kann.

gplot:
#logdb Fronius_Symo1:statEnergy_PVDayLast:::
#logdb Fronius_Symo1:statEnergy_LoadDayLast:::
#logdb Fronius_Symo1:statMeter_0_EnergyReal_WAC_Sum_ProducedDayLast:::$val=$val/1000
#logdb Fronius_Symo1:statMeter_0_EnergyReal_WAC_Sum_ConsumedDayLast:::$val=$val/1000
#logdb Fronius_Symo1:statEnergy_AkkuDayLast:::

plot "<IN>" using 1:2 axes x1y1 title 'PV Tag' ls l0 lw 1 with gbars,\
     "<IN>" using 1:2 axes x1y1 title 'Verbrauch Tag' ls l1 lw 1 with gbars,\
     "<IN>" using 1:2 axes x1y1 title 'Eingespeist Tag' ls l3 lw 1 with gbars,\
     "<IN>" using 1:2 axes x1y1 title 'Bezug Tag' ls l4 lw 1 with gbars,\
     "<IN>" using 1:2 axes x1y1 title 'Akku Tag' ls l5 lw 1 with gbars

$o .= SVG_sel("type_${idx}",
                "lines,points,steps,fsteps,histeps,bars,ibars,needles,gbars,".
...
  my $barGroup=0;
...
    } elsif( $lType eq "gbars" ) {
      my $bw = 1;
      my $xOffsetGroup = $barGroup;
      $barGroup+=3;
      foreach my $i (0..int(@{$dxp})-1) {
        if ($dyp->[$i] > 0) {
          my ($x1, $y1) = ( $x + $dxp->[$i] - $bw - $xOffsetGroup,
                             $y +$h-($dyp->[$i]-$min)*$hmul);
          my $curBw = $bw;
          if($x1 < $x) {
              $curBw -= $x - $x1;
              $x1 = $x;
          }
          my ($x2, $y2) = ($curBw, ($dyp->[$i])*$hmul);   
          SVG_pO "<rect $attributes $lStyle x=\"$x1\" y=\"$y1\" ".
                      "width=\"$x2\" height=\"$y2\"/>";
        } else {
          my ($x1, $y1) = ( $x + $dxp->[$i] - $bw - $xOffsetGroup,
                             $y +$h + $min*$hmul );
          my $curBw = $bw;
          if($x1 < $x) {
              $curBw -= $x - $x1;
              $x1 = $x;
          }
          my ($x2, $y2) = ($curBw, -($dyp->[$i])*$hmul);   
          SVG_pO "<rect $attributes $lStyle x=\"$x1\" y=\"$y1\" ".
                      "width=\"$x2\" height=\"$y2\"/>";
        }
      }

Kommentare und Vorschläge sind herzlich willkommen

Ich hoffe das hilft jemanden von euch weiter.

Hadl
Du darfst diesen Dateianhang nicht ansehen.
Du darfst diesen Dateianhang nicht ansehen. 


Hadl

Hallo Rudolf,
ja richtig das ist der Thread mit den "needles" der mich auf die Idee gebracht hat, jedoch mit Statistikdaten die immer zur gleichen Zeit erstellt werden.
Das ganze sollte jedoch ohne den Logproxy funktionieren, da das zu komplex in der Konfiguration ist.