Update 04.03.2019: Zur Messung des Füllstands der Zisterne habe ich einen neuen Artikel mit einem anderen Ansatz zur Messung verfasst. Dieser ist hier zu finden.
Wieder eins von diesen Projekten wo viele sagen: „Das braucht doch kein Mensch!“. Richtig, das braucht man auch nicht nicht. Es macht aber Spaß (zumindest mir), den Füllstand meiner Zisterne zu wissen ohne das ich den Betondeckel rausheben muss und mir dabei die Finger quetsche.
Im Homematik-Sensor-Park gibt es einen kapazitiven Füllstandssensor (Hm-Sen-Wa-Od) als Bausatz der diese Aufgabe übernehmen kann. Wobei „Bausatz“ nicht wirklich schwierige Lötarbeiten erfordert, sondern nur ein paar wenige Teile auf die Platine gelötet werden müssen (Batteriehalter, Funkmodul) und das Ganze in dem mitgelieferten Gehäuse verpackt werden muss.
Nach dem Zusammenbau der Platine müssen die Messleitungen auf die entsprechende Länge (Tiefe der Zisterne und geplante Einbauhöhe des Sensors) angepaßt werden. Die Enden der Messleitungen müssen mit den beiligenden „Schrumpftüllen“ die mit Kleber gefüllt sind wasserdicht verschlossen werden. Dazu reicht ein normaler Fön.
Alle 10 cm von unten beginnen müssen nun die Stege befestigt werden. Dieser Abstand wird später für die Kalibrierung benötigt. Dann die Anschlussleitungen durch die Kabeldurchführungen an den beiden Klemmen befestigen.
Reichweite
Ich war zuerst skeptisch ob das mit dem Funk vom Kellerraum bis in die Zisterne funktioniert?! Immerhin ist der Sensor etwa 1m unter der Erde im Betonverlies gefangen… Bei mir sind es aber nur 10m Luftline zwischen Sensor und COC und es gibt keine Probleme mit der Funkverbindung.
Anlernen
Zum Anlernen des Sensors muss die Zentrale in den Anlernmodus gebracht werden
set <zentrale> hmPairForSec <zeit_in_sekunden>
und danach am Füllstandssensor die „Sensor“-Taste für <1 Sekunde gedrückt werden. Die Setup-LED blinkt in der Anlernphase und erlischt bei Erfolg. Danach sollte in der fhem.cfg ein ähnlicher Eintrag wie folgt erstellt worden sein:
define Zisterne CUL_HM 226555
attr Zisterne .devInfo 020101
attr Zisterne .stc 60
attr Zisterne IODev COC
attr Zisterne autoReadReg 4_reqStatus
attr Zisterne expert 2_full
attr Zisterne firmware 1.2
attr Zisterne model HM-Sen-Wa-Od
attr Zisterne peerIDs
attr Zisterne rawToReadable 10:0 72:1000 144:2000 216:3000 288:4000
attr Zisterne room Garten
attr Zisterne serialNr KEQ0365449
attr Zisterne subType sensor
#attr Zisterne hmClass sender
define FileLog_Zisterne FileLog /var/log/fhem/Zisterne-%Y.log Zisterne
attr FileLog_Zisterne logtype text
attr FileLog_Zisterne room Garten
Ich hab im Beispiel den kryptischen Gerätenamen durch „Zisterne“ ersetzt. Das neue Gerät sollte dann auch in der FHEM-Weboberfläche im Raum „Garten“ zu finden sein.
Mit dem folgenden Befehl werden die Register des Füllstandsmessers ausgelesen:
get Zisterne regList
Dabei sollte folgende Ausgabe zu sehen sein. Werden die Register nicht korrekt ausgelesen kann das u.a. mit einer zu alten Version von FHEM zusammenhängen. In der Version 5.3 war das Gerät anscheinend noch nicht implementiert . Mit der FHEM Version 5.5 funktionierte das Auslesen der Register korrekt.
list: register | range | peer | description
0: cyclicInfoMsgDis | 0 to 255 | | cyclic message
0: intKeyVisib | literal | | visibility of internal channel options:visib,invisib
0: localResDis | literal | | local reset disable options:on,off
0: pairCentral | 0 to 16777215 | | pairing to central
0: transmDevTryMax | 1 to 10 | | max message re-transmit
1: caseDesign | literal | | case desing options:verticalBarrel,horizBarrel,rectangle
1: caseHigh | 100 to 10000cm | | case hight
1: caseLength | 100 to 10000cm | | case length
1: caseWidth | 100 to 10000cm | | case width
1: fillLevel | 100 to 300cm | | fill level
1: ledOnTime | 0 to 1.275s | | LED ontime
1: meaLength | 110 to 310cm | |
1: transmitTryMax | 1 to 10 | | max message re-transmit
1: useCustom | literal | | use custom options:on,off
1: waterUppThr | 0 to 256 | | water upper threshold
1: waterlowThr | 0 to 256 | | water lower threshold
4: expectAES | literal | required | expect AES options:on,off
4: fillLvlLoThr | 0 to 255 | required | fill level lower threshold
4: fillLvlUpThr | 0 to 255 | required | fill level upper threshold
4: peerNeedsBurst | literal | required | peer expects burst options:on,off
Kalibrierung
Vor der Kalibrierung des Sensors müssen noch verschiedene Zisternen-spezifische Werte im Register gesetzt werden. Dazu gehören:
- Behälterform
- Behälterhöhe
- Behälterdurchmesser
- Länge der Messkabel
- maximale Füllhöhe
Ich habe die maximale Füllhöhe und die Behälterhöhe auf die gleichen Werte gesetzt. Mit den folgenden Kommandos werden die Register gesetzt:
set Zisterne regSet caseDesign verticalBarrel
set Zisterne regSet caseHigh 130
set Zisterne regSet caseWidth 200
set Zisterne regSet meaLength 180
set Zisterne regSet fillLevel 130
Danach sollten die Werte in der Geräteübersicht in den Readings angezeigt werden:
Das „set_“ vor den Werten sollte dann nach mindestens 24 Stunden verschwinden. Bei Problemen mit dem korrekten Setzen der Register wurde u.a. hier behandelt.
Sind die Werte alle korrekt gesetzt, erfolgt die eigentliche Kalibrierung des Sensors die nur bei komplett gefüllter Zisterne erfolgen kann. Dazu wie in der Anleitung beschrieben verfahren:
Falls die grüne LED nicht erlischt, d.h. die Tabelle noch nicht vollständig gefüllt ist, hat das evtl. mit einer falschen angabe der Messleitungslänge und/oder der maximalen Füllhöhe in den Registern zu tun.
Befestigung in der Zisterne
Ich habe den Sensor auf ein Brett geschraubt welches ich lose auf den Rand eines Betonringes in der Zisterne gelegt habe. Das sollte ausreichen!
Daten loggen
Den Füllstand der Zisterne lasse ich wieder per Cron stündlich in eine MySQL-Datenbanktabelle schreiben. Dazu wird der Sensor wieder per Telnet abgefragt:
get_zisterne.php
[cclN_php]
„;
$mysqluser=““;
$mysqlpwd=““;
$connection=mysql_connect($mysqlhost, $mysqluser, $mysqlpwd) or die („Verbindungsversuch fehlgeschlagen“);
$mysqldb=““;
mysql_select_db($mysqldb,$connection) or die(„Konnte die Datenbank nicht waehlen.“);
$sql = „INSERT INTO zisterne (timestamp,fuellstand) VALUES (CURRENT_TIMESTAMP,$zustand[1])“;
$query = mysql_query($sql) or die(„Anfrage 1 nicht erfolgreich“);
?>
[/cclN_php]
Visualisierung
Die Visualisierung habe ich wieder in meine „Intranet“-Seite eingebaut und neben dem aktuellen Füllstand in % wird noch ein Graph der letzten 14 Tage gezeichnet.
Da wir die Tage einen Rollrasen verlegt haben wo ich ordentlich gießen musste und es zwei Tage später geregnet hat, sieht man das auch schön im Graphen. Die Einheit der X-Achse muss noch angepaßt werden.
Und mal wieder viel Spaß beim Datenloggen
Chris