SVG Plot um eine Woche verschieben

Begonnen von Loctite, 03 April 2020, 20:14:43

Vorheriges Thema - Nächstes Thema

Loctite

Hallo.
Ich habe ein SVG Plot mit zwei Werten aus zwei Logfiles (oder ein Log File je nach dem wie das ganze funktioniert)
Es ist ein Gaszähler der mit HourCounter erstellt wurde.

Im Log stehen diese Werte:

CN.Gaszaehler-2020.log
2020-04-03_18:05:47 CN.Gaszaehler countsPerDay: 83
2020-04-03_18:05:47 CN.Gaszaehler countsOverall: 188
2020-04-03_18:05:47 CN.Gaszaehler aktuellerTag_m3: 0.83
2020-04-03_18:05:47 CN.Gaszaehler verbrMonat_m3: 30.2
2020-04-03_18:05:47 CN.Gaszaehler zaehlerstand: 3111.32
2020-04-03_18:05:47 CN.Gaszaehler verbrWoche_m3: 5.7
2020-04-03_18:12:51 CN.Gaszaehler countsPerDay: 83
2020-04-03_18:12:51 CN.Gaszaehler countsOverall: 188
2020-04-03_18:44:20 CN.Gaszaehler countsPerDay: 86
2020-04-03_18:44:20 CN.Gaszaehler countsOverall: 191
2020-04-03_18:44:20 CN.Gaszaehler aktuellerTag_m3: 0.86
2020-04-03_18:44:20 CN.Gaszaehler verbrMonat_m3: 30.2
2020-04-03_18:44:20 CN.Gaszaehler zaehlerstand: 3111.35
2020-04-03_18:44:20 CN.Gaszaehler verbrWoche_m3: 5.7


Ich möchte nun den Monats- und Wochenverbrauch im Chart anzeigen lassen.
Die hier gezeigten Werte  "verbrMonat" und "verbrWoche" sind aber immer die vergangenen.
Also müsste ich die Monatswerte um einen Monat verschieben und die Wochenwerte um eine Woche.

Ich habe gelesen, das so was mit dem Modul logProxy funktionieren soll.
Aus der Anleitung werde ich aber nicht schlau.

Das logProxy habe ich mit "define lp logProxy" wie im Wiki gezeigt, angelegt. Aber das kann doch nicht alles sein ?
Danach ein neues SVG mit "define SVG_Gaszaehler SVG lp:CN.Gaszaehler.File:CURRENT"

Das ist aber vom Aussehen genau das gleiche wie mein Standard SVG das ich schon vorher hatte.
Wohin kommen denn die optionen wie offset=< >, mit denen ich nun Verschieben kann ?
Und muss für Monat und Woche nun ein separates logProxy angelegt werden ?

Mir ist aufgefallen, das ich nun im SVG bei Input nicht nur die Logfiles auswählen kann, sondern auch dieses "lp" für logProxy.
Wähle ich das aus, weiß ich aber nicht weiter...bzw. ich weiß ja nicht mal ob das der richtige Weg ist.

Kann mir jemand dazu weiterhelfen ?

EDIT:
Ich vergaß zu erwähnen, das ich den manipulierten Chart im TabletUI anzeigen möchte, soweit das überhaupt möglich ist.

EDIT2:
Ja cool ! Es gibt die Funktion plotAsPng(<plotName>) die das kann. Was ich mit dem Befehl machen muss weiß ich noch nicht. Das wäre genau das richtige für mein etwas langsames Tablet.
Da die Werte eh alte Werte sind, würde einmal morgens eine Aktualisierung reichen.
Aber eins nach dem anderen...

amenomade

Wenn das Modul aber diese Werte erst am Ende der Periode kalkuliert, wie soll Fhem wissen, was Du plotten willst?
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Loctite

Wozu dient denn das logProxy ?
Ich habe gedacht damit könnte ich einen Plot verschieben.

Endgültige Wochen oder Monatswerte hat man ja aber nun mal erst wenn die Woche oder der Monat vorbei ist.
Auch wollte ich keine Kurve sondern einfach einen Balken mit einem Wert, eben der Monats oder Wochenverbrauch.
Deshalb lasse ich die alten Werte ich das Log schreiben.

amenomade

Also, mit logProxy kann man vorhandene Logeinträge verändern, aber keine noch nicht kalkulierte Werte erfinden oder raten.

Heute hast Du in deiner Log den monatlichen Wert von März, und den willst Du als Balke plotten? Dann sind vielleicht folgende Attribute von SVG für dich?
Zitatfixedoffset <nTage>
Verschiebt den Plot-Offset um einen festen Wert (in Tagen).

fixedrange [offset]
Erste Alternative:
Enthält zwei Zeit-Spezifikationen in der Schreibweise YYYY-MM-DD, getrennt durch ein Leerzeichen. scrollen der Zeitachse ist nicht möglich, es wird z.B. verwendet, um sich die Daten verschiedener Jahre auf eine Seite anzusehen.

Zweite Alternative:
Wenn der Wert entweder hour, <N>hours, day, <N>days, week, month, year oder <N>years lautet, kann der Zoom-Level für dieses SVG unabhängig vom User-spezifischen Zoom eingestellt werden. Diese Einstellung ist nützlich für mehrere Plots auf einer Seite: Eine Grafik ist mit dem Standard-Zoom am aussagekräftigsten, die anderen mit einem Zoom über eine Woche. Der optionale ganzzahlige Parameter [offset] setzt ein anderes Zeitintervall (z.B. letztes Jahr: fixedrange year -1, vorgestern: fixedrange day -2).
attr SVGDevice fixedrange month -1 ?
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Loctite

fixedrange month -1
bringt mir leider nichts. Der Plot wird um einen Monat nach hinten verschoben, also zeigt es mir jetzt im April den März an.
Mit der Lupe kann ich nun aber nichts mehr machen.
Auch stimmen die Werte ja nicht, denn im März werden mir ja die Werte von Februar angezeigt.

Setze ich
fixedoffset -7

Erhalte ich eine Fehlermeldung, das keine Daten vorliegen, oder aber ich bin gerade in der Ansicht so weit raus das ich den ganzen Monat März sehe.
Nach Eingabe des attibutes fixedoffset -7 bin ich auf einmal bei September 2019 !
Obwohl dort steht:
Zitatfixedoffset <nDays>
Set an fixed offset (in days) for the plot.

Also es muss doch eine Möglichkeit geben, mir Werte aus vorherigen Monaten anzeigen zu lassen.
Warum lasse ich denn sonst überhaupt diese LOGs und Plots laufen wenn ich keinen Nutzen habe ?

Ich frage mal anders:
Wie müsste denn ein LOG aufgebaut sein, um diese ja eigentlich "normale" Sache zu erreichen ?
Ich habe ja nun mal erst am 30.04.2020 um 23:59:59 den Gesamtverbrauch vom April.
Und um einen Plot zeichnen zu lassen, reicht ja nicht nur ein Wert. Im Wiki steht (oder wo war es?) das zu wenige Zahlen/Werte dazu führen das kein Plot erstellt werden kann.
Deshalb lasse ich alle 1,5h den Wert ins log schreiben und Werte habe ich in dem Moment nur vom vorherigen Monat.

Ich habe auch noch ein Log das auch wieder alle 1,5h meinen Zählerstand, meinen aktuellen Verbrauch pro Tag usw. enthält.

