FHEM Forum

FHEM - Hausautomations-Systeme => Unterstützende Dienste => Thema gestartet von: konggress am 27 Juli 2017, 08:29:29

Titel: statistics: Pelletsverbrauch berechnen
Beitrag von: konggress am 27 Juli 2017, 08:29:29
Hallo liebe Gemeinde,
ich versuche hier (noch nicht ganz verzweifelt) den Pelletsverbrauch meines ETA-Heizkessels zu berechnen. Den Zählerstand bekomme ich brav geliefert:


Internals:
   BUSY       0
   DEF        http://192.168.10.31:8080/user/var/40/10401/0/0/12016 3600
   Interval   3600
   LASTSEND   1501134845.86516
   MainURL    http://192.168.10.31:8080/user/var/40/10401/0/0/12016
   ModuleVersion 3.3.11 - 8.5.2017
   NAME       h.twin.gesVerbrauch
   NR         208
   STATE      2910 kg
   TRIGGERTIME 1501138445.86408
   TRIGGERTIME_FMT 2017-07-27 08:54:05
   TYPE       HTTPMOD
   addr       http://192.168.10.31:8080
   buf
   code       200
   conn
   data
   displayurl http://192.168.10.31:8080/user/var/40/10401/0/0/12016
   header
   host       192.168.10.31
   httpheader HTTP/1.0 200 OK

Content-Length: 236

Content-Type: application/xml;charset=UTF-8

Cache-Control: no-cache

Date: Thu, 27 Jul 2017 07:52:30 GMT
   httpversion 1.0
   hu_blocking 0
   hu_filecount 46
   hu_portSfx :8080
   ignoreredirects 0
   loglevel   4
   path       /user/var/40/10401/0/0/12016
   protocol   http
   redirects  0
   timeout    2
   url        http://192.168.10.31:8080/user/var/40/10401/0/0/12016
   value      0
   QUEUE:
   READINGS:
     2017-07-27 07:54:05   Pelletsverbrauch 2910
     2017-07-27 07:59:55   statPelletsverbrauchDay Min: 2907 Avg: 2910 Max: 2910
     2017-07-26 23:59:55   statPelletsverbrauchDayLast Min: 2900 Avg: 2903 Max: 2907
     2017-07-27 07:59:55   statPelletsverbrauchHour Min: 2910 Avg: 2910 Max: 2910
     2017-07-27 07:59:55   statPelletsverbrauchHourLast Min: 2910 Avg: 2910 Max: 2910
     2017-07-27 07:59:55   statPelletsverbrauchMonth Min: 2883 Avg: 2896 Max: 2910 (since: 2017-07-24_09:30:51 )
     2017-05-31 23:59:55   statPelletsverbrauchMonthLast Min: 2392 Avg: 2399 Max: 2429
     2017-07-27 07:59:55   statPelletsverbrauchYear Min: 2883 Avg: 2896 Max: 2910 (since: 2017-07-24_09:30:51 )
   REQUEST:
     data
     header
     ignoreredirects 0
     retryCount 0
     type       update
     url        http://192.168.10.31:8080/user/var/40/10401/0/0/12016
     value      0
   defptr:
     readingBase:
       Pelletsverbrauch reading
     readingNum:
       Pelletsverbrauch 01
     readingOutdated:
     requestReadings:
       update:
         Pelletsverbrauch reading 01
   helper:
     _98_statistics Pelletsstatistik
   sslargs:
Attributes:
   enableControlSet 1
   group      Pellets
   reading01Name Pelletsverbrauch
   reading01Regex strValue="([\d,\d]+)"
   reading02OExpr $val =~ s/,/\./; $val;
   room       Heizung
   stateFormat Pelletsverbrauch kg
   userattr   reading01Name reading01Regex reading02OExpr readingsRegex.* stateFormat stateformat


Jetzt mein Kampf mit dem statistics-Modul:

Internals:
   DEF        h.twin.gesVerbrauch
   DEV_REGEXP h.twin.gesVerbrauch
   NAME       Pelletsstatistik
   NR         247
   NTFY_ORDER 10-Pelletsstatistik
   PREFIX     stat
   STATE      Updated stats for: h.twin.gesVerbrauch
   TYPE       statistics
   READINGS:
     2017-07-25 10:54:06   monitoredDevicesHTTPMOD h.twin.gesVerbrauch
     2017-07-27 07:59:55   nextPeriodChangeCalc 2017-07-27 08:59:55
     2017-07-27 07:59:55   state           Updated stats for: h.twin.gesVerbrauch
   fhem:
     modulVersion $Date: 2016-09-27 21:25:42 +0200 (Tue, 27 Sep 2016) $
     nextPeriodChangeTime 1501138795
Attributes:
   dayChangeTime 00:00
   group      Pellets
   minAvgMaxReadings Pelletsverbrauch
   room       Heizung


Statistics wird ausgeführt, und schreibt auch schön. Leider nicht die (sinnvollen) Werte, die ich gerne hätte:

2017-07-26_23:59:55 h.twin.gesVerbrauch statPelletsverbrauchHourLast: Min: 2907 Avg: 2907 Max: 2907
2017-07-26_23:59:55 h.twin.gesVerbrauch statPelletsverbrauchDayLast: Min: 2900 Avg: 2903 Max: 2907

Wenn mich doch bitte jemand in die richtige Richtung schubsen würde...
Vielen Dank
Titel: Antw:statistics: Pelletsverbrauch berechnen
Beitrag von: Frank_Huber am 27 Juli 2017, 09:40:03
Hi, ich mach Das über einen dummy und at. Kann dir  heute nachmittag den Code posten.
Bekomme so Tages, Wochen und Monatsverbrauch. Auch schön im SVG plot.

Gibt hier auch einen thread über die ETA Rest API.

Gesendet von meinem S3_32 mit Tapatalk

Titel: Antw:statistics: Pelletsverbrauch berechnen
Beitrag von: Frank_Huber am 27 Juli 2017, 16:45:50
Wie versprochen.

Vorab, ich hole über HTTPMOD den Bestand des Silos und den Bestand des Kessels.
Der Dummy enthält auch meine Berechnungen vom Wasserverbrauch und Stromverbrauch, daher die weiteren Readings.
Ich lege mir auch immer kurz vor Mitternacht die Durchschnittstemperatur des Tages in den Dummy.
Die Werteberechnung enthält Strom und Pellets.

Kesselbestand:
defmod ETA_Vorrat_2_Kessel HTTPMOD http://192.168.12.82:8080/user/var/40/10021/0/0/12011 120
attr ETA_Vorrat_2_Kessel userattr reading01Name reading01Regex readingsRegex.* stateFormat
attr ETA_Vorrat_2_Kessel group ETA-Pellets
attr ETA_Vorrat_2_Kessel reading01Name Vorrat_2_Kessel
attr ETA_Vorrat_2_Kessel reading01Regex strValue="([\d]+)"
attr ETA_Vorrat_2_Kessel room Heizung
attr ETA_Vorrat_2_Kessel stateFormat Vorrat_2_Kessel Kilo


Silobestand:
defmod ETA_Vorrat_1_Silo HTTPMOD http://192.168.12.82:8080/user/var/40/10201/0/0/12015 7200
attr ETA_Vorrat_1_Silo userattr reading01Name reading01Regex readingsRegex.* stateFormat
attr ETA_Vorrat_1_Silo group ETA-Pellets
attr ETA_Vorrat_1_Silo reading01Name Silo_Vorrat
attr ETA_Vorrat_1_Silo reading01Regex strValue="([\d]+)"
attr ETA_Vorrat_1_Silo room Heizung
attr ETA_Vorrat_1_Silo stateFormat Silo_Vorrat Kilo


Der Dummy:
defmod Verbrauch dummy
attr Verbrauch readingList Pelletslager Pelletslager1ter PelletslagerMo Pelletsverbrauch PelletsverbrauchWoche PelletsverbrauchMonat Stromzaehler Stromverbrauch  StromverbrauchMonat StromverbrauchWoche Wasserzaehler WasserzaehlerTEMP Wasserverbrauch Durchschnittstemperatur
attr Verbrauch room _HSA
attr Verbrauch setList Wasserzaehler
attr Verbrauch stateFormat Pelletsbestand: Pelletslager Kg


Berechnung Tag:
defmod Verbrauch_Tag at *00:00:01 {\
use Math::Round qw/round/;;\
my $wert1=ReadingsVal("ETA_Vorrat_1_Silo","Silo_Vorrat","--");;\
my $wert2=ReadingsVal("ETA_Vorrat_2_Kessel","Vorrat_2_Kessel","--");;\
my $wert4=$wert1+$wert2;;\
my $wert3=ReadingsVal("Verbrauch","Pelletslager","--");;\
my $wert5=$wert3-$wert4;;\
fhem("setreading Verbrauch Pelletslager $wert4");;\
fhem("setreading Verbrauch Pelletsverbrauch $wert5");;\
my $wert6=ReadingsVal("Stromzaehler","total_consumption","--");;\
my $wert7=$wert6/1000;;\
my $wert8=ReadingsVal("Verbrauch","Stromzaehler","--");;\
my $wert9=$wert7-$wert8;;\
$wert9 = Math::Round::nearest('0.1',$wert9);;\
fhem("setreading Verbrauch Stromzaehler $wert7");;\
fhem("setreading Verbrauch Stromverbrauch $wert9");;\
WriteStatefile()\
}
attr Verbrauch_Tag group Energie
attr Verbrauch_Tag room zentrale Funktionen


Berechnung Woche:
defmod Verbrauch_Woche at *00:00:30 {\
if ($wday == 1) {\
\
use Math::Round qw/round/;;\
my $wert1=ReadingsVal("ETA_Vorrat_1_Silo","Silo_Vorrat","--");;\
my $wert2=ReadingsVal("ETA_Vorrat_2_Kessel","Vorrat_2_Kessel","--");;\
my $wert4=$wert1+$wert2;;\
my $wert3=ReadingsVal("Verbrauch","PelletslagerMo","--");;\
my $wert5=$wert3-$wert4;;\
fhem("setreading Verbrauch PelletslagerMo $wert4");;\
fhem("setreading Verbrauch PelletsverbrauchWoche $wert5");;\
my $wert6=ReadingsVal("Stromzaehler","total_consumption","--");;\
my $wert7=$wert6/1000;;\
my $wert8=ReadingsVal("Verbrauch","StromzaehlerMo","--");;\
my $wert9=$wert7-$wert8;;\
$wert9 = Math::Round::nearest('0.1',$wert9);;\
fhem("setreading Verbrauch StromzaehlerMo $wert7");;\
fhem("setreading Verbrauch StromverbrauchWoche $wert9");;\
WriteStatefile()\
}}
attr Verbrauch_Woche group Energie
attr Verbrauch_Woche room zentrale Funktionen


Berechnung Monat:
defmod Verbrauch_Monat at \
*00:01:00 {\
if ($mday == 1) {\
\
use Math::Round qw/round/;;\
my $wert1=ReadingsVal("ETA_Vorrat_1_Silo","Silo_Vorrat","--");;\
my $wert2=ReadingsVal("ETA_Vorrat_2_Kessel","Vorrat_2_Kessel","--");;\
my $wert4=$wert1+$wert2;;\
my $wert3=ReadingsVal("Verbrauch","Pelletslager1ter","--");;\
my $wert5=$wert3-$wert4;;\
fhem("setreading Verbrauch Pelletslager1ter $wert4");;\
fhem("setreading Verbrauch PelletsverbrauchMonat $wert5");;\
my $wert6=ReadingsVal("Stromzaehler","total_consumption","--");;\
my $wert7=$wert6/1000;;\
my $wert8=ReadingsVal("Verbrauch","Stromzaehler1ter","--");;\
my $wert9=$wert7-$wert8;;\
$wert9 = Math::Round::nearest('0.1',$wert9);;\
fhem("setreading Verbrauch Stromzaehler1ter $wert7");;\
fhem("setreading Verbrauch StromverbrauchMonat $wert9");;\
WriteStatefile()\
}}
attr Verbrauch_Monat group Energie
attr Verbrauch_Monat room zentrale Funktionen


SVG Monat:
defmod Plot3_Pellets_Verbrauch_Monat SVG logdb:Plot3_Pellets_Verbrauch_Monat:HISTORY
attr Plot3_Pellets_Verbrauch_Monat captionPos auto
attr Plot3_Pellets_Verbrauch_Monat endPlotNow 1
attr Plot3_Pellets_Verbrauch_Monat endPlotToday 1
attr Plot3_Pellets_Verbrauch_Monat fixedrange month
attr Plot3_Pellets_Verbrauch_Monat label "Tagesverbrauch gestern $data{currval1} Kg Pellets bei (Tagesdurchschnitt) $data{currval2} °C - Durchschnitt akt.Monat $data{avg1} Kg/Tag"
attr Plot3_Pellets_Verbrauch_Monat plotsize 900,150
attr Plot3_Pellets_Verbrauch_Monat room Verbr Grafik

# Created by FHEM/98_SVG.pm, 2017-04-23 16:29:47
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 '<L1>'
set ytics
set y2tics
set grid y2tics
set ylabel "°C"
set y2label "Kg"
set y2range [0:]

#logdb Verbrauch:Pelletsverbrauch::
#logdb Verbrauch:Durchschnittstemperatur::

plot "<IN>" using 1:2 axes x1y2 title 'Tagesverbrauch' ls l1fill_stripe lw 1 with bars,\
     "<IN>" using 1:2 axes x1y1 title 'Aussentemperatur (avg)' ls l0 lw 1.5 with fsteps


SVG Jahr:
defmod Plot6_Pellets_Verbrauch_2 SVG logdb:Plot6_Pellets_Verbrauch_2:HISTORY
attr Plot6_Pellets_Verbrauch_2 captionPos auto
attr Plot6_Pellets_Verbrauch_2 fixedrange year
attr Plot6_Pellets_Verbrauch_2 label "Pelletsverbrauch: Letze volle Woche: $data{currval1} Kg, letzter voller Monat: $data{currval3} Kg, Bestand Mitternacht: $data{currval2} Kg"
attr Plot6_Pellets_Verbrauch_2 plotsize 900,150
attr Plot6_Pellets_Verbrauch_2 room Verbr Grafik Jahr

# Created by FHEM/98_SVG.pm, 2017-05-11 12:55:15
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 '<L1>'
set ytics
set y2tics
set grid ytics
set ylabel "Bestand in Kg"
set y2label "Verbrauch in Kg"
set yrange [0:4800]

#logdb Verbrauch:PelletsverbrauchWoche::
#logdb Verbrauch:Pelletslager::
#logdb Verbrauch:PelletsverbrauchMonat::

plot "<IN>" using 1:2 axes x1y2 title 'Wochenverbrauch' ls l1fill_stripe lw 0.5 with ibars,\
     "<IN>" using 1:2 axes x1y1 title 'Pelletsbestand' ls l2 lw 0.5 with lines,\
     "<IN>" using 1:2 axes x1y2 title 'Monatsverbrauch' ls l0fill_stripe lw 0.5 with bars

Titel: Antw:statistics: Pelletsverbrauch berechnen
Beitrag von: Hackstall am 31 Dezember 2017, 21:18:07
Hallo,

ich bin auf Deinen Thread aufmerksam geworden und benötige auch sowas. Ich bin dabei ihn für mich umzuschreiben.

Kannst Du mit noch mitteilen was die Funktion WriteStateFile macht.

Danke Andreas
Titel: Antw:statistics: Pelletsverbrauch berechnen
Beitrag von: Frank_Huber am 31 Dezember 2017, 21:54:35
Das schreibt die ganzen readings in das state file.
Ohne das hat fehl Berechnungen wenn fhem mal kracht und beim Neustart ein veralteter stand geladen wird.

Mit dem Handy online, daher kurz gefasst...

Titel: Antw:statistics: Pelletsverbrauch berechnen
Beitrag von: Hackstall am 01 Januar 2018, 16:30:03
Hallo und Danke

aber ich verstehe das noch nicht ganz.

Heisst das due Lädst die Settings nach Fhem restart zunächst zurück und wenn ja wie.
Werden die vorherigen Settings überschrieben.

Hättest Du vielleicht ein Beispiel?

Vielen Dank
Andreas
Titel: Antw:statistics: Pelletsverbrauch berechnen
Beitrag von: Frank_Huber am 01 Januar 2018, 23:29:29
Das state file handelt fhem selbst. Es wird beim regulären shutdown geschrieben und beim Start eingelesen.
Ich schreibe es einmal gezielt nach der Berechnung.

Das ist eigentlich nicht notwendig, wenn aber fhem (warum auch immer) crasht läd es beim Start die alten Werte.

Mit dem Handy online, daher kurz gefasst...

Titel: Antw:statistics: Pelletsverbrauch berechnen
Beitrag von: tupol am 02 Januar 2018, 09:27:26
Zitat von: konggress am 27 Juli 2017, 08:29:29
Hallo liebe Gemeinde,
ich versuche hier (noch nicht ganz verzweifelt) den Pelletsverbrauch meines ETA-Heizkessels zu berechnen. Den Zählerstand bekomme ich brav geliefert:

Statistics wird ausgeführt, und schreibt auch schön. Leider nicht die (sinnvollen) Werte, die ich gerne hätte:

2017-07-26_23:59:55 h.twin.gesVerbrauch statPelletsverbrauchHourLast: Min: 2907 Avg: 2907 Max: 2907
2017-07-26_23:59:55 h.twin.gesVerbrauch statPelletsverbrauchDayLast: Min: 2900 Avg: 2903 Max: 2907

Wenn mich doch bitte jemand in die richtige Richtung schubsen würde...
Vielen Dank

Pelletsverbrauch ist vermutlich kein Wert wie z.B. eine Temperatur die man mit minAvgMaxReadings ermittelt.

Ist eigentlich alles in der commandref beschrieben:
Es unterscheidet in vier Statistik-Typen denen bereits standardmässig Gerätewerte zugeordnet sind: