logProxy modul zum manipulieren und ergänzen von SVG plots

Begonnen von justme1968, 26 August 2014, 22:47:55

Vorheriges Thema - Nächstes Thema

Frank_Huber

mindestens bei einem von beiden müsste es einen Hinweis mit Button "copyGPLOTfile" geben.

automatisierer

das ist kein Hinweisbutton, das ist ein set Befehl und der ist bei jedem SVG Device vorhanden

Depechem

#317
Hallo,
ich versuche nun seit 3h meine Filelogs auf logProxy umzustellen.
Warum: ich möchte meine SVG-Daten um 24h zurück verschieben.

Ich schaffe es aber leider nicht umzustellen.

was habe ich gemacht:
define lp logProxy
mein Logfile:
#FileLog Stunde, Tag, Woche, Monat, Jahr
define CN.Gasverbrauch.File FileLog ./log/CN.Gasverbrauch-%Y.log CN.Gasverbrauch:app\w*(Utilization|PerHour|PerDay|PerWeek|PerMonth|PerYear)(?!Temp).*
attr CN.Gasverbrauch.File room Gaszähler


aus diesem SVG:
#SVG Auswertung Jahr
define SVG_CN.Gasverbrauch.FileYear_1 SVG CN.Gasverbrauch.File:SVG_CN.Gasverbrauch.FileYear_1:CURRENT
attr SVG_CN.Gasverbrauch.FileYear_1 fixedrange year
attr SVG_CN.Gasverbrauch.FileYear_1 room Gaszähler


habe ich das gemacht:
#SVG Auswertung Jahr
define SVG_CN.Gasverbrauch.FileYear_1 SVG lp:SVG_CN.Gasverbrauch.FileYear_1:CURRENT
attr SVG_CN.Gasverbrauch.FileYear_1 fixedrange year
attr SVG_CN.Gasverbrauch.FileYear_1 room Gaszähler


mein gplot sieht noch so aus
# Created by FHEM/98_SVG.pm, 2018-02-16 22:59:44
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 'Jahres-Gasverbrauch in m³'
set ytics
set y2tics
set grid y2tics
set ylabel ""
set y2label "m³"
set xrange [2014:2019]

#CN.Gasverbrauch.File 4:CN.Gasverbrauch.appCountsPerYear\x3a::

plot "<IN>" using 1:2 axes x1y1 title 'Jahreverbrauch' ls l0fill lw 2 with bars



wo habe ich da noch die Fehler, wie müsste ich (falls falsch) meinen Filelog, SVG ändern.
Ich kann den SVG auch ganz löschen und nochmal neu anlegen.
Nur weis ich nicht woran meine Fehler liegen.

Danke euch
Gruß Thomas
RaspberryPi2 / FHEM / 3 Wand-Tablets mit Tablet UI / HM USB / verschiedene HM-Aktoren / JeeLink USB für WS1600 und mehrere LaCrosse Sensoren / HEOS ...

justme1968

im gplot file muss aus #CN.Gasverbrauch.File 4:CN.Gasverbrauch.appCountsPerYear\x3a:: noch #logProxy FileLog:CN.Gasverbrauch.File:4:CN.Gasverbrauch.appCountsPerYear\x3a::werden.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

Depechem

#319
Zitat von: justme1968 am 16 Februar 2018, 23:24:21
im gplot file muss aus #CN.Gasverbrauch.File 4:CN.Gasverbrauch.appCountsPerYear\x3a:: noch #logProxy FileLog:CN.Gasverbrauch.File:4:CN.Gasverbrauch.appCountsPerYear\x3a::werden.


Vielen Dank, nun bin ich schon weiter.

Leider wird mir der SVG noch nicht angezeigt.
Es wird aus dem Log nur ein Eintrag ins SVG übernommen.
Inhalt Logfile:
2016-01-01_00:00:19 CN.Gasverbrauch appCountsPerYear: 3000
2017-01-01_00:00:19 CN.Gasverbrauch appCountsPerYear: 2126.5
2018-01-01_00:00:19 CN.Gasverbrauch appCountsPerYear: 2074.5


wobei 2016 und 2017 händisch ins Log geschrieben wurde. FHEM wurde nachher neu gestartet.

Im SVG wird aber nur der Log vom 2018-01-01 ausgegeben.
Bei einem klick auf "Show preprocessed input" im SVG kommt folgendes

get lp CURRENT INT 2018-01-01_00:00:00 2019-01-01_00:00:01 FileLog:CN.Gasverbrauch.File.Jahr:4:CN.Gasverbrauch.appCountsPerYear\x3a::

2018-01-01_00:00:19 2074.5
#4:CN.Gasverbrauch.appCountsPerYear\x3a::


