NEWS
Wasserzähler - Selfmade
-
@daniel_iobroker, @watcherkb, @pfried
Hallo zusammen,
ich habe jetzt einen Server auf einem Raspberry Pi3 am Laufen. Detailierte Installationsanleitung findet ihr in Github in einem speziellen Branch für den Raspberry:https://github.com/jomjol/water-meter-system-complete/tree/Raspberry-V3
Es ist sicher nicht die eleganteste und leanste Installation, da ich erstmal etwas zum Laufen bringen wollte.
Achtung: ihr müsst auch den Code von dort verwenden, da ich eine kleine Änderung an einer der Libraries machen musste, führe ich einem der nächsten Releases dann zusammen.
Hoffe es klappt bei euch auch!
Beste Grüße,
jomjol -
@jomjol
Danke für deinen Post.
Hab heute schon einiges geschafft. Gehäuse ist gedruckt, esp32-cam ist geflasht und funktioniert mit deiner Software.
Dann ging es an den pi. Hab den ganzen Tag über deinen Server zu laufen gebracht (python 3.5). Musste dann auch in der wasseruhr.py unten beim server was anpassen, da sich das ab python 3.6 geändert hat. Nach dem anpassen funktionierte der Server. Hab dann die IP com esp in der config eingetragen und wenn ich dann die Serveradresse aufgerufen habe, hat der esp32 ein Bild gemacht. Dann gab es aber einen Fehler mit dem Pfad. Irgendwie konnte der Server das aufgenommen Bild nicht finden.Hab vorhin gesehen, dass du hier im Forum eine Anleitung für den Pi gemacht hast. Hab das auch gleich ausprobiert. Hatte hier wieder den gleichen Fehler, dass der Server nicht gestartet werden kann. Müsste jetzt wieder das gleiche in der wasseruhr.py umschreiben. Bin mir aber sicher, dass dann der gleiche Fehler kommen wird, wie bei mir vorhin.
Hier ein Ausschnitt davon
Instructions for updating: Call initializer instance with the dtype argument instead of passing it to the constructor Analog Model Init Done Digital Model Init Done Digital Model Init Done Traceback (most recent call last): File "wasseruhr.py", line 86, in <module> with socketserver.TCPServer(("", PORT), SimpleHTTPRequestHandler) as httpd: AttributeError: __exit__
Jetzt zu meiner Frage. Welche python3 version hast du auf dem pi am laufen?
python3 --version
Ich denke du wirst mindestens 3.6 haben oder?
Bei mir ist derzeit noch 3.5 installiert und wenn ich sudo apt-get install python3 ausführe, dann wird mir angezeigt, dass ich schon die neueste version habe.
Muss mal schauen, dass ich eine höhere Version installiert bekomme, dann werden die Fehler wohl erledigt sein.BTW: das thingiverse file is super, passte perfekt bei mir Danke dafür.
-
@daniel_iobroker Ich habe eine frisch installierte Raspbian Buster Lite Version. Dort ist Python 3.7 installiert (und 2.7).
Ich verwende Python 3.7 -
@jomjol
ok, habe ich mir gedacht. Ich hab das ganze auf meinem alten pi 3b ausprobiert, wo noch raspbian strech installiert ist. Hier ist python 3.5 drauf. Der Hintergrund ist, dass ich das zuerst auf dem test-raspi probieren möchte und wenn alles klappt, dann auf dem pi4 übertragen, auf dem das produktive system läuft.Werde daher gleich mal auf raspbian buster updaten und dann probieren. Bin aber zuversichtlich, dass es klappen wird.
-
@jomjol
so, wie versprochen. Bin jetzt mit dem update fertig. Hab jetzt die gleiche python version wie du.Server startet wie erwartet ohne Anpassung der wasseruhr.py Datei.
Natürlich habe ich deine Daten von Github geladen.Wenn ich jetzt aber ein Bild über den server bzw. esp32 mache, habe ich wieder den gleichen Fehler wie gestern. Das Bild wird anscheinend nicht gespeichert oder der Pfad ist falsch.
Hier der log, wenn ich die Seite http://192.168.8.202:3000/wasserzaehler.html aufrufe:
Process Process-1: Traceback (most recent call last): File "/usr/lib/python3.7/multiprocessing/process.py", line 297, in _bootstrap self.run() File "/usr/lib/python3.7/multiprocessing/process.py", line 99, in run self._target(*self._args, **self._kwargs) File "/home/pi/wasserzaehler_neu/lib/LoadFileFromHTTPClass.py", line 48, in ReadURL urllib.request.urlretrieve(url, target) File "/usr/lib/python3.7/urllib/request.py", line 257, in urlretrieve tfp = open(filename, 'wb') FileNotFoundError: [Errno 2] No such file or directory: './image_tmp/original.jpg' 192.168.8.102 - - [02/Nov/2019 10:38:25] "GET /wasserzaehler.html HTTP/1.1" 200
Hattest du den Fehler auch?
BTW, in github hast du noch einen kleinen fehler. Das ausführen des Programms geht nur mit python3 wasseruhr.py anstelle von python3 wasserzaehler.py
-
@daniel_iobroker sagte in Wasserzähler - Selfmade:
original
Das Problem ist, das es das Bild in "./image_tmp/original.jpg" nicht gibt. Mir fallen zwei Ursachen spontan ein:
- Der ESP32-CAM ist noch nicht richtig konfiguriert in der Config.ini
- Das Verzeichnis ./image_tmp existiert nicht
Zu eins kannst du die URL hinter URLImageSource=... direkt in einem Brower testen. Dort sollte das Bild vom ESP32-CAM kommen.
-
@daniel_iobroker said in Wasserzähler - Selfmade:
Also in der URLImageSoure steht:http://192.168.8.122/capture_with_flashlight
Wenn ich diesen Pfad im Browser eingebe, dann kommt das Bild vom ESP32-CAM.zu 2.: ich weiß gar nicht, wo das Verzeichnis sein soll? Muss ich dieses manuell erstellen?
Wenn ich über den Server das aktuelle Bild holen will, dann seh ich, dass der ESP32-CAM das Bild macht. Ob das gespeichert wird und vor allem wo kann ich nicht sagen.
-
@daniel_iobroker
Du musst die komplette Verzeichnisstruktur unter "code" anlegen, inkl. des leeren Verzeichnisses "image_tmp" -
@jomjol
aaaah ok, jetzt klappt es.
Den ganzen "Code" Ordner Inhalt hatte ich schon am pi, jedoch ist auf Github der leere Ordner image_tmp nicht vorhanden.
Hab den jetzt erstellt und jetzt klappt es auchWerde jetzt mal die Konfiguration angehen.
Danke
-
@daniel_iobroker Ordner ist erstmal leer und wird von Github daher vermutlich nicht angelegt / synchonisiert. Jetzt passt es, ich habe einen Dummydatei hinterlegt.
Danke für die Hinweise!
-
@jomjol
so die ersten Test sind auch schon da.
Hab die config auf meine Wasseruhr angepasst.
Leider ist das Bild etwas dunkel... kann man den weißabgleich anpassen? Wahrscheinlich nicht.Hier das Bild vom ESP32-CAM von der Uhr:
Hier das roi:
Nicht wundern, das Bild wurde um 90 Grad gedreht, daher die schwarzen RänderUnd das ist das Ergebnis:
13N.3590 0013N 3590Die 5 wurde nicht erkannt und bei den analogen Zeigern bin ich bei Zeiger 1 um eine Stelle daneben, Zeiger 2 auch um eine Stelle, Zeiger 3 passt, Zeiger 4 wieder um eine Stelle daneben. Bei Zeiger 1 und 2 könnte ich mir vorstellen, dass es zu dunkel ist oder etwas unscharf?, aber bei Zeiger 4 sollte es eigentlich passen?
-
@daniel_iobroker Erstmal super Ergebnis für den ersten Versuche!
Hast du die Halterung in weis ausgedruck? Bei mir ist alles schwarz und daher das Bild selber etwas heller. Das könnte in der Tat ein Thema für die Erkennung sein. Vielleicht kannst du mit einer "Innenverkleidung" aus schwarzer Pappe/Papier etwas erreichen.
Für die Zeiger liegt es vermutlich eher daran, dass es etwas unscharf ist (Insbesondere Zeiger1).
Die "5" hätte er eigentlich erkennen müssen. Es scheint mir, dass sie noch leicht tiefer liegt, wie die anderen Ziffern. Vermutlich musst du nochmal an einen Alignmentstrukturen nachteachen. Es scheint, als ob das Bild noch 2-3 Grad gegen den Uhrzeigersinn gedreht werden müsste, damit die Ziffern auf einer Linie stehen. -
@jomjol
Danke für deine Einschätzung.
Ja die Halterung habe ich in weiß gedruckt - nachträglich gesehen nicht so schlauHab jetzt innen eine schwarze Folie angebracht und dann alles nochmal eingestellt und konfiguriert.
Hier das neue Bild:
Hier das neue roi:
Hier das Ergebnis:
135.3636 00135 3636Sieht glaub ich gut aus. Ich denke, die 4 bei den analogen Zeigern soll erst erscheinen, wenn der Zeiger mindestens diese Position erreicht hat. Hier geht es nicht darum, wo der Zeiger von der Position her näher drann ist oder?
-
Hallo Gents,
bei mir startet wasseruhr.py auch aber mit einen Haufen Warnings....
Dann tut sich aber nichts, es wird kein Bild aufgenommen, obwohl im Browser http://192.168.10.130/capture_with_flashlight funktioniert -
@daniel_iobroker Super!
Bei den analogen Zeigern gibt es noch eine innere Logik, die den Wert des "vorherigen" Zeigers berücksichtigt. Das hat folgende Ursache:
- Die Bilderkennung ist nicht immer ganz präzise, das kann auch an der Ausrichtung der Zeiger liegen. D.h. ob ein Zeiger jetzt von z.B. 3 auf 4 springt, hängt davon ab, ob der Zeiger vorher noch auf der 9 oder schon auf 0 oder 1 steht.
Damit ist sicher gestellt, dass es deutlich sinnvollere Werte gibt.
Wenn du sehen willst, was genau die Bilderkennung ausliest, kannst du bei den Parameter "&full" hinten an die URL einer normalen Abfrage anhängen, dann gibt deutlich mehr Informationen.
-
@pfried
Die Warnings kannst du getrost ignorieren. Die kommen bei mir auch und sind unkritisch. Warum aber keine Rückmeldung bekommst ist merkwürdig, denn wenn es ein Problem gäbe, dann müsstest du nachWasserzaehler is serving at port 3000
weitere Einträge, z.B. Fehlermeldungen sehen.
Dort kommt gar nichts?
-
@jomjol
Leider kommt dort gar nichts. Kann es sein, dass es daran liegt, dass ich einen Raspberry4 mit buster verwende? -
@pfried Ich verwende auch Buster, zwar auf einem Raspi3, aber sollte eigentlich kein Problem sein. Wie genau lautet deine Serverabfrage?
-
@jomjol Wie auf der Github Seite beschrieben verwende ich python3 Wasseruhr.py
-
@pfried Ja genau, so startest du den Server.
Jetzt musst du von einem Brower auf einem anderen System den Wasserstand an deinem Server abfragen:
http://server-ip:3000/wasserzaehler.html
server-ip ist die Adresse von deinem Server (Docker oder Raspi).