NEWS
Wasserzähler - Selfmade
-
Hallo zusammen,
hier ein Update zu meinem neuen Projekt. Die erste Beta-Version für den integrierten Wasserzähler ist funktionsfähig!
Hier mal ein Screenshot von der Benutzerschnittstelle:
Wie ihr seht, habe ich die verschiedenen Features der Bildaufnahme und Auswertung mit einer Web-Oberfläche verknüpft. Dass wird in Zukunft den Betrieb und die Anpassung des Servers deutlich vereinfachen und noch mehr Nutzern zugänglich machen.
Hier mal ein paar Key-Features:
- Webserver mit einfacher Oberfläche integriert - einfach erweiterbar (Idee: z.B. Bearbeitung der Config.ini direkt im Browser ?)
- Zusätzlich ein einfacher Fileserver für die SD-Karte (browse, upload, download, delete)
- OTA-Schnittstelle über Web-Interface, inkl. Reboot - kein Aus-/Einbau für Updates!
- Kamera, Bildbearbeitung & Ziffer/Zeiger-Erkennung alles auf dem ESP32
- Abwährtkompatibel (95%) zur Schnittstelle zu Bilderfassung (.../capture_with_flashlight), wie auch zum Dockercontainer (.../wasserzaehler.html)
- Systeme laufen alle parallel (Multitasking Programmstruktur). Damit könnt ihr auch erstmal die alten System unverändert weiter laufen lassen und alles parallel testen.
Einziger Nachteil: momentan dauert ein Auswertezyklus bei mir ca. 2.5 Minuten. Da ist noch viel Potential (>50%), aber für Just-In-Time Abfragen zu lange. Daher habe ich einen Scheduler implementiert, der zyklisch (z.B. alle 5 Minuten) die Auswertung macht und bei Abfragen den letzten Wert meldet. Konsistenzchecks, analog zum Docker-Container, sind natürlich auch impementiert.
Da ich aus Platzgründen den INI-Parser selbst schreiben musste, ist der Syntax nicht vollkommen kompatibel aber leicht zu adaptieren. Auch werden nur noch 2 Referenzen verwendet, das hat sogar den Vorteil, dass es nicht mehr zu einer Verzehrung kommen kann.Für alle, die mal einen Blick darauf werfen wollen, finden sich die Firmwaredateien und eine Anleitung zum Flashen hier:
https://github.com/jomjol/AI-on-the-edge-device
Für Fragen, Anregungen, Bug-Reports, ... bin ich wie immer offen.
Beste Grüße,
jomjolP.S.: das ist eine recht aufwendige Portierung geworden, ich musste alles in C++ neu schreiben und habe es auch für Restrukturierung genutzt. Daher bitte ich zunächst Bugs zu verzeihen
-
@jomjol Unglaublich !! Ich habe riesigen Respect !!! Danke für die geile Arbeit, ich liebe das bisherige Ergebniss....
-
@jomjol Hallo jomjol,
Die Bedienoberfläche schaut super aus
Um bei der Installation nichts falsch zu machen wollte ich frage ob es schon eine Anleitung in Deutsch gibt?
Würde mir sehr helfen.
Super tolles Projekt, bitte weiter so -
@gerald123 Hallo Gerald,
aktuell gibt es keine deutsche Anleitung und erstmal wollte ich es auch nicht zweisprachig machen. Aber ich kann dir gerne eine kurze Skype o.ä. Session anbieten und dann zeige ich es dir. Ist wirklich nicht schwierig. Bitte einfach kontakt per PM.Beste Grüße,
jomjol -
@jomjol Hallo jomjol,
Danke für das Angebot, werde es mal alleine probieren und sonst melde ich mich wieder.
Ist es richtig wenn ich die drei Codedateien auf den ESP flashe und den gesamten Ordner SD auf eine Speicherkarte speichere und in den ESP stecke. Das sollte es doch schon gewesen sein, oder? -
@gerald123 Ja korrekt, du musst dann noch die config.ini anpassen. Die hat einen etwas anderen Syntax, ist aber inhaltlich gleich und hoffentlich fast selbsterklärend.
Unterstützte dich gerne als erster Beta-Nutzer :-). Einfach wirklich gerne melden.
Gruß,
jomjol -
@jomjol Danke, Installation am ESP hat heute schon geklappt
Morgen werde ich versuchen die Config.ini einzurichten, hoffe das geht auch so toll.
Ich werde wieder berichten wie es läuft
Schönen Abend wünsche ich dir noch! -
@jomjol Hallo jomjol,
Jetzt benötige ich schon deine Hilfe!
Ich möchte die config.ini bearbeiten, aber leider ohne erfolg.
Direkt auf der Weboberfläche ist ein editieren nicht möglich und beim hochladen per WLan kommt auch immer eine Fehlermeldung.
Muss ich dazu die Speicherkarte wieder herausnehmen und direkt am PC bearbeiten?
Gruß
Gerald -
Hallo @gerald123,
gar kein Problem - gerne. Direkte Bearbeitung im Brower geht (nocht) nicht. Der Fileserver ist ein reiner Viewer und Up/Download. Bevor du die Config.ini hochladen kannst, musst du die alte Config.ini löschen (Delete Button rechts). Aktuell ist der Filebrowser so eingestellt, dass er vorhandene Dateien nicht überschreibt.
SD-Karte rausholen und offline bearbeiten geht natürlich auch. Damit die neue Config.ini verwendet wird, musst du aber auch einen Reboot durchführen. Aktuell wird sie nur beim Start ausgelesen.Gruß,
jomjol -
@jomjol hab jetzt den Delete Button benutzt, leider kommt dann die Meldung „ Header fields are too long for server to interpret“ und wenn ich dann wieder über den File Server im config Ordner nachsehe ist die config.ini Datei noch immer vorhanden.
Muss ich wirklich die SD Karte rausholen -
@gerald123 Diese Fehlermeldung kenne ich gar nicht. Bist du sicher, dass du die neueste Firmware verwendet?
-
@jomjol wie kann ich das prüfen?
-
@gerald123 Versionierung fehlt noch. Die neueste Version ist von gesten Abend.
-
@jomjol kann ich die neue Version per OTA auf den ESP flashen?
-
@watcherkb sagte in Wasserzähler - Selfmade:
@jomjol
Hi, ich habe seit heute das Problem dass der Server mir beim Aufruf über http://192.168.1.36:3000/wasserzaehler.html nichts liefert. Die Seite bleibt leer. Der Parser-Adapter meckert auch:Cannot read link "http://192.168.1.36:3000/wasserzaehler.html": {"statusCode":200,"body":"","headers":{"server":"BaseHTTP/0.6 Python/3.7.4","date":"Tue, 30 Jun 2020 12:10:00 GMT","content-type"
Der Aufruf http://192.168.1.36:3000/wasserzaehler.html&full funktioniert, hat aber die 6 falsch erkannt (letztes tf-file)
Server und ESP sind bereits neu gestartet. Eine Idee was es sein kann?
@jomjol das Problem besteht bei mir weiterhin. In der ersten Reihe werden keine Werte angezeigt, deswegen auch keine Parserauswertung möglich. Konntest du schon gucken woran es liegen kann?
-
@watcherkb
Habe mir den Code gerade angeschaut. Die Fehlermeldung kann auftreten, wenn du zwar die Konsistenzprüfung eingeschaltet hast[ConsistencyCheck] Enabled=True
aber in der Fehlerrückmeldung keine Errormessage angibst:
ErrorReturn=OldValue, Readout
Wie sieht denn deine Config.ini dort aus. Falls ErrorReturn so oder so ähnlich aussieht, probier mal:
ErrorReturn=OldValue, ErrorMessage, Readout
Wenn es das nicht ist, dann schick mir mal bitte dein Config.ini
Gruß,
jomjol -
@gerald123 sagte in Wasserzähler - Selfmade:
@jomjol kann ich die neue Version per OTA auf den ESP flashen?
Ja, kann du. Aber bitte auch drauf achten, dass auch die Dateien im Verzeichnis /html aktualisiert werden. Dort ist die Ansteuerung für die OTA, ... und dort habe ich auch noch einiges optimiert. Sollte aber in Zukunft weniger werden.
-
@jomjol hab jetzt den ESP neu aufgesetzt mit der neuesten Software.
Leider kann ich die config.ini immer noch nicht löschen über den Browser, ich muss noch immer den ESP ausbauen und direkt die Speicherkarte Bespielen -
@jomjol hab das Löschen jetzt übers IPad geschafft, über Microsoft Edge funktioniert es bei mir nicht
-
@jomjol
Danke fürs Forschen. Leider habe ich ganz andere settings. Du hast mich aber auf die richtige Fährte geführt. Mit diesen Settings bekomme ich auf jeden Fall einen Wert:[ConsistencyCheck] enabled = False errorreturn = Readout
Hier die Settings womit ich nichts erhalte:
[Imagesource] timeoutloadimage = 30 #ip durch die ip des esp32 ersetzen! urlimagesource = http://192.168.1.209/capture_with_flashlight?quality=25&size=svga logimagelocation = ./log/source_image #logonlyfalsepictures=false [ConsistencyCheck] enabled = False #stores the last value in a file for the case of a restart (e.g. docker container after update) readprevaluefromfileatstartup = True #maximum time spanning since last startup for use of prevalue from filestorage in minutes readprevaluefromfilemaxage = 30 allownegativerates = true #maximum change of new to old value (+ or -) maxratevalue = 0.5 #return in case of error: value = oldvalue or newvalue # errormessage = return text with problem (seperated by tabstopp) if nothing, then no error message # readout = real readout without corrections (newvalue) errorreturn = errormessage [AnalogReadOut] #if enabled analog counters will be read, if disabled only digital counters will be read. enabled = True [alignment] initial_rotation_angle = 180.0 [alignment.ref0] image = ./config/ref0.jpg pos_x = 51 pos_y = 125 [alignment.ref1] image = ./config/ref1.jpg pos_x = 611 pos_y = 59 [alignment.ref2] image = ./config/ref2.jpg pos_x = 362 pos_y = 398 [Digital_Digit] names = ziffer1, ziffer2, ziffer3, ziffer4, ziffer5 modelfile = ./config/neuralnets/Train_CNN_Digital-Readout_Version_6.1.2.tflite logimagelocation = ./log/digital_digit #lognames= [Analog_Counter] names = zeiger1, zeiger2, zeiger3, zeiger4 modelfile = ./config/neuralnets/CNN_Analog-Readout_Version-6.2.0.tflite logimagelocation=./log/analog_counter #lognames= [Analog_Counter.zeiger1] pos_x = 572 pos_y = 174 dx = 158 dy = 158 [Analog_Counter.zeiger2] pos_x = 486 pos_y = 344 dx = 155 dy = 155 [Analog_Counter.zeiger3] pos_x = 329 pos_y = 423 dx = 156 dy = 156 [Analog_Counter.zeiger4] pos_x = 101 pos_y = 352 dx = 168 dy = 168 [Digital_Digit.ziffer1] pos_x = 174 pos_y = 6 dx = 48 dy = 86 [Digital_Digit.ziffer2] pos_x = 258 pos_y = 7 dx = 49 dy = 88 [Digital_Digit.ziffer3] pos_x = 345 pos_y = 5 dx = 50 dy = 89 [Digital_Digit.ziffer4] pos_x = 430 pos_y = 8 dx = 48 dy = 85 [Digital_Digit.ziffer5] pos_x = 516 pos_y = 7 dx = 46 dy = 83