FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: ChrisW am 26 Oktober 2015, 19:19:52

Titel: Plot mit Tagesansicht Balken ?
Beitrag von: ChrisW am 26 Oktober 2015, 19:19:52
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.
Titel: Antw:Plot mit Tagesansicht Balken ?
Beitrag von: Bennemannc am 26 Oktober 2015, 19:50:33
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
Titel: Antw:Plot mit Tagesansicht Balken ?
Beitrag von: pappn am 27 Oktober 2015, 15:28:15
Ich würde fixedrange month empfehlen. Es sind ja auch mal weniger Tage.
Pappn

Gesendet von meinem P6-U06 mit Tapatalk
Titel: Antw:Plot mit Tagesansicht Balken ?
Beitrag von: ChrisW am 28 Oktober 2015, 08:30:35
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.
Titel: Antw:Plot mit Tagesansicht Balken ?
Beitrag von: Tobias am 28 Oktober 2015, 10:15:58
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
Titel: Antw:Plot mit Tagesansicht Balken ?
Beitrag von: Hans Franz am 28 Oktober 2015, 10:52:57
Hallo

fixedrange ist ein Attribut des SVG-Device.

Gruß
Hans
Titel: Antw:Plot mit Tagesansicht Balken ?
Beitrag von: Tobias am 28 Oktober 2015, 11:09:09
Kaum macht mans richtig, schon funktionierts... merkwürdig... ;)
Danke!
Titel: Antw:Plot mit Tagesansicht Balken ?
Beitrag von: Bennemannc am 28 Oktober 2015, 13:24:01
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
Titel: Antw:Plot mit Tagesansicht Balken ?
Beitrag von: Tobias am 28 Oktober 2015, 13:42:54
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;
}

Titel: Antw:Plot mit Tagesansicht Balken ?
Beitrag von: Bennemannc am 28 Oktober 2015, 14:29:57
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