Skip to content
  • Home
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Hardware
  4. Wasserzähler - Selfmade

NEWS

  • Monatsrückblick Januar/Februar 2026 ist online!
    BluefoxB
    Bluefox
    16
    1
    245

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    17
    1
    4.6k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    1.3k

Wasserzähler - Selfmade

Scheduled Pinned Locked Moved Hardware
wasser wasserzählerhow-to
1.1k Posts 48 Posters 393.6k Views 72 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • C C1500

    Servus jomjol
    ich hab gerade noch mal den Code von deinem Link runtergeladen und per WinSCP auf den PI kopiert.
    Dann im "ReadAnalogNeedleClass.py" das # vor "import keras" eingetragen.
    Nun scheint etwas zu passieren, zumindest dauert es einige Zeit bis folgende Meldung kommt:

    pi@raspberrypi:~/code $ python3 wasseruhr.py
    WARNING:tensorflow:From /home/pi/.local/lib/python3.7/site-packages/tensorflow/__init__.py:98: The name tf.AUTO_REUSE is deprecated. Please use tf.compat.v1.AUTO_REUSE instead.
    
    WARNING:tensorflow:From /home/pi/.local/lib/python3.7/site-packages/tensorflow/__init__.py:98: The name tf.AttrValue is deprecated. Please use tf.compat.v1.AttrValue instead.
    
    WARNING:tensorflow:From /home/pi/.local/lib/python3.7/site-packages/tensorflow/__init__.py:98: The name tf.COMPILER_VERSION is deprecated. Please use tf.version.COMPILER_VERSION instead.
    
    WARNING:tensorflow:From /home/pi/.local/lib/python3.7/site-packages/tensorflow/__init__.py:98: The name tf.CXX11_ABI_FLAG is deprecated. Please use tf.sysconfig.CXX11_ABI_FLAG instead.
    
    WARNING:tensorflow:From /home/pi/.local/lib/python3.7/site-packages/tensorflow/__init__.py:98: The name tf.ConditionalAccumulator is deprecated. Please use tf.compat.v1.ConditionalAccumulator instead.
    
    Traceback (most recent call last):
      File "wasseruhr.py", line 3, in <module>
        import lib.ZaehlerstandClass
      File "/home/pi/code/lib/ZaehlerstandClass.py", line 2, in <module>
        import lib.ReadAnalogNeedleClass
      File "/home/pi/code/lib/ReadAnalogNeedleClass.py", line 8, in <module>
        import cv2
      File "/home/pi/.local/lib/python3.7/site-packages/cv2/__init__.py", line 3, in <module>
        from .cv2 import *
    ImportError: /home/pi/.local/lib/python3.7/site-packages/cv2/cv2.cpython-37m-arm-linux-gnueabihf.so: undefined symbol: __atomic_fetch_add_8
    pi@raspberrypi:~/code $
    

    Ein Bild wird allerdings nicht aufgenommen.
    Ich hoffe das hilft beim Lösen meines Problemes weiter. ;o)
    Gruß Peer

    J Offline
    J Offline
    jomjol
    wrote on last edited by jomjol
    #333

    @C1500 Hallo Peer,
    konnte dein Problem reproduzieren. Es scheint, also ob es ein Update/Modifikation an der OpenCV Bibliothek gab, denn vor 2 Wochen hat es bei mir funktioniert.
    Ich habe aber auch einen Work-Around gefunden. Du musst das Python-Script mit einem sehr spezielle Aufruf starten:

    LD_PRELOAD=/usr/lib/arm-linux-gnueabihf/libatomic.so.1 python3 wasseruhr.py
    

    Das vermeidet den Fehler. Ich habe bei mir jetzt nochmal die Anleitung in Github für Raspberry Schritt für Schritt geprüft und upgedatet. Ich habe im Code jetzt auch den Fehler mit '#keras' korrigiert und in der Readme.md einen Anleitung für einen Code-Clone mittels "git"-command dokumentiert. Dann brauchst du eigentlich nichts mehr per WinSCP kopieren.

    Schau es dir mal an und gerne Feedback falls dir weiteres auffällt. Danke für deine Rückmeldung zu den Problemen und der Geduld.
    https://github.com/jomjol/water-meter-system-complete/tree/Raspberry-V3

    Beste Grüße,
    jomjol

    1 Reply Last reply
    0
    • C Offline
      C Offline
      C1500
      wrote on last edited by C1500
      #334

      Servus jomjol
      Erst mal einen riesigen Dnak für deine Arbeit und deine Geduld mit mir ;)

      Die Anleitung hab ich mir angeschaut. Sehr gut:+1: :+1:

      Das mit dem Aufruf kann ich erst heute Abend testen.
      Ist das dann der Standartaufruf oder nur einmalig?

      Gruß Peer

      TANTE EDIT:
      Hab es noch mal vom GIT geholt und mit dem PRELOAD ausgeführt.
      Es funktioniert. :+1:
      Jetzt muss ich mich mal um die Kamera kümmern das die ein sauberes Bild liefert.
      Schönen Abend
      Gruß Peer

      1 Reply Last reply
      0
      • pfriedP Offline
        pfriedP Offline
        pfried
        wrote on last edited by pfried
        #335

        Habe mich nun mit der Auswertung beschäftigt und kann bei Bedarf meine bisherigen Schritte bekanntgeben.
        Grobschritte:

        1. Webserver von Jomjol starten
        2. Mit Parser im IOBroker Werte auslesen
        3. Auswertung mit IOBroker Blockly (mit Abfangen von Fehlwerten)
        4. Variablen nach CCU schreiben

        Wenn jemand daran interessiert ist schreibe ich gerne eine Anleitung.
        CCU RM:

        0f40bbb0-a190-46a4-83e5-4728dcc1d3a6-image.png

        coyoteC 1 Reply Last reply
        0
        • pfriedP pfried

          Habe mich nun mit der Auswertung beschäftigt und kann bei Bedarf meine bisherigen Schritte bekanntgeben.
          Grobschritte:

          1. Webserver von Jomjol starten
          2. Mit Parser im IOBroker Werte auslesen
          3. Auswertung mit IOBroker Blockly (mit Abfangen von Fehlwerten)
          4. Variablen nach CCU schreiben

          Wenn jemand daran interessiert ist schreibe ich gerne eine Anleitung.
          CCU RM:

          0f40bbb0-a190-46a4-83e5-4728dcc1d3a6-image.png

          coyoteC Offline
          coyoteC Offline
          coyote
          Most Active
          wrote on last edited by
          #336

          @pfried wäre an Punkt 3 interessiert

          1 Reply Last reply
          0
          • pfriedP Offline
            pfriedP Offline
            pfried
            wrote on last edited by
            #337

            Ich habe das Blockly von @mcchickents genommen und so erweitert, dass möglichst viele Errors abgefangen werden. Es ist auch eine Abfrage drinnen, die einen Wert größer eines maximal möglichen Wasserdurchflusses der in 30 Sekunde bei mir durchfliessen kann (müsstest Du an Deine Abtastrate anpassen) abfängt. Der in der selben Abfrage abgefragte Wert (>120) erlaubt mir wieder Werte zu akzeptieren, denn ich habe oft Fehlwerte in der 10ner Stelle der Zeiger. Bei Fragen bitte mir schreiben.
            Wasseruhr Blockly.txt
            Da ich kein Programmierer bin, bitte ich um Nachsicht.....
            Es sind vorab die oben im Bild angeführten Variablen in der CCU anzulegen und in den IOBroker zu importieren (stop und start der Instanz hm-rega). Alle Variablen müssen im Skript an deinen IOBroker IDs angepasst werden.

            coyoteC C 2 Replies Last reply
            0
            • pfriedP pfried

              Ich habe das Blockly von @mcchickents genommen und so erweitert, dass möglichst viele Errors abgefangen werden. Es ist auch eine Abfrage drinnen, die einen Wert größer eines maximal möglichen Wasserdurchflusses der in 30 Sekunde bei mir durchfliessen kann (müsstest Du an Deine Abtastrate anpassen) abfängt. Der in der selben Abfrage abgefragte Wert (>120) erlaubt mir wieder Werte zu akzeptieren, denn ich habe oft Fehlwerte in der 10ner Stelle der Zeiger. Bei Fragen bitte mir schreiben.
              Wasseruhr Blockly.txt
              Da ich kein Programmierer bin, bitte ich um Nachsicht.....
              Es sind vorab die oben im Bild angeführten Variablen in der CCU anzulegen und in den IOBroker zu importieren (stop und start der Instanz hm-rega). Alle Variablen müssen im Skript an deinen IOBroker IDs angepasst werden.

              coyoteC Offline
              coyoteC Offline
              coyote
              Most Active
              wrote on last edited by
              #338

              @pfried mich hat heute, gestern, Woche usw interessiert.
              Ist ja ganz einfach, wenn man es mal sieht :man-facepalming:
              Hatte irgendwie keine Idee dazu. Danke dir.

              1 Reply Last reply
              0
              • C Offline
                C Offline
                C1500
                wrote on last edited by
                #339

                Servus pfried

                für mich wäre da noch der 2te Punkt interessant.
                Könntest du da bitte ein paar Zeilen zu verfassen?
                Würde bestimmt auch einigen Mitlesern helfen

                Vielen Dank im Voraus.
                Gruß Peer

                1 Reply Last reply
                0
                • pfriedP Offline
                  pfriedP Offline
                  pfried
                  wrote on last edited by
                  #340

                  @C1500
                  Habe im IOBroker den Parser und Javascript Adapter installiert,
                  Dann unter Javascript Variablen (IOBroker-Objekte) angelegt:

                  bba85412-5585-4f61-b81e-fb1bb4315149-image.png

                  Anlegen von Variablen macht man mit dem kleinen blauen + Button. Alle Variablen sind als Zahlen definiert und als Postfix habe ich Liter genommen.

                  Dann unter dem Parser das Gleiche nur das die Variable vom Typ String ist und unter IOBroker-Instanzen angelegt wird.

                  Ergebnis:

                  8f23f851-0a56-4857-a692-784bf4fb87b2-image.png

                  Unter IOBroker Instanzen habe ich die Abtastrate und die Variable so eingestellt:

                  d6140636-32b4-405c-9461-f616d042d258-image.png

                  Im RegEx muss das stehen:

                  [N|0-9][N|0-9][N|0-9][N|0-9][N|0-9]\D\d\d\d\d

                  Viel Erfolg!

                  PS.: Im Blockly die Variablen auf Eure IOBroker IDs matchen nicht vergessen :smile:

                  1 Reply Last reply
                  0
                  • pfriedP Offline
                    pfriedP Offline
                    pfried
                    wrote on last edited by
                    #341

                    Noch ein Hinweis: mit dem History Adapter könnt Ihr all Variablen aufzeichnen das hilft enorm beim Fehlersuchen!

                    1 Reply Last reply
                    0
                    • pfriedP pfried

                      @jomjol Eine Beobachtung die ich noch gemacht habe:

                      Der

                      3a80c468-33a3-4301-9118-56e9c2159b98-image.png

                      AllowNegativeRates steht auf False trotzdem werden "negative" Werte ausgegeben.
                      Beispiel:

                      b1e472ce-def5-42f8-82ff-839fe2f29a16-image.png

                      Liebe Grüße
                      Paul

                      PS.: Ein super Projekt! Habe es einem Freund gezeigt, der Bürgermeister von unserer Gemeinde ist und der wollte wissen ob das auch kommerziell einsetzbar ist :blush:

                      J Offline
                      J Offline
                      jomjol
                      wrote on last edited by
                      #342

                      @pfried Hallo Paul,
                      habe mir gerade das Programm und meine Logs angeschaut. Bei mir funktioniert die Sperre für negative Werte:

                      2019-11-15_00-30-01	414.6116	00414	6116
                      2019-11-15_00-40-01	414.6116	00414	6116	ErrorNegativeRate	414.6115
                      

                      In meinem Log wurde die letzte Ziffer falsch gelesen (5 statt 6) und er gibt den alten Wert zurück, sehr ähnlich zu deinem.
                      Verwendest du Docker oder eine direkte Installation? Beim Docker ist es evt. erst in der "rolling" richtig. Muss demnächst mal die latest updaten.
                      Gruß,
                      jomjol

                      1 Reply Last reply
                      0
                      • pfriedP Offline
                        pfriedP Offline
                        pfried
                        wrote on last edited by
                        #343

                        @jomjol Ich habe die "direkte" RP3 Version, frage an Dich :

                        Im File ZaehlerstandClass.py steht:

                        d8ff84f8-decd-4107-94e3-020d44faefae-image.png

                        4 Zeile im Bild .... and self.Enabled ..... gehört dort nicht ....self.ConsistencyEnabled hin wie der "Schalter" in der config.ini heißt?

                        ab24a2b6-7022-419d-a3ec-750dc08e5e0b-image.png

                        Vielen Dank und liebe Grüße
                        Paul

                        J 1 Reply Last reply
                        0
                        • pfriedP pfried

                          @jomjol Ich habe die "direkte" RP3 Version, frage an Dich :

                          Im File ZaehlerstandClass.py steht:

                          d8ff84f8-decd-4107-94e3-020d44faefae-image.png

                          4 Zeile im Bild .... and self.Enabled ..... gehört dort nicht ....self.ConsistencyEnabled hin wie der "Schalter" in der config.ini heißt?

                          ab24a2b6-7022-419d-a3ec-750dc08e5e0b-image.png

                          Vielen Dank und liebe Grüße
                          Paul

                          J Offline
                          J Offline
                          jomjol
                          wrote on last edited by
                          #344

                          @pfried Respekt, du bist echt tief im Code drin und hast völlig Recht. Du scheinst aber noch eine alte Version zu haben. In der RP3-Version ist es korrigiert:

                          
                              def checkConsistency(self, ignoreConsistencyCheck):
                                  error = False
                                  errortxt = ''
                                  if (len(self.LastVorkomma) > 0) and not('N' in self.akt_vorkomma) and self.ConsistencyEnabled:
                                      akt_zaehlerstand = float(str(self.akt_vorkomma.lstrip("0")) + '.' + str(self.akt_nachkomma))   
                                      old_zaehlerstand = float(str(self.LastVorkomma.lstrip("0")) + '.' + str(self.LastNachkomma)) 
                                      delta = akt_zaehlerstand - old_zaehlerstand
                                      if not(self.AllowNegativeRates) and (delta < 0):
                          

                          Gruß, jomjol

                          1 Reply Last reply
                          0
                          • pfriedP Offline
                            pfriedP Offline
                            pfried
                            wrote on last edited by
                            #345

                            @jomjol Irgendwie scheitert das Projekt bei mir an den vielen Fehlern beim Lesen des Wasserzählers. Kann ich da noch irgendetwas tun?

                            a3a6ab1b-c3f9-4775-95ae-23f7d7b2a4e9-image.png

                            J 1 Reply Last reply
                            0
                            • pfriedP pfried

                              @jomjol Irgendwie scheitert das Projekt bei mir an den vielen Fehlern beim Lesen des Wasserzählers. Kann ich da noch irgendetwas tun?

                              a3a6ab1b-c3f9-4775-95ae-23f7d7b2a4e9-image.png

                              J Offline
                              J Offline
                              jomjol
                              wrote on last edited by
                              #346

                              @pfried Wir müssten mal deine Zeiger teachen. Melde mich nochmal mit PV bei dir.

                              1 Reply Last reply
                              0
                              • pfriedP Offline
                                pfriedP Offline
                                pfried
                                wrote on last edited by
                                #347

                                @jomjol
                                Ich habe mir nochmals angesehen warum ich negative Werte zurück bekomme, obwohl in meinem Config.ini File AllowNegativeRates auf False gesetzt ist.
                                Der Grund ist, dass er nie zu der def checkConsistency Routine kommt, da ConsistencyEnabled immer False war.
                                Erst wie ich unten in der Routine:

                                e3f71553-c80f-4da9-b8ad-755eb1f945f9-image.png

                                in der ersten Zeile den Wert auf True gesetzt habe, wurde die def checkConsistency Routine aufgerufen.
                                Frage mich aber nicht warum, das so ist. In meiner Confi.ini steht:

                                6e71b3cd-b92d-420f-8fd2-89be06e805a6-image.png

                                1 Reply Last reply
                                0
                                • pfriedP Offline
                                  pfriedP Offline
                                  pfried
                                  wrote on last edited by
                                  #348

                                  @jomjol

                                  Ich denke der Check oben muss lauten:

                                  43e4995a-4252-4248-8b16-acbab38fe5ed-image.png

                                  Da die Variable in der Config.ini ja jetzt ConsistencyEnabled und nicht mehr Enabled heißt, oder?

                                  1 Reply Last reply
                                  0
                                  • pfriedP Offline
                                    pfriedP Offline
                                    pfried
                                    wrote on last edited by
                                    #349

                                    Die MaxRateValue kann man für sich so berechnen (gilt aber nur wenn man IMMER "gute" Werte hat):

                                    Ein Haushaltszähler (BM Q3 4 - Type steht auf der Wasseruhr) hat eine Durchflussmenge von circa 500l/h, das entspricht circa 0,139 Liter pro Sekunde. Bei einer Abtastrate (zB. IOBroker Parser) von z.B. 30 Sekunden fließen also maximal 4,2 Liter. Aufgerundet auf 5 Liter => MaxRateValue=0.005

                                    Wie oben beschrieben geht das aber nur wenn man IMMER einen Wert bei der Detektierung rausbekommt, bei meinen vielen Fehldetektierungen muss ich 100 Liter einstellen, sonst bleibt der Wasserzähler stecken :smile:

                                    W 1 Reply Last reply
                                    0
                                    • pfriedP pfried

                                      Die MaxRateValue kann man für sich so berechnen (gilt aber nur wenn man IMMER "gute" Werte hat):

                                      Ein Haushaltszähler (BM Q3 4 - Type steht auf der Wasseruhr) hat eine Durchflussmenge von circa 500l/h, das entspricht circa 0,139 Liter pro Sekunde. Bei einer Abtastrate (zB. IOBroker Parser) von z.B. 30 Sekunden fließen also maximal 4,2 Liter. Aufgerundet auf 5 Liter => MaxRateValue=0.005

                                      Wie oben beschrieben geht das aber nur wenn man IMMER einen Wert bei der Detektierung rausbekommt, bei meinen vielen Fehldetektierungen muss ich 100 Liter einstellen, sonst bleibt der Wasserzähler stecken :smile:

                                      W Offline
                                      W Offline
                                      watcherkb
                                      wrote on last edited by
                                      #350

                                      @pfried respekt dass du dich weiter reinfuchst. Nicht alle haben so eine Geduld. Bei mir hapert es aktuell an der Basis...die Camera ist immer wieder offline, obwohl ich nicht mal das Bild abrufe. Parser ist deaktiviert, ich pinge nur alle 5 Minuten um zu schauen ob die Camera im Netz ist. Irgendwann ist er offline. Wo soll ich anfangen zu suchen? Netzteil? Feste IP vergeben und neu flashen? Kontakte löten statt nur drauf stecken? Bin momentan ratlos.

                                      CC2538+CC2592 PA-Zigbee-Funkmodul

                                      1 Reply Last reply
                                      0
                                      • pfriedP Offline
                                        pfriedP Offline
                                        pfried
                                        wrote on last edited by
                                        #351

                                        @watcherkb Versuche mal den Parser einfach laufen zu lassen und als Test auf 30 Sekunden zu stellen. Dann aktiviere bei der Parser-Variable die History Funktion und schaue dir die Werte an.
                                        Was sehr interessant ist: Das ESP32 Modul verschwindet bei mir nach einiger Zeit aus der Connected Liste auf der Fritzbox ABER trotzdem liest der Parser Werte von der ESP32. Keine Ahnung wie das geht....

                                        W 1 Reply Last reply
                                        0
                                        • C Offline
                                          C Offline
                                          C1500
                                          wrote on last edited by C1500
                                          #352

                                          Servus
                                          @pfried : Vielen Dank für die Anleitung.
                                          Hab die Daten jetzt in ioBroker.

                                          Leider werden aktuell nur die Pfeile erkannt. Die Zahlen leider nicht.

                                          Könnte ich da noch was mit besserer Positionierung verbessern?

                                          Aktuell schaut es so aus:roi.png

                                          Ich hab die Linse vom Kleber befreit und dann den Focus auf einen Abstand von ca. 10cm eingestellt.

                                          Gruß Peer

                                          Tante Edit hat noch ne Frage:
                                          Wo stell ich die Wiederholrate ein?
                                          Alle 30 Sekunden sollte reichen, aktuell mach er alle 10 Sekunden ein Bild.

                                          W pfriedP 2 Replies Last reply
                                          0
                                          Reply
                                          • Reply as topic
                                          Log in to reply
                                          • Oldest to Newest
                                          • Newest to Oldest
                                          • Most Votes


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          514

                                          Online

                                          32.7k

                                          Users

                                          82.5k

                                          Topics

                                          1.3m

                                          Posts
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Login

                                          • Don't have an account? Register

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • Home
                                          • Recent
                                          • Tags
                                          • Unread 0
                                          • Categories
                                          • Unreplied
                                          • Popular
                                          • GitHub
                                          • Docu
                                          • Hilfe