Für die Statistiker unter uns sind die Verbräuche des Smarthomes, also Strom, Wasser, Heizung neben Temperatur, Luftfeuchte, Wind und Regen die liebsten Informationen für Grafana & co. ioBroker kann detailliert die Verbräuche für Stunden, Tage, Monate und Jahre dokumentieren.
Wie wir mit einfachen Mitteln einen Gaszähler smart machen haben wir bereits beschrieben, auch die Einbindung eines modernen „smarten“ Stromzählers über ein IR-Adapter kann im Blog nachgelesen werden. Lediglich der Wasserzähler war bisher nicht in das Smarthome eingebunden.
Tipp: Größte Schwierigkeit ist eine Halterung, die möglichst stabil ist und nicht das Kamerabild „verschiebt“. Wer keinen 3D-Drucker besitzt, kann mittlerweile online einen 3D-Druck auf Basis von 3D-Modellen bestellen, z.B. bei https://craftcloud3d.com/ Die passenden 3D-Modelle gibt es für den digitalen Wasserzähler hier: https://www.thingiverse.com/thing:5167976/files
Um den Wasserzähler in ioBroker einbinden zu können, ist die Idee so einfach wie genial: eine Kamera macht regelmäßig ein Foto des Wasserzählers und durch die Erkennung der Ziffern und Zeiger wird der Zählerstand ermittelt. Vor einiger Zeit gab es bereits Scripte, die mittels OCR gearbeitet haben, meist mit überschaubarem Ergebnis. Mit „AI on the edge device“ hält die künstliche Intelligenz Einzug in unser Smarthome, die Erkennung bedient sich der KI-unterstützten Erkennen der Ziffern und Zeiger.
Alles was wir dafür benötigen ist
- ein ESP32 Cam mit Kameramodul,
- ein FTDI-Adapter, um die Software auf den ESP32 Cam zu flashen,
- eine 16GB oder kleinere Micro-SD-Karte,
- das Softwarepaket AI on the edge device,
- und ein wenig Bastelei, um die Kamera über dem Wasserzähler zu fixieren.
Empfohlene Produkte
-
AZDelivery Jumper Wire Kabel 3 x 40 STK. je 20 cm M2M/ F2M / F2F kompatibel mit ...6,99 € (0,06 € / stück)
-
19%Verbatim Premium microSDHC Speicherkarte I 16 GB I SD Karte für Full-HD Videoauf...7,99 € 5,18 €
-
ESP32-CAM-Kameramodul ESP32-CAM-WiFi-Bluetooth-Entwicklungsboard mit OV2640-Kame...10,99 €
-
6,99 €
Starten wir also mit dem EXP32 cam, hierzu benötigen wir neben der Platine auch ein Tool, um die Firmware auf den ESP zu flashen. Wir haben gute Erfahrungen mit dem Tool von Espressif gemacht. ZIP downloaden, entpacken und starten, mehr ist nicht zu tun.
Zusätzlich benötigen wir noch drei Firmwarefiles von AI on the edge device, die wir hier downloaden können, es sind die Dateien bootload.bin, firmware.bin und partitions.bin.
Um den ESP zu flashen benötigen wir außerdem einen FTDI-Adapter, um die Firmware über die GPIO-Pins des Boards flashen zu können. Um den ESP32 mit dem FTDI ohne großen Aufwand verbinden zu können, nutzen wir die klassischen Jumper-Kabel. Wie die Kabel verbunden werden müssen, ist in diesem Schaubild gezeigt:
Wichtig ist das Jumberkabel, das zwei Pins kurzschließt. Ist dieses nicht korrekt angeschlossen, geht der ESP nicht in den Boot-Modus und kann nicht neu geflasht werden. Alternativ zur der 5V-Stromversorgung können wir auch auf dem direkt gegenüberliegendem PIN 3.3V des FTDI zum Flashen nutzen. Zum Betrieb des ESP32 benötigen wir aber 5V. Haben wir die beiden Boards korrekt verbunden, können wir den FTDI-Adapter in einen freien USB-Port am Rechner anschließen. Evt. wird noch ein Treiber benötigt, in den meisten Windows-10-Fällen sollte es ohne Probleme funktionieren.
Im nächsten Schritt starten wir das Flashtool und konfigurieren die firmware-Files korrekt. Diese werden mithilfe des Tools im Speicher korrekt adressiert, folgende Einstellungen sind im Tool vorzunehmen:
bootloader.bin | 0x1000 |
partitions.bin | 0x8000 |
firmware.bin | 0x10000 |
Den korrekten Port auswählen und zunächst mit ERASE den Speicher des ESP32 löschen, FTDI ausstecken, wieder anstecken und der ESP32 bootet neu.
Danach können wir mit „FLASH“ die Firmware auf den ESP32 flashen.
Für den Betrieb der Software auf dem ESP32 benötigen wir noch eine SD-Karte mit den Config-Files, hierzu einfach eine Micro-SD mit weniger als 16GB mit einer FAT32-Partition formatieren und das Verzeichnis „sd-card“ auf die Karte kopieren.
Damit sich der ESP32 mit dem WLAN verbinden kann, müssen wir noch die WLAN-Konfiguration in der entsprechenden Datei auf der SD-Karte vornehmen. In der Datei wlan.ini geben wir WLAN-Name und das Passwort an, außerdem kann ein Hostname für den ESP32 definiert werden. Speichern und die SD-Karte in den ESP32 stecken.
Den ESP32 mit Strom versorgen, dies kann entweder über die 5V-Leitung des FTDI oder über ein normale USB-Kabel mit Handy-Ladegerät gelöst werden, wichtig ist die korrekte Verkabelung an 5V.
Blinkt die rote LED des ESP32 drei mal kurz auf, konnte erfolgreich eine Verbindung zum WLAN hergestellt werden. Wir müssen über den Router die IP-Adresse des ESP32 ermitteln und können die Oberfläche zur Konfiguration aufrufen: http://#IP-Adresse#
Es begrüßt uns der Willkommen-Bildschirm, mit Klick auf next geht’s weiter.
Im nächsten Schritt müssen wir ein Referenz-Bild des Wasserzählers anlegen, hierzu ist es wichtig, dass das Board bereits korrekt über dem Wasserzähler fixiert ist und sich in der Position nicht mehr wesentlich bewegen wird. WICHTIG: Der Drehring auf der Kamera kann zur Fokussierung genutzt werden, ist allerdings mit Kleber fixiert. Mit einer Zange lässt sich der Drehring vorsichtig lösen, je weniger Abstand zwischen Wasserzähler und ESP32, um so mehr Umdrehungen nach LINKS gegen den Uhrzeigersinn wird benötigt.
Wir legen ein neues Referenzfoto an, alle Zahlen und Zeiger sollten scharf und reflexionsfrei erkennbar sein. Bild übernehmen und weiter.
Auf dem Referenzbild müssen wir zwei Fixpunkt auswählen, die sich nicht verändern, das können z.B. feste Schriftzüge auf dem Ziffernblatt sein, Konfiguration speichern und weiter geht’s.
Im nächsten Schritt legen wir die Erkennungsfelder der Ziffern fest, jede einzelne Ziffer erhält eine eigene sog. ROI. Hierbei konfigurieren wir von links nach rechts, alle Stellen/Ziffern der Zahl. Konfiguration speichern und weiter.
Im nächsten Schritt erfolgt die Konfiguration der analogen Zeiger, die meisten Wasserzähler besitzen hiervon vier Stück, die Kreise entsprechend positionieren und speichern. In diesem Fall arbeiten wir uns von rechts nach links.
Danach können wir den MQTT-Server konfigurieren. Wir gehen davon aus, dass im ioBroker bereits ein MQTT-Adapter läuft und unter der korrekten IP mit Port und den Zugangsdaten die messages empfangen und verarbeiten kann.
Der ESP32 kann maximal alle ca. 3min ein Bild erfassen und verarbeiten, wir erfassen den Wasserverbrauch alle 5min.
Konfiguration abschließen und neu starten, über die bekannte IP-Adresse erreichen wir die Oberfläche des ESP32, auf der z.B. das letzte Foto den ermittelten Werten zu sehen ist. Die Software bietet eine Fehlertoleranz und Erkennung über den „preValue“, so wird verhindert, dass Fehler irrtümlich an ioBroker gemeldet werden.
Wird aus Versehen die Kamera verrückt und das Bild passt nicht mehr zur Referenz, wird auch dies als Fehler erkannt.
Arbeitet unser ESP32 korrekt, wird also regelmäßig unser Datenpunkt in ioBroker mit dem aktuellen Wasserzählerstand aktualisiert und wir können den Verbrauch erfassen oder z.B. einen Alarm aktivieren, wenn über längere Zeit ein hoher Verbrauch registriert wird.
Bei mir blendet die LED leider ziemlich. Wie kann man das ändern
Entweder den Winkel etwas verändern, damit die LED nicht frontal auf das Glas scheint oder z.B. Brotpapier davor befestigen.
Die Theorie ist gut aber die Erkennung der Zahlen ist eher semi-gut. Man muss die Erkennungsbereiche schon sehr genau definieren. Außerdem ist es sehr schwierig die Kamera vor den Zählern dauerhaft so zu positionieren dass die Ziffern gut erkennbar sind. Hier hilft vielleicht ein 3D Drucker, aber ohne muss man schon sehr kreativ werden. Dazu hätte ich mir noch ein paar Anregungen gewünscht.
Hinweis zu 3D-Modell und der Bestellung eines gedruckten Modells haben wir ergänzt.
Können Sie auch step by step erklären, wie man dieses Projekt in ioBroker einbindet?
@Greuth:
– im iOBroker den Adapter „MQTT Broker/Client“ installieren und einrichten
– im ESP32-CAM ins WLAN einbinden (gleiches Netzwerk)
– die Daten vom MQTT eingeben und im iOBrocker unter Objekte findest Du eine Ordner mit den von Dir vergebenen Namen
läuft bei mit seit dem letzten Update sehr zuverlässig
MFG
Der ioBroker wird nicht unbedingt benötigt. Das Ganze funktioniert auch mit einem Skript und einer CCU, falls nichts anderes vorhanden ist.
Hallo zusammen,
ich hab leider auch Probleme den Zähler in Iobroker zu intregieren, ich bekomme keine Verbindung hin.
Da ich schon mehrer mqtt nei mir am laufen habe, verstehe ich nicht wo der Fehler ist.
@Greuth
hast du deine Anleitung schon erhalten, bzw. gibt es noch Bedarf?
Hallo, habe beim Flaschen ein Problem, finde die Datei
bootloader.bin und auch die firmware.bin
aber wo ist die partitions.bin??????
Grüsse
Ilooper
Hallo Ilooper,
schau mal auf der relases-Seite (https://github.com/jomjol/AI-on-the-edge-device/releases) unter Version 11.3.1:
„Looking for the partition.bin or bootloader.bin? – Use the ones from https://github.com/jomjol/AI-on-the-edge-device/releases/tag/v11.2.0“
Viele Grüße
ultraqwertz
Neu bieten wir auch einen Webinstaller, der macht es noch einfacher: https://jomjol.github.io/AI-on-the-edge-device/index.html
Hallo, ich hab als Gehäuse ein HT-Rohr 80mm genommen. Die Muffe passt perfekt. Nur den Ausschnitt vom Zählerdecker einschneiden.
Wen die Optik nicht stört: eine Konservendose, 400g, passt auch super – gegen die Reflexionen innen schwarz ausgesprüht.
Etwas Pappe für einen Deckel mit Ausschnitten für die Kamera und die LED, ein paar Tropfen Heißkleber, fertig.
Ich nutze aktuell einfach einen 500g Jogurtbecher, mit einem Bohrer vorsichtig in der Mitte des Bodens ein Loch für die Kamera, für die LED benötgt man eigentlich keinen Ausschnitt, die ist hell genug um durch den Becherboden zu leuchten. Dann noch das Schanier vom Zählerdeckel ausschneiden und fertig ist der Aufbau. Tipp: Vor dem schneiden des Ausschnittes den Becher mit Panzerband umwickeln, dann reißt er nicht bis oben aus. Wenn man das Panzerband schon mal rausgeholt hat, kann man damit auch die Kamera auf dem Becher fixieren.
Ich würde die Daten gerne direkt in eine Influxdb Datenbank schreiben, wie muss die eigentliche Datenbank aussehen? Die Einstellungen im Konfigurationsbereich des Wasserzählers sind klar, aber welche Tabellen muss ich vorher in der Datenbank anlegen? Leider findet man hierzu nichts bei Google.
Am einfachsten werden die Daten über die Einstellungen an den Objekten in der DB gespeichert, z.B. der absolute Zählerstand. Die Tabellen/Einträge dafür übernimmt der ioBroker automatisch.
Hey zusammen,
den ESP per WEB Installer zu flashen, war sehr einfach. Auch die SD Karte zu füttern ging super, Ich als wirklicher Laie konnte das auch. Aber:
Leider ist die interne WLAN Antenne der ESP32 sehr schwach, Mehr als 2 Meter vom Router entfernt und ich bekomme keine stabile Verbindung hin.
Lösung die ich plane;:
Externe Antenne.
Problem:
Die Position eines Widerstandes ist entscheidet, den kann ich nicht einfach umsetzen.
-> Ich kaufe mir jetzt nen weiteren ESP (mit korrekt sitzendem Widerstand und ner externen Antenne).
Wenn ich dran denke, dann berichte ich die Tage/Wochen.
Ein kleiner Wunsch an Florian:
Ich persönlich hätte mir einen Hinweis auf die schwache WLAN Leistung des ESP32 in deinem Blogeintrag gewünscht. Die von Dir verlinken ESPs sind welche ohne Antenne. Vielleicht kannst du das noch ergänzen. Freut sich bestimmt jmd in der Zukunft drüber. :-)
Hinweis nehme ich auf :-)
Alles super beschrieben und die Install auch erledigt. Der Esp32 startet und verbindet sich auch mit dem WLan. Beim Aufruf der IP wird (noch) eine recht leere Seite geladen und der „Next“-Bottem bleibt ohne Funktion. Ich kann somit keine Einstellungen vornehmen. Wo sehe ich den Wand vor lauter Bäumen nicht? Würde mich über eine Hilfe freuen – Danke
Ich überlege tatsächlich ob ich das so umsetze, ein ESP32 kann immer nur einen Zähler verarbeiten, oder? Gibt es eine Lösung mit der ich Gas und Wasserzähler überwachen kann?
Deine Seite habe ich gebookmarked, wird mir sicher nochmal hilfreich sein.
Geht mit beiden Zählern, aber jeweils eine ESP benötigt.