Ölverbrauchsanzeige / Betriebsstundenzähler: Unterschied zwischen den Versionen
K (Disclaimer zu Codebeispielen) |
Fabian (Diskussion | Beiträge) K (Kategorien gesetzt) |
||
Zeile 82: | Zeile 82: | ||
[[Kategorie:HOWTOS]] | [[Kategorie:HOWTOS]] | ||
[[Kategorie:Energieverbrauchsmessung]] |
Version vom 6. Oktober 2016, 09:19 Uhr
Problem: oft weiß man nicht, wie viel Öl man tatsächlich verbraucht und welche Veränderungen an der Heizung welche Auswirkungen haben.
Die Lösung: eine Ölverbrauchsanzeige direkt in FHEM.
Hierfür habe ich ein Relais (Finder 55.34.8.230.0040 ELV) so angeschlossen, dass wenn der Brenner einschaltet sich der Kontakt am anderen Ende öffnet, dadurch kein Strom mehr zum KSE fließt und der dann "on" an FHEM sendet. Logischerweise hätte ich gedacht, es muss so angeschlossen sein, dass Strom zum KSE fließt wenn der Brenner an ist, dies hat aber nicht funktioniert, daher andersrum. Das Relais ist ein Wechsler, daher kein Problem. FHEM erstellt durch autocreate automatisch ein neues Device, definiert sieht es bei mir so aus:
define fs_boiler FS20 1be4 00 attr fs_boiler devStateIcon on:HeizungOn off:HeizungOff attr fs_boiler dummy 1 attr fs_boiler eventMap on:off off:on attr fs_boiler icon icoHEIZUNG attr fs_boiler model fs20kse
Und der entsprechende Plot:
define FileLog_fs_boiler FileLog ./log/fs_boiler-%Y.log fs_boiler attr FileLog_fs_boiler logtype fs20:Window,text define weblink_fs_boiler weblink fileplot FileLog_fs_boiler:fs20:CURRENT
Die Icons für die Heizung habe ich irgendwo aus dem Forum, weiß allerdings nicht mehr welcher Thread.
So, nun wird zumindest schonmal dargestellt, wann die Heizung an oder aus ist. Um den Ölverbauch zu messen werden einige weitere Definitionen benötigt.
Zuerst ein notify:
define boiler_consumption notify fs_boiler {\ if("$EVENT" eq "on") {\ $data{boiler_last} = time();;\ } elsif("$EVENT" eq "off") {\ $data{boiler_min} = (time()-$data{boiler_last})/60*0.03626;;\ fhem "trigger boiler_consumption $data{boiler_min}";;\ }\ }
Dieser berechnet aus der Differenz zwischen on und off Minutengenau den Verbrauch. Hierfür muss man wissen, welche Düse verbaut ist und was für einen Durchsatz sie hat. Unsere hat 2,5kg/Stunde Durchsatz (steht auf der Düse) dies habe ich in Liter umgerechnet (laut Wikipedia besitzt Heizöl eine Dichte von 0,820–0,860 kg/l [1]) und dies anschließend durch 60 geteilt um es als Liter/Minute darzustellen. Daher kommt der Wert 0.03626 im notify. Hierzu nun der Log und Plot:
define boiler_log FileLog ./log/boiler-%Y-%m.log boiler_consumption define Oilconsumption weblink fileplot boiler_log:oil:CURRENT attr Oilconsumption label sprintf("Consumption (l) today: %.2f total %.2f avg/h", $data{sum1}, ($data{sum1}/$hour))
Der Gplot-Syntax folgt gleich. Zuerst eine kurze Erklärung. Ich lasse im Label den Tagesverbrauch auf 2 Nachkommastellen gerundet sowie den aktuellen Durschnittsverbrauch Anzeigen. Leider funktioniert der Durschnittsverbrauch nur für den aktuellen Tag und nicht für vorherige, da immer durch die Aktuelle Stunde geteilt wird, bei vorherigen Tagen müsste aber durch 24 geteilt werden. Habe ich noch nicht geschafft. Die gplot für den Plot:
############################ # Display the oil consumption. # 2012-12-24_14:48:31 boiler_consumption 0.2634893333 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 ytics set y2tics set title '<L1>' set grid xtics y2tics set y2label "Oilconsumption (l)" set ylabel "Oilconsumption (l)" #FileLog 3::0: plot "<IN>" using 1:3 title 'Oilconsumption (l)' with lines
Das wärs für die Verbrauchsanzeige. Das meiste hiervon basiert auf verschiedene Beiträge aus dem Forum und google-groups.
Zur Kontrolle oder Alternativ kann man auch einen Betriebsstundenzähler programmieren:
define boiler_time notify fs_boiler {\ if("$EVENT" eq "on") {\ $data{boiler_last} = time();;\ } elsif("$EVENT" eq "off") {\ $data{boiler_min} = (time()-$data{boiler_last})/60;;\ fhem "trigger boiler_time $data{boiler_min}";;\ }\ } define boiler_time_log FileLog ./log/boiler_time-%Y-%m.log boiler_time
Hier lasse ich nur ein Log schreiben, ich benötige keinen Plot, müsste aber mit leichter Anpassung der oben stehenden gplot-Definition leicht zu bewerkstelligen.
Zusätzlich binde ich noch eine Grafik mit dem Ölpreisverlauf direkt von Tecson ein:
define Heizoel weblink image http://www.tecson.de/tl_files/pepesale/bilder_inhalt/_hoel.gif attr Heizoel htmlattr width="551" height="594"
Links
- Forenthread, in dem eine Änderung/Erweiterung diskutiert wird