Plot mit Tagesansicht Balken ?

Begonnen von ChrisW, 26 Oktober 2015, 19:19:52

Vorheriges Thema - Nächstes Thema

ChrisW

Hallo,
ich habe in meinem Filelog: FileLog_Hausstrom folgendes: "cum_day: CUM_DAY: 18.219 CUM: 47.479 COST: 4.37"

Es geht um COST: 4.37 das wird Jeden Tag um 0 Uhr geschrieben und sind meine Stromkosten für den vergangenen Tag.

Dies möchte ich gerne in einen Plot packen. Aber das ganze soll in einer Wochen / Monatsansicht direkt zu sehen sein mit Balken auswertung. So das ich quasi auf einen Blick den Täglichen Stromverbrauch sehe.
Kann man so etwas basteln ? Jemand ideen ? Das ganze wäre dann auch für meinen Ölverbrauch cool.
Raspberry PI3 mit allem möglichen.

Bennemannc

Hallo,

wenn jeden Tag ein Wert in dem Log steht, ist das einfach. Du baust eine SVG Grafik und setzt das Attribut fixedrange (31days). Dann werden die letzten 31 Tage in der Grafik angezeigt.

Gruß Christoph
Cubietruck, Fhem 5.8
CC-RT-DN|LC-SW2-FM|RC-12|RC-19|LC-SW4-BA-PCB|LCp-SW1-BA-PCB|ES-PMSw1-Pl|LC-Bl1PBU-FM|PBI-4-FM|CC-VD|CC-TC|SEC-SC(2)|RC-KEY3-B|LC-Sw1PBU-FM|PB-2-FM|WDS100-C6-O|WDC7000|LC-Bl1-FM
Module: Dewpoint,FB_Callmonitor,HCS,Panstamp,at,notify,THRESHOLD,average,DOIF

pappn

Ich würde fixedrange month empfehlen. Es sind ja auch mal weniger Tage.
Pappn

Gesendet von meinem P6-U06 mit Tapatalk
"When all else fails, read the instructions."

CUL868, RFXTFX433 und CCU3
FS20, S300TH, UNIRoll, Homematic IP, OZW672, diverse HOMEEASY, IT kompatible und China Zeugs

ChrisW

Danke ist j ganz einfach... fixedrange month  passt optimal.

