[gelöst] Gplot: y-Achse eines Plots immer bei 0 beginnen lassen

Begonnen von ronny332, 21 April 2016, 13:01:26

Vorheriges Thema - Nächstes Thema

ronny332

Hallo zusammen,

leider bekomme ich überhaupt keinen Ansatz an mein Problem, jede Richtung schein nach kurzer Zeit unlogisch oder falsch zu sein.

Ich möchte in einem Plot eine Achse immer bei 0 beginnen lassen. Aktuell wird immer eine fortlaufende Zahl ausgeworfen, die teilweise auch das Layout zum Platzen bringt.

Auf dem angefügten Screenshot meiner Solaranlage beginnt daher alles bei 17515 kWh, schöner wäre hier den Tagesertrag abzulesen.

Die Daten kommen per dblog in den Graphen.

Meiner erster Ansatz war die .gplot Datei anzupassen, aber das ergibt keinen Sinn, da hier ja nur die jeweilige Zeile verfügar ist (mit $val statt @fld).
Runde Zwei klammerte sich an die Art wie das Min und Max für den Title erzeugt wird, aber hier komme ich auch nicht weiter.
Runde Drei ging Richtung UserReadings, die aber dann nur über die Datenbank laufen würden, was mehr Platz ergibt und am Ende auch nur für einen Tag funktionieren würde.

Gibt es eventuell wirklich keinen einfachen/richtigen Weg, oder bin ich wieder mal etwas geblendet (eventuell von der heutigen Sonne ;-)?
... Homematic Flüchtling und Freund der neu gewonnen Fhem-Freiheiten.

franky08

Sieh dir mal logProxy an, damit solltest du das realisieren können.

ZitatlogProxy

Allows the manipulation of data to be plotted in an SVG device:
addition of horizontal lines at fixed values
addition of horizontal lines at dynamic values eg: min, max or average values of another plot
addition of vertical lines at fixed or dynamic times between two fixed or dynamic y values
addition of calculated data like week profiles of HeatingControll devices or heating thermostats
merge plot data from different sources. eg. different FileLog devices
horizontaly shifting a (merged) plot to align average or statistic data to the correct day,week and month

VG
Frank

P.S. und ändere mal den Thread Titel "Erzeuger" ist bischen seltsam  ;)
Debian Bookworm auf HUNSN / Debian Bullseye auf 2.ter HUNSN F2F an 2x RaspiB
mit FHEM aktuell
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu, raspmatic_rpi3, HMIP-HCU1

ronny332

Hallo,

also gibt es einen Ansatz 4, ich danke für den Hinweis!

Den Titel habe ich geändert, der war echt murks ;-).
... Homematic Flüchtling und Freund der neu gewonnen Fhem-Freiheiten.

justme1968

das geht mit logProxy und postFn. im wiki gibt es ein beispiel das alle werte um 10 nach oben verschiebt. du müsstest statt dessen alles um den wert des ersten punkten nach unten schieben.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

ronny332

Hallo,

so in der Art habe ich das jetzt auch realisiert:

sub startPlotAtZero($$) {
  my ($devspec, $data) = @_;
  my $min = LONG_MAX;
 
  foreach my $point (@{$data}) {
    if ($min > $point->[1]) {
  $min = $point->[1];
}
  }
 
  foreach my $point (@{$data}) {
    $point->[1] -= $min;
  }

  return $data;
}


Sicherlich nicht feinster Perl Code, aber es bringt für jetzt genau das gewünschte Ergebnis.

Vielen Dank nochmals!
... Homematic Flüchtling und Freund der neu gewonnen Fhem-Freiheiten.

Vize

Zitat von: ronny332 am 21 April 2016, 13:01:26
Ich möchte in einem Plot eine Achse immer bei 0 beginnen lassen. Aktuell wird immer eine fortlaufende Zahl ausgeworfen, die teilweise auch das Layout zum Platzen bringt.

Moin,

keine Ahnung, ob ich da zu einfach oder falsch denke, aber wäre es nicht auch einfach möglich, bei den entsprechenden Achsen im Feld "Range as" [0:gewünschter Maxwert] einzutragen?  ???
Dann beginnt die Achse doch auch bei null, oder?

Gruß
Andreas

FunkOdyssey

Ja, das geht. Aber wenn man den maximalen Wert (noch) nicht kennt oder dieser sich in kurzen Zeitperioden ändert, so sieht das später unglücklich aus.
Was bringt mit eine Ordinate, die bis 100 geht (weil festgelegt), die aber die meiste Zeit nur bis 20 gehen müsste.

justme1968

man kann die den range auch dynamisch nach dem min und max wert setzen. aber dann beginnt die y achse nicht bei 0 sondern eben bei min.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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