USB-Dongle-Konfiguration wird beim Docker-Container-Neustart unterbrochen

Hallo

(Entschuldigung für mein schlechtes Französisch, ich benutze Google Translate.)

Ich verwende docker-compose, um Gladys auszuführen. Ich habe Zigbee2MQTT konfiguriert und es funktioniert manchmal. Aber jedes Mal, wenn der Container neu gestartet wird, ist der USB-Dongle nicht mehr verbunden. Die Meldung lautet: „Kein Zigbee2mqtt-USB-Dongle ist an Gladys angeschlossen“.

Zwei Geräte sind immer aufgelistet: /dev/ttyUSB0 und /dev/AMA0. Was das Problem normalerweise löst, ist die Auswahl eines Geräts, das nicht ausgewählt ist, und das Klicken auf „Speichern“. Es ist egal, welches der beiden ausgewählt wird.

Ich muss in der Lage sein, die Container ohne Überwachung neu zu starten, ohne die Benutzeroberfläche zu verwenden, um die Konfiguration jedes Mal zu ändern. Kann mir jemand helfen zu verstehen, was nicht stimmt? Danke.

Hi @orval

Google Translate macht einen ziemlich guten Job, keine Sorge.

Kannst du deine Compose-Datei posten?

Wenn dieser Fehler auftritt, ist der zigbee2mqtt-Dienst gestartet? (Das kannst du in der Systemansicht überprüfen)

Hi @VonOx

Das ist meine compose-Datei:

version: '3'

services:
  gladys:
    image: gladysassistant/gladys:v4
    restart: always
    privileged: true
    network_mode: host
    environment:
      NODE_ENV: production
      SQLITE_FILE_PATH: /var/lib/gladysassistant/gladys-production.db
    volumes:
      - /data/myhub/gladysassistant:/var/lib/gladysassistant
      - /var/run/docker.sock:/var/run/docker.sock
      - /dev:/dev
    ports:
      - '80:1443'
      - '443:1443'
      - '8080:8080'
  watchtower:
    image: containrrr/watchtower
    restart: always
    command: --cleanup --include-restarting
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock

Der zigbee2mqtt-Container läuft und funktioniert weiterhin einwandfrei. Ich kann auf http://gladys-ip:8080/#/dashboard zugreifen und die Geräte sehen. Aber Gladys erkennt nicht, dass er läuft. Es zeigt « Kein USB-Zigbee2mqtt-Dongle konfiguriert, bitte gehen Sie zu… » Dann klicke ich auf „Speichern“ und es funktioniert wieder.

Das sind die laufenden Container:

$ docker ps --all
CONTAINER ID   IMAGE                       COMMAND                  CREATED         STATUS         PORTS      NAMES
eb14c756a72c   gladysassistant/gladys:v4   "docker-entrypoint.s…"   6 minutes ago   Up 6 minutes              myhub_gladys_1
abcc0834603d   containrrr/watchtower       "/watchtower --clean…"   6 minutes ago   Up 6 minutes   8080/tcp   myhub_watchtower_1
322d22c2fa6a   koenkk/zigbee2mqtt:latest   "docker-entrypoint.s…"   3 days ago      Up 3 days                 gladys-z2m-zigbee2mqtt
eb10f041a2a2   eclipse-mosquitto:2         "/docker-entrypoint.…"   8 days ago      Up 8 days                 gladys-z2m-mqtt

Ich konnte das Problem nicht debuggen. @pierre-gilles, hast du Vorschläge?

Watchtower hat meinen Container « myhub_gladys_1 » heute neu gestartet, danach waren alle Geräte verschwunden.

Damit es funktioniert, musste ich zu /dashboard/integration/device/zigbee2mqtt/setup gehen und « Zigbee2MQTT aktivieren » ausschalten und wieder einschalten. Dadurch wurden « gladys-z2m-mqtt » und « gladys-z2m-zigbee2mqtt » neu gestartet und alles funktionierte wieder.

Wenn Gladys so versagt, kann ich immer noch auf http://:8080/#/dashboard zugreifen und alle Geräte ordnungsgemäß funktionieren sehen, also liegt das Problem nicht am Dongle oder am Mückchen/Zigbee2MQTT. Was kann ich tun, um Gladys stabiler zu machen?

Ich habe verstanden, dass ich, damit es funktioniert, eine POST-Anfrage an https://host/api/v1/service/zigbee2mqtt/connect senden muss, nachdem der Container neu gestartet wurde.

Gibt es eine Möglichkeit, Gladys dazu zu bringen, diesen Aufruf beim Start durchzuführen?

Gladys macht das bereits beim Start.

Ich kann dir vorschlagen, nicht Compose zu verwenden und der Dokumentation zu folgen. MQTT und Zigbee2mqtt werden außerhalb des Stacks erstellt (ich weiß nicht, ob das die Ursache ist). Compose hat hier keinen Mehrwert.

Du bist der Einzige mit diesem Problem.

naja, offensichtlich nicht auf eine Weise, die tatsächlich funktioniert.

Es ist buchstäblich nur das docker-compose-Äquivalent zu den Ausführungsbefehlen in der Dokumentation: Install Gladys Assistant with Docker | Gladys Assistant

Es hat für mich einen Wert, da ich alle meine Container auf diese Weise bereitstelle, über community.docker.docker_compose in Ansible.

Na und? Willst du damit sagen, dass Fehler nur untersucht werden, wenn mehr als eine Person sie findet?

Nein, das sage ich nicht.

Ich habe keine Ahnung, warum Sie das Problem haben. Der Hauptunterschied in Ihrer Konfiguration ist Ihre Bereitstellungsmethode (Ansible / Compose).

Ich versuche, die Ursache zu identifizieren.

Ich habe docker-compose aus der Gleichung entfernt.

Dieses Problem tritt weiterhin auf, wenn die Befehle « docker run » wie in der Dokumentation angegeben verwendet werden.

Wenn der Container gladys neu gestartet wird, geht die USB-Verbindung verloren: « Gladys ist an keinen Zigbee2mqtt USB Dongle angeschlossen. »

Was ist das Host-Betriebssystem?

Aus irgendeinem Grund kann Gladys nicht auf den Dongle zugreifen.

Der zigbee2mqtt-Dienst startet nicht, wenn der Container neu gestartet wird, da er als „manuell gestoppt“ markiert ist.

$ journalctl CONTAINER_NAME=gladys | grep -i zigbee2m
Oct 12 21:40:06 dpi02 b2c767401a3d[724]: 2022-10-12T21:40:06+0100 <info> service.startAll.js:30 () Service zigbee2mqtt wurde manuell gestoppt, daher wird es beim Start ignoriert
Oct 12 21:42:40 dpi02 b2c767401a3d[724]: 2022-10-12T21:42:40+0100 <info> init.js:47 () Zigbee2mqtt USB-Dongle an /dev/ttyUSB0 angeschlossen
Oct 12 21:42:40 dpi02 b2c767401a3d[724]: 2022-10-12T21:42:40+0100 <info> installMqttContainer.js:105 (Zigbee2mqttManager.installMqttContainer) MQTT-Broker-Container erfolgreich gestartet
Oct 12 21:42:40 dpi02 b2c767401a3d[724]: 2022-10-12T21:42:40+0100 <info> installZ2mContainer.js:73 (Zigbee2mqttManager.installZ2mContainer) Zigbee2mqtt-Container erfolgreich gestartet
Oct 12 21:42:40 dpi02 b2c767401a3d[724]: 2022-10-12T21:42:40+0100 <info> subscribe.js:12 (Zigbee2mqttManager.subscribe) Abonnieren des MQTT-Themas zigbee2mqtt/#

Der Log-Eintrag von init.js:47 erfolgt erst, wenn ich in der UI auf Einstellungen speichern klicke, was zwei Minuten nach dem Start des Containers erfolgt.

[edit] Die Plattform ist Raspberry Pi OS auf einem Pi v4

[edit2] Es scheint, dass die Service-Tabelle in der Datenbank seit langer Zeit nicht mehr aktualisiert wurde:

$ echo "select enabled, updated_at, status from t_service where name = 'zigbee2mqtt';"|sqlite3 gladys-production.db
1|2022-09-18 23:17:48.594 +00:00|STOPPED

Er läuft jetzt und funktioniert im Moment.

Also, ich habe die Seite /dashboard/settings/service gefunden und alle Dienste waren auf Gestoppt eingestellt. Ich verstehe nicht, warum überhaupt etwas funktioniert hat, aber egal. Ich habe Zigbee2mqtt auf Läuft geändert und jetzt startet der Dienst wie erwartet, wenn der Container neu startet.

Cool!

Ja, deshalb habe ich in meinem vorherigen Beitrag gefragt.

mein Fehler. Mir war nicht klar, dass der Dienst etwas anderes ist als die Option „Zigbee2mqtt aktivieren“ auf der Zigbee2mqtt-Konfigurationsseite. Ich habe eine ganze Weile Zigbee-Geräte in Gladys verwendet, ohne dass der Dienst lief!