Heute mal wieder ein kurzer Blog - Thema: KNX to MQTT.
Meine Hausautomasierung läuft ja auf KNX (Grund: stabiler Industriestandard, wenn auch etwas teurer) mittlerweile hat sich aber MQTT für IOT Geräte als Kommunikationsstandart etabliert. Im Zuge der Erstellung meiner neuen Batterieanlage hat sich gezeigt, dass MQTT ein gutes Mittel zum Datenausstausch ist. Von daher habe ich mich jetzt auch mal dran gemacht.
Basis für die Implementierung ist das Paket von https://github.com/pakerfeldt/knx-mqtt-bridge. Ich habe das geforkt und werde Kleinigkeiten anpassen. Zielplattform Docker unter Linux. etwas anderes werde ich nicht supporten oder beschreiben. Meinen Fork findet Ihr unter: https://github.com/endurance1968/knx-mqtt-bridge
Fangen wir mal mit dem Ergebnis in einem MQTT Busexplorer an:
Ihr seht hier einen Teil der Messwerte aus unserem Untergeschoss anhand der Gruppenadressen aus ETS.
Installation
erstellt Euch ein Verzeichnis in dem Ihr Euer dockerfile ablegen wollt. ich hab das einfach unter /root/knx-mqtt-bridge abgelegt.
root@lx-docker-02:~/knx-mqtt-bridge# pwd
/root/knx-mqtt-bridge
root@lx-docker-02:~/knx-mqtt-bridge# ls -alrt
-rw-r--r-- 1 root root 244 Feb 25 09:40 dockerfile
root@lx-docker-02:~/knx-mqtt-bridge# cat dockerfile
FROM node:14
RUN npm install -g knx-mqtt-bridge
ENV KNX_MQTT_CONFIG=/config/config.yaml
CMD knx-mqtt-bridge
legt Euch den Inhalt meines Dockerfiles einfach bei Euch ab. Entweder copy paste oder
wget https://raw.githubusercontent.com/endurance1968/knx-mqtt-bridge/master/dockerfile
meine Konfiguration habe ich unter /opt/knx-mqtt-bridge/config abgelegt. Durch das Dockerfile nutzt Ihr npm V14 als Basis image und installiert dann aus https://www.npmjs.com/package/knx-mqtt-bridge mit dem nom install Befehl die eigentlich Bridge. Danach noch den Pfad zur config setzen und die bridge starten. Relativ simple.
Apropos Konfig hier braucht Ihr zwei Dateien
- die eigentlich Config datei
- die ETS Gruppenandressen xml Datei
root@lx-docker-02:~/knx-mqtt-bridge# ls -lart /opt/knx-mqtt-bridge/config/
-rw-r--r-- 1 root root 996 Feb 25 09:24 config.example.yaml
-rw-r--r-- 1 root root 20349 Feb 25 10:26 ets_gruppen_2024_02_24.xml
-rw-r--r-- 1 root root 992 Feb 25 10:29 config.yaml
Die Gruppenadressen bekommt Ihr unter
dann rechte Maustaste und exportieren. In meinem Fall aus ETS 6.1.1. Ältere Versionen sollten auch gehen. Geht in das Verzeichnis in dem Ihr unter dem Ihr das dockerfile abgelegt abgelegt habt.
docker build -t knx-mqtt-bridge .
Um die entsprechenden Images zu bauen. Ergebnis:
Ihr bekommt 2 zusätzliche Images
- node in Version 14 und
- das darauf aufbauende knx-mqtt image
Danach könnte Ihr den container starten
docker run -d --restart=always --name knx-mqtt-bridge -v /opt/knx-mqtt-bridge/config/config.yaml:/config/config.yaml:ro -v /opt/knx-mqtt-bridge/config/ets_gruppen_2024_02_24.xml:/config/knx.xml knx-mqtt-bridge
--name ist der Containername und dann zwei Volumes die das mapping von den Host Konfigdateien auf die Pfade im Container bereitstellen. Der letzte Parameter ist der Imagename den man vorhin erstellt hat.
Im logfile seht Ihr dann die Werte die gepublished werden und entsprechende Fehler.
Der xml ETS export sorgt dafür, das die Wertetypen und Valuenamen richtig erkannt werden. Ansonsten bekommt Ihr eben raw buffers ala:
Lasst es mich wissen, ob das ausführlich genug war oder noch Fehler enthält.
Demnächst kommt dann noch ein Blog zu MQTT to InfluxDB oder Prometheus DB.
Kommentare
Neu erstellte Kommentare unterliegen der Moderation und werden erst sichtbar, wenn sie durch einen Moderator geprüft und freigeschaltet wurden.
Neu erstellte Kommentare unterliegen der Moderation und werden erst sichtbar, wenn sie durch einen Moderator geprüft und freigeschaltet wurden.