NEWS
Wasserzähler - Selfmade
-
Ich habe die Version der Dockerfiles auf 5.x gehoben. Wesentliche Unterschiede:
Unterbau mit Op- ListenpunktenCV und Tensorflow sind in separaten Dockerfiles ausgelagert
Es gibt jetzt eine Version für Intelprozessor ohne AVX2-Version (latest) und Raspberry PI (raspi).
Damit ist der Build einfacher und besser wartbar. Für die Raspi-Rolling habe ich jetzt einen Restart nach Crash implementiert
@pfried teste bitte mal, ob damit mit dem Memory Leak automatisch gestartet wird.
Gruß, jomjol -
kann mir jemand die Fehlermeldung nach Aufruf von:
root@Test:~# docker run -p 3000:3000 --mount type=bind,src=/home, target=/config --mount type=bind,src=/home,target=/log jomjol/wasserzaehler:latest
erklären?
invalid argument "type=bind,src=/home," for "--mount" flag: invalid field '' must be a key=value pair See 'docker run --help'.
-
@ecki945 Fehlermeldung sagt mir nichts, aber mir ist aufgefallen, dass du beide Verzeichnisse (log & config) auf dasselbe /home Verzeichnis mountest. Das dürfte nicht funktionieren.
-
@ecki945 Mein Aufruf:
sudo docker run -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 -
Zwischenzeitlich habe ich es geschafft, dass der Dockeraufruf funktioniert. Leider habe ich nun folgendes Problem:
stephan@Test:~$ sudo docker run -p 3000:3000 --mount type=bind,source=/jomjolconfig,target=/config --mount type=bind,source=/jomjollog,target=/log --memory-swap -1 jomjol/wasserzaehler:latest [sudo] password for stephan: Unable to find image 'jomjol/wasserzaehler:latest' locally latest: Pulling from jomjol/wasserzaehler 16ea0e8c8879: Pull complete 50024b0106d5: Pull complete ff95660c6937: Pull complete 9c7d0e5c0bc2: Pull complete 29c4fb388fdf: Pull complete 8659dae93050: Pull complete c8208a94eb32: Pull complete 465b26a31c40: Pull complete 84af071ddf6f: Extracting [==================================================>] 1.871MB/1.871MB 72674e39b52a: Download complete 257c064c14b2: Download complete 13079f9eaad3: Download complete da4020cd652a: Download complete 967ef883685d: Download complete e064e3ebdc71: Download complete docker: failed to register layer: ApplyLayer exit status 1 stdout: stderr: write /usr/local/lib/python3.7/site-packages/pkg_resources/_vendor/packaging/specifiers.py: no space left on device. See 'docker run --help'.
Ich vermute mal, dass das auch mit dem Docker in nem LXC Container unter Proxmox zusammen hängt. Habe leider aktuell wenig Zeit mich um diese Sache zu kümmern
-
@ecki945 Hast du dir vorher die version runtergeladen?
sudo docker pull jomjol/wasserzaehler:raspi-rolling
wobei raspi-rolling mit der Version ersetzt wird, welche du brauchst.
-
Hallo,
habe das Projekt gestern auch umgesetzt. Hat alles wunderbar auf anhieb funktioniert.
Ich habe als einziges im ESP32-Code noch eine feste IP vergeben. Das mache ich bei allen IOT-Geräten, damit ich, falls ich mal den Router wechsele nicht von vorne Anfangen muss.Als Abfrage habe ich das Java-Skript verwendet.
Hier noch ein Tipp für grafana:
SELECT floor(n.ts/1000) as time_sec, convert(n.val,DECIMAL(10,4)) as value, "Wasser" as metric FROM ts_string n WHERE $__unixEpochFrom()*1000<n.ts and $__unixEpochTo()*1000>n.ts and n.id = 2372 and n.id ORDER BY n.ts ASC
Die ID ist natürlich anzupassen. (Ich speichere in mysql)
Hier mein Docker-Aufruf:
docker run -d --restart unless-stopped -p 3300:3000 --mount type=bind,source=/var/docker/wasser,target=/config --mount type=bind,source=/var/docker/log,target=/log jomjol/wasserzaehler:latest
Hier habe ich den Port von 3000 auf 3300 umgesetzt (3000 nutzt grafana).
Mit -d läuft es als Service und mit --restart unless-stopped wird es auch nach Rechner Neustart wieder gestartet.Also vielen Dank an euch für die super Arbeit.
-
@pfried Der Aufruf mit deinem Parametern erzeugt die gleiche Fehlermeldung:
root@Test:/home/stephan# sudo docker run -p 3000:3000 --mount type=bind,source=/jomjolconfig,target=/config --mount type=bind,source=/jomjollog,target=/log --memory-swap -1 jomjol/wasserzaehler:latest Unable to find image 'jomjol/wasserzaehler:latest' locally latest: Pulling from jomjol/wasserzaehler 16ea0e8c8879: Pull complete 50024b0106d5: Pull complete ff95660c6937: Pull complete 9c7d0e5c0bc2: Pull complete 29c4fb388fdf: Pull complete 8659dae93050: Pull complete c8208a94eb32: Pull complete 465b26a31c40: Pull complete 84af071ddf6f: Extracting [==================================================>] 1.871MB/1.871MB 72674e39b52a: Download complete 257c064c14b2: Download complete 13079f9eaad3: Download complete da4020cd652a: Download complete 967ef883685d: Download complete e064e3ebdc71: Download complete docker: failed to register layer: ApplyLayer exit status 1 stdout: stderr: write /usr/local/lib/python3.7/site-packages/pkg_resources/__init__.py: no space left on device.
Da ich ja Docker in einem lxc Container laufen lassen will, vermute ich hier Zugriffprobleme.
-
@ecki945 Der Download verabschiedet sich mit "no space left on device" darum meinte ich, dass Du zuerst das Image mit: sudo docker pull jomjol/wasserzaehler:latest ........ runterladest und extrahierst.....
-
Guten Morgen
@pfried du hattest recht. Habe habe mal Testweise den Speicherplatz des Containers von 8 GB auf 20GB erweitert. Nun klappt der Dowload über docker pull jomjol/wasserzaehler: latest des Containers.Bin dabei etwas erschrocken. Kann es sein, dass der Download des Containers ca 13 GB groß ist????
Der Aufruf klappt nun.
stephan@Test:~$ docker run -p 3000:3000 --mount type=bind,source=/jomjolconfig,target=/config --mount type=bind,source=/jomjollog,target=/log --memory-swap -1 jomjol/wasserzaehler:latest 2020-01-01 07:27:52.798622: I tensorflow/core/platform/cpu_feature_guard.cc:142] Your CPU supports instructions that this TensorFlow binary was not compiled to use: SSE4.1 SSE4.2 AVX AVX2 FMA
-
@ecki945 Der Container ist 590MB groß. Leider hat Tensorflow noch ein intrinsisches Speicherleck, daher wächst der Speicherbedarf mit der Zeit bei einigen Systemen an. Problem ist bei der Raspberry-Variante aber anscheinend größer.
-
Hallo zusammen,
ich überlege als nächste Erweiterung ein Tool zu schreiben, was bei der Erstellung der Config.ini unterstützt. Dies ist eine Hürde, da die manuelle Bearbeitung einer Textdatei für viele User eine erhebliche Hürde darstellt.
Wenn das in einer WYSIWYG-Web Anwendung möglich wäre, die entweder die Config.ini oder idealerweise sogar einen customized Docker Container ausspuckt, könnte ich mit dem Projekt noch viel mehr User erreichen.
Hat jemand Erfahrung damit und Lust das gemeinsam zu machen? Ich überlege gerade mit welchem Framework man so etwas aufsetzt und in welchem Tool ich es entwicklen würde.
Wer Lust / Zeit / Know-How hat, gerne bei mir melden
Beste Grüße,
jomjol -
@jomjol Prosit Neujahr!
Habe eine Bitte: kannst Du mir vielleicht mit einem Script am Raspberry Debian aushelfen, welches den Docker Container regelmäßig stoppt und wieder startet, um das Speicherleak zu umgehen.... Vielen Dank im Voraus! -
@pfried Hallo Paul,
ich würde den Befehl "docker restart CONTAINTERNAME" als cron-job alle xx Stunden einfügen. Hilft dir das? -
@jomjol Sicher danke, bitte sag mir noch wo ich den Befehl einfügen soll. Als Script im IOBroker?
Bei mir muss es also lauten: sudo docker restart 0cb549..... Correct? Wenn ich als Containername jomjol/wasserzaehler:raspi-rolling eingebe bekommen ich die Fehlermeldung: No such container ..... -
@pfried Ich kann es bei mir gerade nicht ausprobieren - Remote kein Zugriff auf den Raspi. Aber ich würde den Befehl erstmal in der Konsole probieren (so wie du es schon gemacht hast) und dann mit dem passenden Timining in die /etc/crontab einfügen. Eine Übersicht findest du hier:
http://raspberry.tips/raspberrypi-einsteiger/cronjob-auf-dem-raspberry-pi-einrichten
Gruß,
jomjol -
@jomjol Danke für den Tipp! Ich lerne jeden Tag dazu .... mittels Cron habe ich jetzt den Reset hinbekommen.
-
@pfried Schickst du mir den Cron-Eintrag, dann füge ich es der Raspi-Anleitung hinzu.
Hat der interne Restart bei dir nicht funktioniert? -
Hallo,
anbei nochmal ein Tipp für die Visualisierung in Grafana:
Ich habe den Verbrauch und den aktuellen Verbrauch pro Stunde in ein Diagramm gepackt:
SELECT floor(n.ts/1000) as time_sec, (max(n.val)-min(n.val))*1000 as value, "Wasser/h" as metric FROM ts_string n WHERE $__unixEpochFrom()*1000<n.ts and $__unixEpochTo()*1000>n.ts and n.id = 2372 and n.id group by date_format(from_unixtime(ts/1000),"%Y-%m-%d-%H") ORDER BY n.ts ASC
Ja, das ist nicht 100% genau (also es wird nicht der Wert um exakt der vollen Stunde genommen, sondern der nächst größere, aber für mich reicht es)
-
@jomjol sagte in Wasserzähler - Selfmade:
Hallo zusammen,
ich überlege als nächste Erweiterung ein Tool zu schreiben, was bei der Erstellung der Config.ini unterstützt. Dies ist eine Hürde, da die manuelle Bearbeitung einer Textdatei für viele User eine erhebliche Hürde darstellt.
Wenn das in einer WYSIWYG-Web Anwendung möglich wäre, die entweder die Config.ini oder idealerweise sogar einen customized Docker Container ausspuckt, könnte ich mit dem Projekt noch viel mehr User erreichen.
Hat jemand Erfahrung damit und Lust das gemeinsam zu machen? Ich überlege gerade mit welchem Framework man so etwas aufsetzt und in welchem Tool ich es entwicklen würde.
Wer Lust / Zeit / Know-How hat, gerne bei mir melden
Beste Grüße,
jomjolHallo,
gute Idee, das hat mir am Anfang auch am meisten Probleme gemacht.
Noch besser wäre es, wenn man die Komplette Erkennung auf den ESP32 machen könnte. Es gibt doch Lösungen mit Gesichtserkennung, meinst du so etwas geht hier auch?