Statistics auf alte Filelog-Daten loslassen ?

Begonnen von slowfinger, 23 Mai 2018, 22:26:18

Vorheriges Thema - Nächstes Thema

slowfinger

Hallo,
ich habe keine DB-Log und somit nur FileLog-Dateien. Neuerdings habe ich das Statistics-Modul "gefunden" und leite mir daraus Verbrauchsdaten meines Stromzählers ab. Das funktioniert auch zu meiner Zufriedenheit.
Nun würde ich auch gerne diese Statistics Daten für die letzten Jahre erhalten ==> gibt es eine einfache Möglichkeit in alten Filelogs die entsprechenden Werte nachträglich einfügen zu lassen ?

Vielen Dank !

Amenophis86

Wo sind denn die alten Werte aktuell vorhanden?
Übrigens kannst du auch von FileLog auf DB log umstellen und die Werte aus einem Filelog in die DB schreiben lassen.
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

slowfinger

Hallo Amenophis86,

ich habe wie gesagt nur File-Logs von den letzten Jahren als "JahresFilelogs". Diese könnte ich zwar von Hand und mit einigem xls joglieren um einige Readings analog STATISTICS ergänzen, ich fände es aber toll wenn es einen script-Weg geben würde um nachträglich gewisse readings in Filelogs (oder deren Kopien) zu erzeugen.

An DB log traue ich mich noch nicht ran ... da braucht man anscheinend mehr als das was ich mir im Moment zutraue :-)

Andy_Si

Hallo,

leider stehe ich vor der gleichen Problematik, dass ich bereits vorhandene Daten aus File-Logs der letzten Jahre gerne mittels der statistics Funktion nachträglich aufbereiten lassen möchte um diese dann in Charts darstellen zu können.
Nun habe ich schon lange gesucht und bin auf die o.g. Hinweise gestoßen.

Da dieser Artikel schon etwas älter ist, möchte ich die Frage nochmals in Erinnerung rufen und fragen ob denn jemand zwischenzeitlich ein solches Script kennt, das nachträglich readings in Filelogs mit der statistics-Funktion erzeugt?

Vielen Dank!

Gruß
Andy

Prof. Dr. Peter Henning

Welche statistischen Angaben sollen berechnet werden: Mittelwerte etc.?
Was bitte ich mit "Charts" gemeint?

LG

pah

Andy_Si

Hallo,

ich meine mit statistischen Daten nur die Tages- / Monats- / Jahressummen von aufgezeichneten Verbrauchswerten. Also im Prinzip den jeweils letzten Wert eines Zeitraums. Diese werden in Charts (SVG- / Gplot) in FHEM dargestellt. Wenn ich dort z.B. die Option "delta-d" verwende, werden Tagesdaten über den Monat dargestellt. Leider scheint es aber keine "delta-m" (für Monat) oder "delty-y" (für Jahr) zu geben, bzw. funktionieren nicht.
Daher dachte ich es wäre besser die jeweiligen Summen der Zeiträume mittels der statistics-Funktion bilden zu lassen, falls dies denn auch rückwirkend anhand der einzelnen monatlichen File-Logs möglich sein sollte.

Danke.

Gruß
Andy

rabehd

Und wo sind die Daten abgelegt, die Du bisher darstellst?
Auch funktionierende Lösungen kann man hinterfragen.

Andy_Si

Hallo,

die Daten liegen in monatlichen Log-Dateien im Unterverzeichnis von FHEM auf der SD des Raspberrys.
Ich denke, evtl. liegt das auch daran, dass je Datei immer nur ein Monat enthalten ist.
Die Trennung nach Monaten habe ich, da die Dateien so schon recht umfangreich werden.

Wenn das die Ursache sein sollte, müsste evtl. am letzten Tag des Monats der Monartswert in eine Gesamtdatei (monats- / jahresübergreifend) eingetragen werden. Aber wie erstelle ich am besten so eine Abfrage in FHEM, dass nur der letzte Wert eines Monats in eine solche Datei eingetragen wird? Hat vielleicht jemand ein Beispiel dafür?

Danke.

Gruß
Andy

Prof. Dr. Peter Henning

Das ist doch ganz einfach. Wenn man am Ende des Tages eine Routine "xxx_EOD" triggert, welche die täglichen (!) Summenwerte als EOD_report berechnet, kann man auch gleich überprüfen, ob es der letzte Tag des Monats ist. Und beispielsweise dann den Monatswert EOM_report berechnen. Und wenn es ein FileLog gibt, das auf genau diese Werte triggert, passt das wunderbar.

###############################################################################
#
# EM_End of Day
#
###############################################################################

