NEWS
Wasserzähler - Selfmade
-
@pfried Darum konnte ich mich noch nicht kümmern, bin gerade beruflich etwas verplant. Kommt aber noch.
-
@C1500 Okay - sieht nach einem Problem mit OpenCV2 aus. Das zickt manchmal etwas rum. Die Anleitung für den Raspi PI3 https://github.com/jomjol/water-meter-system-complete/tree/Raspberry-V3 hatte bei mir genau so funktioniert. Hoffentlich hat sich nichts durch Update der Libraries verschoben. Falls du weiterhin das Problem hast, melde dich nochmal bei mir, dann probiere ich es selbst nochmal aus.
-
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 -
@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-V3Beste Grüße,
jomjol -
Servus jomjol
Erst mal einen riesigen Dnak für deine Arbeit und deine Geduld mit mirDie Anleitung hab ich mir angeschaut. Sehr gut
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.
Jetzt muss ich mich mal um die Kamera kümmern das die ein sauberes Bild liefert.
Schönen Abend
Gruß Peer -
Habe mich nun mit der Auswertung beschäftigt und kann bei Bedarf meine bisherigen Schritte bekanntgeben.
Grobschritte:- Webserver von Jomjol starten
- Mit Parser im IOBroker Werte auslesen
- Auswertung mit IOBroker Blockly (mit Abfangen von Fehlwerten)
- Variablen nach CCU schreiben
Wenn jemand daran interessiert ist schreibe ich gerne eine Anleitung.
CCU RM: -
@pfried wäre an Punkt 3 interessiert
-
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. -
@pfried mich hat heute, gestern, Woche usw interessiert.
Ist ja ganz einfach, wenn man es mal sieht
Hatte irgendwie keine Idee dazu. Danke dir. -
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 helfenVielen Dank im Voraus.
Gruß Peer -
@C1500
Habe im IOBroker den Parser und Javascript Adapter installiert,
Dann unter Javascript Variablen (IOBroker-Objekte) angelegt: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:
Unter IOBroker Instanzen habe ich die Abtastrate und die Variable so eingestellt:
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
-
Noch ein Hinweis: mit dem History Adapter könnt Ihr all Variablen aufzeichnen das hilft enorm beim Fehlersuchen!
-
@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 -
@jomjol Ich habe die "direkte" RP3 Version, frage an Dich :
Im File ZaehlerstandClass.py steht:
4 Zeile im Bild .... and self.Enabled ..... gehört dort nicht ....self.ConsistencyEnabled hin wie der "Schalter" in der config.ini heißt?
Vielen Dank und liebe Grüße
Paul -
@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
-
@jomjol Irgendwie scheitert das Projekt bei mir an den vielen Fehlern beim Lesen des Wasserzählers. Kann ich da noch irgendetwas tun?
-
@pfried Wir müssten mal deine Zeiger teachen. Melde mich nochmal mit PV bei dir.
-
@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: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: -
Ich denke der Check oben muss lauten:
Da die Variable in der Config.ini ja jetzt ConsistencyEnabled und nicht mehr Enabled heißt, oder?
-
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