Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Hardware
    4. Wasserzähler - Selfmade

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    Wasserzähler - Selfmade

    This topic has been deleted. Only users with topic management privileges can see it.
    • J
      jomjol @jomjol last edited by jomjol

      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:
      a6170882-74bf-4adb-a509-e2f267e2b9b0-grafik.png

      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,
      jomjol

      P.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 🙂

      M G 2 Replies Last reply Reply Quote 1
      • M
        mameier1234 @jomjol last edited by

        @jomjol Unglaublich !! Ich habe riesigen Respect !!! Danke für die geile Arbeit, ich liebe das bisherige Ergebniss....

        1 Reply Last reply Reply Quote 0
        • G
          gerald123 @jomjol last edited by

          @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 👑

          J 1 Reply Last reply Reply Quote 0
          • J
            jomjol @gerald123 last edited by

            @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

            G 1 Reply Last reply Reply Quote 0
            • G
              gerald123 @jomjol last edited by

              @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?

              J 1 Reply Last reply Reply Quote 0
              • J
                jomjol @gerald123 last edited by

                @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

                G 2 Replies Last reply Reply Quote 0
                • G
                  gerald123 @jomjol last edited by

                  @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!

                  1 Reply Last reply Reply Quote 0
                  • G
                    gerald123 @jomjol last edited by

                    @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

                    J 1 Reply Last reply Reply Quote 0
                    • J
                      jomjol @gerald123 last edited by

                      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

                      G 1 Reply Last reply Reply Quote 0
                      • G
                        gerald123 @jomjol last edited by

                        @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

                        J 1 Reply Last reply Reply Quote 0
                        • J
                          jomjol @gerald123 last edited by

                          @gerald123 Diese Fehlermeldung kenne ich gar nicht. Bist du sicher, dass du die neueste Firmware verwendet?

                          G 1 Reply Last reply Reply Quote 0
                          • G
                            gerald123 @jomjol last edited by

                            @jomjol wie kann ich das prüfen?

                            J 1 Reply Last reply Reply Quote 0
                            • J
                              jomjol @gerald123 last edited by

                              @gerald123 Versionierung fehlt noch. Die neueste Version ist von gesten Abend.

                              G 1 Reply Last reply Reply Quote 0
                              • G
                                gerald123 @jomjol last edited by

                                @jomjol kann ich die neue Version per OTA auf den ESP flashen?

                                J 1 Reply Last reply Reply Quote 0
                                • W
                                  watcherkb @watcherkb last edited by

                                  @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)

                                  2020-06-30_1504.png

                                  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?

                                  J 1 Reply Last reply Reply Quote 0
                                  • J
                                    jomjol @watcherkb last edited by

                                    @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

                                    W 1 Reply Last reply Reply Quote 0
                                    • J
                                      jomjol @gerald123 last edited by

                                      @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.

                                      G 2 Replies Last reply Reply Quote 0
                                      • G
                                        gerald123 @jomjol last edited by

                                        @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

                                        1 Reply Last reply Reply Quote 0
                                        • G
                                          gerald123 @jomjol last edited by

                                          @jomjol hab das Löschen jetzt übers IPad geschafft, über Microsoft Edge funktioniert es bei mir nicht

                                          J 1 Reply Last reply Reply Quote 0
                                          • W
                                            watcherkb @jomjol last edited by watcherkb

                                            @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
                                            
                                            
                                            
                                            1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            444
                                            Online

                                            31.9k
                                            Users

                                            80.1k
                                            Topics

                                            1.3m
                                            Posts

                                            how-to wasser wasserzähler
                                            48
                                            1089
                                            322501
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo