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

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Wasserzähler - Selfmade

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

      @jomjol Ich kann in der config doch im modelfile eine tflite Wählen. Die sollte doch dann verwendet werden. Im Code wird ja auf die tflite zurückgegriffen. So nur mein Verständnis. Ich befürchte halt, dass wenn alle Ziffern in einer Datei zusammengefasst sind, dass das System hier Fehlalarm schlägt, da er jetzt schon statt einer weiß-auf-schwarz 4 eine schwarz-auf-weiß 8 erkennt.

      Ich bin gerade parallel dabei, die Python Version etwas zu modifizieren. Hauptsächlich refactorings, die wir natürlich besprechen müssten.
      Das Ganze bräuchte ich, um einen Zähler mit Vor- und Nachkommazahlen zu betreiben.
      Auf dem ESP wäre das natürlich auch willkommen, wenn das ginge. Allerdings ist das schwieriger zu aktualisieren, da mann dafür den ESP jedesmal rausnehmen, oben anschließen, programmieren und wieder einsetzen muss. Geht auch, aber der Entwicklungszyklus ist definitiv länger, wenn man das häufiger machen muss.
      Bin gespannt.
      Wenn du reviews benötigst, gib bescheid. Meinen github account kennst du ja.

      1 Reply Last reply Reply Quote 0
      • E
        el_kassi last edited by el_kassi

        Wäre das hier ein besserer Schnitt?
        Bildschirmfoto 2020-06-24 um 18.31.10.png
        Oder geht das zu weit runter? Hab versucht, mich an die 23% und 78% zu halten. Die 3 an Pos. 5 ist warum auch immer recht tief und der blaue Rand hat da eine Wölbung. Ist dann aber auch weiß mit auf dem Bild ganz unten.

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

          @el_kassi Enschuldige die später RM, ich war ein paar Tage offline. Von der Größe der Zahlen passt das. Ich würde die ROIs noch etwas nach oben setzen, so dass die Zahlen mittig sind.

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

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

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

              @watcherkb Ist das genau der Output von "...&full" oder hast du die erste Reihe einfach nicht ausgeschnitten?

              Normalerweise stehen dort auch die Ziffern in der ersten Reihe und erst dann kommen die Bilder. Wäre ein Hinweis, wo ich suchen könnte. So einen Fehler hat noch keiner berichtet.

              P.S.: ich würde etwas mehr Rand um die Ziffern lassen, dann ist die Bilderkennung etwas stabiler.

              W 2 Replies Last reply Reply Quote 0
              • W
                watcherkb @jomjol last edited by

                @jomjol in der ersten Reihe sind auch keine Ziffern, und das große Gesamtbild habe ich auch nicht gescreenshotet.

                Danke werde es anpassen

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

                  @jomjol heute gehts wieder obwohl ich nichts verändert habe. Einzig die 6 die gestern als 8 berechnet wurde, ist heute korrekt. Evtl. liegt es dadran? Anbei Screenshot und meine Settings:

                  2020-07-01_1445.png

                  [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
                  • E
                    el_kassi last edited by

                    out.zip
                    Neuer Schnitt und mehr Ziffern

                    J 1 Reply Last reply Reply Quote 0
                    • E
                      el_kassi @michaeljoos last edited by el_kassi

                      @jomjol Ich hab das CNN auch mal bei mir trainieren lassen, um zu sehen, ob es taugt und auch um die Fehlerrate mal zu verringern. Auf meine 16000 SourceImage der letzten Tage angewendet habe ich > 50% NaN in den letzten 4 Ziffern, bzw. tatsächlich in der letzten Ziffer. Daher meine Frage:
                      Was darf alles in den NaN Ordner rein zum trainieren und was nicht?

                      Wenn ich mich auf das Bild von @michaeljoos beziehe:
                      Käme hier die letzte Ziffer in NaN oder in 9 oder sollte man sie für das Trainieren komplett vermeiden? D.h. sollte man nur Bilder, die exakt zwischen 2 Ziffern liegen, in NaN kopieren?
                      Ich habe die Erfahrung gemacht, dass sehr oft zwischen 6 und 7 als 9 erkannt wird. Der Kringel der 6 und der schräge Balken der 7 sind da anscheinend gewichtiger als die Tatsache, dass beide Teile nicht durchgängig verbunden sind.

                      In diesem Zusammenhang noch eine Frage:
                      Sollte ich (siehe Bild in einem der vorherigen Posts) die letzte Ziffer (digit8) bei mir kleiner ausschneiden? Beim letzten Rad ist offenbar der sichtbare Bereich größer, so dass ich grundsätzlich immer Teile einer anderen Ziffer sichtbar habe, was dann sehr stark in Richtung NaN oder Fehlinterpretation geht.

                      Außerdem habe ich mich noch gefragt, ob man das CNN auf 21 Klassen erweitern könnte und exakt solche Werte, 2.5, 6.5, etc. zulassen kann, wenn man sie erkennt. Habe damit ein bisschen probiert, aber zu wenig Daten dafür. Dies würde ggf. auch die NaN Rate reduzieren.

                      Resultat:

                      de7c98cc-c296-47ab-84bc-a5eac4d318a6-image.png

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

                        @el_kassi sagte in Wasserzähler - Selfmade:

                        @jomjol Ich hab das CNN auch mal bei mir trainieren lassen, um zu sehen, ob es taugt und auch um die Fehlerrate mal zu verringern. Auf meine 16000 SourceImage der letzten Tage angewendet habe ich > 50% NaN in den letzten 4 Ziffern, bzw. tatsächlich in der letzten Ziffer. Daher meine Frage:
                        Was darf alles in den NaN Ordner rein zum trainieren und was nicht?

                        In NaN sortiere ich eigentlich alles, wo die Ziffer nicht vollständig im Bild zu sehen sind (= ohne Berührung des Randes)

                        Wenn ich mich auf das Bild von @michaeljoos beziehe:
                        Käme hier die letzte Ziffer in NaN oder in 9 oder sollte man sie für das Trainieren komplett vermeiden? D.h. sollte man nur Bilder, die exakt zwischen 2 Ziffern liegen, in NaN kopieren?

                        Definitiv in NaN

                        Ich habe die Erfahrung gemacht, dass sehr oft zwischen 6 und 7 als 9 erkannt wird. Der Kringel der 6 und der schräge Balken der 7 sind da anscheinend gewichtiger als die Tatsache, dass beide Teile nicht durchgängig verbunden sind.

                        In diesem Zusammenhang noch eine Frage:
                        Sollte ich (siehe Bild in einem der vorherigen Posts) die letzte Ziffer (digit8) bei mir kleiner ausschneiden? Beim letzten Rad ist offenbar der sichtbare Bereich größer, so dass ich grundsätzlich immer Teile einer anderen Ziffer sichtbar habe, was dann sehr stark in Richtung NaN oder Fehlinterpretation geht.

                        Eigentlich würde ich es nicht kleiner aussschneiden, sondern nur beim Einsortieren das gleiche Kriterium angwenden: ist die Zahl von Interesse vollständig im Bild und berührt den Rand nicht.

                        Außerdem habe ich mich noch gefragt, ob man das CNN auf 21 Klassen erweitern könnte und exakt solche Werte, 2.5, 6.5, etc. zulassen kann, wenn man sie erkennt. Habe damit ein bisschen probiert, aber zu wenig Daten dafür. Dies würde ggf. auch die NaN Rate reduzieren.

                        Würde ich nicht empfehlen, da

                        1. Brauchst du viel mehr Bilder zum Teachen
                        2. wo ist dann die Grenze? warum nicht auch 0,25-er Schritte
                        3. Die Mechanismen zum Korrigieren von NaN ("usePreValue") funktionieren i.d.R. gut.

                        Resultat:

                        de7c98cc-c296-47ab-84bc-a5eac4d318a6-image.png

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

                          @el_kassi sagte in Wasserzähler - Selfmade:

                          out.zip
                          Neuer Schnitt und mehr Ziffern

                          Danke für den Input - ist verarbeitet und hochgeladen:

                          TfLite v6.2.0: https://github.com/jomjol/neural-network-digital-counter-readout
                          wasserzaehler - rolling v7.5.0: https://github.com/jomjol/water-meter-system-complete/tree/rolling

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

                            Hallo zusammen,

                            es ist schon länger etwas ruhiger hier im Thread. Hoffentlich bedeutet es, dass eure Zähler gut laufen 🙂

                            Ich habe in der letzten Zeit an einer neues Version gearbeitet und möchte einen ersten Zwischenstand geben. Es ist mir gelungen, alle Prozesse, also auch die CNN-Image Recognition direkt auf dem ESP32 laufen zu lassen. Damit ist bald hoffentlich kein Docker-Container mehr nötig. Einige Punkte von euren Rückmeldungen habe ich auch schon berücksichtigt.

                            z.B. die längere Laufzeit der Auswertung wird durch eine periodische automatische Erkennung gelöst, so dass ich bei Abfrage des Wertes eine schnelle aktuelle Antwort bekomme.

                            Damit der Übergang möglichst einfach wird und auch, damit ich die Performance testen kann, habe ich auch die bisherige Funktion des ESP32-CAM als Bildlieferant beibehalten und man kann sowohl den Dockercontainer (Abfrage über /capture_with_flashlight), wie auch das komplette System auf dem ESP32 parallel laufen lassen ohne gegenseitge Beeinflussung.
                            Ich hänge noch ziemlich in der Dokumentation und den Source-Code sollte ich auch noch etwas aufräumen, bevor ich ihn ins GitHub hochlade. Das ist mein Projekt für die kommenden Sommerferien 🙂

                            Ich poste hier schon mal einen Link zum neuen Repository: https://github.com/jomjol/AI-on-the-edge-device

                            Ist noch sehr leer, füllt sich aber bald hoffentlich kontinuierlich. Ich suche noch ein oder zwei Early-Adopter, die meine sehr frühen Versionen vorab testen. Ist aber noch ein früher Stand. Wer will, kann sich gerne per Chat bei mir melden.

                            Beste Grüße,
                            jomjol

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

                              @jomjol Hallo jomjol,
                              Das ist gut zu hören das in Zukunft alles nur noch am ESP32 läuft und direkt vom IoBroker abgefragt werden kann.
                              Leider wurde bei mir jetzt ein neuer Wasserzähler eingebaut Type Diehl.
                              Gibt es dazu schon eine Möglichkeit das ich ihn auch auslesen kann.20200712_194128.jpg
                              20200712_194049.jpg
                              Sg. Gerald

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

                                @gerald123 Hallo Gerald,
                                das sollte funktionieren. Inzwischen sind auch erste Ziffern mit weißer Schrift auf schwarzem bzw. rotem Hintergrund geteached. Einzig für das Komma brauchst du noch einen Trick auf der Serverseite. Das kann ich aber auch parametrisierbar gestalten, du bist nicht der erste, der danach fragen.

                                Gruß,
                                jomjol

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

                                  @jomjol Super! Werde ich testen! Von mir ist es deshalb so "ruhig" da die Auswertung nun seit Monaten ohne Probleme läuft, lese aber selbstverständlich noch immer mit. Das Projekt hat mich total begeistert! Vielen Dank nochmals für Deine Mühe und Deine bisherige tolle Arbeit! Liebe Grüße Paul

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

                                    @jomjol Das ist gut zu hören.
                                    Einen Adapter für die Kamera gibt es dafür auch schon oder muss ich versuchen diesen selber zu Konstruieren?

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

                                      @jomjol said in Wasserzähler - Selfmade:

                                      Einzig für das Komma brauchst du noch einen Trick auf der Serverseite. Das kann ich aber auch parametrisierbar gestalten, du bist nicht der erste, der danach fragen.

                                      😉 😄 Genau, ich hab das in openHAB mit einer Java-Transformation gelöst. Wenn du das aber konfigurierbar machen könntest wäre das natürlich fantastisch.

                                      Bei mir läuft alles wunderbar. Mein Wasserverbrauch ist einfach so gering, dass ich immer noch am Ziffern sammeln & lernen bin. Sobald ich alles zusammen habe werde ich dir das komplette Paket schicken. Ich liefere dann auch rote Ziffern auf weissem Hintergrund. Habe mir ja unterdessen auch Jupyter, Tensorflow, Keras und all das Zeugs installiert damit ich die neuen Ziffern jeweils selbst anlernen kann und dich nicht immer "belästigen" muss. Das funktioniert tiptop und ich lerne sogar noch was dabei 🙂

                                      Gruess
                                      Michael

                                      1 Reply Last reply Reply Quote 0
                                      • Knallochse
                                        Knallochse last edited by

                                        @jomjol Auch von mir : Daumen hoch 👍
                                        Läuft seit Monaten super stabil und zu meiner vollen Zufriedenheit
                                        Ich möchte mich nochmal für deine Entwicklung dieses Projekts bei dir bedanken 👏

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

                                          @gerald123 Hallo Gerald, einen Adapter musst du selbst konstruieren. Aber du kannst meinen Adapter verwenden und musst nur den unternen Teil anpassen.

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

                                            @jomjol danke für die Info und deine tolle Arbeit!
                                            Werde mir den Adapter Konstruieren und wenn er soweit ist dann auch hier mal zeigen.
                                            Schönen Abend wünsche ich.

                                            1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            910
                                            Online

                                            31.7k
                                            Users

                                            79.8k
                                            Topics

                                            1.3m
                                            Posts

                                            how-to wasser wasserzähler
                                            48
                                            1089
                                            310764
                                            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