Füllstandsanzeige: Unterschied zwischen den Versionen
(Die Seite wurde neu angelegt: „Problem: Der Heizöltank ist immer "unerwartet" leer Auf Basis meiner Ölverbrauchsanzeige / Betriebsstundenzähler habe ich eine Füllstandsanzeige mit Wa…“) |
Krikan (Diskussion | Beiträge) (FHEM(R)) |
||
(2 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
{{Randnotiz|RNTyp=y|RNText=Die gezeigten (''notify'') Codebeispiele sind für die (nicht empfohlene) direkte Eingabe in die Konfigurationsdatei. Bei Eingabe über das Webinterface müssen entsprechende Anpassungen vorgenommen werden.}} | |||
Problem: Der Heizöltank ist immer "unerwartet" leer | 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: | 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: | ||
Zeile 4: | Zeile 5: | ||
<nowiki>define oil_level notify fs_boiler {\ | <nowiki>define oil_level notify fs_boiler {\ | ||
$data{tank_level} = Value("tanklevel");;\ | $data{tank_level} = Value("tanklevel");;\ | ||
if(" | if("$EVENT" eq "on") {\ | ||
$data{tank_last} = time();;\ | $data{tank_last} = time();;\ | ||
} elsif(" | } elsif("$EVENT" eq "off") {\ | ||
$data{tank_level} -= (time()-$data{tank_last})/60*0.03626;;\ | $data{tank_level} -= (time()-$data{tank_last})/60*0.03626;;\ | ||
fhem "trigger oil_level $data{tank_level}";;\ | fhem "trigger oil_level $data{tank_level}";;\ | ||
Zeile 12: | Zeile 13: | ||
}\ | }\ | ||
}</nowiki> | }</nowiki> | ||
Dieser | 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: | Hieraus wird ein Plot generiert: | ||
Zeile 38: | Zeile 39: | ||
plot "<IN>" using 1:3 title 'Oillevel (l)' with lines</nowiki> | plot "<IN>" using 1:3 title 'Oillevel (l)' with lines</nowiki> | ||
Dummy tanklevel: | Dummy tanklevel: | ||
<nowiki>define tanklevel dummy</nowiki> | |||
Dummy, damit nur EINE eMail versandt wird: | Dummy, damit nur EINE eMail versandt wird: | ||
<nowiki>define OilmailSent dummy</nowiki> | |||
Der eigentliche Warnnotify: | Der eigentliche Warnnotify: | ||
<nowiki>define oil_warning notify tanklevel {\ | <nowiki>define oil_warning notify tanklevel {\ | ||
if($data{tank_level} <= "500" && Value("OilmailSent") ne "true") {\ | if($data{tank_level} <= "500" && Value("OilmailSent") ne "true") {\ | ||
Zeile 51: | Zeile 51: | ||
}\ | }\ | ||
}</nowiki> | }</nowiki> | ||
Damit man den Dummy nicht manuell wieder auf false stellen muss hierfür ein weiterer notify der bei mehr als 500 auslöst: | 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: | |||
<nowiki>define oil_warning_off notify tanklevel {\ | <nowiki>define oil_warning_off notify tanklevel {\ | ||
Zeile 60: | Zeile 61: | ||
}\ | }\ | ||
}</nowiki> | }</nowiki> | ||
Nachdem dies alles | |||
Nachdem dies alles definiert wurde, muss der Ausgangswert über das Befehlsfeld eingegeben werden: | |||
<nowiki>{ $data{tank_level} = 3000 }</nowiki> | <nowiki>{ $data{tank_level} = 3000 }</nowiki> | ||
Ausgangswert 3000 Liter | Ausgangswert 3000 Liter | ||
Dieser sollte idealerweise auch | Dieser sollte idealerweise auch in den Dummy übertragen werden (Befehlsfeld): | ||
<nowiki>{ fhem "set tanklevel $data{tank_level}" }</nowiki> | |||
Ein weiterer Grund für den Dummy liegt darin, dass FHEM diesen Wert vor einem Neustart durch "save" speichert und nachher wieder lädt. | |||
Ein weiterer Grund für den Dummy liegt darin, dass | |||
Füllt man seinen Tank auf, kann man einfach den Lieferschein nehmen und diese Menge der Variable hinzufügen (in der Kommandozeile): | Füllt man seinen Tank auf, kann man einfach den Lieferschein nehmen und diese Menge der Variable hinzufügen (in der Kommandozeile): | ||
<nowiki>{ $data{tank_level} += 2500 }</nowiki> | |||
Auftanken von 2500 Liter | Auftanken von 2500 Liter | ||
[[Kategorie:Code Snippets]] |
Aktuelle Version vom 26. Januar 2017, 23:35 Uhr
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