Heizleistung und Gasverbrauch: Unterschied zwischen den Versionen
Krikan (Diskussion | Beiträge) (FHEM(R)) |
K (Hinweis auf fehlende Math::Round als mögliche Ursache) |
||
Zeile 19: | Zeile 19: | ||
== Definitionen in FHEM == | == Definitionen in FHEM == | ||
Mit den nachfolgend beschriebenen Definitionen und Hilfsfunktionen werden diese Berechnungen von FHEM durchgeführt. | Mit den nachfolgend beschriebenen Definitionen und Hilfsfunktionen werden diese Berechnungen von FHEM durchgeführt. | ||
Bei Fehlern im Log beim Aufruf der Subroutinen könnte das Perlmodul Math::Round fehlen. | |||
=== Konfiguration === | === Konfiguration === |
Aktuelle Version vom 16. Juni 2017, 17:15 Uhr
Momentane Heizleistung und Gasverbrauch können mit der im Folgenden beschriebenen Lösung in FHEM ermittelt, protokolliert und grafisch dargestellt werden.
Technische Voraussetzungen
- Impulsnehmer: Bei den sehr verbreiteten Elster/Kromschröder Zählern: Elster / KromImpulsnehmer IN-Z65 für Elster Zähler, erhältlich bei co.met GmbH Saarbrücken für rund 18,00 Euro (eBay-shop)
- 1-Wire S0-Zählermodul, z.B. von www.eservice-online.de
Konzept
Berechnung von Energie, Momentanleistung der Heizung und Gaszählerstand: über den S0-Zähler wird die verbrauchte Gasmenge bzw. über die Zeit der Gasvolumenstrom gemessen. Der Energiegehalt der verbrauchten Gasmenge lässt sich aus den folgenden Parametern der Gasrechnung des Energieversorgers ableiten:
- Zustandswert (z-Wert) (ein Wert in der Größenordnung 10 bis 11)
- Brennwert (ein Wert in der Größenordnung 0,95)
Die Energie in kJ oder kWs berechnet sich damit aus dem Gasvolumen wie folgt:
energy = Volumen * gaszwert * gasbrennwert kWh/m3 * 3600s/h
Das Gasvolumen lässt sich dabei wiederum aus den Zählerstandsdifferenzen über den SO-Zähler ermitteln.
Volumen = cts * 1/gasctsperm3
Die Momentanleistung lässt sich anschliessend aus dem Differential der Energie ableiten. In FHEM kann dafür die Differentialfunktion verwendet werden.
Definitionen in FHEM
Mit den nachfolgend beschriebenen Definitionen und Hilfsfunktionen werden diese Berechnungen von FHEM durchgeführt.
Bei Fehlern im Log beim Aufruf der Subroutinen könnte das Perlmodul Math::Round fehlen.
Konfiguration
Erforderliche Einträge in der Konfiguration:
# Das VORHANDENE attr global userattr um die nachfolgenden Werte ERWEITERN. # Bitte keine neue attr global userattr Zeile anlegen!!! attr global userattr gasbrennwert gasctsperm3 gasoffset gaszwert # # Gaszaehler # # gasoffset : Offset Zählerstand # gasctsperm3 : Zählimpulse pro m3 # gaszwert : Z-Wert gem Gasrechnung # gasbrennwert: Brennwert gem Gasrechnung define C_GASZAEHLER OWDevice 1D.C5F60D000000 120 attr C_GASZAEHLER IODev myLocalOWServer attr C_GASZAEHLER alias Gaszä;hler attr C_GASZAEHLER event-min-interval counters.A:120,gas.*:120 attr C_GASZAEHLER event-on-change-reading counters.A,gasabsolut,gasleistung,gastagesverbrauch,gasmonatsverbrauch,gasjahresverbrauch attr C_GASZAEHLER event-on-update-reading counters.A,gasabsolut,gasleistung,gastagesverbrauch,gasmonatsverbrauch,gasjahresverbrauch attr C_GASZAEHLER gasbrennwert 11.270 attr C_GASZAEHLER gasctsperm3 100 attr C_GASZAEHLER gasoffset 9236.65 attr C_GASZAEHLER gaszwert 0.9543 attr C_GASZAEHLER group Heizungswerte attr C_GASZAEHLER icon sani_boiler_temp attr C_GASZAEHLER model DS2423 attr C_GASZAEHLER room 3.01 Heizung attr C_GASZAEHLER stateFormat {sprintf("V: %.2fm3",ReadingsVal("C_GASZAEHLER","gasabsolut",0)).sprintf(" E: %.2fkWh",ReadingsVal("C_GASZAEHLER","gastagesverbrauch",0)).sprintf(" P: %.2f kW",ReadingsVal("C_GASZAEHLER","gasleistung",0));;} attr C_GASZAEHLER userReadings gasabsolut { gaszaehlerstand("C_GASZAEHLER","counters.A");;}, gasleistung differential { gasenergie('C_GASZAEHLER',ReadingsVal("C_GASZAEHLER","counters.A",0));;}, gastagesverbrauch { gasverbrauch('C_GASZAEHLER','counters.A', 'D_GASCNTATMIDNIGHT');;}, gasmonatsverbrauch { gasverbrauch('C_GASZAEHLER','counters.A', 'D_GASCNTAT1STDAYOFMONTH');;}, gasjahresverbrauch { gasverbrauch('C_GASZAEHLER','counters.A', 'D_GASCNTAT1STDAYOFYEAR');;}, # Gaszaehlerstand in m3 # Leistung = differential(counters.A * 1/gasctsperm3 * gaszwert * gasbrennwert kWh/m3 * 3600s/h *1000W/kW) define D_GASCNTATMIDNIGHT dummy attr D_GASCNTATMIDNIGHT event-on-change-reading state,gasdaycnt attr D_GASCNTATMIDNIGHT room 9.02_Steuerung attr D_GASCNTATMIDNIGHT userReadings gasdaycnt:state difference { ReadingsVal("D_GASCNTATMIDNIGHT","state",0);;} define D_GASCNTAT1STDAYOFMONTH dummy attr D_GASCNTAT1STDAYOFMONTH event-on-change-reading state attr D_GASCNTAT1STDAYOFMONTH room 9.02_Steuerung define D_GASCNTAT1STDAYOFYEAR dummy attr D_GASCNTAT1STDAYOFYEAR event-on-change-reading state attr D_GASCNTAT1STDAYOFYEAR room 9.02_Steuerung define S_GASCNTSCHEDULER at *00:00:00 { setgascounters(ReadingsVal("C_GASZAEHLER","counters.A",0));;} attr S_GASCNTSCHEDULER room 9.02_Steuerung # # Gaszaehler Plot # define PL_GASZAEHLER SVG myDbLog:myDbGaszaehler:HISTORY attr PL_GASZAEHLER group Heizungsverlauf attr PL_GASZAEHLER label "E min: $data{min1}, max: $data{max1}, last: $data{currval1}"::"P min: $data{min2}, max: $data{max2}, last: $data{currval2}" attr PL_GASZAEHLER plotfunction C_GASZAEHLER attr PL_GASZAEHLER room 3.01 Heizung attr PL_GASZAEHLER title "Gaszaehler"
Hilfsfunktionen
Definitionen in der 99_my??Utils.pm:
sub gasenergie { my($device,$cts) = @_; # Berechnung des Energieinhaltes von Gas in kWs # energy= cts * 1/gasctsperm3 * gaszwert * gasbrennwert kWh/m3 * 3600s/h) my($gasenergy)= $cts * 1/AttrVal($device,"gasctsperm3",100) * AttrVal($device,"gaszwert",0.9543) * AttrVal($device,"gasbrennwert",11.27) * 3600; return($gasenergy); } sub gastagesverbrauch { my($device,$cts) = @_; my($midnight)=Value('D_GASCNTATMIDNIGHT'); my($daycts)=$cts-$midnight; # Berechnung des Energieinhaltes von Gas in kWh fuer den Tagesverbrauch # energy= cts * 1/gasctsperm3 * gaszwert * gasbrennwert kWh/m3 my($gasenergy)=$daycts * 1/AttrVal($device,"gasctsperm3",100) * AttrVal($device,"gaszwert",0.9543) * AttrVal($device,"gasbrennwert",11.27); return($gasenergy); } sub gasverbrauch { my($device,$counter,$startvar) = @_; my($deltacts)=ReadingsVal($device,$counter,0)-Value($startvar); # Berechnung des Energieinhaltes von Gas in kWh für den Tagesverbrauch # energy= cts * 1/gasctsperm3 * gaszwert * gasbrennwert kWh/m3 my($gasenergy)=$deltacts * 1/AttrVal($device,"gasctsperm3",100) * AttrVal($device,"gaszwert",0.9543) * AttrVal($device,"gasbrennwert",11.27); return($gasenergy); } sub gaszaehlerstand { my($device, $counter)=@_; # Berechnung des Gaszaehlerstandes in m3 # V=gasoffset+counts/countsperm3 my($zaehlerstand)= AttrVal($device,"gasoffset",0)+ReadingsVal($device,$counter,0)/AttrVal($device,"gasctsperm3",100); return($zaehlerstand); } sub setgascounters { my($cts) = @_; fhem("set D_GASCNTATMIDNIGHT ".$cts); if (DateTime->today(time_zone => $ENV{TZ})->day()==1) { fhem("set D_GASCNTAT1STDAYOFMONTH ".$cts); fhem("set D_GASCNTAT1STDAYOFYEAR ".$cts) if (DateTime->today(time_zone => $ENV{TZ})->month()==1); } }
.gplot Definitionen
Um die gezeigten Auswertungen zu erhalten, müssen die folgenden Plot-Definitionen angelegt werden:
# Created by FHEM/98_SVG.pm, 2014-01-20 14:45:44 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 '<TL>' set ytics set y2tics set grid xtics y2tics set ylabel "Momentanleistung [kW]" set y2label "Tagesverbrauch [kWh]" set yrange [0:20] #set y2range [10:35] #DbLog <SPEC1>:gasleistung:0: #DbLog <SPEC1>:gastagesverbrauch:0: plot \ ls l0 axes x1y1 title 'Momentanleistung [kW]' with lines lw 2, \ ls l2fill axes x1y2 title 'Tagesverbrauch [kWh]' with lines
Links
- Thread im Forum, in dem die Lösung vorgestellt wurde; Diskussionen / Kommentare bitte dort