sub EM_EOD(){
  fhem("get E1.consumption metaData energy0");
  my $hash   = $defs{'E1.consumption'};
  my $etot   = $hash->{READINGS}{"energy"}{VAL};
  my $eday   = $hash->{READINGS}{"statEnergyDay"}{VAL};
  my $emonth = $hash->{READINGS}{"statEnergyMonth"}{VAL};
  my $eyear  = $hash->{READINGS}{"statEnergyYear"}{VAL};
  my $result = sprintf("Ed %.3f Em %.3f Ey %.3f",$eday,$emonth,$eyear);
  readingsSingleUpdate($hash,"energyLast",$etot, 1);   
  readingsSingleUpdate($hash,"EOD_report",$result, 1);   
 
  fhem("get E1.production metaData energy0");
  $hash   = $defs{'E1.production'};
  $etot   = $hash->{READINGS}{"energy"}{VAL};
  $eday   = $hash->{READINGS}{"statEnergyDay"}{VAL};
  $emonth = $hash->{READINGS}{"statEnergyMonth"}{VAL};
  $eyear  = $hash->{READINGS}{"statEnergyYear"}{VAL};
  $result = sprintf("Ed %.3f Em %.3f Ey %.3f",$eday,$emonth,$eyear);
  readingsSingleUpdate($hash,"energyLast",$etot, 1);   
  readingsSingleUpdate($hash,"EOD_report",$result, 1);   
 
  fhem("get E2.consumption metaData energy0");
  $hash   = $defs{'E2.consumption'};
  $etot   = $hash->{READINGS}{"energy"}{VAL};
  $eday   = $hash->{READINGS}{"statEnergyDay"}{VAL};
  $emonth = $hash->{READINGS}{"statEnergyMonth"}{VAL};
  $eyear  = $hash->{READINGS}{"statEnergyYear"}{VAL};
  $result = sprintf("Ed %.3f Em %.3f Ey %.3f",$eday,$emonth,$eyear);
  readingsSingleUpdate($hash,"energyLast",$etot, 1);   
  readingsSingleUpdate($hash,"EOD_report",$result, 1);   
 
  fhem("get E2.production metaData energy0");
  $hash   = $defs{'E2.production'};
  $etot   = $hash->{READINGS}{"energy"}{VAL};
  $eday   = $hash->{READINGS}{"statEnergyDay"}{VAL};
  $emonth = $hash->{READINGS}{"statEnergyMonth"}{VAL};
  $eyear  = $hash->{READINGS}{"statEnergyYear"}{VAL};
  $result = sprintf("Ed %.3f Em %.3f Ey %.3f",$eday,$emonth,$eyear);
  readingsSingleUpdate($hash,"energyLast",$etot, 1); 
  readingsSingleUpdate($hash,"EOD_report",$result, 1);

  fhem("set smartmeterth65 reread");
  fhem("setreading Battery_BYD SOC_midnight ".ReadingsVal("Battery_BYD","SOC",0));
 
  #-- EOM if necessary
  if((strftime "%d",localtime time+3600) eq "01"){
    EM_EOM()
  }

}

###############################################################################
#
# EM_End of Month
#
###############################################################################

sub EM_EOM(){
  my $hash1   = $defs{'E1.consumption'};
  my $emonth1 = $hash1->{READINGS}{"statEnergyMonth"}{VAL};
  my $eyear1  = $hash1->{READINGS}{"statEnergyYear"}{VAL};
 
  my $hash2   = $defs{'E2.consumption'};
  my $emonth2 = $hash2->{READINGS}{"statEnergyMonth"}{VAL};
  my $eyear2  = $hash2->{READINGS}{"statEnergyYear"}{VAL};
 
  my $result1 = sprintf("Em1 %.3f Ey1 %.3f Em1+2 %.3f Ey1+2 %.3f",$emonth1,$eyear1,$emonth1+$emonth2,$eyear1+$eyear2);
  readingsSingleUpdate($hash1,"EOM_report",$result1, 1);   
  my $result2 = sprintf("Em2 %.3f Ey2 %.3f Em1+2 %.3f Ey1+2 %.3f",$emonth2,$eyear2,$emonth1+$emonth2,$eyear1+$eyear2); 
  readingsSingleUpdate($hash2,"EOM_report",$result2, 1);   
 
  $hash1   = $defs{'E1.production'};
  $emonth1 = $hash1->{READINGS}{"statEnergyMonth"}{VAL};
  $eyear1  = $hash1->{READINGS}{"statEnergyYear"}{VAL};
 
  $hash2   = $defs{'E2.production'};
  $emonth2 = $hash2->{READINGS}{"statEnergyMonth"}{VAL};
  $eyear2  = $hash2->{READINGS}{"statEnergyYear"}{VAL};
 
  $result1 = sprintf("Em1 %.3f Ey1 %.3f Em1+2 %.3f Ey1+2 %.3f",$emonth1,$eyear1,$emonth1+$emonth2,$eyear1+$eyear2);
  readingsSingleUpdate($hash1,"EOM_report",$result1, 1);   
  $result2 = sprintf("Em2 %.3f Ey2 %.3f Em1+2 %.3f Ey1+2 %.3f",$emonth2,$eyear2,$emonth1+$emonth2,$eyear1+$eyear2);
  readingsSingleUpdate($hash2,"EOM_report",$result2, 1);

}

LG

pah