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.
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
Ich würde fixedrange month empfehlen. Es sind ja auch mal weniger Tage.
Pappn
Gesendet von meinem P6-U06 mit Tapatalk
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.
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
Hallo
fixedrange ist ein Attribut des SVG-Device.
Gruß
Hans
Kaum macht mans richtig, schon funktionierts... merkwürdig... ;)
Danke!
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
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;
}
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