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
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
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
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
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...
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
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...
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:
- Min|Avg|Max Minimum, Durchschnitt und Maximum von Momentanwerten:
über den Zeitraum Tag, Monat und Jahr:
brightness, current, energy_current, humidity, luminosity, temperature, voltage
über den Zeitraum Stunde, Tag, Monat und Jahr:
wind, wind_speed, windSpeed
- Tendency Tendenz über 1h, 2h, 3h und 6h: pressure
- Delta Differenz zwischen Anfangs- und Endwerte innerhalb eines Zeitraums (Stunde, Tag, Monat, Jahr):
count, energy, energy_total, power, total, rain, rain_rate, rain_total
- Duration Dauer und Anzahl der Zustände (on, off, open, closed...) innerhalb eines Zeitraums (Tag, Monat, Jahr):
lightsensor, lock, motion, Window, window, state (wenn kein anderer Gerätewert gültig)