FHEM Forum

FHEM => Frontends => SVG / Plots / logProxy => Thema gestartet von: KernSani am 23 April 2017, 23:34:32

Titel: [Gelöst] SVG: Aktueller Tag wird nicht angezeigt
Beitrag von: KernSani am 23 April 2017, 23:34:32
Hi zusammen,

Ich habe einen Plot der mir meinen Energieverbrauch (aus dem ElectricityCalculator Modul) tageweise darstellt - dabei wird auf das LastDay reading zugegriffen, das immer kurz nach Mitternacht geschrieben wird. Mit logprocy und offset funktioniert das wunderbar.
ich habe nun versucht gemäß Wiki  (https://wiki.fhem.de/wiki/LogProxy#Darstellung_des_aktuell_aufgelaufenen_Wertes.2C_zus.C3.A4tzlich_zu_historischen_Monats-_oder_Wochendaten_aus_einem_Log) die aktuellen Tageswerte noch hinzu zu fügen. Der pre-processed Input sieht eigentlich gut aus:

get lp CURRENT INT 2017-04-01_00:00:00 2017-05-01_00:00:01 DbLog:fhemDbLog,offset=-60*60*1:KG_ElectricityCalc:KG_powerSensor_energyCalc_EnergyDayLast Func:current2Plot($from,$to,"KG_ElectricityCalc","KG_powerSensor_energyCalc_EnergyDay")

2017-04-17_23:02:03 8.933
2017-04-18_23:02:04 7.373
2017-04-19_23:02:02 7.174
2017-04-20_23:01:54 15.200
2017-04-21_23:00:08 8.614
2017-04-22_23:00:04 8.973
#KG_ElectricityCalc:KG_powerSensor_energyCalc_EnergyDayLast:::
2017-04-23_23:20:36 15.066
#plotCurrent: KG_ElectricityCalc:KG_powerSensor_energyCalc_EnergyDay
#Func:current2Plot($from,$to,"KG_ElectricityCalc","KG_powerSensor_energyCalc_EnergyDay")


Leider wird der heutige Tag nicht dargestellt... Hier noch das gplot file:


# Created by FHEM/98_SVG.pm, 2017-04-23 21:34:42
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 '<TL>'
set ytics
set y2tics
set grid y2tics
set ylabel ""
set y2label "Power"
set y2range [0:20]


#lp DbLog:fhemDbLog,offset=-60*60*1:KG_ElectricityCalc:KG_powerSensor_energyCalc_EnergyDayLast
#lp Func:current2Plot($from,$to,"KG_ElectricityCalc","KG_powerSensor_energyCalc_EnergyDay")

plot "<IN>" using 1:2 axes x1y2 title 'Gesamt' ls l0 lw 3 with bars,
     "<IN>" using 1:2 axes x1y1 title 'Dry' ls l1fill lw 3 with bars,


Welchen Fehler sehe ich nun seit 2 Stunden nicht?

Danke,

Oli
Titel: Antw:SVG: Aktueller Tag wird nicht angezeigt
Beitrag von: KernSani am 24 April 2017, 19:29:50
Keiner eine Idee?
Titel: Antw:SVG: Aktueller Tag wird nicht angezeigt
Beitrag von: KernSani am 24 April 2017, 23:29:03
Unterhalte ich mich halt weiter ein bisschen mit mir selbst ;-)

Die Lösung des Problems war dann doch recht einfach: "with bars" benötigt offensichtlich mindestens 2 Datenpunkte, ich habe also die sub current2Plot aus dem Wiki erweitert, so dass sie mir einen zweiten Datenpunkt mit dem selben Wert am selben Tag liefert und schwupps war der Balken da. Allerdings fängt der Balken aus einem mir unverständlichem Grund (mag an der fehlenden Doku liegen) am Vortag an. "with fsteps" macht aber das selbe - nur am richtigen Tag :-)
Titel: Antw:[Gelöst] SVG: Aktueller Tag wird nicht angezeigt
Beitrag von: hoods am 04 Mai 2017, 21:52:59
Hallo Oli,

ich stehe gerade vor dem gleichen Problem. Würdest Du deine Anpassungen hier verewigen?

Danke & Gruss,
Sven
Titel: Antw:[Gelöst] SVG: Aktueller Tag wird nicht angezeigt
Beitrag von: KernSani am 04 Mai 2017, 22:15:05
aber klar... keine Garantie auf vollständige Funktionalität, aber bei mir tut's...

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 $timestamp2 = sprintf("%04d-%02d-%02d_%02d:%02d:%02d", $t[5]+1900, $t[4]+1, $t[3], "00", $t[1], $t[0]);
  my $timestamp = sprintf("%04d-%02d-%02d_%02d:%02d:%02d", $t[5]+1900, $t[4]+1, $t[3], $t[2], $t[1], $t[0]);
 
  $ret .= "$timestamp2 $val\n";
  $ret .= "$timestamp $val\n";
 
  #$ret .= "#plotCurrent$device: $device:$reading\n";
  #Log3 "Plot",1,$ret;
  return $ret;
}