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

 

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 15.7.0
gefunden21.02.2024

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:

auf amazon.de:

ESP32 CAM Entwicklungsplatine Binghe ESP...

Verfügbarkeit: Jetzt
Preis: 11,99 €
zum Stand: 21.12.2024 15:24
Details

auf amazon.de:

AZDelivery Kompatibel mit FT232RL USB zu...

Verfügbarkeit: Jetzt
Preis: 6,99 €
zum Stand: 21.12.2024 15:24
Details

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_1600_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:

Daten MQTT -> Home Assistant

Der Digitizer kann die Daten mittels MQTT an Home Assistant übertragen. Voraussetzung dafür ist ein MQTT-Broker, siehe: MQTT - Broker : Docker Setup und HA - MQTT Integration

Update: 'Initializing (delayed)'

Beim letzten Update auf die Version:  v15.3.0 hatte ich das Problem, dass der ESP in einer Endlos-Boot-Schleife hängen geblieben ist. Beheben konnte ich das Problem, indem ich eine neue SD-Karte mit den aktuellen Dateien des Git-Projektes beschrieben und die Konfiguration erneut durchgeführt habe.

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!

Fragen / Kommentare


(sortiert nach Bewertung / Datum) [alle Kommentare(am besten bewertete zuerst)]

✍anonym
22.03.2024 10:28
Hallo Bernhard

Danke dir für die Anleitung. Soweit hat nach anfänglichen Schwierigkeiten fast alles funktioniert. Ich habe allerdings ein Problem sobald die letzte digitale Ziffer auf den nächst höheren Wert springt. 
Dazu hätte ich jetzt eine Frage: du schreibst dass man die Version 1500 einstellen soll, dein Screenshot zeigt aber die Version 1600. Da im Dropdown Menü 1500 nicht vorhanden ist, habe ich 1600 ausgewählt, damit funktionierts aber nicht. Welche Version ist nun die richtige, und sollte es die 1500 sein, woher bekomme ich diese.

Liebe Grüße
Jürgen
✍Bernhard
gepostet am 22.03.2024 12:30
Danke für den Input: Habs nochmal kontrolliert und auch im Artikel angepasst: 1500 glaube ich war mit einer älteren Version. 
Ich verwende aktuell dig-class11_1600_s2.tflite und 
für Analog: ana-class100_0170_s1_q.tflite

Beitrag erstellt von Bernhard

✍Guidau
14.04.2023 18:31
Hallo Bernhard,

vielen Dank für Deine tollen und interessanten Blogbeiträge, diese haben mich schon einige Male auf neue Ideen in meiner SmartHome Welt gemacht.
Just Gestern habe ich wieder mit dem Thema Digitalisierung des Wasserzähler auseinander gesetzt und fand die Lösung Deinen 3D-Druckmodels überzeugend.
Gesagt getan, da ich selber noch keinen 3D-Drucker besitze habe ich Deine watermeter.stl Datei von Thingiverse bei einem Online Druckdienst hochgeladen.
Der Druckdienst hat mir jetzt folgende Nachricht zukommen lassen:
"The customer came back saying they apologize that they did not express themselves well. In picture 1.4 you can see a blue line, this means that the whole ring is in the air without having contact bounded with the main body.
With that in mind, can you please let me know if you can provide me a revised file?"
Ich kann Dir leider jetzt nicht das Bild mitschicken, aber kannst Du mir hier vielleicht weiterhelfen? Ich habe bisher keine Erfahrung mit 3D Druckern.
Vielen Dank im Voraus und beste Grüße nach Obertrum!
Guido
PS: Ich bin heute Abend unterwegs, bin aber morgen wieder im laufe des Tage erreichbar.
✍Bernhard
gepostet am 15.04.2023 08:40
Hallo Guidau,

Tatsache: da hat eine Schicht gefehlt. Ich konnte das Objekt zwar drucken, dennoch ist das eine Schwachstelle. Ich habe das Objekt repariert und erneut hochgeladen. 

Schöne Grüße und danke dir.

Beitrag erstellt von Bernhard
✍anonym
gepostet am 15.04.2023 09:39
Hallo Bernhard,

ich danke Dir für Deine schnelle Hilfe!
Ich wünsche Dir ein sonniges und erholsames Wochenende :-)

Beitrag erstellt von anonym

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