Hauptmenü

zusammengesetzter Plot

Begonnen von rabehd, 02 März 2017, 15:17:54

Vorheriges Thema - Nächstes Thema

rabehd

Hallo,

auf anhieb habe ich nichts gefunden. Also ggf. reicht mir ein Hinweis.

Ich habe einen Dummy "Regengestern", der jede Nacht gesetzt wird. Das als Balkendiagramm darzustellen ist kein Problem.
Ich möchte aber auch den heutigen Regen als eigenen Balken darstellen.
Dieser Wert wird im Dummy "Regenheute" regelmäßig fortgeschrieben und geloggt.
Im Diagramm möchte ich jetzt neben den Werten für die vorherigen Tage, den letzten heutigen Wert als Balken anzeigen (und keine vorherigen).

Geht das?
Auch funktionierende Lösungen kann man hinterfragen.

Thorsten Pferdekaemper

Hi,
schau Dir mal logProxy an. Es sieht so aus, als ob man mit postFn so ziemlich alles machen kann.
Gruß,
   Thorsten
FUIP

justme1968

logProxy ist richtig. postFn aber in diesem fall nicht nötig.

ein beispiel für genau deinen anwenundgsfall gibt es hier: https://wiki.fhem.de/wiki/LogProxy#Darstellung_des_aktuell_aufgelaufenen_Wertes.2C_zus.C3.A4tzlich_zu_historischen_Monats-_oder_Wochendaten_aus_einem_Log.

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

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

Thorsten Pferdekaemper

Hi,
muss man dafür tatsächlich an der gplot-Datei direkt herumschrauben? Das erscheint mir nicht wirklich begehrenswert...
Gruß,
   Thorsten
FUIP

justme1968

die gplot files sind die konfiguration was wie geplottet wird. wenn du einen zusätzlichen wert plotten willst musst du auch eine zusätzliche zeile im plot file haben.

der plot editor hat aktuell keine möglichkeit die log quelle zu ändern bzw. einzutragen. d.h. man muss diese zusätzliche zeile ein mal von hand eintragen.

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

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

rabehd

Erstmal danke für den Hinweis.
Leider klappt es nicht.

Mit #logProxy ConstY:5
"<IN>" using 1:2 axes x1y2 title 'Tag' ls l2fill lw 1 with bars

bekomme ich einen passenden Balken.
Nur 5 ist ja nicht der gewünschte Wert. Mit
#logproxy Func:current2Plot($from,$to,"Wetterstation","statRainDay") wird nichts im Plot ausgegeben, obwohl die Funktion 2017.03.02 23:00:35 3: 2017-03-02_22:59:55 0.295
#plotCurrent: Wetterstation:statRainDay

2017.03.02 23:02:34...
zurückgibt. (siehe Anhang, da fehlt mir ein Balken am Ende)
Ich werde morgen weiterprobieren, bzw. das wiki nochmal lesen.
Auch funktionierende Lösungen kann man hinterfragen.

rabehd

#6
Hallo zusammen,

ich komme leider nicht zu dem gewünschten Ergebnis und finde auch keinen Fehler bei mir.
Ich habe in einem Reading die Regenmenge des Tage und in einem weiteren Reading den des Vortages.
Beide Werte werden mit DBLog in eine Datenbank geschrieben.

In einem Plot möchte ich die Regenmenge der Vortage und die bis jetzt vorhandene Menge von heute anzeigen.

Die Vortage bekomme ich auch gut hin.
Nach dem Wiki habe ich die dort beschriebene Funktion in 99_myUtils.pm kopiert.
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;


Der Plot ist entsprechend definiert

# Created by FHEM/98_SVG.pm, 2017-03-06 14:45:00
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 'Regen pro Tag'
set ytics
set y2tics
set grid
set ylabel ""
set y2label ""

#logproxy DbLog:logdb:Wetterstation:statRainDay
#logproxy DbLog:logdb:Wetterstation:statRainDayLast
#logproxy Func:current2Plot($from,$to,"Wetterstation","statRainDay")

plot "<IN>" using 1:2 axes x1y2 title 'Tagesverlauf' ls l0 lw 1 with lines,\
     "<IN>" using 1:2 axes x1y2 title 'Vortage' ls l2fill lw 1 with bars,\
     "<IN>" using 1:2 axes x1y2 title 'Tag' ls l1dot lw 1 with bars


Leider wird damit kein Balken für heute angezeigt, obwohl die Funktion die wohl richtigen Werte zurückliefert.
2017.03.06 14:45:02 3: 2017-03-06_14:43:49 0.885
#plotCurrent: Wetterstation:statRainDay

2017.03.06 14:50:37


Hat jemand einen Tip für mich?
Auch funktionierende Lösungen kann man hinterfragen.

hoods

Hallo zusammen,

ich möchte mich hier dran hängen denn ich scheitere auch daran ein Jahreslog (mit Daten aus DbLog) zur Übersicht der PV Anlage mit dem tagesaktuellen Wert mittels logproxy anzureichern.

Mein plot File sieht wie folgt aus:
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 'Solar Energie pro Monat'
set ytics
set y2tics
set grid
set ylabel "Energie [kWh]"
set y2label "Energie [kWh]"
set yrange [0:800]
set y2range [0:800]

