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.
    • Knallochse
      Knallochse @jomjol last edited by

      @jomjol Toll wäre auch, wenn das Referenzbild direkt der ESP-Cam kommt (Eingabe IP)

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

        @Knallochse sagte in Wasserzähler - Selfmade:

        @jomjol Toll wäre auch, wenn das Referenzbild direkt der ESP-Cam kommt (Eingabe IP)

        Das klappt nicht, weil ich vermutlich aus der Webapplication heraus nicht auf eine lokale IP in deinem Heimnetz zugreifen kann. Wenn das ginge, wäre natürlich cool - habe aber noch keine Idee.

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

          @jomjol Ich hatte angenommen, dass der Editor mal eine Art Einrichtungsassistent wird. (offline)
          Aber so geht es ja auch 👍

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

            @jomjol : Bei mir ist in der Config die ich durch dein Tool erstellt hab die 4. und 5. digital Ziffer vertauscht.
            Hab ich da irgnendwo nen Fehler gemacht?
            In der Config waren die Daten verdreht, also habe ich es geändert, aber die Anzeige ist immer noch verdreht Oo

            [Imagesource]
            timeoutloadimage = 30
            #ip durch die ip des esp32 ersetzen!
            urlimagesource = http://192.168.178.238/capture_with_flashlight
            #logimagelocation=logimagelocation
            #logonlyfalsepictures=false
            
            [ConsistencyCheck]
            enabled = True
            #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 = False
            #maximum change of new to old value (+ or -)
            maxratevalue = 0.1
            #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 = OldValue, ErrorMessage, Readout
            
            [AnalogReadOut]
            #if enabled analog counters will be read, if disabled only digital counters will be read.
            enabled = True
            
            [alignment]
            initial_rotation_angle = 0.0
            
            [alignment.ref0]
            image = ./config/ref0.jpg
            pos_x = 335
            pos_y = 260
            
            [alignment.ref1]
            image = ./config/ref1.jpg
            pos_x = 499
            pos_y = 186
            
            [alignment.ref2]
            image = ./config/ref2.jpg
            pos_x = 365
            pos_y = 445
            
            [Digital_Digit]
            names = ziffer1, ziffer2, ziffer3, ziffer5, ziffer4
            modelfile = ./config/neuralnets/Train_CNN_Digital-Readout_Version_5.0.0.h5
            #logimagelocation=
            #lognames=
            
            [Analog_Counter]
            names = zeiger1, zeiger2, zeiger3, zeiger4
            modelfile = ./config/neuralnets/CNN_Analog-Readout_Version-5.0.0.h5
            #logimagelocation=
            #lognames=
            
            [Analog_Counter.zeiger1]
            pos_x = 536
            pos_y = 286
            dx = 123
            dy = 123
            
            [Analog_Counter.zeiger2]
            pos_x = 481
            pos_y = 416
            dx = 122
            dy = 122
            
            [Analog_Counter.zeiger3]
            pos_x = 349
            pos_y = 468
            dx = 122
            dy = 122
            
            [Analog_Counter.zeiger4]
            pos_x = 208
            pos_y = 408
            dx = 123
            dy = 123
            
            [Digital_Digit.ziffer1]
            pos_x = 251
            pos_y = 197
            dx = 28
            dy = 50
            
            [Digital_Digit.ziffer2]
            pos_x = 298
            pos_y = 197
            dx = 28
            dy = 50
            
            [Digital_Digit.ziffer3]
            pos_x = 344
            pos_y = 197
            dx = 28
            dy = 50
            
            [Digital_Digit.ziffer5]
            pos_x = 438
            pos_y = 197
            dx = 28
            dy = 50
            
            [Digital_Digit.ziffer4]
            pos_x = 392
            pos_y = 197
            dx = 28
            dy = 50
            
            
            

            7e31218f-b826-4089-82b9-0b5559f8ff51-image.png

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

              Ah hat sich erledigt, habe den Fehler gefunden in der config.

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

                @Atifan Die Reihenfolge wird im Parameter :

                [Digital_Digit]
                names = ziffer1, ziffer2, ziffer3, ziffer5, ziffer4
                

                festgelegt. Vielleicht hast du die Reihenfolge geändert, indem du aus Versehen auf "Move Next" / "Move Previous" geklickt hast.
                Sehe schon, ich muss in die Applikation noch einen "Life Test" mit einem Demobild einbauen.

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

                  Ja so wird es passiert sein.

                  Ich habe jetzt die durch dein Tool neu erstellten Rererenzbilder + Konfigurationsdateien + den Ordner neuralnets mit Inhalt auf meinen Server kopieren und den Server neu gestartet, aber irgendwie funktioniert es dann nicht mehr.
                  Muss ich da noch irgendwas beachten wenn ich die Konfigs austauschen möchte?

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

                    @Atifan Eigentlich nicht. Bei mir hat es auch so funktioniert. Vergleich mal deine beiden Config.ini. Wenn z.B. die IP vom ESP32 nicht mehr stimmt, dann gibt es noch keine sinnvolle Fehlermeldung. Muss ich mal einbauen.

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

                      Weil bei mir gerade wieder die m3 Zahl sich zwischen 2 Werten bewegt, habe ich nachgeschaut, was erkannt wird.

                      076B6407-6790-4C89-BB49-BFA2C564597E.jpeg

                      192.168.178.86:1905/wasserzaehler.html?usePrevalue gibt aus

                      E1240095-4EB5-4A3F-B779-39870BD7B284.jpeg

                      Richtig wäre 315,9350

                      Nur zur Info

                      Auswertung unter Docker mit aktuellem rolling auf Synology.

                      PS.: mit meiner Berechnung (Blockly hier im Thread) mit hochrechnen des m3 Wertes funktioniert das seit 2 Monaten ohne Fehler

                      9D1A8BC7-D59B-414E-B090-A611BD4C3B32.jpeg

                      J 1 Reply Last reply Reply Quote 0
                      • Atifan
                        Atifan last edited by

                        Hi, wie meinst du denn mit hochrechnen des M3 Wertes?
                        Wie rechnest du denn hoch?
                        Man könnte natürlich entweder nur die digitalen Ziffern auswerten, dann fehlen einem aber genauere Zwischenwerte.
                        Oder man zählt den den kleinsten analogen Zähler hoch, da müsste man dann aber sehr viele Bilder machen und sehr genau hochrechnen, bzw. braucht ein hohes Abtastintervall, damit das funktioniert.
                        Wie hast du es denn gelöst?

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

                          Hallo @Knallochse,
                          das Problem kenne ich und es liegt daran, dass bevor "NAN" kam, er die verschobene 5 als 9 erkannt hat und dann diesen Wert in "PreValue" gespeichert hat. Das tritt eigentlich nur beim Überang von 5 auf 6 auf und ich habe vor kurzem mein CNN nochmals besser trainiert. Aber es läuft noch nicht lange genug, um sicher zu sein, dass es hilft.

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

                            @Atifan Meine Lösung (Blockly) hatte ich hier beschrieben
                            https://forum.iobroker.net/post/340650

                            Und @sissiwup hatte hier
                            https://forum.iobroker.net/post/360651
                            auch ein JavaScript veröffentlicht .
                            Dieses Script hatte ich bisher nicht getestet.

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

                              @Knallochse sagte in Wasserzähler - Selfmade:

                              @Atifan Meine Lösung (Blockly) hatte ich hier beschrieben
                              https://forum.iobroker.net/post/340650

                              Und @sissiwup hatte hier
                              https://forum.iobroker.net/post/360651
                              auch ein JavaScript veröffentlicht .
                              Dieses Script hatte ich bisher nicht getestet.

                              Wenn ich darüber nachdenke, dürfte das eigentlich nicht passieren, denn einen solchen Sprung sollte der Parameter MaxRateValue (typsicherweise 0.1) verhindern. Ich schaue bei Gelegenheit nochmal in den Quellcode.

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

                                @jomjol Guten Morgen.

                                Ich habe gerade nochmal in meine config.ini geschaut.
                                Ich hatte den ConsistencyCheck auf FALSE.
                                Ich hatte damals das Problem, dass (selbst bei nur Wasserzaehler.html / ohne ?usePrevalue) manchmal der alte Zählerwert bei der Ausgabe an erster Stelle stand. (also auch da - ohne "?usePrevalue" die Prüfung stattfand).
                                Mittlerweile ist aber mein Zählerstand auf 6 gewandert (wird auch als 6 erkannt), so dass ich leider gerade nicht prüfen kann, was mit ConsistencyCheck = TRUE erkannt wird.
                                Also muss der Fehler nicht in deinem Code liegen.

                                Meine Beobachtungen der Ausgabewerte hatte ergeben, dass ich mich nur auf die Erkennung der Analogzeiger verlassen kann. Deshalb mein Blockly, welches den String nach Digital (5 Stellen) und Analog (4 Stellen) zerlegt. Dann wird bei Aktualisierung des Zählerwertes (Parser - 5min) der neue Analogwert von vorhergehenden subtrahiert und wenn das Ergebnis größer 0,5 (500 Liter) ist, wird Digital/M³ um 1 erhöht.
                                @sissiwup hat ja was ähnliches in sein Javascript eingebaut. Könnte man sich ja auch genauer anschauen.

                                Wenn man die ausgegebenen Werte protokolliert und auswertet, muss man sich auf deren Richtigkeit verlassen können.
                                Schon ein falscher Wert (falsche m³ Zahl / 1000 Liter) verfälscht die Auswertung gewaltig.

                                Ich werde heute mal einen 2. Docker einrichten, damit ich die Daten vergleichen kann.

                                Ich bin nach wie vor von deinem Projekt begeistert, und danke Dir vielmals, dass du es mit uns teilst. 👍

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

                                  @Knallochse Guten Morgen,
                                  danke für den Input - Code ist okay, aber ich hatte folgendes Phänomen: falsche erkannte letzte Ziffer (3 --> 9), das wurde mit RateTooHigh auch korrekt gemeldet. Die richtige Ziffer kam erst 150 Liter weiter (wieder zurück zur 3). Aber dann wurde sie auch nicht mehr gemeldet, da jetzt wieder RateTooHigh aufgrund der 150 Liter! Offensichtlich dauert es bei meiner Wasseruhr ca. 150 Liter bis die letzte Ziffer wieder korrekt im Bild ist.
                                  Ich habe jetzt erstmal den MaxRateValue auf 0.2 gesetzt (auch in den Default Settings - v5.5.2)
                                  Habe auch schonmal überlegt, ob ich deinen Algo zur Berechnung der Ziffern implementieren soll. Dann wird es halt für Aussenstehende echt schwierig, das zu verstehen und einzustellen. Andererseits wenn nur richtige Werte komme ist es auch egal, was im Inneren läuft.

                                  @all: Was ist eure Meinung?

                                  P.S.: versuche gerade Tensorflow 2.1 für die Synology zu kompilieren. Hatte auch schon geklappt aber nur mit Python 3.6, brauche aber Python 3.7. Mal sehen, vielleicht klappt es ja irgendwann demnächst (Run dauert immer etwas, da 10h+ kompiliert wird - gutes Argument für einen neuen Rechner - versuche es gerade meiner Frau schmackhaft zu machen 😊)

                                  Gruß,
                                  jomjol

                                  Knallochse sissiwup 2 Replies Last reply Reply Quote 0
                                  • Knallochse
                                    Knallochse @jomjol last edited by Knallochse

                                    @jomjol Ich habe auch nochmal intensiv überlegt.
                                    Sollte bei meiner Methode die ESP-Cam mal über einen längeren Zeitraum nicht erreichbar sein (ist noch nicht vorgekommen) , dann würde aber meine Auswertung auch durcheinander kommen, da die Erkennung Digitalzahlen nicht mehr berücksichtigt werden.

                                    Ich habe auch schon einen 2. Docker am laufen, mit dem ConsistencyCheck und MaxRateValue auf 0.2. Ich zeichne die Daten der zwei Container mit dem SQL-Adapter auf und werde vergleichen.

                                    Vielleicht schaust du dir auch nochmal das Script von @sissiwup an, was der mit den Daten anstellt. (Ich versteh den Javascript-Code leider nicht - habe keine Programmierkenntnisse)
                                    https://forum.iobroker.net/post/360651

                                    Vielleicht meldet sich @sissiwup selbst nochmal zu dem Thema.

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

                                      @Knallochse er macht es ähnlich. Wenn die letzte Ziffer nicht stimmt, wird sie errechnet.
                                      Ist ein Grundsatzproblem: du kannst die Ziffern errechnen, dann bist du unabhängig von Erkennungsfehlern ABER: wenn du dich verzählst/verrechnest, steht dein Wert total im Wald und du merkst es nicht.

                                      Das läßt sich nie ganz lösen. Es kann nur durch eine zweite Logik-Ebene verbessert werden. Erstmal umwandeln und auf Konsistentz prüfen. Ist dort ein Problem, den Wert errechnen (gibt es mehrer Optionen).
                                      Und in einer zweiten Ebene mitnotieren, dass es jetzt gerade errechnet wurde und wenn das zu oft / zu lange der Fall ist, dann Meldung an den Nutzer.

                                      Knallochse sissiwup 2 Replies Last reply Reply Quote 0
                                      • Knallochse
                                        Knallochse @jomjol last edited by

                                        @jomjol stimme dir in jedem Punkt zu. Vielleicht kannst du ja einen Adapter Programmierer dazu bewegen, einen IoBroker Adapter zu erstellen. (dann würde auch der Weg über Parser entfallen) .
                                        Wenn der Adapter einen Datenpunkt "Fehler" mit True/False steuert, dann könnte man darauf reagieren mit z.Bsp. Message per Telegramm; VIS Ausgabe etc.
                                        Mit der Meldung müsste man dann wieder manuell (SetpreValue) nachjustieren.

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

                                          Ich habe um die Fehlerquote zu verringern und genauere Werte zu erhalten die config angepasst.
                                          alt -> MaxRateValue=0.1
                                          neu-> MaxRateValue=0.01

                                          1m³=1000L
                                          0,1m³=100L
                                          0,01m³=10L
                                          0,001m³=1L
                                          0,0001m³=100mL

                                          Das ganze muss natürlich auch auf die Abtastrate passen.
                                          Bei mir ist diese 60 Sekunden.
                                          Werde testen ob es ausreicht.
                                          Man könnte die MaxRateValue natürlich auch noch erhöhen auf z.B. 0.02 was dann 20L/min entsprechen.

                                          PS: Es gibt aber ein Problem, dass mir gerade eingefallen ist. Wenn der Wasserzähler Server mal offline ist und in dieser Zeit mehr als 10-20L Wasser verbraucht werden, geht der Zähler der Uhr ja höher und der Bildvergleichsserver spuckt dann zukünftig nur noch Fehler raus, weil der Abstand zu groß ist. Dann müsste man den Docker Container manuell stoppen den aktuellen Wert in die prevalue.ini schreiben und dann den Container wieder starten.

                                          Knallochse pfried 2 Replies Last reply Reply Quote 0
                                          • Knallochse
                                            Knallochse @Atifan last edited by Knallochse

                                            @Atifan den Wert kannst du mit
                                            IPServer:Port/setPreValue.html?value=
                                            mitgeben. Ohne stoppen oder Starten des Servers

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            808
                                            Online

                                            31.7k
                                            Users

                                            79.8k
                                            Topics

                                            1.3m
                                            Posts

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