AI on the Edge

von

in

Die nächste Bastelei bringt mich an die vorderste Front aktueller IT Entwicklungen, nämlich dem Einsatz künstlicher Intelligenz am Endgerät. Eigenanteil geht natürlich gegen Null, es kann eine fertige Entwicklung (seit über 3 Jahren regelmässige Releases) auf Github benutzt werden, auf Youtube zeigt mindestens ein Dutzend Leute die Umsetzung der Anleitung. AI bezieht sich auf die Bilderkennung per neuronales Netz durch Nutzung der TensorFlow Library für analoge Drehzähler und ggf. rotierende Zeiger, die direkt auf dem System mit der Kamera für die Aufnahme des Zählers gemacht und der erkannte Messwert per WLAN an die Heimautomatisierung geschickt wird.

In Deutschland wird ja peinlich genau darauf geachtet, dass offizielle Verbrauchszähler möglichst nicht automatisch vom Nutzer ausgelesen werden können. Bestes Beispiel sind die digitalen Stromzähler, die nur nach Anforderung der PIN und Eingabe derselben mittels Taschenlampe über ein Blinklicht Daten morsen. Gasuhren haben immerhin einen Magneten, dessen Takte man mit einem Reedrelais zählen kann. Bei Wasseruhren gibts überhaupt nichts, aber aufgrund der aberwitzig kurzen Eichdauer würde sich mit elektronischen Komponenten sehr schnell viel Elektroschrott ansammeln. Also muss man den Zähler ablesen und die Zahlen eintragen. 

Den Gang in den Keller kann man sich sparen, wenn eine Kamera regelmässig den Zählerstand fotografiert und das Bild versendet. Tatsächlich gibt es für 10-12€ Kameras (2MP) mit CPU und WLAN, die genügend Rechenkapazität haben, sogar noch die Ziffernerkennung zu machen. Der Name ist ESP32-CAM. Also habe ich gleich 2 davon bei der Bucht geordert. Nach der Bestellung habe ich mir nochmal die Anleitung genauer durchgelesen und festgestellt, dass man einen bestimmten Kameratyp und 8MB Speicher für das Projekt braucht. Zum Glück habe ich genau die ausgewählt. Bei den Kommentaren im großen Fluss findet man viele Leute, die falsche und/oder unbrauchbare Ware bekommen haben bzw. deren Haltbarkeit sehr gering war. Für den Preis kann man keine Leica mit Zeiss Objektiv erwarten, aber die Specs sollten schon eingehalten werden.

Mit meinen beiden ESP32-CAM hatte ich Glück, die Firmware liess sich einwandfrei installieren (es kam sogar der Edge Browser zum Einsatz, da der Webinstaller mit Firefox gemäß Anleitung dafür nicht funktioniert). Danach bootete die Software von der microSD-Karte (ich konnte 2 alte 2GB Karten reaktivieren, größere als 4GB funktionieren nicht immer auf der ESP32-CAM. WLAN wurde wie erwartet gefunden und das Webinterface kam hoch.

Die Youtube Profis haben sich natürlich alle im 3d-Druck passende Adapter für die Wasseruhr hergestellt (aber keiner hat gesagt, wie groß der Abstand zwischen Linse und Zähler sein soll, und für die rechteckige Gasuhr gab es garnichts), aber ich habe erstmal mit Pappe und Panzerband angefangen. 12cm Abstand sind etwas wenig, 18cm ist gut. Ähnliches gilt für den Focus (Linse ist auf unendlich festgeklebt, das muss gelöst und dann iterativ verstellt werden). Meines Erachtens ist das überbewertet, für den zweiten Zähler habe ich nichts fokussiert und war nach 3 Minuten mit allen Einstellungen fertig. Wenn da zwischendurch nichts abfällt, wird das halt einmal im Jahr nach dem Besuch des offiziellen Ablesers wieder neu justiert. Gesagt wurde auch nicht, ob eine gedruckte Halterung wieder so aufgesetzt werden kann, dass eine neue Justage unnötig ist.

Per Default wird alle 5 Minuten ein Bild gemacht und ausgewertet, Minimum ist eine Minute, schneller ist das System nicht (man sieht also nicht online, wann der Spülkasten wieder voll ist). Da ich Home Assistant schätzen gelernt habe, sende ich die Daten über MQTT direkt dahin (vorher natürlich MQTT Broker auf Home Assistant installieren und den HA Account in der ESP Konfiguration eintragen (alles klar lesbar ohne Verschlüsselung, aber daheim gibt es keine Hacker)), InfluxDB ginge auch, oder die Abholung als .CSV über den Webbrowser.

Nun kommen die Daten vom Wasser- und Gaszähler in Home Assistant hineingetröpfelt. Verglichen mit meinen monatlichen Kontrollablesungen sind das fast 4 Größenordnungen mehr Werte, der tatsächliche Nutzen ist eher bescheiden (wobei im letzten Sommer mal fast 20qbm Wasser durch eine abgefallene Gartenschlauchverbindung versickert sind, mit dieser Lösung wäre das wahrscheinlich früher aufgefallen). Aber für den einmaligen Invest von 25€ und den laufenden Stromkosten für das USB Netzteil war es wieder eine nette Spielerei.

Wenn die erste Woche Daten gesammelt sind, mache ich ein Feintuning an der Halterung (Joghurtbecher, Wasserrohre und Chipsdosen wurden noch genannt). Beim Zahlenwechsel gibt es Sprünge, aber der Trend ist klar erkennbar. Zur Zählerablesung muss ich nicht mehr in den Keller laufen.

So war das schon ein erfolgreiches Projekt und für die ESP32-CAM gibt es noch viele weitere Einsatzmöglichkeiten. Mal schauen, wann ich die nächsten Exemplare bestelle.

Nachtrag: die Halterung am Gaszähler habe ich erneuert, wieder mit Pappe. Alle Werte kommen jetzt ordentlich an. Eine wichtige Erkenntnis kam leider wieder zu spät. Die Anbindung an Home Assistant sollte man erst dann machen, wenn die Erkennung ordentlich funktioniert. Negative Raten sollte man ausschliessen (allow negative rates false), lieber weniger korrekte Werte liefern lassen. Genauso sollte die maximale Veränderung gegenüber dem Vorwert begrenzt werden (Maximum Rate Value wählen), damit Falscherkennungen der führenden Ziffern ignoriert werden. Im Data Graph kann man sich das erstmal einen Tag anschauen, bevor man die Integration in Home Assistant macht. Denn wenn dort mal falsche Werte drin sind, verhageln die alle Anzeigen und Summen und können nur mit viel Mühe wieder entfernt werden.