#DbLog PV_Anlage:Emonth_kWh_cum
#mylogProxy Func:current2Plot($from,$to,"PV_Anlage","Emonth_kWh")

plot "<IN>" using 1:2 axes x1y1 title 'Emonth' ls l1fill lw 1 with bars,\
     "<IN>" using 1:2 axes x1y2 title 'lp_Emonth' ls l2fill lw 1 with bars


und die current2Plot Funktion aus dem logProxy Wiki wurde in 99_myUtils.pm übernommen.
Nach einem Fhem restart sehe ich zwar die Monats-Balken aber es fehlt noch der tagesaktuelle Balken für den aktuellen Monat.

Wenn ich die Funktion händisch teste erscheint eine Fehlermeldung:
{plotCurrent("2017-07-03 00:00:00","2017-07-04 19:00:00","PV_Anlage","Emonth_kWh")}


2017.07.04 19:26:29 1: ERROR evaluating {plotCurrent("2017-07-03 00:00:00","2017-07-04 19:00:00","PV_Anlage","Emonth_kWh")}: Undefined subroutine &main::plotCurrent called at (eval 875) line 1.



Ich habe bereits mit dem Datumsformat experimentiert, leider ohne Erfolgt. Hat jemand einen Tipp?

Vielen Dank im Vorraus.
Sven



Odroid C2, FHEM 5.8, HMUSB, Jeelink, Rademacher DuoFern Stick, Benning WR über HTTPMOD

justme1968

was steht in der ausgabe von 'Show preprocessed input' ?

woher kommt plotCurrent ? die routine aus dem wiki heisst doch current2Plot
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

hoods

Oh man, hätt ich auch drauf kommen können mal den Knopf ('Show preprocessed input') zu nutzen:
get DbLog CURRENT INT 2017-01-01_00:00:00 2018-01-01_00:00:01 PV_Anlage:Emonth_kWh_cum

2017-01-31_00:00:00 204
2017-02-28_00:00:00 201.6
2017-03-31_00:00:00 448.6
2017-04-30_00:00:00 486.1
2017-05-31_00:00:00 658.3
2017-06-30_00:00:00 629
#PV_Anlage:Emonth_kWh_cum:::

get mylogProxy CURRENT INT 2017-01-01_00:00:00 2018-01-01_00:00:01 Func:current2Plot($from,$to,"PV_Anlage","Emonth_kWh")

2017-07-04_20:38:51 63.81
#plotCurrent: PV_Anlage:Emonth_kWh
#Func:current2Plot($from,$to,"PV_Anlage","Emonth_kWh")


Und die Fehlermeldung ist auch selbst verursacht  :-[. Ich hatte irgendwann mal mit einer älteren Version von current2Plot hier aus dem Forum experimentiert die eben plotCurrent hieß.

Mit der richtigen Funktion und dem Zeitstempel wie im Beispiel Output oben angegeben bekomme ich auch eine Antwort.

{current2Plot("2017-01-01_00:00:00","2018-01-01_00:00:01","PV_Anlage","Emonth_kWh")}

2017-07-04_20:38:51 63.81
#plotCurrent: PV_Anlage:Emonth_kWh


Jetzt bleibt nur noch die Frage warum der Balken für Juli anhand des Werts "63.81" nicht dargestellt wird.
Hast Du noch einen Tipp?

Gruss Sven


Odroid C2, FHEM 5.8, HMUSB, Jeelink, Rademacher DuoFern Stick, Benning WR über HTTPMOD

hoods

Nachtrag:

wenn ich anstatt bars points nehme und entsprechend width auf 4 setze erscheint ein dicker Punkt in Höhe des Werts 63.81.
Scheint also nur eine Darstellungssache zu sein, was brauche ich damit ein bar dargestellt werden kann?

Gruss Sven
Odroid C2, FHEM 5.8, HMUSB, Jeelink, Rademacher DuoFern Stick, Benning WR über HTTPMOD

hoods

Nachtrag:

der folgende Thread beschreibt das gleiche Problem:
https://forum.fhem.de/index.php/topic,71016.0.html

Ich habe nun wie in dem Thread beschrieben einen zweiten Zeitstempel in die Funktion aufgenommen und als Workaround einfach das Datum hardcoded auf den 28. eines Monats gesetzt.

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


Nicht schön, aber es funktioniert. Leider bin ich mit perl nicht so vertraut dass ich hier sauber berechnen könnte welcher Tag nun der letzte des aktuellen Monats ist.

Gruss Sven
Odroid C2, FHEM 5.8, HMUSB, Jeelink, Rademacher DuoFern Stick, Benning WR über HTTPMOD

justme1968

gibt es das gleiche problem auch ohne log proxy? d.h. wenn du ein plot file mit nur einem wert per pars anzeigen willst?

falls ja -> poste es mal als bug für das SVG modul so das rudi nachschauen kann. (oder ich sobald ich dazu komme.)

falls nein -> bitte noch mal melden.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

hoods

Das Problem tritt auch ohne logProxy auf.
Anbei der Thread im hoffentlich passenden Unterforum :)

https://forum.fhem.de/index.php/topic,73937.0.html

Danke & Gruss, Sven
Odroid C2, FHEM 5.8, HMUSB, Jeelink, Rademacher DuoFern Stick, Benning WR über HTTPMOD