tirolerstefan / kaifa

Read out Kaifa smart meter
MIT License
25 stars 14 forks source link

Docker und influxDB #22

Open Phil1pp opened 1 year ago

Phil1pp commented 1 year ago

Ich habe das Python-Script in ein Docker Image verpackt. Außerdem noch influxdb v2 als Exportformat hinzugefügt. Damit landen die Werte alle 5s in der Datenbank und können später mit Grafana ausgewertet werden. Influxdb und Grafana gibts ebenfalls als Docker Images.

Falls jemand Interesse hat: https://github.com/Phil1pp/kaifareader

teefixx commented 1 year ago

Hallo Phil1pp

Bin sehr interessiert an deinem Projekt. Habs mir gerade auf meine Synology runtergeladen und werde es in Docker installieren. Weisst du zurällig, ob es auch mit den VKW (Vorarlberger Kraftwerke) funktioniert?

SG

Phil1pp commented 1 year ago

Ja, habe auch VKW. KSMWest (Kooperation Smartmeter West) ist Vorarlberg, Tirol, Salzburg

Hast du denn deinen AES KEY schon bekommen? Ich musste fast einen Monat darauf warten.

teefixx commented 1 year ago

Hallo, wollte gerade den Key beantragen, aber leider scheint das Portal down... Welchen MBus converter hast du im Einsatz?

Phil1pp commented 1 year ago

VKW ist da extrem schlecht mit dem Support. Auf Email bekommt man keine Antwort und an der Hotline kennt sich irgendwie niemand aus. Mein Smartmeter war zuerst gar nie Online. Nach Wochen haben die dann ein LTE Modem eingebaut. Danach dauert es nochmals 4 Wochen bis ich den Key bekommen habe.

Ich wollte einen Konverter mit Gehäuse: https://de.aliexpress.com/item/1005004540180026.html Der Konverter aus China war jedenfalls schneller da als der AES-Key.

Je nach Konverter musst du Parity aktivieren oder nicht in den Settings.

teefixx commented 1 year ago

Das mit der Verbindung ist mir auch aufgefallen, ich habe keine. Der Monteur hat mir gesagt, es könne auch 6 Monate dauern bis da Verbindung ist. Offensichtlich funktionieren die Zähler auch als Repeater und wenn man zu weit von der Trafostation entfernt ist und kein Repeater dazwischen gibts ein Problem. Mal sehen ob heute jemand erreichbar ist...

Ich nehme an, du hast den Mbus slave adapter genommen? SG

Phil1pp commented 1 year ago

Ohne stabile Verbindung kannst du auch die M-Bus Schnittstelle nicht aktivieren lassen. Wirst also vermutlich auch LTE benötigen.

Ja, habe den Slave Adapter. Sollte aber auch jeder x-beliebige von Amazon funktionieren.

teefixx commented 10 months ago

Hallo Phi1pp Ich habe jetzt endlich meine Anlage soweit fertig, dass ich auch die Zähler auslesen kann. Habe mir den selben Adapter gekauft wie du und und alles verkabelt. Heute habe ich das Docker image installiert und mal getestet. Leider funktioniert es nicht, ich bekomme im Log immer die Fehlermeldung:

Error loading config file /etc/kaifareader/meter.json Could not load config file

Ich bin kein Docker Fachmann, habe die meter.json auf meinem Server in ein Verzeichnis gepackt und mit /etc/kaifareader verbunden.

Weil das nicht funktioniert, habe ich auch mal ohne Docker getestet und das Script auf meiner Synology laufen lassen, dabei hatte ich die meter.json sowohl im gleichen Verzeichnis wie das kaifareader.py wie auch in /etc/kaifareader gespeichert. Immer die selbe Fehlermeldung.

Vielleicht hast du noch einen Tip, warum er das Konfigurationsfile nicht findet...

SG

tirolerstefan commented 10 months ago

Hi teefixx, wenn du den kaifareader im Docker-Container laufen lasst, muss auch dort drin das Konfigurationsfile liegen. Wenn du es aber nur auf deinem Hostsystem abgelegt hast (im ordner /etc/kaifareader), dann wird es deine Dockerumgebung nicht finden, weil diese ein eigenes abgegrenztes System ist.

Du musst also dort drinnen dein meter.json ablegen und der kaifareader wird es finden. Wenn du nicht weißt, wie du dein Docker-Image erweiterst, kannst du auch beim Starten des Containers ein File von außen ins System bringen mit der Option "--volume / -v" (also z.B. docker run -it -v /etc/kaifareader/meter.json:/etc/kaifareader/meter.json ...).

Hoffe, das hilft!

teefixx commented 10 months ago

Hallo Danke, das werde ich versuchen. Läuft das Script grundsätzlich auch ohne docker Image? Das habe ich auch versucht und das Konfigurationsfile im absoluten Pfad abgelegt, hat auch nicht funktioniert...

tirolerstefan commented 10 months ago

Das ist Python, das läuft überall, wo die Umgebung und die Abhängigkeiten installiert sind. Das Debian Paket würde sich darum automatisch kümmern.

Phil1pp commented 10 months ago

Mach es mal genau so wie in meinem Beispiel aufgeführt. mit -v kaifareader-config:/etc/kaifareader Dann erstellt dir Docker automatisch ein Volume in dem sich schon eine Basis config von mir befindet. Diese ersetzt du dann einfach durch deine bzw. bearbeitest sie.

teefixx commented 10 months ago

Hallo Stefan, Danke für deine Antwort.

Hallo Phil1pp

Das Script läuft jetzt. Fehler war banal. In deinem meter_template.json fehlt ein Beistrich in Zeile 59, nach "influxdb_measurement": "smartmeter"

Das hat die Fehlermeldung verursacht, mich aber leider sehr lange auf die falsche Fährte gelockt...

Phil1pp commented 10 months ago

Danke für die Rückmeldung. Habe den Fehler behoben und eine neue Version hochgeladen.

teefixx commented 10 months ago

Hallo Phil1pp So weit läuft das Script. Hab jetzt den Export in die influxDB aktiviert, auch das läuft.

Wenn ich allerdings im meter.json die Werte "DateAndTime", "DeviceNumber"oder "DeviceName" auf true setze kommt eine Fehlermeldung. Alle anderen Werte gehen tadellos...

Traceback (most recent call last): File "kaifa-HAUS.py", line 705, in influxdb_write_api.write(bucket=g_cfg.get_influxdb_bucket(), org=g_cfg.get_influxdb_org(), record=p) File "/usr/lib/python3.8/site-packages/influxdb_client/client/write_api.py", line 366, in write return self._write_batching(bucket, org, record, File "/usr/lib/python3.8/site-packages/influxdb_client/client/write_api.py", line 458, in _write_batching self._write_batching(bucket, org, data.to_line_protocol(), data.write_precision, **kwargs) File "/usr/lib/python3.8/site-packages/influxdb_client/client/write/point.py", line 233, in to_line_protocol _fields = _append_fields(self._fields, self._field_types) File "/usr/lib/python3.8/site-packages/influxdb_client/client/write/point.py", line 296, in _append_fields raise ValueError(f'Type: "{type(value)}" of field: "{field}" is not supported.') ValueError: Type: "<class 'bytes'>" of field: "DeviceNumber" is not supported.

SG

Phil1pp commented 10 months ago

Bei den 3 von dir genannten Werten handelt es sich um Strings, die dazu auch noch konstant sind. Diese machen in einer InfluxDB auch keinen Sinn. Und den Zeitstempel setzt influx sowieso selber.

teefixx commented 10 months ago

Hallo Phil1pp Da hast du natürlich recht was das Datum betrifft. Ich lese 3 Zähler aus, es wäre schön, wenn beim Datensatz die Identifikation des Zählers mitkäme. Nur falls sich der USB Anschluss ändert beim Restart des Systems und zB ttyUSB0 auf einmal ttyUSB1 ist und umgekehrt... Gibt es eine Möglichkeit den Fehler zu eliminieren? SG

teefixx commented 9 months ago

Hallo Philipp

Das Thema mit dem Fehler bei den Strings habe ich inzwischen gelöst.

Nun ist ein neues Problem aufgetreten: Das Script ist bis heute tadellos gelaufen. Mein MQTT server war Mosquitto auf VenusOS. Alle Werte konnten problemlos auf dem Server veröffentlicht werden.

Heute hab ich ein Update von VenusOS gemacht. Der MQTT server ist jetzt nicht mehr Mosquitto sonder FlashMQ. Der Server läuft einwandfrei, mit MQTT Explorer kann ich problemlos publishen und schreiben.

Dein Script hat aber Probleme beim Verbinden mit dem Server, log anbei. Hast du eine Idee, an was das liegen könnte?

SG KAIFA log.txt

Phil1pp commented 9 months ago

Das Problem ist vermutlich in der verwendeten MQTT Library in Python zu suchen. Die ist seit 2021 nicht mehr gepflegt. Da es bei mir aber aktuell mit Mosquitto problemlos läuft, werd ich da aktuell aber keine Zeit investieren. Musst du leider selber schauen ob du eine andere Library findest die funktioniert.

teefixx commented 9 months ago

Danke, ich habe den Fehler inzwischen gefunden. Ein Leerzeichen zuviel und schon ging das nicht mehr :-( Jetzt läuft es wieder vollständig. Habe übrigens das Problem mit den Strings auch gelöst, kenn mich aber mit Github nicht wirklich aus. Soll ich es dir irgendwo hochladen? SG

Phil1pp commented 9 months ago

Du kannst es gerne irgendwo hochladen und den Link hier reinstellen. Dann kann ich es mir anschauen und wenn möglich in ein neues Docker Image einbauen.

boredomwontgetus commented 6 months ago

@Phil1pp https://github.com/tirolerstefan/kaifa/issues/27