Jedoch habe ich nun enorme ladezeiten bei einem Plot der nen großes Filelog hat ;( Ich denke da muss ich ein Seperates Filelog bauen.
Interessant wäre wie ich z.b einen Tageswert zusammenrechnen kann und diesen immer um 0 Uhr in ein Filelog schreibe ..

Da ich auch meinen Ölverbrauch überwache und dieser sehr viele Werte ab Tag rausgibt wäre wie beim Strom oben ein Tageswert um 0 Uhr super.
Raspberry PI3 mit allem möglichen.

Tobias

Bei mir klappt das leider nciht, zeigt im standardmodus trotzdem nur einen Tag an :(
Ist das Filelogspezifisch? Muss am DbLogModul etwas angepasst werden? Muss im Modul auf "fixedrange" reagiert werden?

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 ''
set ytics
set y2tics
set grid
set ylabel "KW/h"
set fixedrange month

#DbLog <SPEC1>

plot "<IN>" using 1:2 axes x1y1 title 'KW(h)' ls l0 lw 3 with lines
Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter

Hans Franz

Hallo

fixedrange ist ein Attribut des SVG-Device.

Gruß
Hans
Raspi
CUL, Nano-CUL
FHT8V, FHT80B, S300TH
WM1000WZ, ELRO
LW12, LD382,DS18B20

Tobias

Kaum macht mans richtig, schon funktionierts... merkwürdig... ;)
Danke!
Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter

Bennemannc

Hallo,

@ChrisW
ich habe da ein script, das Werte aus dem average Modul ein paar Sekunden vor Mitternacht (da wird der Tageswert ja auf 0 gestellt) in ein Log schreibt. Dieses Log zeige ich dann in der Grafik an.
Wenn ich gleich Zeit habe, poste ich das Script mal.

Gruß Christoph
Cubietruck, Fhem 5.8
CC-RT-DN|LC-SW2-FM|RC-12|RC-19|LC-SW4-BA-PCB|LCp-SW1-BA-PCB|ES-PMSw1-Pl|LC-Bl1PBU-FM|PBI-4-FM|CC-VD|CC-TC|SEC-SC(2)|RC-KEY3-B|LC-Sw1PBU-FM|PB-2-FM|WDS100-C6-O|WDC7000|LC-Bl1-FM
Module: Dewpoint,FB_Callmonitor,HCS,Panstamp,at,notify,THRESHOLD,average,DOIF

Tobias

Zitat von: Bennemannc am 28 Oktober 2015, 13:24:01
ich habe da ein script, das Werte aus dem average Modul ein paar Sekunden vor Mitternacht (da wird der Tageswert ja auf 0 gestellt) in ein Log schreibt. Dieses Log zeige ich dann in der Grafik an.

Soetwas mache ich auch mit meinen PCA301. Immer 00:10Uhr läuft ein at Job der folgendes Script in MyUtils aufruft. Die Daten sind in DBLog gespeichert.
Das Script siucht sich selbständig das passende DBLog device, und ermittelt für jedes Device vom Typp PCA301 einen Tageswert und schreibt als Reading ins betreffende PCA301 Device zurück - und damit auch ins DBLog.

sub PCA301_DailyStats() {
  my $DbLogDev;

  #suche ein DbLogDevice
  return undef unless($modules{"DbLog"} && $modules{"DbLog"}{"LOADED"});

  foreach my $key (keys(%defs)) {
    if($defs{$key}{TYPE} eq "DbLog") {
      $DbLogDev = $key;
      last;
    }
  }

  return undef if($defs{$DbLogDev}{STATE} !~ m/(active|connected)/); # muss active sein!

  #TagesRange des Vortages ermitteln
  my @day = localtime(time - 86400);
  $day[5]+=1900; # Year
  $day[4] = sprintf("%02d", $day[4]+=1); # Month
  $day[3] = sprintf("%02d", $day[3]); # Day
  my $daybegin = ($day[5]) ."-". ($day[4]) ."-". $day[3] ." ". '00:00:00';
  my $dayend   = ($day[5]) ."-". ($day[4]) ."-". $day[3] ." ". '23:59:59';

  #my $pca301_dev = 'SW_KC_Freezer';

  foreach my $pca301_dev (keys(%defs)) {
  next if($defs{$pca301_dev}{TYPE} ne "PCA301");

my $sql = " select
max(to_number(value,'999.999')) - min(to_number(value,'999.999')) as kw
from history
where device = '$pca301_dev'
and reading = 'consumption'
and timestamp >= TO_TIMESTAMP('$daybegin','YYYY-MM-DD HH24:MI:SS')
and timestamp <= TO_TIMESTAMP('$dayend','YYYY-MM-DD HH24:MI:SS')";

DbLog_Set($defs{$DbLogDev}, 'set', 'userCommand', $sql);
my $ret = ReadingsVal($DbLogDev, 'userCommandResult', '');
readingsSingleUpdate($defs{$pca301_dev}, "DailyConsumtion", $ret ,1) if($ret);
  }

return undef;
}

Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter

Bennemannc

Hallo,

ich habe das mit einem at gelöst
*23:59:40 {
my ($val,$t1,$t2);
$val = (fhem "list SWAP_F1 int_bez_cum_day");
$val =~ s/\n$//g;
$t1 = "Bezug";
$t2 = substr ($val, index($val,":")+6,10);
fhem "trigger Energy_Day $t1 $t2";
$val = (fhem "list SWAP_F1 int_erz_cum_day");
$val =~ s/\n$//g;
$t1 = "Erzeugung";
$t2 = substr ($val, index($val,":")+6,10);
fhem "trigger Energy_Day $t1 $t2";
$val = (fhem "list SWAP_F1 int_gas_cum_day");
$val =~ s/\n$//g;
$t1 = "Gasverbrauch";
$t2 = substr ($val, index($val,":")+6,10);
fhem "trigger Energy_Day $t1 $t2";
}

Wie schon erwähnt werden Readings des average Moduls mit "list" ausgelesen, zurechtgestringt und in ein eigenes Logfile (Energy_Day) geschrieben.

Gruß Christoph
Cubietruck, Fhem 5.8
CC-RT-DN|LC-SW2-FM|RC-12|RC-19|LC-SW4-BA-PCB|LCp-SW1-BA-PCB|ES-PMSw1-Pl|LC-Bl1PBU-FM|PBI-4-FM|CC-VD|CC-TC|SEC-SC(2)|RC-KEY3-B|LC-Sw1PBU-FM|PB-2-FM|WDS100-C6-O|WDC7000|LC-Bl1-FM
Module: Dewpoint,FB_Callmonitor,HCS,Panstamp,at,notify,THRESHOLD,average,DOIF