Wasserzähler mit EspCAM auslesen

Den analogen Wasserzähler automatisiert ablesen und ins Smart Home einbinden, das geht mit einer günstigen ESPCAM und etwas Bastelaufwand.

Durch Zufall bin ich auf ein interessantes Projekt gestoßen, das mir endlich meinen Wunsch erfüllt, meinen bestehenden Wasserzähler auszulesen. Den Wert des Wasserzählers würde ich gern aus folgenden Gründen erfassen:

Besseres Verständnis des eigenen Wasserkonsums und damit mehr Bewusstsein
Erkennung von Defekten und damit Schadensprävention durch rechtzeitiges Abdrehen des Wassers.

Seit Release 2022.11 kann man den Verbrauch auch im Energie-Dashboard in Home Assistant erfassen. Weitere Informationen findest du dazu hier: Wasserverbrauch im Energie Dashboard.

Möglich wird dies durch ein Projekt von JomJol, der es geschafft hat eine kleine AI auf einem ESP32 laufen zu lassen, die gängige Wasserzähler anhand eines Fotos auswerten kann. Nach etwas Tüftelei funktioniert dies bei meinem Elster Wasserzähler gut.

Die Daten sende ich via MQTT an mein Homeassistant und errechne mir dort meinen Wasserverbrauch für den heutigen Tag.

Benötigte Hardcare: Eine Kombi aus ESPcam und Debugger. Kostet rund 13 bis 15 Euro mit Versand aus Deutschland.

Auf dieses kleine Stück Hardware muss anschließend die Firmware geflasht werden. Wie das geht, ergänze ich die Tage.

Zum Projekt: https://github.com/jomjol/AI-on-the-edge-device


Adapter für Elster Wasserzähler

Leider haben alle 3d gedruckten Adapter auf meiner Elster Wasseruhr nicht gut funktioniert. Daher habe ich mich daran versucht, ein entsprechendes 3D Modell zu entwerfen und zu drucken. Inzwischen habe ich eine Version, die gut funktioniert und optisch okay aussieht.

Adapter für Elster Wasserzähler aus dem 3D Drucker.

Das Modell ist noch nicht ganz fertig, aber fast. Wenn ich damit fertig bin, werde ich es auf Thingiverse einstellen. Inzwischen ist die Datei auch auf Thingiverse: https://www.thingiverse.com/thing:5674591

Falls du keinen 3D-Drucker zu Hand hast, gern bei mir melden

Letzte Sache, die noch zu tun ist, einen abnehmbaren Deckel zu entwerfen, damit der Fokus der Kamera besser einstellbar ist. Desertieren wollte ich testen, ob man mit einem kleinen Reflektor das Problem der Reflexion umgehen kann.

Flashvorgang – wie Ai on the Edge auf ESPCAM installiert wird

  1. Release downloaden und entpacken
  2. Firmware auf ESP32 Cam Flaschen
  3. SD-Karte mit den Datensätzen für die AI beschreiben
  4. WLAN Config auf SD-Karte schreiben
  5. Positionieren und Referenzbild + auszulesende Positionen konfigurieren

Wenn du Python auf deinem System installiert hast, ist der Vorgang sehr einfach und schnell. Das funktioniert auf Mac und Windows.

pip 3 install esptool

Esptool flash etc

Alternativ gibt es für Windows noch ein Flash Tool. Den kompletten Vorgang, wie es dann zu handhaben ist, kannst du im offiziellen Wiki finden.

Konfiguration

Hat alles geklappt, dann solltest du dein Wasser-Zähler-Ausles-Gerät 😀 nun irgendwo im Netzwerk finden. Das findest du entweder in deinem Router, in einer Netzwerk-Scan-Anwendung oder du hast eine statische IP vergeben und weißt, wie du es aufrufen kannst.

Durch Aufrufen der IP in dem Browser deiner Wahl, kannst du die Cam konfigurieren. Der Startbildschirm sollte in etwa so aussehen:

Wasserzähler in AI on the Edge erfasst

Basisbild ausrichten und Regions of Interests makieren

Zu Beginn solltest du kontrollieren, ob dein Bild scharf ist und alle Messwerte vorhanden sind. Fehlt etwas oder sind die Messwerte nicht scharf, dann musst du die Kamera noch etwas feinjustieren in der Position.

Ist das Bild unscharf, dann kannst du über die drehbare Linse (Achtung verklebt! Den sichtbaren Kleber kann man mit einem Messer entfernen) den Fokus einstellen. Hier ist leider ausprobieren das einzige Hilfsmittel. Halbe Runde drehen, neues Foto machen, vergleichen, wiederholen.

Algin Marks setzen um die Ausrichtung immer richtig setzen zu können.

