Füllstandsanzeige
Problem: Der Heizöltank ist immer "unerwartet" leer Auf Basis meiner Ölverbrauchsanzeige / Betriebsstundenzähler habe ich eine Füllstandsanzeige mit Warnfunktion programmiert, der laufend den Tankinhalt misst und bei einem eingestellten Wert eine eMail verschickt:
define oil_level notify fs_boiler {\ $data{tank_level} = Value("tanklevel");;\ if("$EVENT" eq "on") {\ $data{tank_last} = time();;\ } elsif("$EVENT" eq "off") {\ $data{tank_level} -= (time()-$data{tank_last})/60*0.03626;;\ fhem "trigger oil_level $data{tank_level}";;\ fhem "set tanklevel $data{tank_level}";;\ }\ }
Dieser notify berechnet nach jedem Brennerlauf die Restmenge im Tank. Hierfür wird von der Variable $data{tank_level} der berechnete Verbrauch abgezogen und anschließend im Dummy tanklevel gespeichert.
Hieraus wird ein Plot generiert:
define oil_log FileLog ./log/oil-%Y-%m.log oil_level define Oillevel weblink fileplot oil_log:tank:CURRENT attr Oillevel label sprintf("Current Oillevel (l): %.2f", $data{currval1})
Gplot:
############################ # Display the tank level. # 2012-12-24_14:48:31 oil_level 1082.99740933331 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 "Oillevel (l)" set ylabel "Oillevel (l)" #FileLog 3::0: plot "<IN>" using 1:3 title 'Oillevel (l)' with lines
Dummy tanklevel:
define tanklevel dummy
Dummy, damit nur EINE eMail versandt wird:
define OilmailSent dummy
Der eigentliche Warnnotify:
define oil_warning notify tanklevel {\ if($data{tank_level} <= "500" && Value("OilmailSent") ne "true") {\ system("/sbin/mailer -s 'Oiltank (l): $data{tank_level}'");;\ fhem("set OilmailSent true");;\ }\ }
Fällt der Wert unter 500, wird eine eMail versandt (hierfür den Push service in der Fritz!Box aktivieren) und der mail Dummy auf true gesetzt.
Damit man den Dummy nicht manuell wieder auf false stellen muss, wird hierfür ein weiterer notify angelegt, der bei mehr als 500 auslöst:
define oil_warning_off notify tanklevel {\ if($data{tank_level} > "500" && Value("OilmailSent") ne "false") {\ fhem("set OilmailSent false");;\ }\ }
Nachdem dies alles definiert wurde, muss der Ausgangswert über das Befehlsfeld eingegeben werden:
{ $data{tank_level} = 3000 }
Ausgangswert 3000 Liter
Dieser sollte idealerweise auch in den Dummy übertragen werden (Befehlsfeld):
{ fhem "set tanklevel $data{tank_level}" }
Ein weiterer Grund für den Dummy liegt darin, dass Fhem diesen Wert vor einem Neustart durch "save" speichert und nachher wieder lädt.
Füllt man seinen Tank auf, kann man einfach den Lieferschein nehmen und diese Menge der Variable hinzufügen (in der Kommandozeile):
{ $data{tank_level} += 2500 }
Auftanken von 2500 Liter