Gaszaehler-2020.log
2020-04-13_00:00:00 CN.Gaszaehler countsPerDay: 12
2020-04-13_00:00:00 CN.Gaszaehler countsOverall: 512
2020-04-13_00:00:00 CN.Gaszaehler aktuellerTag_m3: 0.12
2020-04-13_00:00:00 CN.Gaszaehler verbrMonat_m3: 30.2
2020-04-13_00:00:00 CN.Gaszaehler zaehlerstand: 3114.56
2020-04-13_00:00:00 CN.Gaszaehler verbrWoche_m3: 1.94
2020-04-13_02:00:00 CN.Gaszaehler countsPerDay: 0
2020-04-13_02:00:00 CN.Gaszaehler countsOverall: 512
2020-04-13_02:00:00 CN.Gaszaehler aktuellerTag_m3: 0
2020-04-13_02:00:00 CN.Gaszaehler verbrMonat_m3: 30.2
2020-04-13_02:00:00 CN.Gaszaehler zaehlerstand: 3114.56
2020-04-13_02:00:00 CN.Gaszaehler verbrWoche_m3: 1.94
2020-04-13_04:00:00 CN.Gaszaehler countsPerDay: 0
2020-04-13_04:00:00 CN.Gaszaehler countsOverall: 512
2020-04-13_04:00:00 CN.Gaszaehler aktuellerTag_m3: 0
2020-04-13_04:00:00 CN.Gaszaehler verbrMonat_m3: 30.2
2020-04-13_04:00:00 CN.Gaszaehler zaehlerstand: 3114.56
2020-04-13_04:00:00 CN.Gaszaehler verbrWoche_m3: 1.94
2020-04-13_05:30:38 CN.Gaszaehler countsPerDay: 0
2020-04-13_05:30:38 CN.Gaszaehler countsOverall: 512
2020-04-13_05:30:38 CN.Gaszaehler aktuellerTag_m3: 0
2020-04-13_05:30:38 CN.Gaszaehler verbrMonat_m3: 30.2
2020-04-13_05:30:38 CN.Gaszaehler zaehlerstand: 3114.56
2020-04-13_05:30:38 CN.Gaszaehler verbrWoche_m3: 1.94
2020-04-13_08:00:00 CN.Gaszaehler countsPerDay: 1
2020-04-13_08:00:00 CN.Gaszaehler countsOverall: 513
2020-04-13_08:00:00 CN.Gaszaehler aktuellerTag_m3: 0.01
2020-04-13_08:00:00 CN.Gaszaehler verbrMonat_m3: 30.2
2020-04-13_08:00:00 CN.Gaszaehler zaehlerstand: 3114.57
2020-04-13_08:00:00 CN.Gaszaehler verbrWoche_m3: 1.94
2020-04-13_10:00:00 CN.Gaszaehler countsPerDay: 1
2020-04-13_10:00:00 CN.Gaszaehler countsOverall: 513
2020-04-13_10:00:00 CN.Gaszaehler aktuellerTag_m3: 0.01
2020-04-13_10:00:00 CN.Gaszaehler verbrMonat_m3: 30.2
2020-04-13_10:00:00 CN.Gaszaehler zaehlerstand: 3114.57
2020-04-13_10:00:00 CN.Gaszaehler verbrWoche_m3: 1.94
2020-04-13_11:43:26 CN.Gaszaehler countsPerDay: 13
2020-04-13_11:43:26 CN.Gaszaehler countsOverall: 525
2020-04-13_11:43:26 CN.Gaszaehler aktuellerTag_m3: 0.13
2020-04-13_11:43:26 CN.Gaszaehler verbrMonat_m3: 30.2
2020-04-13_11:43:26 CN.Gaszaehler zaehlerstand: 3114.69
2020-04-13_11:43:26 CN.Gaszaehler verbrWoche_m3: 1.94
2020-04-13_14:00:00 CN.Gaszaehler countsPerDay: 16
2020-04-13_14:00:00 CN.Gaszaehler countsOverall: 528
2020-04-13_14:00:00 CN.Gaszaehler aktuellerTag_m3: 0.16
2020-04-13_14:00:00 CN.Gaszaehler verbrMonat_m3: 30.2
2020-04-13_14:00:00 CN.Gaszaehler zaehlerstand: 3114.72
2020-04-13_14:00:00 CN.Gaszaehler verbrWoche_m3: 1.94
2020-04-13_15:30:09 CN.Gaszaehler countsPerDay: 17
2020-04-13_15:30:09 CN.Gaszaehler countsOverall: 529
2020-04-13_15:30:09 CN.Gaszaehler aktuellerTag_m3: 0.17
2020-04-13_15:30:09 CN.Gaszaehler verbrMonat_m3: 30.2
2020-04-13_15:30:09 CN.Gaszaehler zaehlerstand: 3114.73
2020-04-13_15:30:09 CN.Gaszaehler verbrWoche_m3: 1.94
2020-04-13_18:00:00 CN.Gaszaehler countsPerDay: 40
2020-04-13_18:00:00 CN.Gaszaehler countsOverall: 552
2020-04-13_18:00:00 CN.Gaszaehler aktuellerTag_m3: 0.4
2020-04-13_18:00:00 CN.Gaszaehler verbrMonat_m3: 30.2
2020-04-13_18:00:00 CN.Gaszaehler zaehlerstand: 3114.96
2020-04-13_18:00:00 CN.Gaszaehler verbrWoche_m3: 1.94
2020-04-13_19:43:14 CN.Gaszaehler countsPerDay: 45
2020-04-13_19:43:14 CN.Gaszaehler countsOverall: 557
2020-04-13_19:43:14 CN.Gaszaehler aktuellerTag_m3: 0.45
2020-04-13_19:43:14 CN.Gaszaehler verbrMonat_m3: 30.2
2020-04-13_19:43:14 CN.Gaszaehler zaehlerstand: 3115.01
2020-04-13_19:43:14 CN.Gaszaehler verbrWoche_m3: 1.94
2020-04-13_21:19:09 CN.Gaszaehler countsPerDay: 48
2020-04-13_21:19:09 CN.Gaszaehler countsOverall: 560
2020-04-13_21:19:09 CN.Gaszaehler aktuellerTag_m3: 0.48
2020-04-13_21:19:09 CN.Gaszaehler verbrMonat_m3: 30.2
2020-04-13_21:19:09 CN.Gaszaehler zaehlerstand: 3115.04
2020-04-13_21:19:09 CN.Gaszaehler verbrWoche_m3: 1.94
2020-04-13_23:00:00 CN.Gaszaehler countsPerDay: 49
2020-04-13_23:00:00 CN.Gaszaehler countsOverall: 561
2020-04-13_23:00:00 CN.Gaszaehler aktuellerTag_m3: 0.49
2020-04-13_23:00:00 CN.Gaszaehler verbrMonat_m3: 30.2
2020-04-13_23:00:00 CN.Gaszaehler zaehlerstand: 3115.05
2020-04-13_23:00:00 CN.Gaszaehler verbrWoche_m3: 1.94


Gaszaehler-Day-2020.log
2020-04-13_00:00:00 CN.Gaszaehler appCountsPerDay: 12
2020-04-13_05:31:19 CN.Gaszaehler appCountsPerWeekTemp: 13
2020-04-13_05:31:19 CN.Gaszaehler appCountsPerMonthTemp: 592
2020-04-13_05:31:19 CN.Gaszaehler appCountsPerYearTemp: 11715
2020-04-13_11:07:35 CN.Gaszaehler appCountsPerWeekTemp: 14
2020-04-13_11:07:35 CN.Gaszaehler appCountsPerMonthTemp: 593
2020-04-13_11:07:35 CN.Gaszaehler appCountsPerYearTemp: 11716
2020-04-13_12:42:40 CN.Gaszaehler appCountsPerWeekTemp: 28
2020-04-13_12:42:40 CN.Gaszaehler appCountsPerMonthTemp: 607
2020-04-13_12:42:40 CN.Gaszaehler appCountsPerYearTemp: 11730
2020-04-13_15:30:09 CN.Gaszaehler appCountsPerWeekTemp: 29
2020-04-13_15:30:09 CN.Gaszaehler appCountsPerMonthTemp: 608
2020-04-13_15:30:09 CN.Gaszaehler appCountsPerYearTemp: 11731
2020-04-13_18:12:45 CN.Gaszaehler appCountsPerWeekTemp: 53
2020-04-13_18:12:45 CN.Gaszaehler appCountsPerMonthTemp: 632
2020-04-13_18:12:45 CN.Gaszaehler appCountsPerYearTemp: 11755
2020-04-13_19:43:14 CN.Gaszaehler appCountsPerWeekTemp: 57
2020-04-13_19:43:14 CN.Gaszaehler appCountsPerMonthTemp: 636
2020-04-13_19:43:14 CN.Gaszaehler appCountsPerYearTemp: 11759
2020-04-13_21:19:09 CN.Gaszaehler appCountsPerWeekTemp: 60
2020-04-13_21:19:09 CN.Gaszaehler appCountsPerMonthTemp: 639
2020-04-13_21:19:09 CN.Gaszaehler appCountsPerYearTemp: 11762



