Wasserzähler überwachen, Verbrauch aufzeichnen: ESP32-Cam

This page is also available in English

Vorab schon mal ein herzliches Dankeschön an die Macher des "AI-on-the-edge-device" Digitizer. Das Projekt ermöglicht das Digitalisieren des Wasserverbrauchs einer analogen Wasseruhr mit einer 10 € billigen ESP32-Cam. Wie das genau funktioniert, beschreibe ich in diesem Artikel.

Profil:

SoftwareAI-on-the-edge-device
GitHubhttps://github.com/jomjol/AI-on-the-edge-device
aktuelle Version 13.0.8
gefunden03.01.2023

Welche Vorteile bringt ein digitaler Wasserzähler?

Als Wasserzähler für einen Hausanschluss sind analoge Wasseruhren auch heute noch die Norm. Während bei einem Stromanschluss die Daten mittlerweile über einen Smartmeter an den Betreiber übermittelt werden, muss der Wasserverbrauch jährlich von den Hausbesitzern abgelesen und bekannt gegeben werden. Das jährliche Ablesen des Wasserstandes ist noch kein vernünftiger Grund, um den Wasserverbrauch aufzuzeichnen, vielmehr liefert eine Aufzeichnung des Wasserverbrauchs einen besseren Überblick im Alltag. Als Beispiel könnte bei einem abnormalen Verbrauch ein Alarm ausgelöst und dadurch eventuell schneller reagiert werden. Als mögliche Auslöser fällt mir eine defekte Toilettenspülung, ein nicht abgedrehter Wasserhahn oder im schlimmsten Fall eine undichte Leitung ein.

Wie kann bei einem Wasserzähler ein Funkmodul nachgerüstet werden?

Neben speziellen Funk-Aufsatzmodulen beweist das "AI-on-the-edge-device" - Projekt, dass nicht digitale Wasserzähler auch mittels Kamera ausgelesen werden können. Bei dem Projekt wird eine ESP32-Cam direkt über der Wasseruhr angebracht. Der Mikrocontroller erstellt regelmäßig ein Foto und erkennt darauf mit  einer angepassten Texterkennung den aktuellen Zählerstand. Der Zählerstand kann auf einer SD-Karte aufgezeichnet und über das integrierte Webinterface angezeigt werden. Zudem kann der aktuelle Zählerstand, für eine bessere Visualisierung, mittels WLAN an das Smart-Home übermittelt werden, als Beispiel an Home Assistant

Benötigte Hardware

Zunächst wird für das Projekt eine ESP32 mit Kamera-Modul benötigt. Für das Aufspielen des Image habe ich mir zusätzlich einen USB-Adapter besorgt:

 

Zudem benötigt der ESP32 für das Speichern der Daten eine kleine SD-Karte und als Stromversorgung verwende ich ein altes Handy-Netzteil. Angebracht habe ich den ESP mit einem 3D-Gehäuse aus dem 3D-Drucker:

Anbringen des Mikrocontrollers über der Wasseruhr

Die bestehenden Vorlagen auf Thingiverse haben meine Erwartungen nicht ganz erfüllt, daher habe ich ein eigenes Gehäuse gezeichnet. Ich wollte ein Modell, welches sich in einem Stück ohne Support drucken lässt und relativ wenig Filament benötigt. Zudem wollte ich die interne Kamera verwenden und den Wasserstand im Betrieb ablesen können ohne das Gehäuse herunternehmen zu müssen.

Damit sich die Reflexionen am Glas in Grenzen halten, habe ich das Gehäuse um 9° geneigt und das Licht der LED etwas abgeschirmt:

Die eingebaute LED reicht für ein ordentliches Bild, zusätzliche LEDs sind mit diesem Modell nicht nötig. Ich habe die Vorlage auf dieser Seite und auf Thingiverse als Download zur Verfügung gestellt, siehe: Top sinnvolle und weniger sinnvolle 3D-Modelle.

ESP32-Cam fokussieren

