Füllstandsanzeige: Unterschied zwischen den Versionen

Aus FHEMWiki
(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…“)
 
Keine Bearbeitungszusammenfassung
Zeile 74: Zeile 74:
  <nowiki>{ $data{tank_level} += 2500 }</nowiki>
  <nowiki>{ $data{tank_level} += 2500 }</nowiki>
Auftanken von 2500 Liter
Auftanken von 2500 Liter
[[Kategorie:Code Snippets]]

Version vom 11. Mai 2013, 23:25 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("%" eq "on") {\
   $data{tank_last} = time();;\
  } elsif("%" 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 brechnet nach jeden Brennerlauf die Restmenge im Tank. Hierfür wird von der Variable $data{tank_level} der berechnete Verbrauch (siehe erwähnter Wiki EIntrag) 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 hierfür ein weiterer notify 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 in der Config eingegeben wurde, muss der Ausgangswert durch die Kommandozeile eingegeben werden:

{ $data{tank_level} = 3000 }

Ausgangswert 3000 Liter

Dieser sollte idealerweise auch im Dummy übertragen werden (Kommandozeile):

{ 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