Der zweite Log enthält Daten direkt aus dem Modul HourCounter.
Im oberen Log habe ich per userReadings die Werte umgerechnet.
Alles mit Temp ist der aktuelle Tag, aktueller Monat, aktuelle Woche.

Beide Logs zeigen einen Tag, also ist das schon eine Menge an Daten. In den Standardeinstellungen laut Wiki vom HourCounter war das noch sehr viel mehr.
Mit "event-min-interval tick.*:0,.*:5400" im HourCounter device Gaszaehler habe ich dann eine Reduzierung erreicht ohne das Werte verloren gingen.

Shadow3561

für dein Vorhaben mit dem Zähler und verschieben der einzelnen Daten um Monate/Jahre ist das Modul logProxy genau das Richtige.

https://wiki.fhem.de/wiki/LogProxy

Da findest du alles was du benötigst.
Mit freundlichen Grüßen

HeikoGr

Ich vergleiche bei mir den Tagesverbrauch Erdgas von gestern mit heute. Ist also Vergleichbar mit deinem Anwendungsfall:

Die Offset Angabe für Logproxy legt den Plot von vor 24 Stunden vor den aktuell angezeigten Plot.
Die Funktion in der myUtils Datei zieht von allen allen angezeigten Datenpunkten der Graphen den minimum-Wert ab. Somit startet jeder Graph bei 0.

in der GPLOT Datei:
#lp DbLog:mariadb,postFn='postFnMinShift':GasZaehler:Zaehler
#lp DbLog:mariadb,offset=1*(60*60*24),postFn='postFnMinShift':GasZaehler:Zaehler


in der 99_myUtils.pm Datei
sub postFnMinShift($$) {
  my($devspec,$array) = @_;
  my $min = 0;

  foreach my $point ( @{$array} ) {
    $min = $point->[1] if !$min || $point->[1] < $min;
  }   
     
  foreach my $point ( @{$array} ) {
    $point->[1] -= $min;
  }   

  return $array;
}

justme1968

schönes beispiel. das wäre was fürs wiki :).
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

Shadow3561

#8
@HeikoGr
Sehr schönes Beispiel.

Ich denke dein Beispiel ist wohl etwas zu kompliziert für einen Anfänger.


Hier mal eine Zeile aus einem Beispiel SVG-Plot mit, hoffentlich richtiger, Erklärung.


#logproxy DbLog:logdb,offset='-1m':CN.Test:Vor-Monatsverbrauch

#logproxy - muss davor stehen mit einem Leerzeichen vom Rest getrennt
DbLog - gehört dort hin wenn du von einer DbLog Instanz Daten auswerten möchtest
logdb - ist der Name deiner definierten Datenbank in FHEM
offset='-1m' - verschiebt die Daten um einen Monat zurück
CN.Test - LogDevice
Vor-Monatsverbrauch - Logreading

Ich denke den Rest solltest du alleine hinbekommen.

Mit freundlichen Grüßen


Loctite

Ach jetzt verstehe ich.
Ich hatte bisher immer einen PLOT mithilfe von FHEM erstellt und auch nur innerhalb von FHEM verändert.

Dann diese Erklärung: aus FileLog_xxx wird xyz ...ich hatte aber kein FileLog dort stehen, das hieß auch CN.Gaszaehler, deshalb wusste ich nicht was wie und überhaupt.
Und das es eine separate .gplot Datei gibt, wusste ich auch nicht.
Ich habe es zwar gelesen, aber irgendwie habe ich nicht an eine separate Datei gedacht.
Ich hatte nämlich schon in der fhem.cfg danach gesucht :-D

Vielen Dank dafür !