Wasserstand (o.ä.) in Fhem plotten

Kategorie: 
IT Kram

Da ja meine Wohnmobilüberwachung/Schaltung in Richtung Fhem geht, mußte ich mir nun Gedanken zu Dingen wie Wasserstand auslesen machen.

Dies war mangels fundierter Fhem Kenntnisse ein wenig fummelig... Aber nun gehts, sogar in zwei Varianten.

Zunächst habe ich ein pythonscript zusammengemogelt, welches die Ultraschallsensoren HC SR04 Ultraschall Sensoren ansprechen, auslesen und aus vier Messungen ein Mittel bilden kann. Zu den ermittelten Zentimetern werden noch die Prozente ermittelt. Für die Zentimeter gilt: Je weniger, desto voller der Tank. Für die Prozent: 100% ist voll.

Hier das Script, welches auf Basis dieser Seite passiert ist:
http://www.gtkdb.de/index_36_2272.html
-- Ausgeschnitten, Theme zerschießt die pythonformatierung --

Anzupassen sind noch die Werte, die die Prozente ermitteln. Hier wählte ich der Einfachheit halber 25% Schritte. Sinnvoller sind natürlich kleinere Schritte, die ja nach dem obigen Muster sehr einfach zuzufügen sind. Da ich aber zum Anzeigen der verbliebenen Zentimeter tendiere, mach ich mir jetzt mal nicht die Mühe ;-)

Nungut, das Logfile wird nun nach /tmp/wasserstand.log geschrieben.

Nun muß noch der Teil in Fhem eingerichtet werden. Da ich alles möglichst zentral haben will, soll auch Fhem steuern, wann das Script aufgerufen wird. Dazu wird erst ein dummy eingerichtet, auf dem nachher alles andere basiert:

define Wasserstand dummy

Dann zunächst der Aufruf des Scripts:

define Wassserstand_lesen at +*00:05:00 {system("sudo /home/pi/Fuellstand/Wasserstand.py&");;}

Hier wird alle 5 min das Script, welches oben steht, als "Wasserstand.py" aufgerufen.
Weiter gehts mit dem Anlegen eines "Fakelogfiles", welches nicht durch Fhem geschrieben wird, aber ausgelesen werden kann. Denkbar ist natürlich auch etwas reinzuschreiben... Wers mag...

define Filelog_Wasser FileLog /tmp/wasserstand.txt Wasserstand:

Und zum Schluß noch den Plot erstellen:

define SVG_Filelog_Wasser_1 SVG Filelog_Wasser:SVG_Filelog_Wasser_1:CURRENT

attr SVG_Filelog_Wasser_1 fixedrange hour

Fehlt nur noch meine Variante des gplot files, an dem man sich langhangeln kann, wenn gewünscht.

set terminal png transparent size crop
set output '.png'
set xdata time
set timefmt "%Y-%m-%d_%H:%M:%S"
set xlabel " "
set title ''
set ytics
set y2tics
set grid
set ylabel "Wasserstand"
set y2label ""
set yrange [0:25]
set y2range [25:0]

#Filelog_Wasser 4:Wasserstand\x3a.cm\x3a::

plot "" using 1:2 axes x1y2 title 'vWasserstand' ls l2fill lw 1 with lines

hier wird die x-Achse auf eine Stunde begrenzt, die y-Achse auf 0-25 festgesetzt und mit der linken Leiste blende ich die Prozent im Verhältnis zum Tankinhalt ein, die ja durch die Höhe des Tanks (hier 25cm) sozusagen klar sind...
Wie gesagt, ich nutze hier die ermittelten Zentimeter. Das Logfile gibt aber auch die in meiner Version noch recht ungenauen Prozentwerte her.

Noch ein paar Tips:
- Zum Testen reichen 5 min oder mehr, im Livebetrieb würde ich auf zwei oder drei Minuten gehen
- Wenn das Logfile nicht nach jedem Reboot leer sein soll, muß es woanders liegen, dann am besten im Fhem/log Ordner.
- den Graphen weniger als eine Stunde, schließlich will man ja den aktuellen Wert.

So, nun noch ein Bildchen für Euch: