Proxmox LXC und Z2M mit Skyconnect

Hier beschreibe ich, wie ich Proxmox auf einem LXC mit Docker Compose Z2M installiere und betreibe. Es gibt viele Anleitungen, bei denen man den Stick in vielen Schritten einstecken kann. Das war für meine Anwendung zu umständlich. Vor allem, wenn man den Stick austauschen will.

Als erstes braucht man einen LXC-Container mit Ubuntu oder Debian, auf dem Docker und Docker-Compose installiert sind. Weil es so einfach ist, habe ich auch Portainer auf dem Container installiert.

Den SkyConnect habe ich mit der Proxmox-Gui durchgeschleust. Als erstes steckt man den SkyConnect ein und gibt in der Konsole des Hosts den Befehl ls -la /dev/serial/by-id/ ein. Das Ergebnis ist die Ausgabe:

lrwxrwxrwx 1 root root 13 Aug 26 11:25 usb-Nabu_Casa_SkyConnect_v1.0_5c842085a396ed11b713c698a7669f5d-if00-port0 -> ../../ttyUSB0

Diese Ausgabe benötigen wir im nächsten Schritt.

Klicke nun auf den Container und wähle Ressourcen. Klicke auf Hinzufügen und wähle Device Passthrough.
image

Dort die Ausgabe mit vollständigem Pfad einfügen:

 /dev/serial/by-id/usb-Nabu_Casa_SkyConnect_v1.0_5c842085a396ed11b713c698a7669f5d-if00-port0

Klicke auf Erweitert und gib dem Gerät die Zugriffsrechte 0666.

image

Jetzt kannst du den Container neu starten. In der Konsole des Containers kannst du mit dem Befehl ls -la /dev/serial/by-id/ überprüfen, ob die Übertragung funktioniert hat. Das Ergebnis sieht dann so aus:

Die docker-compose.yaml sieht dann so aus:

version: '3.8'
services:
    zigbee2mqtt:
        container_name: zigbee2mqtt
        image: koenkk/zigbee2mqtt
        restart: unless-stopped
        volumes:
            - /volume1/z2m/data:/app/data
            - /run/udev:/run/udev:ro
        ports:
            # Frontend port
            - 8080:8080
        environment:
            - TZ=Europe/Berlin
        devices:
            # Make sure this matched your adapter location
            #- /dev/serial/by-id/usb-1a86_USB_Serial-if00-port0:/dev/serial/by-id/usb-1a86_USB_Serial-if00-port0 #conbee2
            - /dev/serial/by-id/usb-Nabu_Casa_SkyConnect_v1.0_5c842085a396ed11b713c698a7669f5d-if00-port0:/dev/serial/by-id/usb-Nabu_Casa_SkyConnect_v1.0_5c842085a396ed11b713c698a7669f5d-if00-port0

Achtet beim Mapping, dass ihr bei beiden Pfaden denselben Pfad angebt.

Starten Sie nun den Stack bzw. die Docker-Compose-Datei. Dieser wird einen Fehler ausgeben. Er legt aber den Ordner mit den Konfigurationsdateien an. Diese müssen wir im nächsten Schritt editieren.

Öffnet im LXC über die Konsole die Z2M Config:

nono /volume1/z2m/data/configuration.yaml

Ergänzt dort die Datei mit folgenden Einträgen:

mqtt:
  base_topic: zigbee2mqtt
  server: mqtt://DeineIP:1883
  user: USERNAME
  password: PASSWORT
  keepalive: 60
  reject_unauthorized: true
  version: 4
serial:
  port: >-
    /dev/serial/by-id/usb-Nabu_Casa_SkyConnect_v1.0_5c842085a396ed11b713c698a7669f5d-if00-port0
  adapter: ember

Nun kann der Z2M-Container erneut gestartet werden. Wenn alles richtig konfiguriert wurde, bereits ein MQTT-Server läuft und keine Port-Konflikte vorliegen, sollte Z2M normal starten.

Bei Fragen, melden :slight_smile:

2 „Gefällt mir“

Moin,

Zu aller erst einmal Danke, dass Du Deine Erkenntnisse mit uns teilst und auch eine gute Anleitung bereitstellst.

Wie sollte es bei mir auch anders sein, wenn dann nicht doch ein Aber kommt :slight_smile:

Aber, wieso sollte ich ein LX Container bauen, um dann da noch ein Docker zu installieren, ich betreibe Z2M direkt im LXC, und reiche das Devise by-id auch direkt an diesen LXC durch, ohne eine weitere Virtualisierungsschicht :thinking:

Übersehe ich da etwas?

VG
Bernd

Danke für das Tutorial.

Will ja kein Spielverderber sein, aber das geht noch flotter.

Einfach das ZigBee2MQTT LXC tteck Skript ausführen.
Am besten im Advanced Modus, dann kann man auch gleich eine Feste IP vergeben.

Bei dem Device Passthrough, braucht es keine spezielle Zugriffsrechte in CT, der Standardwert 0660 tut es auch. Außer, das ist irgendeine spezielle Docker Geschichte.

Bei Dieser Installationsart wäre der Pfad zur configuration.yaml
/opt/zigbee2mqtt/data/configuration.yaml

Zigbee2MQTT starten

# Starten
cd /opt/zigbee2mqtt 
npm start

Start mit Boot einrichten

# Start abbrechen / zurück zur Eingabe
CTRL + C

# Dienst registrieren
systemctl enable zigbee2mqtt.service

# Dienst einmal starten
systemctl start zigbee2mqtt

Wenn Du ZigBee2MQTT bereits Stand Alone am Start hast, würde es sich auch empfehlen den MQTT Broker eigenständig von Home Assistant zu betreiben.
Hier kann ich den EMQX MQTT Broker wärmstens empfehlen.

Gruß
Osorkon

Ich nutze ein LXC Container mit Addons nur für HA (MQTT, Whatsapp oder Graffana) via Docker.

Eigentlich ging es mir primär darum, den Coordinator via GUI in den LXC durchzureichen. Es gibt ja viele Anleitungen dafür, die aber eher Umständlich mit vielen Zwischenschritten sind.

Moin,

Wie @Osorkon schon geschrieben hat, mittels Helferskript, ist das ein CLI Aufruf, danach ist alles im LXC eingerichtet, nur noch die Konfiguration von Z2M und gut.

Ich habe das vor langer, langer Zeit händisch gemacht, das waren, auch nur wenige Kommandozeilen aufrufe.

Jeder hat so seine eigene Grundphilosophie und sollte so verfahren, wie es für einen am besten ist, ich betreibe lieber einzelne LX Container, wobei diese alle auf meinem LXC Template aufbauen, so habe ich alles zusammen, was ich fürs tägliche Arbeiten brauche.

Im Herbst, wenn es anfängt schmuddelig zu werden, setze ich mir noch ein Ansible auf und dann ist die Administration nur noch ein Aufruf und der Rest geht von alleine :slight_smile:

VG
Bernd

P.S.: Damit das nicht in den Wirren des Forums untergeht, da gibt es doch den Bereich Docs in der linken Leiste, sollte Deine Anleitung nicht lieber dahin verschoben werden?
P.P.S.: Und man braucht das auch nicht nur auf den Skyconnect zu beziehen, das trift ja auf alle USB-Sticks zu :wink: