Der Wasserzähler war ein letztes großes Puzzle Teil im Monitoring unserer Verbraucher. Energie, Heizung und Solar konnte ich bereits in Home Assistant integrieren. Gerade in der aktuellen Zeit mit Hyperinflation und explodierenden Kosten war es mir ein großes Anliegen die Verbrauchsdaten um den Wasserzähler zu ergänzen.
Vorab musste ich allerdings einige Hürden nehmen, um die Lösung auf Basis eines ESP32 und CC1101 lauffähig zu bekommen. Das lag zum einen daran, dass die Daten nicht per MQTT an Home Assistant gesendet wurden. Zum anderen dass der Entwickler des Codes leider keinen Support mehr gibt und nicht weiter am Projekt arbeitet.
Da mir die Skills fehlten den Code zu debuggen war ich auf weitere Unterstützung angewiesen. Diese suchte ich in der Home Assistant Community und in der ESPHome Community. Ebenfalls habe ich in Discord Gruppen versucht jemanden zu finden der sich den Code anschaut und evt. einen Lösungsansatz hat. Sicherlich ist das schwierig, wenn das entsprechende Funkmodul nicht vorhanden ist.
Arduino Sketch vorbereiten
Trotz der Schwierigkeiten habe ich nicht locker gelassen und dankenswerter Weise hat jemand aus der Home Assistant Community den entscheiden Fehler gefunden und einen Workaround aufgezeigt. Damit war es möglich den Wasserzähler auszulesen und Daten mittels InfluxDB und Grafana zu visualisieren. Grafan ist wirklich cool und recht einfach zu bedienen. Falls du mehr Ideen suchst, welche Projekte du mit InfluxDB und Grafana umsetzen kannst interessiert dich vielleicht folgender Artikel. Hier beschreibe ich wie du Apple Health Daten per Automation in Home Assistant integrieren und visualisieren kannst.
Vorschau | Produkt | Bewertung | Preis | |
---|---|---|---|---|
AZDelivery 3 x ESP32 D1 Mini NodeMCU WiFi Modul ESP 32 Bluetooth Internet Entwicklungsboard |... | 23,99 EUR 18,74 EUR | Bei Amazon kaufen | ||
Nooelec NESDR Nano 2 Plus – Winziges Schwarzes RTL-SDR-USB-Set (RTL2832U & R820T2) mit Extrem... | 42,95 EUR | Bei Amazon kaufen |
Download und Anpassung Arduino Code
Los geht es mit dem Download des Projektes bzw. dem zugrundeliegenden Code. Damit die Daten des Wasserzähler ausgelesen werden können müssen zwei Dateien angepasst werden.
- everblu-meters-esp8266.ino
- everblu_meters.h
Starten wir mit der everblu-meters-esp8266.ino. Hier müssen im oberen lediglich die WLAN und MQTT daten eingetragen werden:
Bei der everblu_meters.h Datei wird es schon schwieriger. In dieser Datei wird die Frequenz deines Wasserzählers eingetragen über welche dieser funkt. In der Anleitung wird empfohlen einen RTL-SDR zu verwenden. Ich hatte mir zwar einen gekauft, bin damit aber gar nicht zurecht gekommen. Dabei geht es viel einfacher!
Ebenfalls in der everblu-meters-esp8266.ino findest du im unteren Bereich folgenden Code:
Der Code wird einfach ein kommentiert und anschließend der Sketch auf den ESP32 geflasht. Natürlich muss an dieser Stelle CC1101 mit dem ESP32 verbunden sein. Die Pin Belegung ist folgende:
Über den Seriell Monitor kannst du nun verfolgen wie jede verfügbare Frequenz abgefragt wird. Wird die passende Frequenz gefunden wird diese geloggt mit der Meldung Got Frequenzy und direkt die Daten des Wasserzählers mit ausgelesen. Das sind:
- Wasserstand
- Batteriestatus
- Counter
Wichtig ist, nachdem die Frequenz erfolgreich ermittelt wurde, dass der Code in der everblu-meters-esp8266.ino wieder auskommentiert wird.
Die ermittelte Frequenz kann nun kopiert und in die everblu_meters.h eingesetzt werden.
Die Daten zum Herstellungsjahr als auch zur Seriennummer stehen unterhalb des Barcode auf dem Wasserzähler. Das Jahr wird zweistellig angegeben und die Seriennummer mit sechs Stellen. Sollte deine Seriennummer eine führende Null haben musst du diese Weg lassen.
Daten werden nicht ausgelesen
Es kann schon eine große Hürde sein, die Frequenz des Wasserzählers zu bestimmen. Umso größer war bei mir die Freude als diese gefunden wurde durch den Scan. Ein großer Schritt vor allem weil ich direkt sehen konnte, dass der CC1101 funktioniert und die Daten des Wasserzählers angezeigt hat.
Ich dachte nun ok, Sketch erneut kompilieren und flashen und los gehts. Leider wurden die Daten aber nicht per MQTT an Home Assistant gesendet. Über den MQTT Explorer habe ich gesehen, dass erst gar kein Topic angelegt. Somit war mir klar es muss am Code liegen, weil meine Daten zum MQTT Server korrekt eingetragen waren.
Ich hatte den Entwickler auf das Problem aufmerksam gemacht. Dieser teilte dann leider mit, dass er keinen Support mehr gibt und das Projekt nicht weiter entwickelt. Im ersten Moment war das eine sehr große Enttäuschung weil der Code grundsätzlich funktioniert. Lediglich die MQTT Programmierung hakte.
Erst hatte ich das Projekt beiseite gelegt, weil ich damit auch nicht weiter gekommen bin. Im Zweiten Ansatz versuchte ich eine Lösung auf Basis WiringPI. Schnell musste ich feststellen, dass das Thema gestorben ist und damit wollte ich keine weitere Zeit verschwenden.
Als nächstes probierte ich viele Wege parallel. Mir war klar dass nur jemand mit dem notwendigen Skillset die Lösung findet. Ich frage in der Arduino, ESPHome und HA Community nach. In der ESP und Arduino Community hatte ich keinen Erfolg. Plötzlich meldete sich jemand in der HA Community, dass er den Wasserzähler auslesen kann. Ich hab das Mitglied direkt kontaktiert und es war so freundlich seine Erkenntnis direkt zu teilen!
Hier der Workaround:
In der everblu-meters-esp8266.ino muss einmalig die Zeile 258 geändert werden.
Der Aufruf onScheduled(); wird auskommentiert:
//onScheduled();
Eine Zeile darunter wird onUpdateData(); eingefügt:
onUpdateData();
Anschließend den Sketch einmal auf den ESP flashen. Jetzt sollte das Topic und die Sensor Daten in Home Assistant angelegt werden! Ist das der Fall kann onUpdateData(); wieder auskommentiert und onScheduled(); einkommentiert werden. Nun nochmal den Sketch flashen und das wars!
Vorschau | Produkt | Bewertung | Preis | |
---|---|---|---|---|
AZDelivery 3 x ESP32 D1 Mini NodeMCU WiFi Modul ESP 32 Bluetooth Internet Entwicklungsboard |... | 23,99 EUR 18,74 EUR | Bei Amazon kaufen | ||
Nooelec NESDR Nano 2 Plus – Winziges Schwarzes RTL-SDR-USB-Set (RTL2832U & R820T2) mit Extrem... | 42,95 EUR | Bei Amazon kaufen |
Tägliche Wasserzähler Abfrage
In der everblu-meters-esp8266.ino kannst du ebenfalls steuern, zu welcher Zeit dein Wasserzähler ausgelesen werden soll. Das passiert einmal am Tag. Zu beachten ist, dass das Zeitschema UTC und damit 2 Stunden zurück ist. Im oberen Abschnitt findet sich folgender Code:
Home Assistant Dashboard
Ein sinnvoller Platz, um den Wasserzähler im Auge zu behalten, ist sicherlich das Energy Dashboard. Aktuell kann der Sensor eines Wasserzählers dort aber nicht integriert werden. In der HA Community laufen auch Diskussionen, dass Energy Dashboard umzubenennen und Wasserzähler Sensoren zu integrieren. Derzeit gibt es aber keine Möglichkeit. Es gibt aber schlimmeres.
Ich habe mir ein neues Dashboard erstellt und den Wasserzähler als auch die Grafana Auswertung dort hinterlegt. Mich interessiert langfristig vor allem, wie sich unser Verbrauch über die Monate entwickelt, um Muster zu erkennen, die es uns ermöglichen über Einsparungen nachzudenken.
Da der Wasserzähler den Verbrauch erstmal nur hochzählt benötigt es eine Berechnung oder Sensor, welcher den Verbrauch pro Tag ermittelt. Mit diesem Wert lässt sich anschließend rechnen. Ebenso auch Visualisierungen darstellen. Ein schneller Weg war für mich einen Utility Meter Helper zu erstellen. In Summe sind es drei geworden für:
- Tag
- Woche
- Monat
Hier die Daten des Wasserzähler als auch der Utility Meter:
Der Wochen- und Monatswert sind aktuell noch gleich, weil noch keine volle Woche zu Ende ist.
So sieht dann das grafische Ergebnis derzeit aus:
Fazit
Der Aufwand hat sich für mich gelohnt! Ich bin mit dem Ergebnis sehr zufrieden und bisher, auch wenn die Testzeit noch nicht lange ist, läuft die Lösung stabil. Die Daten werden jeden Tag übertragen und ich kann künftig entsprechenden Auswertungen fahren.
Den Inhalt des Beitrags findest du ebenfalls auf Youtube im zugehörigen Video: