Seite 1 von 2

Zigbee2mqtt - Bridge offline nach Hardware-Tausch

Verfasst: 23. Dez 2023 14:51
von AppleJack
Hallo zusammen,

ich bin neu hier und hoffe, dass ich alles richtig mache. Ich habe ein Problem mit Zigbee2mqtt, welches ich trotz stundenlanger Versuche nicht behoben bekomme.

Mein Setting:
Openhab3, mosquitto, zigbee2mqtt alles im Docker einer Synology Diskstation

Mein Problem:
Ich habe vor einigen Monaten das System aufgesetzt und es lief seither problemlos. Plötzlich ohne jegliche aktive Veränderung, sind alle Zigbee-Devices ausgefallen. Nachdem ich Zeit gefunden habe, habe ich den Container gestoppt und neu gestartet. Allerdings stoppte dann der Container immer wieder unerwartet. Der CC2531-Dongle läuft bei mir auf tty/ACM0 parallel neben einem Zwave-Stick auf tty/ACM1. Letzter läuft nach diversen Neustarts weiterhin fehlerfrei. Bei jedem Neustart werden die folgenden Befehle ausgeführt:

Code: Alles auswählen

/sbin/modprobe usbserial
/sbin/modprobe ftdi_sio
/sbin/modprobe cdc-acm
chmod 777 /dev/ttyACM0
Um einen Hardware-Defekt auszuschließen, habe ich den Dongle getauscht. Ich habe jetzt einen SONOFF Zigbee USB Dongle-E. Durch Hinzufügen von „adapter: ezsp“ in der YAML-Config habe ich den Container auch zum Laufen gebracht. Die Protokolle von mosquitto und zigbee2mqtt sind seither unauffällig und alles scheint richtig. Allerdings ist laut MQTT-Explorer die Bridge offline, und es lassen sich auch die Geräte (obwohl online lt. OH) nicht steuern.

Nachstehend meine YAML-Datei

Code: Alles auswählen

homeassistant: false
permit_join: false
mqtt:
  base_topic: zigbee2mqtt
  server: mqtt://192.XXX.XXX.XX:1883
  user: USER
  password: PASSWORD
serial:
  port: /dev/ttyACM0
  adapter: ezsp
experimental:
  output: attribute
last_seen: ISO_8601_local
advanced:
  log_level: debug
  baudrate: 38400
  availability_timeout: 60
devices:
  '0x00158d0002ca0a7f':
    friendly_name: klimasensor_kizi
    retain: false
Meine Mosquitto-Config:

Code: Alles auswählen

pid_file /var/run/mosquitto.pid
persistence true
persistence_location /mqtt/data/
allow_anonymous true
user mosquitto
port 1883
log_dest file /mqtt/log/mosquitto.log
log_dest stdout 
Hier das Mosquitto-Protokoll:

Code: Alles auswählen

1703338340: mosquitto version 1.4.15 (build date Sat, 07 Apr 2018 11:13:41 +0100) starting

1703338341: Config loaded from /mqtt/config/mosquitto.conf.

1703338341: Opening ipv4 listen socket on port 1883.

1703338341: Opening ipv6 listen socket on port 1883.

1703338360: New connection from 192.XXX.XXX.XX on port 1883.

1703338360: New client connected from 192.XXX.XXX.XX as 36feecdd-fcf2-4595-87fb-4136dbb3cd0a (c1, k60, u'USER').
Hier das Zigbee2mqtt-Protokoll:

Code: Alles auswählen

Zigbee2MQTT:info  2023-12-23 14:33:01: Logging to console and directory: '/app/data/log/2023-12-23.14-33-01' filename: log.txt

Zigbee2MQTT:debug 2023-12-23 14:33:01: Removing old log directory '/app/data/log/2023-12-19.11-54-01'

Zigbee2MQTT:info  2023-12-23 14:33:01: Starting Zigbee2MQTT version 1.28.4 (commit #52e545f)

Zigbee2MQTT:info  2023-12-23 14:33:01: Starting zigbee-herdsman (0.14.76)

Zigbee2MQTT:debug 2023-12-23 14:33:01: Using zigbee-herdsman with settings: '{"adapter":{"concurrent":null,"delay":null,"disableLED":false},"backupPath":"/app/data/coordinator_backup.json","databaseBackupPath":"/app/data/database.db.backup","databasePath":"/app/data/database.db","network":{"channelList":[11],"extendedPanID":[221,221,221,221,221,221,221,221],"networkKey":"HIDDEN","panID":6754},"serialPort":{"adapter":"ezsp","baudRate":38400,"path":"/dev/ttyACM0"}}'

Zigbee2MQTT:debug 2023-12-23 14:38:01: Saving state to file /app/data/state.json
Ich wäre extrem dankbar, wenn mir jemand helfen könnte. Chat GPT kann es jedenfalls nicht.

Dankbare Grüße
Rüdiger

Re: Zigbee2mqtt - Bridge offline nach Hardware-Tausch

Verfasst: 23. Dez 2023 20:29
von udo1toni
Herzlich willkommen im openHAB Forum!

Zunächst einmal solltest Du bevorzugt eine udev Regel anlegen, welche sich darum die USB-Sticks eineindeutig im System einzubinden.
Die udev Regel nutzt dazu Kriterien wie Hersteller, Modell oder auch Seriennummer des jeweiligen USB-Sticks und kreiert dann für den USB-Stick einen Symlink in /dev/. Dieser Symlink ist dann immer identisch, egal welche anderen Sticks noch angeschlossen werden, egal in welcher Reihenfolge die Sticks angeschlossen werden und vor allem egal, an welchem Port die Sticks angeschlossen werden (sogar, wenn man die Sticks an einem USB-Hub anschließt)

Der zweite Punkt ist vermutlich, dass es nicht reicht, einen neuen Stick anzuschließen, weil der Stick ja ziemlich sicher selbst eine ID hat. Selbst wenn der Stick also in Zigbee2mqtt eingebunden ist, müssen die Geräte vermutlich neu verbunden werden.

Re: Zigbee2mqtt - Bridge offline nach Hardware-Tausch

Verfasst: 24. Dez 2023 10:39
von AppleJack
Danke für die schnelle Antwort!

Eine udev Regel zu erstellen hatte ich auch zwischenzeitlich überlegt, aber dann doch verworfen. Einerseits, weil ich noch nicht rausgefunden habe, wie man das auf einem Synology NAS bewerkstelligt und anderseits, weil der Container sofort stoppt, wenn es ein Problem mit der Zuordnung gibt. Das ist aber ja nicht der Fall. Trotzdem werde ich das mal versuchen.

Den zweiten Punkt habe ich ehrlicherweise nicht verstanden. Ich wüßte nicht, wie ich in den oder außerhalb der Config-Dateien etwas in der Richtung unternehmen könnte. Ich hatte in der YAML-Datei zwischenzeitlich mal die devices abgeschnitten, aber ohne erkennbaren Effekt. War das dein Punkt?

Danke vorab und Schöne Weihnacht!
Rüdiger

Re: Zigbee2mqtt - Bridge offline nach Hardware-Tausch

Verfasst: 24. Dez 2023 22:23
von udo1toni
zigbee2mqtt läuft ja in einem Container, auf den Du Dich verbinden kannst. Dort müssen die Zigbee Devices erreichbar sein. Ich gehe davon aus, dass das nicht der Fall ist.

Ich nutze hier einen per Ethernet angebundenen Coordinator, deshalb ist mein Container eh ein wenig anders konfiguriert.
Im yaml für den Deploy fällt mir aber direkt eine Zeile auf, die bei mir natürlich auskommentiert ist:

Code: Alles auswählen

    #devices:
      # Make sure this matched your adapter location
      #- /dev/serial/by-id/usb-Texas_Instruments_TI_CC2531_USB_CDC___0X00124B0018ED3DDF-if00:/dev/ttyACM0
Das heißt der Stick soll eigentlich über die ID eingehängt werden.

Ansonsten gibt es in der Web UI des Containers halt eine Schaltfläche um das Anlernen zu aktivieren, und dann musst Du die einzelnen Geräte mutmaßlich Gerät für Gerät am neuen Stick anmelden.
Das sollte keine Auswirkungen auf openHAB haben, solange die Topics identisch bleiben (die basieren ja auf den Gerätenamen, Du musst also lediglich darauf achten, den Geräte jeweils wieder den selben (!) Namen zu geben.

Ach so... ich nutze hier das Image koenkk/zigbee2mqtt

Re: Zigbee2mqtt - Bridge offline nach Hardware-Tausch

Verfasst: 29. Dez 2023 13:38
von AppleJack
Danke für deine Rückmeldung und entschuldige die späte Rückmeldung meinerseits.

Ich war aber nicht untätig. Ich habe inzwischen eine udev-Regel definiert. Allerdings ohne Erfolg. Mit der udev-Regel bekomme ich den Container gar nicht zum Laufen. Ich validiere derzeit, ob ich einen Fehler gemacht habe.

Zwischenzeitlich habe ich aber einen CC2531-Stick, den ich neu bestellt hatte, ausprobiert. Dazu habe ich meine alte YAML-Datei (siehe oben, nur ohne den Zusatz "adapter: ezsp" und mit vollständiger Liste aller devices) genutzt. Und siehe da, es lief. Die Bridge ging sofort online. Alles schien so zu funktionieren wie es monatelang vor meinem Problem auch lief. Allerdings waren ca 20% der Geräte (noch) offline. Ich habe einige dieser devices ein- und ausgeschaltet und plötzlich stoppte wieder der Zigbee2mqtt-Container.

Ich weiß natürtlich nicht, ob das Problem durch eines der Geräte ausgelöst wurde, welches ich ein- und ausgeschaltet hatte oder ob ein anderer Konflikt zum Tragen kam. Fakt ist jedoch, dass etwa 40 Minuten alle Systeme einwandfrei liefen und diverse Daten von den eingebundenen Sensoren übermittel wurden sowie Schaltungen über die Zigbee-Geräte (die online waren) funktionierten. Jetzt bekomme ich den Container wieder nicht mehr zum Laufen.

Ich glaube, ich werde am Wochenende Mosquitto und Zigbee2mqtt komplett neu aufsetzen. Ob das hilft, weiß ich nicht. Echt frustrierend, die Ursache nicht zu kennen.

Re: Zigbee2mqtt - Bridge offline nach Hardware-Tausch

Verfasst: 29. Dez 2023 16:33
von udo1toni
An Mosquitto wird es nicht liegen (wenn Du nicht dort einfach irgendwas verstellt hast) Mosquitto ist lediglich Ansprechpartner für alle mqtt Clients, es nimmt also alle Subscriptions entgegen und reicht alle Publishs an alle Subscriber weiter. Entweder funktioniert das für alle Clients oder für keinen (es sei denn, man hat gezielt Teile des Message-Baums oder bestimmte Teilnehmer gesperrt)

Re: Zigbee2mqtt - Bridge offline nach Hardware-Tausch

Verfasst: 29. Dez 2023 17:45
von AppleJack
Alles klar, dann werde ich nur den Zigbe2mqtt neu aufsetzen. Danke.

Ich hatte jetzt jeweils die files in den Data-Ordnern geleert, also mosquitto.db im Mosquitto-Docker und database.db und state.json im Zigebee2mqtt-Docker. Denn auch wenn ich die devices in der YAML-Datei abgeschnitten hatte, waren sie nach einer gewissen Zeit wieder mit den friendly names da. Auch devices, die ich gar nicht mehr besitze.

Das hat offensicht geholfen: Jetzt läuft der Container und die Bridge ist online. Auch mein Zwave-Controller läuft.

Trotzdem war das nicht so schlau, denn ich bekomme jetzt trotz permit_join = true keine Geräte mehr eingebunden. Die YAML-Datei bleibt einfach leer was die devices anbelangt.

Ich würde daraus aber schließen, dass der Konflikt mit den Daten innerhalb der Container zusammenhängt und nicht außerhalb zu suchen ist. Erscheint diese Erkenntnis plausibel?

Vielleicht hängt es auch damit zusammen, dass ich permit_join immer auf true gelassen hatte.

Re: Zigbee2mqtt - Bridge offline nach Hardware-Tausch

Verfasst: 29. Dez 2023 21:19
von udo1toni
Es reicht ja nicht, zu erlauben, dass die Teilnehmer angelernt werden, Du musst das pro Gerät aktiv ausführen (also das Device in den Anlernmodus versetzen.

Re: Zigbee2mqtt - Bridge offline nach Hardware-Tausch

Verfasst: 29. Dez 2023 23:18
von AppleJack
Habe ich nicht erwähnt, hatte ich aber gemacht.Werkseinstellung und dann Pairing-Modus...

Re: Zigbee2mqtt - Bridge offline nach Hardware-Tausch

Verfasst: 31. Dez 2023 00:59
von AppleJack
Ich habe heute doch beide Docker (mosquitto und zigbee2mqtt) entfernt und neu aufgesetzt. Das war auch weniger dramatisch als ich es in Erinnerung hatte. Alles sieht jetzt sauber aus. Die Container laufen, die Bridge ist online, die Protokolle sehen gut aus. Nur bekomme ich nach wie vor keine Geräte gepairt.

Und jetzt, wenn ich reboote, startet der Zigbee-Container nicht mehr, weil der Stick nicht gefunden wird. Hier der Fehler aus dem Protokoll:

Code: Alles auswählen

igbee2MQTT:info  2023-12-30 23:54:27: Starting Zigbee2MQTT version 1.34.0 (commit #aae7312)

Zigbee2MQTT:info  2023-12-30 23:54:27: Starting zigbee-herdsman (0.25.0)

Zigbee2MQTT:debug 2023-12-30 23:54:27: Using zigbee-herdsman with settings: '{"adapter":{"concurrent":null,"delay":null,"disableLED":false},"backupPath":"/app/data/coordinator_backup.json","databaseBackupPath":"/app/data/database.db.backup","databasePath":"/app/data/database.db","network":{"channelList":[11],"extendedPanID":[221,221,221,221,221,221,221,221],"networkKey":"HIDDEN","panID":6754},"serialPort":{"baudRate":38400,"path":"/dev/ttyACM1"}}'

Zigbee2MQTT:error 2023-12-30 23:54:28: Error while starting zigbee-herdsman

Zigbee2MQTT:error 2023-12-30 23:54:28: Failed to start zigbee

Zigbee2MQTT:error 2023-12-30 23:54:28: Check https://www.zigbee2mqtt.io/guide/installation/20_zigbee2mqtt-fails-to-start.html for possible solutions

Zigbee2MQTT:error 2023-12-30 23:54:28: Exiting...

Zigbee2MQTT:error 2023-12-30 23:54:28: Error: Error while opening serialport 'Error: Error: No such file or directory, cannot open /dev/ttyACM1'

    at SerialPort.<anonymous> (/app/node_modules/zigbee-herdsman/src/adapter/z-stack/znp/znp.ts:146:28)

    at SerialPort._error (/app/node_modules/@serialport/stream/dist/index.js:82:22)

    at /app/node_modules/@serialport/stream/dist/index.js:118:18

Using '/app/data' as data directory

Zigbee2MQTT:debug 2023-12-30 23:54:45: Loaded state from file /app/data/state.json

Zigbee2MQTT:info  2023-12-30 23:54:45: Logging to console and directory: '/app/data/log/2023-12-30.23-54-45' filename: log.txt

Zigbee2MQTT:error 2023-12-30 23:54:45: Failed to call 'OnEvent' 'stop' (TypeError: Cannot read properties of undefined (reading 'getDevices')

    at Zigbee.devices (/app/lib/zigbee.ts:288:30)

    at OnEvent.stop (/app/lib/extension/onEvent.ts:37:42)

    at Controller.callExtensions (/app/lib/controller.ts:319:40)

    at Controller.stop (/app/lib/controller.ts:193:9)

    at stop (/app/index.js:111:5)

    at process.handleQuit (/app/index.js:117:9))

Zigbee2MQTT:debug 2023-12-30 23:54:45: Saving state to file /app/data/state.json

Zigbee2MQTT:error 2023-12-30 23:54:45: Not connected to MQTT server!

Zigbee2MQTT:error 2023-12-30 23:54:45: Cannot send message: topic: 'zigbee2mqtt/bridge/state', payload: 'offline
Wenn ich den Stick löse und wieder einstecke erhalte ich beim Befehl "lsusb" (1-2.4 = Zigbee Dongle):

Code: Alles auswählen

|__usb1          1d6b:0002:0404 09  2.00  480MBit/s 0mA 1IF  (Linux 4.4.180+ xhci-hcd xHCI Host Controller 0000:00:15.0) hub
  |__1-1         0658:0200:0000 02  2.00   12MBit/s 100mA 2IFs ( ffffffd1ffffffb2ffffffdbffffffad)
  |__1-2         1a40:0101:0111 09  2.00  480MBit/s 100mA 1IF  ( ffffffd6ffffffa3ffffffebffffffcb) hub
    |__1-2.4     0451:16a8:0009 02  2.00   12MBit/s 50mA 2IFs (Texas Instruments TI CC2531 USB CDC __0X00124B001CDDF3EC)
  |__1-4         f400:f400:0100 00  2.00  480MBit/s 200mA 1IF  (Synology DiskStation 7F009BC36881C693)
|__usb2          1d6b:0003:0404 09  3.00 5000MBit/s 0mA 1IF  (Linux 4.4.180+ xhci-hcd xHCI Host Controller 0000:00:15.0) hub
"ls -l /dev/ttyACM*" ergibt jedoch nur:

Code: Alles auswählen

crwxrwxrwx 1 root root 166, 0 Dec 30 23:51 /dev/ttyACM0
Und das ist nur der Zwave-Stick, wie man auch durch "ls -l /dev/ttyUSB_zwave" erkennen kann:

Code: Alles auswählen

lrwxrwxrwx 1 root root 7 Dec 30 23:51 /dev/ttyUSB_zwave -> ttyACM0
Der Befehl "dmesg" ergibt:

Code: Alles auswählen

[  657.814662] cdc_acm 1-2.4:1.0: ttyACM1: USB ACM device
[  719.958109] usb 1-2.4: USB disconnect, device number 11
[  720.388390] usb 1-2.4: new full-speed USB device number 12 using xhci_hcd
[  735.484818] usb 1-2.4: device descriptor read/64, error -110
[  750.680228] usb 1-2.4: device descriptor read/64, error -110
[  750.870210] usb 1-2.4: new full-speed USB device number 13 using xhci_hcd
[  765.964639] usb 1-2.4: device descriptor read/64, error -110
[  781.160033] usb 1-2.4: device descriptor read/64, error -110
[  781.267090] usb 1-2-port4: attempt power cycle
[  781.879051] usb 1-2.4: new full-speed USB device number 14 using xhci_hcd
[  786.898230] xhci_hcd 0000:00:15.0: Timeout while waiting for setup device command
[  792.114352] xhci_hcd 0000:00:15.0: Timeout while waiting for setup device command
[  792.323440] usb 1-2.4: device not accepting address 14, error -62
[  792.413339] usb 1-2.4: new full-speed USB device number 15 using xhci_hcd
[  797.426499] xhci_hcd 0000:00:15.0: Timeout while waiting for setup device command
[  802.642628] xhci_hcd 0000:00:15.0: Timeout while waiting for setup device command
[  802.851675] usb 1-2.4: device not accepting address 15, error -62
[  802.858769] usb 1-2-port4: unable to enumerate USB device
Wenn das Ganze nicht über ein Jahr bei mir sehr stabil und problemfrei gelaufen wäre, hätte ich schon längst aufgegeben. Was mache ich bloß falsch?

Danke vorab! Ist mir schon unangenehm.