Der Fokus der Kamera ist standardmäßig in die Ferne gestellt. Um bei geringem Abstand ein scharfes Bild zu bekommen, muss der Kameraring etwas gegen den Uhrzeigersinn herausgedreht werden:

 

Achtung: Bei neuen Kameras ist die Linse festgeklebt, entsprechend lässt sich diese anfangs nur schwer bewegen. Ich habe die Linse festgehalten und mit einem kleinen flachen Schraubenzieher auf einen Zahn gedrückt, zugegeben relativ fest.

Schritt für Schritt: Aufspielen der Software

Zunächst habe ich den ESP32 mit dem USB-Adapter verbunden:

 

Der ESP32 muss durch das Überbrücken von "IOo" und "GND" in den Flash-Modus gesetzt werden:

Wurde der ESP verkabelt, kann dieser per USB an den Computer angeschlossen und am einfachsten über den Web-Installer im Browser geflasht werden:  https://jomjol.github.io/AI-on-the-edge-device/index.html

Siehe auch: https://github.com/jomjol/AI-on-the-edge-device

Nachdem das Projekt aufgespielt wurde, kann das Kabel zwischen Pin "IOo" und "GND" wieder entfernt werden. Jetzt fehlt uns noch die SD-Karte. Vorbereitend benötigt diese ein MBR-Layout und eine FAT32-Partition mit 32K als Zuordnungseinheit:

Der Inhalt der SD-Karte kann vom GitHub-Projekt, Unterordner "sd-card" auf die SD-Karte kopiert werden: github.com/jomjol/AI-on-the-edge-device/tree/rolling/sd-card.

Der Ordner "sd-card" des heruntergeladenen ZIP-Archivs kann einfach auf die SD-Karte entpackt werden:

Für die WLAN-Verbindung muss dann noch die Datei "wlan.ini" mit den WLAN-Zugangsdaten angepasst werden. 

Zum Starten des ESP habe ich die vorbereitete SD-Karte in den ESP gegeben und eine 5V Stromversorgung angeschlossen, in meinem Fall ein altes NOKIA-Ladegerät: 

Bitte hier unbedingt auf die richtige Spannung (5V) und die richtige Polung achten. Blau im Bild ist "-" und violett "+".

Die LED am ESP32 signalisiert den Bootvorgang. Blinkt diese dauerhaft, stimmt etwas mit der SD-Karte nicht. War der Bootvorgang erfolgreich, verbindet sich der ESP mit dem WLAN:

  • Dauerhaftes schnelles blinken: Die SD-Karte funktioniert nicht.
  • 5 x schnelles Blinken (< 1 Sekunde): Verbindung steht noch aus
  • 3 x langsames Blinken (1 Sekunde an/aus): WLAN-Verbindung hergestellt

Nachdem sich der ESP über die hinterlegten WLAN-Zugangsdaten verbunden hat, holt dieser eine IP-Adresse vom DHCP-Server. Ein Blick auf den Router verrät uns die IP-Adresse für den Zugriff, alternativ kann die Adresse wie folgt herausgefunden werden: IP-Adressen im Netzwerk finden, auch wenn deren Firewall aktiviert ist.

Wird die IP-Adresse nach dem Start des ESP im Browser aufgerufen, erscheint zunächst ein Setup-Wizard des Digitizer. Der erste Schritt des Wizards ist das Erstellen eines Referenzbildes. Das Referenzbild wird später für das Definieren der ROIs (Regions of Interest), also der Bereiche, von denen der Zählerstand abgelesen werden soll, verwendet. Die "Aligment Marks" sind beliebige markante Bereiche am Zähler damit der Digitizer das Bild bei jedem Ablesevorgang justieren kann. Die ROIs bestehen aus Digitalen ROIs, also den Zahlen des Zählers und analogen ROIs, den Zeigern. Zunächst die digitalen ROIs:

Ich habe diese einfach fortlaufend angelegt dig1 bis dig5. Die analogen ROIs sind die Uhren, auch hier ana1 bis ana4

ana1 ist bei mir die erste m³-Kommastelle x0,1, ana2 dann x0,01 usw.

Einstellung auf Liter/h und nicht m³/h

Anfangs hatte ich die Standardeinstellung mit m³/h. Nachdem ich mir mit Liter mehr vorstellen kann, habe ich begonnen m³ in Home Assistant auf Liter umzuwandeln und dabei alle Werte doppelt. Zuletzt habe ich die ursprünglichen Werte noch einmal verworfen und den Digitizer auf die Maßeinheit Liter umgestellt:

 

Falsche Werte beim Wechsel von 9 auf 0

Zunächst wurden die Werte korrekt abgelesen, dann hatte ich allerdings das Problem, dass beim Wechsel von 9 auf 0 die digitalen Zahlen bereits eine höhere Zahl anzeigen. Die Kommastellen von den analogen Uhren wurden einfach mit den digitalen Werten addiert, entsprechend wurde zum Beispiel aus 889,9 dann 890,9. Abhilfe schaffen die folgenden Einstellungen: "dig-class11_1500_s2.tflite" und "CheckDigitIncreaseConsistency" in "Expert Mode":

"CheckDigitIncreaseConsistency" verwendet, nach einem Wechsel von 9 auf 0, den vorherigen Wert für die nächsthöheren 10er-Potenzen.
Hier ein konkretes Beispiel: Der Zähler erkennt aufgrund des vorherigen Werts den korrekten Zählerstand von 889954,6 und nicht die abgelesenen digitalen Zahlen und analogen Werte, was ohne "CheckDigitIncreaseConsistency" den falschen Wert: 890954,6 ergeben würde:

Fazit - Zahl sich der Digitizer aus?

Zugegeben hatte ich anfangs keine Notwendigkeit den Wasserverbrauch aufzuzeichnen. Zunächst hat mich das Projekt an sich fasziniert, zumal es die technischen Möglichkeiten der ESP32-Cam so ziemlich ausreizt. Die benötigte Zeit für den Aufbau ist überschaubar und auch die Kosten für die ESP32-Cam sind mehr als in Ordnung. Also ja ich kann das Projekt uneingeschränkt empfehlen.

positive Bewertung({{pro_count}})
Beitrag bewerten:
{{percentage}} % positiv
negative Bewertung({{con_count}})

DANKE für deine Bewertung!

Veröffentlichung: 16.01.2023 von Bernhard 🔔


Top-Artikel in diesem Bereich


Smart-Home-Plattform - Systeme: ioBroker vs. Home-Assistant
Für die Heim-Automatisierung gibt es neben zahlreichen verschiedenen Standards eine große Menge an verschiedenen Plattformen. Open Source Plattformen bieten dabei oft die Möglichkeit, verschiedene Automatisierungs-Standards miteinander zu verbinden. Als Beispiel könnte ein kleiner Mini-Computer, ein Raspberry Pi oder ein NAS, ausgestattet mit mehreren Empfängern, verschiedene Automatisierungs-Lösungen über eine Plattform steuern.

ioBroker installieren - Docker
Mit ioBroker können verschiedene Automatisierungslösungen oder Geräte in einem System zusammengefasst werden. Um bestimmte Gateways oder Geräte ansprechen zu können, werden in ioBroker verschiedene Adapter verwendet.

Home-Assistant Docker Conbee 2 und Zigbee2MQTT / deCONZ
Dank zahlreicher Integrationsmöglichkeiten ist Home-Assistant eine einfache Plattform für das Steuern verschiedenster Smart-Home Geräte. Im Vergleich zu ioBroker ist mir der Start mit Home Assistant wesentlich einfacher gefallen. Während ich für ioBroker noch am Suchen war, welches Frontend ich für meine Dashboards verwenden könnte, hatte ich mit Home-Assistant out of the box ein fertig eingerichtetes System. Die Lovelance Dashboards von Home Assistant können einfach in der GUI zusammengeklickt...

Fragen / Kommentare


Durch die weitere Nutzung der Seite stimmst du der Verwendung von Cookies zu Mehr Details