meine .gplot hat folgenden Inhalt:
# Created by FHEM/98_SVG.pm, 2018-02-17 12:09:51
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 'Jahres-Gasverbrauch in m³'
set ytics
set y2tics
set grid y2tics
set ylabel ""
set y2label "m³"
set xrange [2015:2019]

#lp FileLog:CN.Gasverbrauch.File.Jahr:4:CN.Gasverbrauch.appCountsPerYear\x3a::

plot "<IN>" using 1:2 axes x1y1 title 'Jahreverbrauch' ls l0fill lw 2 with bars



vielleicht liegt es auch am Attribute:
fixedrange year
Muss ich da evtl etwas anderes angeben?

wo könnte das noch der Fehler liegen?
Danke euch
Gruß Thomas

RaspberryPi2 / FHEM / 3 Wand-Tablets mit Tablet UI / HM USB / verschiedene HM-Aktoren / JeeLink USB für WS1600 und mehrere LaCrosse Sensoren / HEOS ...

justme1968

du hast doch nur einen wert pro jahr. was genau möchtest du denn tun?
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

Depechem

Ich glaube ich habe den Fehler gefunden:

Man muss scheinbar beim Attribut "fixedrange" Zahlen eintragen
fixedrange 2016-01-01 2019-01-01

Richtig? oder geht es für dies Ausgabe von mehren Jahren noch anders?
RaspberryPi2 / FHEM / 3 Wand-Tablets mit Tablet UI / HM USB / verschiedene HM-Aktoren / JeeLink USB für WS1600 und mehrere LaCrosse Sensoren / HEOS ...

Depechem

Zitat von: justme1968 am 17 Februar 2018, 12:29:21
du hast doch nur einen wert pro jahr. was genau möchtest du denn tun?

Hallo justme1968,

ich möchte meinen Gasverbrauch der gesamten Jahre als Visualisierung als Balkendiagramm(Bars) darstellen.
Also ein SVG mit allen alten und aktuellen Jahreswerten
RaspberryPi2 / FHEM / 3 Wand-Tablets mit Tablet UI / HM USB / verschiedene HM-Aktoren / JeeLink USB für WS1600 und mehrere LaCrosse Sensoren / HEOS ...

justme1968

du musst den plot erst mal so konfigurieren dad mehr als ein jahr angezeigt wird und dann in der logProxy zeile die werte per offset auf das richtige jahr schieben
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

Depechem

Zitat von: justme1968 am 17 Februar 2018, 13:30:55
du musst den plot erst mal so konfigurieren dad mehr als ein jahr angezeigt wird und dann in der logProxy zeile die werte per offset auf das richtige jahr schieben

ja Danke das habe ich mit attr "fixedrange" "2014-01-01 2019-01-01" geschafft  :)

bekommt man aber die Balken irgendwie breiter oder die Jahre näher zusammen geschoben?
Auf meinem Bild im Anhang sind es schmale Balken und dazwischen viel Luft.
RaspberryPi2 / FHEM / 3 Wand-Tablets mit Tablet UI / HM USB / verschiedene HM-Aktoren / JeeLink USB für WS1600 und mehrere LaCrosse Sensoren / HEOS ...

justme1968

mach den plot kleiner, nimm mehr jahre, oder schau dir ibars statt bars an. das ist alles nicht logproxy spezifisch.

oder du schreibst dir eine kleine routine die die datenpunkte so aufbereitet wie du möchtest und stellst diese dann mit logproxy dar.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

H33K3R

Schönen Guten Abend,

ich bin mir nicht sicher ob ich hier richtig bin auch bin ich mir nicht sicher ob logProxy für mein Problem schon eine Lösung bietet.

Ich würde gerne ein SVG Plot bauen der ein Dropdown Menü beinhaltet wo ich dann ein userReadings des SVG Plot mit ändern kann.
Also je nach ausgewählten Eintrag im Dropdown ein anderes "setreading <SVGPLOTNAME> <userReadings> <value>" ausführt.

Beispiel:
Ich habe eine Klima Filelog wo ich maximal alle 5 Minuten die aktuellen Werte meiner "Klima" Sensoren speichere.
Wenn ich nun für einen bestimmten Raum einen SVG Plot möchte Tippe ich oben in die "command" Zeile im Web
"setreading SVG_KlimaLogfile room Buero" oder "setreading SVG_KlimaLogfile room Kueche" oder
"setreading SVG_KlimaLogfile room Bad" wobei mein userReadings "room" heißt und mein SVG Plot "SVG_KlimaLogfile"
somit kann ich den SVG Plot für jeden Raum umstellen und er zeigt mir dann die Daten des Raumes an.

ich hätte es nur gerne etwas komfortabler über ein Dropdown oder ähnliches.

Ich hab mal ein mockup angehangen.

Vielen Dank
H33K3R

falls sowas schon irgendwie einfach umzusetzen ist würde ich mich über einen Tipp sehr freuen.


justme1968

nein. logProxy hilf dir dabei nicht.

aber schau dir mal readingsGroup und dort das beispiel für dynamische inhalte im wiki an.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

Depechem

#328
Hi, ich möchte gern mein SVG mit logProxy noch optimieren.

Ich habe zu meinen historischen Log-Daten, die per "bars" angezeigt werden noch ein Balkendiagramm mit den aktuellen Werten aus dem Reading hinzugefügt.
Laut dieser Anleitung im Wiki:
Darstellung des aktuell aufgelaufenen Wertes, zusätzlich zu historischen Monats- oder Wochendaten aus einem Log

Die zugrunde liegende Idee hierbei ist, zusätzlich zu den geloggten historischen Werten den bis jetzt für den aktuellen Zeitraum aufgelaufenen Wert, der noch nicht geloggt ist, direkt aus dem entsprechenden Reading zu holen und ebenfalls zu plotten.

Hierzu wird in einer sub ähnlich der folgenden geprüft, ob der Timestamp des entsprechen Readings innerhalb des gerade dargestellten Bereiches liegt und dieses dann zum Plotten zurückgegeben:

sub
current2Plot($$$$)
{
  my($from,$to,$device,$reading) = @_;
  my $fromsec = SVG_time_to_sec($from);
  my $tosec   = SVG_time_to_sec($to);

  my $ret = "";

  my $rt = ReadingsTimestamp( $device, $reading, undef );
  return $ret if( !$rt );

  my $sec = time_str2num($rt);
  return $ret if ( $sec < $fromsec || $sec > $tosec );

  my $val = ReadingsVal( $device, $reading, undef );

  my @t = localtime($sec);
  my $timestamp = sprintf("%04d-%02d-%02d_%02d:%02d:%02d", $t[5]+1900, $t[4]+1, $t[3], $t[2], $t[1], $t[0]);

  $ret .= "$timestamp $val\n";
  $ret .= "#plotCurrent: $device:$reading\n";

  return $ret;
}

Je nach Zoomfaktor und Intervall der Darstellung muss das Ganze eventuell angepasst werden, indem nur mit Tages-Genauigkeit verglichen und angezeigt wird.

Zusätzlich zur #logProxy Zeile, die die historischen Daten plottet, wird jetzt noch eine Zeile für den aktuellen Wert und die zugehörige Plot-Anweisung ins gplot File eingebaut:

#logProxy Func:current2Plot($from,$to,"meinDevice","meinReading")
plot "<IN>" using 1:2 axes x1y2 title 'Aktuell' ls l0fill lw 0.5 with bars


Nun wird wie auf dem Bild zu erkennen das Balkendiagramm(blau) nicht direkt auf dem gesamten Tag angezeigt sondern der Endpunkt des Diagramms liegt bei der aktuellen Zeit.
Wie könnte ich das Diagramm auf den genauen Tag verschieben(weiter nach rechts)?
Mit offset scheint es bei "Func" nicht zu funktionieren und das würde wohl auch nichts bringen, da das Diagramm ja nach Uhrzeit immer weiter schiebt.
Evtl. könnte man durch das verändern der "sub Routine" aus den gesamten Zeiten
2018-02-27_11:41:57 8.31
die Uhrzeit rausfiltern das nur noch das Datum genutzt wird!? Leider weis ich nicht wie.

Habt ihr eine Idee für mich?

LG Thomas
RaspberryPi2 / FHEM / 3 Wand-Tablets mit Tablet UI / HM USB / verschiedene HM-Aktoren / JeeLink USB für WS1600 und mehrere LaCrosse Sensoren / HEOS ...

Depechem

so ich habe es hinbekommen:

aus:my $timestamp = sprintf("%04d-%02d-%02d_%02d:%02d:%02d", $t[5]+1900, $t[4]+1, $t[3], $t[2], $t[1], $t[0]);

habe ich:
  my $timestamp = sprintf("%04d-%02d-%02d_%02d:%02d:%02d", $t[5]+1900, $t[4]+1, $t[3], "24", $t[1], $t[0]);
gemacht.

Kann man das so lassen oder könnte es da Probleme geben?
Angezeigt wird es auf alle Fälle richtig.

LG Thomas
RaspberryPi2 / FHEM / 3 Wand-Tablets mit Tablet UI / HM USB / verschiedene HM-Aktoren / JeeLink USB für WS1600 und mehrere LaCrosse Sensoren / HEOS ...