NEWS
Wasserzähler - Version 2 - all-in-device
Wasserzähler - Version 2 - all-in-device
-
@jomjol So, fertig

Neue html.zip: (Zeitangabe *fehlende Null" gefixt!)
-
Graphischer "Feinschliff" (Tables, Input, Buttons, etc...)
-
Automatischer Refresh alle 5min auf der Overview-Seite (es werden nur das Bild und die Output-Werte neu geladen, nicht die ganze Page oder das IFrame. Realisiert mit jquery-3.5.1.min.js) --> **Achtung: Die jquery-3.5.1.min.js muss in das HTML-Verzeichnis kopiert werden. Am besten die gesamte html.zip mit OTA-Update hochladen & entpacken.
-
Dann hätte ich noch eine Idee: Können wir die aktuell installierte Firmware-Version z.B. hier anzeigen?

Ich glaube das wäre noch hilfreich . . . aber das kann ich nicht alleine implementieren

Feedback willkommen!
Gruss
Michael@michaeljoos sagte in Wasserzähler - Version 2 - all-in-device:
@jomjol So, fertig

Neue html.zip:
-
Graphischer "Feinschliff" (Tables, Input, Buttons, etc...)
-
Automatischer Refresh alle 5min auf der Overview-Seite (es werden nur das Bild und die Output-Werte neu geladen, nicht die ganze Page oder das IFrame. Realisiert mit jquery-3.5.1.min.js) --> Achtung: Die jquery-3.5.1.min.js muss in das HTML-Verzeichnis kopiert werden. Mit der OTA-Funktion wird diese Datei irgendwie nicht mit übertragen. Jedenfalls war das bei mir vorher der Fall... (kannst du das einmal anschauen @jomjol?)
-
Dann hätte ich noch eine Idee: Können wir die aktuell installierte Firmware-Version z.B. hier anzeigen?

Ich glaube das wäre noch hilfreich . . . aber das kann ich nicht alleine implementieren

Feedback willkommen!
Gruss
MichaelSuper danke, bin über das WE verreist und kümmere mich morgen oder Montag drum.
Das mit der Version habe ich mir auch schon überlegt. Muss mir noch überlegen, wie ich das möglichst automatisch hin bekomme.
-
-
Hallo zusammen,
ich möchte in diesem Thread den Wasserzähler in der Version 2 vorstellen und diskutieren. In Version 1 waren 2 Komponeten notwendig (Hardware mit Kameraaufnahme, Docker-Server zur Auswertung). Das Zusammenspiel und die Konfiguration waren nicht immer ganz einfach.
Daher habe ich eine Nachfolgegeneration entwickelt, bei der alles in einem all-included Device umgesetzt ist und es noch um eine Web-basierte graphische Oberfläche zur einfachen Konfiguration ergänzt.
Das Grundprinzip basiert unverändert auf einem ESP32-Modul mit Kamera, welches regelmäßig ein Bild aufnimmt und durch Bilderkennung (Neuronale Netze, CNN) auswertet und den Zählerstand digitalisiert zur Verfügung stellt:


Hier ein Eindruck der graphischen Benutzeroberfläche:

Die Hardware ist wieder auf Thingiverse veröffentlicht, die Software könnt ihr als Firmware oder zum selber kompilieren auf GitHub finden. Dort gibt es auch ein Wiki mit Installations- und Konfigurationsanleitung.
-
Software/Wiki: https://github.com/jomjol/AI-on-the-edge-device/wiki
Ich stehe hier gerne wieder für Feedback, Fragen oder einfach zur Hilfe zur Verfügung und freue mich, wenn dieser Thread genauso intensiv genutzt wird, wie bei der Version 1 (>1k Beiträge und >22k Aufrufe).
Beste Grüße und viel Spass beim Nachbauen,
Jomjol
P.S.: die neue Software ist sehr flexibel aufgebaut und kann grundsätzlich auch Bildererkennung / Neuronale Netze für andere Zwecke eingesetzt werden. Wer eine gute Idee oder Anregung hat oder bei eine Modifikation Unterstützung braucht - bitte auch gerne einfach hier posten.
@jomjol
Hallo,ich bin schon vor längeren auf dein Projekt gestoßen. sehr schön.
Bei mir läuft es im Moment ähnlich. USB-CAM am Raspi und mit ein paar Scripten werden dann die Zeiger richtungen erkannt. (openCV)
Ich möchte es gerne mit dem ESP32-CAM Modul machen.
Ich stoße aber im Moment an folgendes Problem:
Der Zähler hängt im Dunkeln und wenn ich eine Foto mit dem ESP32-CAM mache sind die Farben nicht immer konstant.
D.h. mal ist es rot, lila oder grün Stichig. Manchmal ist es richtig.Ich habe das Gefühl das die Kamera sich immer erst einstellt. (wenn ich das licht länger anlasse und das Foto dann später machen geht es besser)
Fragen:
- Wie länge lässt du das Licht an (on Board LED) befor du das Foto machts?
- Gibt es evtl. eine Einstellung (die ich noch nicht gefunden habe) um der Kamera zu sagen das sie immer mit den voreingestellten Einstellungen ein Foto machen soll? (so wie mit einem Blitzlicht -> kurz an -> Foto -> aus) ohne das die Kamera sich jedesmal lange einstellt?
Um in deinen Sourcen etwas zu finden bin ich zu wenig Softwerker.
Danke
-
@michaeljoos sagte in Wasserzähler - Version 2 - all-in-device:
@jomjol So, fertig

Neue html.zip:
-
Graphischer "Feinschliff" (Tables, Input, Buttons, etc...)
-
Automatischer Refresh alle 5min auf der Overview-Seite (es werden nur das Bild und die Output-Werte neu geladen, nicht die ganze Page oder das IFrame. Realisiert mit jquery-3.5.1.min.js) --> Achtung: Die jquery-3.5.1.min.js muss in das HTML-Verzeichnis kopiert werden. Mit der OTA-Funktion wird diese Datei irgendwie nicht mit übertragen. Jedenfalls war das bei mir vorher der Fall... (kannst du das einmal anschauen @jomjol?)
-
Dann hätte ich noch eine Idee: Können wir die aktuell installierte Firmware-Version z.B. hier anzeigen?

Ich glaube das wäre noch hilfreich . . . aber das kann ich nicht alleine implementieren

Feedback willkommen!
Gruss
MichaelSuper danke, bin über das WE verreist und kümmere mich morgen oder Montag drum.
Das mit der Version habe ich mir auch schon überlegt. Muss mir noch überlegen, wie ich das möglichst automatisch hin bekomme.
Super danke, bin über das WE verreist und kümmere mich morgen oder Montag drum.
Das mit der Version habe ich mir auch schon überlegt. Muss mir noch überlegen, wie ich das möglichst automatisch hin bekomme.
@jomjol Habe jetzt meinen ersten "Pull Request" gemacht auf Github mit den Updates

-
-
Super danke, bin über das WE verreist und kümmere mich morgen oder Montag drum.
Das mit der Version habe ich mir auch schon überlegt. Muss mir noch überlegen, wie ich das möglichst automatisch hin bekomme.
@jomjol Habe jetzt meinen ersten "Pull Request" gemacht auf Github mit den Updates

-
@jomjol Hi, habe das Word File mit der Migration von alt auf neu System fertig. Wie soll ich Dir das für das Wiki zukommen lassen? Es ist jetzt reiner Text mit einem Beispiel, sag mir dann ob das OK ist.
@michaeljoos Neue html.zip eingespielt, geht super! Das mit der "Installed FW: xxxx" ist eine super Idee ...
-
@jomjol
Hallo,ich bin schon vor längeren auf dein Projekt gestoßen. sehr schön.
Bei mir läuft es im Moment ähnlich. USB-CAM am Raspi und mit ein paar Scripten werden dann die Zeiger richtungen erkannt. (openCV)
Ich möchte es gerne mit dem ESP32-CAM Modul machen.
Ich stoße aber im Moment an folgendes Problem:
Der Zähler hängt im Dunkeln und wenn ich eine Foto mit dem ESP32-CAM mache sind die Farben nicht immer konstant.
D.h. mal ist es rot, lila oder grün Stichig. Manchmal ist es richtig.Ich habe das Gefühl das die Kamera sich immer erst einstellt. (wenn ich das licht länger anlasse und das Foto dann später machen geht es besser)
Fragen:
- Wie länge lässt du das Licht an (on Board LED) befor du das Foto machts?
- Gibt es evtl. eine Einstellung (die ich noch nicht gefunden habe) um der Kamera zu sagen das sie immer mit den voreingestellten Einstellungen ein Foto machen soll? (so wie mit einem Blitzlicht -> kurz an -> Foto -> aus) ohne das die Kamera sich jedesmal lange einstellt?
Um in deinen Sourcen etwas zu finden bin ich zu wenig Softwerker.
Danke
Hallo @treerunner,
ich habe keine besonderen Einstellungen für die Kamera und habe 5s Wartezeit nach Einschalten der Beleuchtung.
Gruß,
jomjol -
Super danke, bin über das WE verreist und kümmere mich morgen oder Montag drum.
Das mit der Version habe ich mir auch schon überlegt. Muss mir noch überlegen, wie ich das möglichst automatisch hin bekomme.
@jomjol Habe jetzt meinen ersten "Pull Request" gemacht auf Github mit den Updates

@michaeljoos sagte in Wasserzähler - Version 2 - all-in-device:
Super danke, bin über das WE verreist und kümmere mich morgen oder Montag drum.
Das mit der Version habe ich mir auch schon überlegt. Muss mir noch überlegen, wie ich das möglichst automatisch hin bekomme.
@jomjol Habe jetzt meinen ersten "Pull Request" gemacht auf Github mit den Updates

Pull request ist in die Rolling eingespielt - bei mir funktioniert auch das Update der
jquery-3.5.1.min.jsautomatisch, dazu muss man manuell das zip-File in /firmware updaten.Super vielen Dank für die Anpassung, sieht sehr gut aus und funktionert auch bei mir auf Anhieb. An der Versionierung bin ich dran. Kernpunkt ist, dass ich es automatisch machen will (per cmake), da da manuelle Anpassung zu fehleranfällig.
-
@jomjol Hi, habe das Word File mit der Migration von alt auf neu System fertig. Wie soll ich Dir das für das Wiki zukommen lassen? Es ist jetzt reiner Text mit einem Beispiel, sag mir dann ob das OK ist.
-
@jomjol
I2C Problem: Ich brauche einen zweiten I2C PortDie Kamera scheint über Software I2C angesteuert zu werden da die Parameter für HardwareI2C in der sdkconfig (CONFIG_SCCB_HARDWARE_I2C , CONFIG_SCCB_HARDWARE_I2C_PORT) nicht gesetzt sind.
Siehe dazu auch https://github.com/espressif/esp32-camera/blob/master/KconfigDas Problem tritt auf, wenn man den zweiten I2C Port benutzen will.
Ein direktes Eintragen in die sdkconfig funktioniert nicht, da diese bei jedem build neu geschrieben wird.Ich habe länger rumgesucht und keine Lösung zur Veränderung der sdkconfig gefunden. run -t menuconfig funktioniert bei mir nicht.
Wie hast Du die sdkconfig aus der sdkconfig.old erzeugt?
Beste Grüße
Hike -
@jomjol
I2C Problem: Ich brauche einen zweiten I2C PortDie Kamera scheint über Software I2C angesteuert zu werden da die Parameter für HardwareI2C in der sdkconfig (CONFIG_SCCB_HARDWARE_I2C , CONFIG_SCCB_HARDWARE_I2C_PORT) nicht gesetzt sind.
Siehe dazu auch https://github.com/espressif/esp32-camera/blob/master/KconfigDas Problem tritt auf, wenn man den zweiten I2C Port benutzen will.
Ein direktes Eintragen in die sdkconfig funktioniert nicht, da diese bei jedem build neu geschrieben wird.Ich habe länger rumgesucht und keine Lösung zur Veränderung der sdkconfig gefunden. run -t menuconfig funktioniert bei mir nicht.
Wie hast Du die sdkconfig aus der sdkconfig.old erzeugt?
Beste Grüße
Hike -
@hike Ich verwende VSCode mit der Platformio Extension. Dort kannst du einen Terminal starten und dann dort über
platformio run -t menuconfigden Editor starten.
Achtung: vorher das Terminalfenster groß ziehen, sonst kommt eine Fehlermeldung.@jomjol
Deine Achtung-Anmerkung ist die Lösung. Diesen Hinweis habe ich noch nirgendwo gesehen. Da muß man erst mal drauf kommen. Ich bin dutzendmale vorher in die Fehlermeldung gerauscht.Das Tool ist etwas gewöhnungsbedüftig, seltsamerweise reagiert Arrow up and down nicht, dafür aber + (down) und - (up).
Ich finde aber keinen Eintrag für sccb.
In der camera lib gibt es einen Hinweis auf kconfig, das scheint das definierende File für menuconfig zu sein.
https://github.com/espressif/esp32-camera
Make sure to append this Kconfig content into the Kconfig of your project. Then, choose the configurations according to your setup.Irgendeine Idee wo ich das finde?
Danke
Hike -
@jomjol
Deine Achtung-Anmerkung ist die Lösung. Diesen Hinweis habe ich noch nirgendwo gesehen. Da muß man erst mal drauf kommen. Ich bin dutzendmale vorher in die Fehlermeldung gerauscht.Das Tool ist etwas gewöhnungsbedüftig, seltsamerweise reagiert Arrow up and down nicht, dafür aber + (down) und - (up).
Ich finde aber keinen Eintrag für sccb.
In der camera lib gibt es einen Hinweis auf kconfig, das scheint das definierende File für menuconfig zu sein.
https://github.com/espressif/esp32-camera
Make sure to append this Kconfig content into the Kconfig of your project. Then, choose the configurations according to your setup.Irgendeine Idee wo ich das finde?
Danke
Hike -
@hike Ich habe das für diese Zwecke bisher nicht verwendet. Wenn du dir die Konfiguration der Kameraanbindung (GPIOs) anschauen willst, prüfe mal die Datei
code/jomjol_controllcamera/camera_define.hDort sind die GPIOs definiert.Die GPIOs sind mir klar(26,27). Neben dem Freischalten (1Bit-Mode) des Kartenlesers den Du ja auch verwendest könnte man auch GPIO13 und GPIO2 für den zweiten I2C-Bus verwenden. Einige der anderen Pin erzeugen Bootprobleme, da sie durch die pullups auf high liegen.
Ich bin überhaupt erst auf die Idee gekommen, weil in Deinen Projekt unter lib/driver die tatsächlich verwendeten .h und .c aufgeführt sind. So konnte ich im Log sehen, das der Kameratreiber in sccb.c twi verwendet.
Damit komme ich an den zweiten I2C Bus nicht ran, den ich aber gerne für die Ansteuerung von einem Oled-Display nutzen würde.Bei anderer Vorgehenweise z.B als Arduino-Projekt und der Verwendung von Wire0 und Wire1 (I2C-Scanner) bekomme ich zwar die I2C-Adresse de Kamera zu sehen, jedoch fällt der Prozessor mit einer Guru-Meditation beim ersten Zugriff auf das zweite Interface auf die Nase.
An diesem Problem scheint sich schon der eine oder andere die Zähne ausgebissen zu haben.
Beste Grüße
Hike -
Hi @aandekant,
great result - two hints:- You can remove the section [Analog] in the config, then you will not have fake values like this two in your image above - just be carefull, not to try to configue the analog ROIs in the web page

- I assume, that a dedicated training will help, the "8" with the notch on the upper left is not directly trained and obviously there is a problem with the "7".
Once you have your system running, collect the images in the log file and send them to me.
Best regards,
jomjolI have downloaded digits from the device, probably too much. I already sorted them more or less. Mostly there were problems with the number 7 and number 1. Number 8 was detected quite nicely.
wetransfer: https://we.tl/t-jQ56n1n4pr
Kind regards,
Koen - You can remove the section [Analog] in the config, then you will not have fake values like this two in your image above - just be carefull, not to try to configue the analog ROIs in the web page
-
I have downloaded digits from the device, probably too much. I already sorted them more or less. Mostly there were problems with the number 7 and number 1. Number 8 was detected quite nicely.
wetransfer: https://we.tl/t-jQ56n1n4pr
Kind regards,
Koen@aandekant Hi Koen,
I got the images, thanks. This are more than 23k pictures, where 18k in directory 10 do not show any digit. Only 2-3 typical images per digit and a collection of NaN (10) is totally sufficient. I will take some of them, but if you like to sort by yourself, you are welcome.
Best regards,
jomjol -
I have downloaded digits from the device, probably too much. I already sorted them more or less. Mostly there were problems with the number 7 and number 1. Number 8 was detected quite nicely.
wetransfer: https://we.tl/t-jQ56n1n4pr
Kind regards,
Koen@aandekant I have created a new version including parts of your digits:
https://github.com/jomjol/neural-network-digital-counter-readout
Please test it. -
Hallo ihr beiden
Danke für eure schnelle Hilfe. Ich gebe da nicht so schnell auf und habe es hinbekommen. Habe viel gegoogelt. In so einem Fall gibt es da wohl unterschiede in den Tools.
Unter Linux mit esptool geht es nicht aber so, falls nochmal jemand das gleiche problem hatLinux
python Verison 3 installieren
esptool.py von expressif herunterladen und in einem ordner entpacken
in den ordner gehen und dann
python3 esptool.py erase_flashProgrammieren ging genauso und ich bin happy jetzt
morgen gehts an Teile drucken. Wenn der Wasserzähler läuft kommt der Strom- und gaszähler dranGruß
WernerAlso bei mir scheint alles zu funktionieren. Danke nochmal jomol
Für den parser in iobroker habe ich noch einen Tip. Mein Wasserzähler hat folgendes Format 12345.1234
Mein Zähler hat momentan den Stand 123.1234. Die führenden Nullen werden ja nicht mit übertrgaen. Mit [N|0-9][N|0-9][N|0-9][N|0-9][N|0-9]\D\d\d\d\d geht das, aber was ist wenn der Stand von 999 auf 1000 geht? Dann tuts nicht mehr, oder man muss es umschreiben. Mit \d{1,5}.\d{4} müsste es immer gehen. Vielleicht ist hier ein regex Spezialist der das bestätigen kannGruß
Werner -
Also bei mir scheint alles zu funktionieren. Danke nochmal jomol
Für den parser in iobroker habe ich noch einen Tip. Mein Wasserzähler hat folgendes Format 12345.1234
Mein Zähler hat momentan den Stand 123.1234. Die führenden Nullen werden ja nicht mit übertrgaen. Mit [N|0-9][N|0-9][N|0-9][N|0-9][N|0-9]\D\d\d\d\d geht das, aber was ist wenn der Stand von 999 auf 1000 geht? Dann tuts nicht mehr, oder man muss es umschreiben. Mit \d{1,5}.\d{4} müsste es immer gehen. Vielleicht ist hier ein regex Spezialist der das bestätigen kannGruß
Werner -
@jomjol Hast du dich schon mal mit "Core Dump" befasst um den spontanen Restarts auf die Spur zu kommen?
