NEWS
Wasserzähler - Selfmade
-
@Atifan Ich taste mit 30 Sekunden-Intervallen ab, da ich damit auch in meinem Haus eine Art "Leckerkennung" betreibe (habe viele alte Kupferrohre). Ich habe mir einen zweiten ESP32CAM hergerichtet, welchen ich dann bei Versagen des in Betrieb befindlichen austauschen kann. Bei circa 10 Euro für einen ESP32CAM ist das auch kein hoher finanzieller Verlust. Mein ESP32CAM läuft nun seit circa 5 Monaten ohne Probleme durch.
-
Hi, ich habe das Problem, dass der Parser anscheinend nach paar Stunden nicht mehr weitermacht und den Datenpunkt nicht mehr aktualisiert.
Ich muss dann einfach die Instanz parser.0 stoppen und neustarten, dann funktioniert es wieder.
Hat jemand das gleiche Problem?
-
@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 :blush:)
Gruß,
jomjol@jomjol
Hallo,tesseract hat es bei meinen Tests nicht so sehr gebracht.
Habe aber die Bildoptimierung in den normalen Zweig eingebaut. Damit sind bei mir die Ergebnisse besser.
Natürlich sollte man das Modell dann auch auf solch optimierten Bildern trainieren.Habs als Pullrequest eingestellt.
-
@jomjol
Hallo,tesseract hat es bei meinen Tests nicht so sehr gebracht.
Habe aber die Bildoptimierung in den normalen Zweig eingebaut. Damit sind bei mir die Ergebnisse besser.
Natürlich sollte man das Modell dann auch auf solch optimierten Bildern trainieren.Habs als Pullrequest eingestellt.
Hallo,
wer mal gerne mit einigen Optimierungen testen möchte:
Anmelden an docker (z.B. um orginal Datei zu sichern):
docker exec -it wasser bashDatei nach Docker kopieren:
docker cp ReadDigitalDigitClass.py wasser:/lib/ReadDigitalDigitClass.py(wasser ist dabei bei mir der Name des Docker-Files)
und natürlich neustarten
docker restart wasser -
Hallo,
wer mal gerne mit einigen Optimierungen testen möchte:
Anmelden an docker (z.B. um orginal Datei zu sichern):
docker exec -it wasser bashDatei nach Docker kopieren:
docker cp ReadDigitalDigitClass.py wasser:/lib/ReadDigitalDigitClass.py(wasser ist dabei bei mir der Name des Docker-Files)
und natürlich neustarten
docker restart wasserHallo,
nochmal ein Tipp zur Ausrichtung der analogen Zeiger:

Es ist nicht wichtig den Kreis genau um die Ziffern zu legen.
Das Kreuz sollte genau auf der Achse des Zeigers sein.
Auf dem Bild sieht man, dass durch die nahe Kamera da einiges an Verzerrung entsteht.@jomjol Zum Ausrichten wäre es besser ein Kreuz in die Quadrate zu zeichnen. Der Kreis hilft nicht so sehr.
-
Hi. Ansich funktioniert die Erkennung bei mir wunderbar. Außer wenn eine digitale Ziffer wechselt, dann gibt es Probleme.
Hatte heute den Fall.
Zähler 381,6961
Die Ziffer 1 von "381" ist dann schon nicht mehr richtig sichtbar, sondern steht schon fast auf 2.
Bis dahin funktioniert die Fehlerkorrektur.
Jetzt kommt aber der Punkt wo die Ziffer umspringt auf 2.
Dann hätte ich kurzzeitig 382.xxxx.
Geloggt wird dann auch dieser Wert.
Dann springen die Nachkommastellen auf 0 und der neue Wert ist kleiner als der vorherige.
Dann wird solange nicht geloggt, bis die Nachkommastellen wieder stimmen.
Ich hoffe ihr versteht was ich meine.
Das Problem hatte ich schon mehrmals.
Ich habe jetzt in der config eingestellt, dass ein Rückwärtssprung erlaubt ist.
Hoffe nur das beeinflusst dann nicht meine Logging-Werte falsch.Hier ein Screenshot mit den geloggten Werten. Dort erkennt man schön den Wechsel, wo auf einmal die Vorkommastelle um 1 erhöht wird, die Nachkommastellen aber noch nicht auf 0 sind.

-
@sissiwup ich habe dein Script im Einsatz und habe es eigentlich so verstanden, dass damit auch keine kleineren Zählerstände entstehen oder sehe ich das falsch?
Hier mal die History Tabelle, die zeigt, dass doch kleinere Zählerstände geloggt werden und ich glaube deshalb funktioniert auch der Datenpunkt in Sourceanalytix nicht.
Anbei noch das Script dazu:createState('javascript.0.Wasserzaehler.Stand',""); createState('javascript.0.Wasserzaehler.Log',""); schedule('*/10 * * * *', function () { if (isNaN(Number(getState('javascript.0.Wasserzaehler.Stand').val))) { log("Set NaN!!!!","warn"); } else { var url = "http://192.168.66.38:3000/setPreValue?value="+getState('javascript.0.Wasserzaehler.Stand').val; request(url, function(error, response, body) { if (body){ log("Set OK:"+ body,"info"); } else { log("Set fehlerhaft:" +url+"->"+ body,"warn"); } }) } var url = "http://192.168.66.38:3000/wasserzaehler.html?usePreValue"; request(url, function(error, response, body) { if (body){ var count=String(body.match(/^[0-9.N]+/)); var err=body.search("Error"); var org=count; if (err>=0) { org= String(body.match(/[0-9.N]+$/)); var oar = org.split("."); var last = String(getState('javascript.0.Wasserzaehler.Stand').val); var lar= last.split("."); var calc = lar[0]+"."+oar[1]; if (Number(calc)<Number(last) && (Number("0."+oar[1])<0.1) && (Number("0."+lar[1])>0.9)){ calc=(String(Number(lar[0])+1))+"."+oar[1]; } log("Body Calc:"+calc,"info"); count=calc; } if (isNaN(Number(count))) { log("Body OK/NaN:"+body,"warn"); } else { log("Body OK:"+body+"->" + count,"info"); setState("javascript.0.Wasserzaehler.Stand",count); } setState("javascript.0.Wasserzaehler.Log",String(body)); } else { log("Body fehlerhaft:" +url+"->"+ body,"warn"); } }) });
Den Tip zur Ausrichtung der Analogen Zeiger werde ich mal noch testen.
-
Hi. Ansich funktioniert die Erkennung bei mir wunderbar. Außer wenn eine digitale Ziffer wechselt, dann gibt es Probleme.
Hatte heute den Fall.
Zähler 381,6961
Die Ziffer 1 von "381" ist dann schon nicht mehr richtig sichtbar, sondern steht schon fast auf 2.
Bis dahin funktioniert die Fehlerkorrektur.
Jetzt kommt aber der Punkt wo die Ziffer umspringt auf 2.
Dann hätte ich kurzzeitig 382.xxxx.
Geloggt wird dann auch dieser Wert.
Dann springen die Nachkommastellen auf 0 und der neue Wert ist kleiner als der vorherige.
Dann wird solange nicht geloggt, bis die Nachkommastellen wieder stimmen.
Ich hoffe ihr versteht was ich meine.
Das Problem hatte ich schon mehrmals.
Ich habe jetzt in der config eingestellt, dass ein Rückwärtssprung erlaubt ist.
Hoffe nur das beeinflusst dann nicht meine Logging-Werte falsch.Hier ein Screenshot mit den geloggten Werten. Dort erkennt man schön den Wechsel, wo auf einmal die Vorkommastelle um 1 erhöht wird, die Nachkommastellen aber noch nicht auf 0 sind.

-
Hallo,
nochmal ein Tipp zur Ausrichtung der analogen Zeiger:

Es ist nicht wichtig den Kreis genau um die Ziffern zu legen.
Das Kreuz sollte genau auf der Achse des Zeigers sein.
Auf dem Bild sieht man, dass durch die nahe Kamera da einiges an Verzerrung entsteht.@jomjol Zum Ausrichten wäre es besser ein Kreuz in die Quadrate zu zeichnen. Der Kreis hilft nicht so sehr.
-
@Atifan Dieses Verhalten sollte aber durch den Aufruf mit: xxx.xxx.xxxx.xxx:3000/wasserzaehler.html?usepreValue
nicht passieren......@pfried sagte in Wasserzähler - Selfmade:
@Atifan Dieses Verhalten sollte aber durch den Aufruf mit: xxx.xxx.xxxx.xxx:3000/wasserzaehler.html?usepreValue
nicht passieren......Hi, ist aber passiert. Ich nute ja das usepreValue. Das funktioniert ja auch. usepreValue bewirkt ja nur, dass solange ein "alter" Wert genommen wird, bis die Ziffer wieder lesbar ist und eine plausible Zahl ergibt. usepreValue verhindert aber nicht, dass falsche Werte geschrieben werden.
Im Grunde genommen funktioniert die Bildauswertung ja auch richtig. Das Problem ist, dass die Nachkommastellen erst 0000 erreichen, nachdem die digitalen Ziffern umgseprungen sind. -
Hallo,
nochmal ein Tipp zur Ausrichtung der analogen Zeiger:

Es ist nicht wichtig den Kreis genau um die Ziffern zu legen.
Das Kreuz sollte genau auf der Achse des Zeigers sein.
Auf dem Bild sieht man, dass durch die nahe Kamera da einiges an Verzerrung entsteht.@jomjol Zum Ausrichten wäre es besser ein Kreuz in die Quadrate zu zeichnen. Der Kreis hilft nicht so sehr.
-
@pfried sagte in Wasserzähler - Selfmade:
@Atifan Dieses Verhalten sollte aber durch den Aufruf mit: xxx.xxx.xxxx.xxx:3000/wasserzaehler.html?usepreValue
nicht passieren......Hi, ist aber passiert. Ich nute ja das usepreValue. Das funktioniert ja auch. usepreValue bewirkt ja nur, dass solange ein "alter" Wert genommen wird, bis die Ziffer wieder lesbar ist und eine plausible Zahl ergibt. usepreValue verhindert aber nicht, dass falsche Werte geschrieben werden.
Im Grunde genommen funktioniert die Bildauswertung ja auch richtig. Das Problem ist, dass die Nachkommastellen erst 0000 erreichen, nachdem die digitalen Ziffern umgseprungen sind.@Atifan, @pfried Das Problem wird in der Tat nicht durch den Algo abgefangen! Denn bisher war es eigentlich immer so, dass die neuen Ziffer erst lesbar, wenn die Nachkomma schon wieder bei "0" waren.
Bei den Nachkommastellen läßt sich das abfangen, da es Zwischenwerte und ich quasi eine "Fuzzy"-Logik mit Berücksichtigung der nächsten Ziffer vorliegt. Das geht aber bei den digitalen Ziffern nicht so einfach. -
Hi, ja glaube ich. Ist bestimmt auch nicht so einfach zur "beheben". Aber ich bin so eig. zufrieden, es funktioniert ja. Einzige ist halt, dass ab und zu evtl. mal ein falscher Wert angezeigt wird mit einer Abweichung von max. 1m³. Denke da kann man mit leben :) Der Wert wird ja auch wieder automatisch korrigiert, daher ist die Chance dass man gerade danach schaut und man dann einen falschen Wert angezeigt bekommt auch relativ gering :)
-
@sissiwup ich habe in der Mitte so ein kleines Kreuz. Meinst du, dass ich es größer machen soll?
-
Kann es sein, dass der Server nen Memoryleak hat? Bei mir war der Webserver nicht mehr erreichbar, da habe ich den Server mal neu gestartet.
Dabei it mir aufgefallen, dass der Speicherverbrauch langsam immer weiter angestiegen ist bis auf über 6GB. Nach dem Reboot wieder bei 700-800 MB.
-
Kann es sein, dass der Server nen Memoryleak hat? Bei mir war der Webserver nicht mehr erreichbar, da habe ich den Server mal neu gestartet.
Dabei it mir aufgefallen, dass der Speicherverbrauch langsam immer weiter angestiegen ist bis auf über 6GB. Nach dem Reboot wieder bei 700-800 MB.
@Atifan Guten Morgen, das Memory Leak sitzt in der Tensorflow Biblothek und ist weiter oben von jomjol beschrieben. Abhilfe: alle 3 - 6 Stunden den Docker mit .... sudo docker container restart [ID]..... neu starten.
https://github.com/tensorflow/tensorflow/issues/33009 -