Passt jetzt alles, können 2 Align Marks gesetzt werden. Diese dienen dazu, das Bild richtig zu drehen / zu positionieren, damit die AI auch richtig arbeiten kann.
Dazu klicke auf Align Marks und markiere Bereiche, die am Wasserzähler prägnant, gleichbleibend sind. Also keine Wertanzeigen oder runde Punkte, sondern eher Firmennamen, Seriennummern oder Ähnliches.

Wenn das gesetzt ist, musst du noch die ROIs (Regions of interest) setzen. Das sind die eigentlichen Zähler-Werte. Im Konfigrationsmodus oben auf Regions of Interests klicken. Die Konfiguration ist ähnlich wie bei den Align Marks.

Jetzt nacheinander alle digitalen Zahlen von links nach rechts anlegen. Bei meinem Set-up funktionieren etwas größere Rahmen besser als kleine. Hierbei ist aber etwas probieren notwendig.

Nachdem alle digitalen angelegt sind, gilt es noch die analogen Zählelemente anzulegen. Die Vorgehensweise ist hier wieder identisch.

Danach kannst du auf der Startseite prüfen, ob dein Zähler korrekt ausgelesen wird. Feintuning der einzelnen Parameter kann helfen, wenn du keine perfekten Resultate bekommst.

Bei mir tauchen immer noch falsch erkannte Werte auf, die durch das Filtering dann aber nicht gesendet werden. Mit diesen kann ich gut leben.

Empfohlene Einstellungen

Folgende Einstellungen habe ich gemacht, damit ich zuverlässige Ergebnisse bekomme. Viele Einstellungen sind nur sichtbar wenn der EXPERT MODE oben rechts aktiviert wird.

Als Model zur Zeichenerkennung verwende ich „dig-class-11-1411-sq-q“ für meinen Elster Wasserzähler. Damit habe ich die beste Trefferquote.

Um Reflektionen zu vermieden habe ich den Wert bei LEDIntensityauf 15 gestellt.

PreValueUse habe ich aktiviert, damit wird immer ein vergleich zur vorherigen Value gezogen. Ist AllowNegativeRates deaktiviert, so sind negative Veränderungen zum vorherigen Wert nicht möglich.

Um große Sprünge bei eventueller Falscherkennung zu vermeiden, habe ich MaxRateValue auf 10 und MaxRateType auf RateChange gesetzt.

Wasserzähler mit Smart Home verbinden

Wenn jetzt alles passt, kann der Zähler in dein Smart Home verbunden werden. 
Dafür stehen dir drei Möglichkeiten zur Verfügung. 


  1. ESPCam sendet via MQTT Richtung deines Mqtt Brokers und kann in deiner Zentrale verarbeitet werden
  2. Die Smart Home Zentrale liest die REST-API aus
  3. ESPCam schreibt in eine InfluxDB und du verwendest die Werte aus dieser Datenbank in deiner Smart Home Zentrale

In den meisten Fällen wird sicher MQTT verwendet. Dazu gehe wieder in die Konfiguration und dort auf „edit configuration“.

Weiter unten gibt es einen Bereich für MQTT, hier aktiviere vorn die Checkbox. Jetzt kannst du die Werte deines Brokers angeben.

Uri: mqtt://deine-broker-Adresse:1883
MainTopic: dein gewählter Name für den Wasserzähler
UserName: …
Passwort: …

Mit dieser minimal Konfiguration bist du bei Homeassistant mit dem Mosquitto Broker schon sende-bereit und die ersten Werte sollten auftauchen.

Um das zu prüfen, kann man mit einem MQTT Client sich ebenso auf den Broker connecten. Hier sollte, wenn AI on the Edge einen gültigen Zählerstand extrahiert hat, nach kurzer Zeit ein Wert für dein gewähltes Topic auftauchen.

Zusammenfassung

Insgesamt ein super Projekt von JomJol. Ich finde es beeindruckend was inzwischen auf einem ESP verarbeitet werden kann und welche Einsatzzwecke sich für solche Mini-KIs in Zukunft noch ergeben können.

Vor allem freut es mich aber, dass ich endlich auch etwas über meinen Wasserverbrauch erfahre. Jetzt sind Wassermengen für Badewanne, Blumen gießen, Spülmaschine in Litern pro Tag greifbarer als einmal pro Jahr eine Abrechnung zu bekommen über sein verbrauchtes Wasser.

Was ich unterschätzt habe ist der Zeitaufwand. Bis ich die Position, den Fokus, etc. richtig hatte, ist mehr Zeit vergangen als ich angenommen hätte.

NICHTS VERPASSEN
Neue Beiträge direkt per Mail!

5 Meinungen zu “Wasserzähler mit EspCAM auslesen

  1. Lars sagt:

    Hi,

    mich würde interessieren wie deine config aussieht.
    Den Wert habe ich, die Statistik fehlt mir aber, oder dauert das etwas?

    Grüße
    Lars

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert