NEWS
Wasserzähler - Selfmade
-
Ich bin momentan bei 170MB, bei Start waren es ca. 93MB. Mal abwarten ob es weiter steigt.
-
@Jens77 sagte in Wasserzähler - Selfmade:
Hallo Jens,
die Teile habe ich bei mir selbst gedruckt, Material ist PLA (schwarz - wegen der Beleuchtung). Hast du genau dieselbe Wasseruhr wie ich oder musst du etwas neu konstruieren? Du kannst mich ja mal über den persönlichen Chat kontaktieren. Vielleicht kann ich dir helfen.Auf dem ESP-Board sollten noch genügend Kontakte frei sein, um noch einen weiteren Kanal auszulesen. Allerdings musst du beachten, wie du das ohne Blockade des HTTP-Servers hin bekommst. Die jetztige Software ist nicht für Multitasking ausgelegt. Halt uns doch gerne hier im Forum oder bei Github auf dem Laufenden.
Beste Grüße,
jomjol -
@jomjol Hallo!
Einen 3D-Drucker besitze ich leider nicht, aber ich habe eine CRI-Wasseruhr, die Zeiger sehen etwas anders aus als bei Dir (und das schwarze Zahnrad hat mehr Zähne). Die Maße müsste ich mal genau ausmessen. Dann melde ich michWie liest du den Heizungsverbrauch aus (oder habt ihr keine Gasheizung)? Ich experimentiere gerade per Arduino IDE mit den Pulszähler-Features des ESP32 herum ("pcnt"), der hat offenbar eingebaute Hardware, die das unabhängig von der CPU kann, inkl. Entprellen und diversen anderen Optionen. Damit könnte man dem Hauptprozess (Webserver) einfach einen zweiten Wert zur Verfügung stellen, der dann zusätzlich zum Bild über eine zweite URL angeboten wird.
Was ich noch nicht weiß, ist wie ich beim Pulszähler für den Gasverbrauch mit Stromausfällen und Unterbrechungen umgehen soll. Irgendwie muss der ESP32 sich entweder den Wert merken oder der ioBroker dann automatisch "weiterzählen", wenn die Werte wieder bei Null anfangen.
Oder ich speichere nur die Anzahl Pulse pro Minute o.ä. und integriere das dann erst in Grafana auf. Vielleicht die beste Lösung, da kann man dann auch fehlende Werte einfacher manuell nachtragen.Sobald es bei mir läuft, mache ich einen PR auf Github.
-
Also ich behaupte mal das Memory-Leak ist nicht behoben. Aktuell bei mir 1110 MB RAM-Auslastung.
Das sind 160MB mehr innerhalb von 3 Tagen, d.h. der RAM wird pro Tag etwas mehr als 50MB voller.
Aber der Leak ist glaube ich weniger als vorher, ich denke vor dem Update war der RAM-Verbrauch und Anstieg höher.
Vermutlich ist der Leak auch abhängig von der Anzahl an Bildern die man macht. Bei mir sind es 1 Bild alle 60 Sekunden.
Das Leak ist jedenfalls nicht so schlimm, hochgerechnet auf den Monat wären es ca. 1,5GB an RAM.
Man kann ja notfalls über eine CRON in bestimmten Zeitabständen einen Neustart des Docker-Containers machen. -
@Jens77 sagte in Wasserzähler - Selfmade:
Ich experimentiere gerade per Arduino IDE mit den Pulszähler-Features des ESP32 herum ("pcnt"), der hat offenbar eingebaute Hardware, die das unabhängig von der CPU kann, inkl. Entprellen und diversen anderen Optionen. Damit könnte man dem Hauptprozess (Webserver) einfach einen zweiten Wert zur Verfügung stellen, der dann zusätzlich zum Bild über eine zweite URL angeboten wird.
Ich habe für meine Leckageüberwachung vor ca. 3 Jahren (s. Homematic-Forum) kurzen Prozeß gemacht: 2 Stück ESP8266 per serieller Schnittstelle verbunden. Für diese Kommunikation gab es irgendwo eine fertige lib.
Der eine zählt Impulse, der zweite macht Webseite, Statistik, Datenauslieferung, in meinem Fall an Homematic - ioBroker wäre auch möglich. Der "Zählprozessor" zählt per Interrupt nicht durch pollen. Da kommt man auf einige kHz, was für so ein Sternrad einer Wasseruhr mehr als ausreicht. Webseitenaufrufe etc stören dann nicht mehr. Beim ESP8266 geht dann halt lediglich die serielle Schnittstelle (HW-Serial) für debugzwecke verloren.Was ich noch nicht weiß, ist wie ich beim Pulszähler für den Gasverbrauch mit Stromausfällen und Unterbrechungen umgehen soll. Irgendwie muss der ESP32 sich entweder den Wert merken oder der ioBroker dann automatisch "weiterzählen", wenn die Werte wieder bei Null anfangen.
Ich habe zwei Methoden implementiert und getestet:
- Speicherung des kumulierten Wertes in der Homematic-CCU (ioBroker wäre auch möglich), aber Verarbeitung auf dem (zweiten) ESP8266. Beim Start fordert der ESP den letzten kumulierten Wert an und setzt darauf auf. Er übermittel neue kumulierte Werte wieder zurück an die CCU. Würde also mit der Datenbasis des ioBroker auch gehen (simpleApi).
- Speicherung des kumulierten Wertes in einem I2C EEPROM. Die Speicherzyklen reichen auch ohne wear leveling viele Jahre. Beim Start holt der ESP den kumulierten Wert aus diesem EEPROM und verarbeitet ihn weiter. Das Ergebnis wird an die CCU geschickt, wobei das nach einigen Litern oder nach einer gewissen Zeit getan wird. Einen ähnlichen Mechanismus gibt es auch beim Zurückschreiben des kumulierten Wertes zum EEPROM.
Oder ich speichere nur die Anzahl Pulse pro Minute o.ä. und integriere das dann erst in Grafana auf. Vielleicht die beste Lösung, da kann man dann auch fehlende Werte einfacher manuell nachtragen.
So etwas habe ich bei einem S0-Zähler gemacht, bei dem ich mit einen ESP8266 mit dem ESPEasy framework experimentiert habe. Das ESPEasy Framework kann auch Werte kumulieren, aber leider nicht persistent, wodurch das für Zählezwecke wertlos wird. Bei jenem Projekt habe ich die Pulse innerhalb eines Zeitintervalls an den ioBroker geschickt und dort per Skript in Leistung umgerechnet sowie die Ticks kumuliert und damit die Energie ohne kumulierende Rundungsfehler berechnet. Mittlerweile gibt es in ioBroker auch Adapter, die so etwas können (statistics und sourceanalytix)
Alle 3 Methoden funktionieren.
-
@klassisch es wäre schon, wenn wir hier in diesen Thread beim eigentlichen Projekt von @jomjol bleiben könnten, ist eh schon sehr lang und unübersichtlich.
-
@Atifan Meinen Docker hat es nun auch aufgestellt, bin wieder zurück zum Docker restart alle 6 Stunden.
-
Jetzt muss ich doch nach einiger Zeit nochmal Rückmeldung geben, nachdem ich das Projekt aus Frust habe liegen lassen..
Es funktioniert nun endlich ... und mein Hauptproblem war die Erkennung...
Nachdem ja nun der WYSIWYG Editor für die Config.ini da ist, habe ich mich einfach nochmal die letzten Tage hingesetzt ich mich vorangetastet...
Nach sehr ! vielen Versuchen, pixelweise die Digits zu verschieben, hatte ich dann tatächlich mal Ergebnisse... Aber die Analogen wollten einfach nichts plausibles ergeben...
Zum Hintergrund: Ich verwende das aktuelle raspi-rolling Dockerimage und habe auch vor ein paar tagen noch mal einen pull gemacht, damit ich das aktuelle config Verzeichniss habe... und zwar mit diesem Befehl:
git clone -b Raspberry-V3 https://github.com/jomjol/water-meter-system-complete
den Docker Container starte ich so:
sudo docker run -d --restart unless-stopped -p 3000:3000 --mount type=bind,source=/home/pi/water-meter-system-complete/code/config,target=/config --mount type=bind,source=/home/pi/water-meter-system-complete/code/log,target=/log jomjol/wasserzaehler:raspi-rolling
Soweit so gut... aber wie gesagt nix...
Nun .. heute Nacht hatte ich senile Bettflucht und hab mich um 2.30 noch mal dranngesetzt.. und irgendwann ist der Groschen gefallen...
In meinem config Ordner waren alte Version der neuralnetz-Trainingsdateien.. v2x anstatt v5 ...
Diese Dateien ausgetauscht und es lief sofort !!!
Falls sich also mal jemand schwertut .. die Versionen kontrollieren !
Danke für die viele Arbeit, ein geniales Projekt !!
-
@mameier1234 Gratulation! Bei mir hat es auch einige Zeit gedauert bis es lief, jetzt aber seit Monaten konstante readings...
Tipp: Wenn Du noch --name wasser hinzufügst kannst Du den Docker mit wasser adressieren.sudo docker run -d --name wasser --restart unless-stopped -p 3000:3000 --mount type=bind,source=/home/pi/Wasserzaehler_4.2/code/config,target=/config --mount type=bind,source=/home/pi/Wasserzaehler_4.2/code/log,target=/log --memory-swap -1 jomjol/wasserzaehler:raspi-rolling
Noch ein Tipp: Die TensorFlow Bibliothek hat ein Memory Leak deshalb ist ein periodischer Restart notwendig. Dieser hängt von deiner Abtastrate ab.
Mit sudo Docker restart wasser kannst Du den Docker restarten. Ich mache das alle 6 Stunden mit einem Cron Job.
Weiterhin viel Erfolg beim Wasserzähler Projekt -
@pfried Danke für den Tipp...
Meine Esp Cam verliert auch immer mal wieder die lust.. jetzt habe ich ne schaltbare Steckdose davor, überwache mit dem Ping-Adapter und wenn nix mehr kommt, schalte ich die Dose aus und wieder an... Das mit dem eingebauten Watchdog funktioniert wohl nicht..
-
@mameier1234 schau dir mal meinen Post dazu an. Seitedem hatte ich keinen einzigen Ausfall mehr: https://forum.iobroker.net/topic/23577/wasserzähler-selfmade/606
-
@watcherkb Das hatte ich gesehen und eingebaut.. ..... trotzdem....
-
Also ich habe mit der ESP-CAM ansich auch selten Probleme, habe den Code da auch eingebaut.
Einziges Problem was ich habe, meine ESP-CAM ist über einen AVM Fritz Repeater 2400 angebunden.
Wenn ich diesen mal neu starten muss wegen FW-Update oder so, dann reconnected die ESP-CAM oft nicht.
Manchmal tut sie es, oft aber auch nicht. Ich muss dann immer kurz die Stromversorgung kappen damit sie rebootet und dann reconnectet sie auch wieder.
Kann man das evtl. auch irgendwie in den Quellcode integrieren, damit das reconnecten besser klappt? -
@Atifan Habe gerade festgestellt, dass der Reconnect vermutlich nicht korrekt implementiert ist. Teste gerade ein Update, wenn es funktioniert lade ich es hoch.
-
Ah super, alles klar
-
@Atifan
Auf Github gibt es ein Update (in der Version Rolling): https://github.com/jomjol/water-meter-picture-provider/tree/rolling2 Änderungen:
- Reconnect zu WLan funktioniert jetzt auch wenn zwischendurch die WLan-Verbindung verloren geht
- Blinking signalisiert eine verlorene WiFi-Verbindung (3x kurz alle 10s)
-
OK thx. Muss ich da noch irgendwas ändern außer meiner WLAN SSID und PW?
-
So habe mal die neue FW geflasht und dann meinen Repeater neu gestartet.
Die ESP-CAM hat sich danach wieder automatisch connected, scheint also zu grundsätzlich zu funktionieren.
Werde beobachten ob es immer funktioniert, aber ich denke es sieht gut aus -
@jomjol Ist es eigentlich möglich den ESP32 über OTA zu flashen? Es ist nämlich ziemlich mühsam immer den Aufbau zu zerlegen, denn schon eine geringe Abweichung beim Wiederzusammenbau heißt auch wieder neu justieren...
-
Also bei mir ging das ohne Probleme. Da mein Halter an der gleichen Stelle bleibt, bleibt alles genau gleich bis auf minimalste Abweichung welche aber nicht schlimm ist. Durch die Referenzpunkte findet die Software ja alle Punkte exakt wieder. Bei der Feinjustierung nehme ich mir immer das Smartphone dazu und öffne den Link http://192.168.178.115:3000/wasserzaehler.html?usePreValue&full .
So sieht man direkt ob alles passt.