Zigbee2mqtt : Image docker de test basée Gladys v4

Pourrais-tu afficher un peu plus des logs Gladys, notamment la partie où tu choisis ton dongle ?
Il devrait apparaître le nom du device choisi, il me semble.

Logs
WARNING: The requested image's platform (linux/amd64) does not match the detected host platform (linux/arm/v7) and no specific platform was requested

> gladys-server@ start:prod /src/server
> cross-env NODE_ENV=production node index.js

Initialising OpenZWave 1.6.1051 binary addon for Node.JS.
        OpenZWave Security API is ENABLED
        ZWave device db    : /usr/local/etc/openzwave
        User settings path : /src/server/services/zwave/node_modules/openzwave-shared/build/Release/../../
        Option Overrides : --Logging false --ConsoleOutput false --SaveConfiguration true
2021-01-15T14:34:10+0100 <info> init.js:38 (Zigbee2mqttManager.init) Zigbee2mqtt USB dongle not attached
2021-01-15T14:34:10+0100 <info> index.js:15 (Object.start) Starting Bluetooth service
2021-01-15T14:34:11+0100 <info> index.js:16 (Object.start) Starting zwave service
2021-01-15T14:34:11+0100 <info> service.start.js:40 (Service.start) Service zwave is not configured, so it was not started.
2021-01-15T14:34:11+0100 <info> index.js:19 (Object.start) Starting telegram service
2021-01-15T14:34:11+0100 <info> service.start.js:40 (Service.start) Service telegram is not configured, so it was not started.
2021-01-15T14:34:11+0100 <info> index.js:13 (Object.start) Starting usb service
2021-01-15T14:34:11+0100 <info> service.start.js:40 (Service.start) Service mqtt is not configured, so it was not started.
2021-01-15T14:34:11+0100 <info> index.js:20 (Object.start) Starting Open Weather service
2021-01-15T14:34:11+0100 <info> service.start.js:40 (Service.start) Service openweather is not configured, so it was not started.
2021-01-15T14:34:11+0100 <info> index.js:63 (Server.<anonymous>) Server listening on port 80
2021-01-15T14:34:53+0100 <info> init.js:49 () Zigbee2mqtt USB dongle attached to /dev/ttyUSB0
2021-01-15T14:34:54+0100 <info> init.js:49 () Zigbee2mqtt USB dongle attached to /dev/ttyUSB0
2021-01-15T14:34:54+0100 <info> installMqttContainer.js:32 (Zigbee2mqttManager.installMqttContainer) MQTT broker is being installed as Docker container...
2021-01-15T14:34:54+0100 <info> installMqttContainer.js:33 (Zigbee2mqttManager.installMqttContainer) Pulling eclipse-mosquitto:latest image...
2021-01-15T14:34:56+0100 <info> installMqttContainer.js:37 (Zigbee2mqttManager.installMqttContainer) Preparing broker environment...
2021-01-15T14:34:56+0100 <info> installMqttContainer.js:41 (Zigbee2mqttManager.installMqttContainer) Creating container...
2021-01-15T14:34:56+0100 <info> installMqttContainer.js:55 (Zigbee2mqttManager.installMqttContainer) Zigbee2MQTT MQTT broker is starting...
2021-01-15T14:35:01+0100 <info> installMqttContainer.js:61 (Zigbee2mqttManager.installMqttContainer) Creating user/pass...
2021-01-15T14:35:02+0100 <info> installMqttContainer.js:73 (Zigbee2mqttManager.installMqttContainer) Zigbee2MQTT MQTT broker is starting...
2021-01-15T14:35:07+0100 <info> installMqttContainer.js:77 (Zigbee2mqttManager.installMqttContainer) MQTT broker container successfully started
2021-01-15T14:35:07+0100 <info> installZ2mContainer.js:25 (Zigbee2mqttManager.installZ2mContainer) Zigbee2mqtt is being installed as Docker container...
2021-01-15T14:35:07+0100 <info> installZ2mContainer.js:26 (Zigbee2mqttManager.installZ2mContainer) Pulling koenkk/zigbee2mqtt:latest image...
2021-01-15T14:35:09+0100 <info> installZ2mContainer.js:29 (Zigbee2mqttManager.installZ2mContainer) Preparing Zigbee2mqtt environment...
2021-01-15T14:35:09+0100 <info> installZ2mContainer.js:35 (Zigbee2mqttManager.installZ2mContainer) Creating container...
2021-01-15T14:35:09+0100 <info> installZ2mContainer.js:43 (Zigbee2mqttManager.installZ2mContainer) Zigbee2mqtt successfully installed as Docker container
2021-01-15T14:35:09+0100 <info> installZ2mContainer.js:55 (Zigbee2mqttManager.installZ2mContainer) Zigbee2mqtt is starting...
2021-01-15T14:35:09+0100 <error> installZ2mContainer.js:74 (Zigbee2mqttManager.installZ2mContainer) Zigbee2mqtt container failed to start: Error: (HTTP code 500) server error - Cannot restart container bb25be6b4a4e0a5bd10398f720afa57e8fe08c017c1d34e50c8c594a4d82f45b: error gathering device information while adding custom device "/dev/ttyACM0": no such file or directory
    at /src/server/node_modules/docker-modem/lib/modem.js:257:17
    at getCause (/src/server/node_modules/docker-modem/lib/modem.js:287:7)
    at Modem.buildPayload (/src/server/node_modules/docker-modem/lib/modem.js:256:5)
    at IncomingMessage.<anonymous> (/src/server/node_modules/docker-modem/lib/modem.js:232:14)
    at IncomingMessage.emit (events.js:326:22)
    at endReadableNT (_stream_readable.js:1241:12)
    at processTicksAndRejections (internal/process/task_queues.js:84:21) {
  reason: 'server error',
  statusCode: 500,
  json: {
    message: 'Cannot restart container bb25be6b4a4e0a5bd10398f720afa57e8fe08c017c1d34e50c8c594a4d82f45b: error gathering device information while adding custom device "/dev/ttyACM0": no such file or directory'
  }
}
2021-01-15T14:35:09+0100 <error> index.js:14 (process.<anonymous>) unhandledRejection catched: Promise {
  <rejected> Error: (HTTP code 500) server error - Cannot restart container bb25be6b4a4e0a5bd10398f720afa57e8fe08c017c1d34e50c8c594a4d82f45b: error gathering device information while adding custom device "/dev/ttyACM0": no such file or directory
      at /src/server/node_modules/docker-modem/lib/modem.js:257:17
      at getCause (/src/server/node_modules/docker-modem/lib/modem.js:287:7)
      at Modem.buildPayload (/src/server/node_modules/docker-modem/lib/modem.js:256:5)
      at IncomingMessage.<anonymous> (/src/server/node_modules/docker-modem/lib/modem.js:232:14)
      at IncomingMessage.emit (events.js:326:22)
      at endReadableNT (_stream_readable.js:1241:12)
      at processTicksAndRejections (internal/process/task_queues.js:84:21) {
    reason: 'server error',
    statusCode: 500,
    json: {
      message: 'Cannot restart container bb25be6b4a4e0a5bd10398f720afa57e8fe08c017c1d34e50c8c594a4d82f45b: error gathering device information while adding custom device "/dev/ttyACM0": no such file or directory'
    }
  }
}
2021-01-15T14:35:09+0100 <error> index.js:15 (process.<anonymous>) Error: (HTTP code 500) server error - Cannot restart container bb25be6b4a4e0a5bd10398f720afa57e8fe08c017c1d34e50c8c594a4d82f45b: error gathering device information while adding custom device "/dev/ttyACM0": no such file or directory
    at /src/server/node_modules/docker-modem/lib/modem.js:257:17
    at getCause (/src/server/node_modules/docker-modem/lib/modem.js:287:7)
    at Modem.buildPayload (/src/server/node_modules/docker-modem/lib/modem.js:256:5)
    at IncomingMessage.<anonymous> (/src/server/node_modules/docker-modem/lib/modem.js:232:14)
    at IncomingMessage.emit (events.js:326:22)
    at endReadableNT (_stream_readable.js:1241:12)
    at processTicksAndRejections (internal/process/task_queues.js:84:21) {
  reason: 'server error',
  statusCode: 500,
  json: {
    message: 'Cannot restart container bb25be6b4a4e0a5bd10398f720afa57e8fe08c017c1d34e50c8c594a4d82f45b: error gathering device information while adding custom device "/dev/ttyACM0": no such file or directory'
  }
}

Je pense que ton soucis provient de la gestion des droits sous linux.
Gladys récupère bien ton nom de device (voir logs) mais n’arrive pas à mettre à jour le fichier services/zigbee2mqtt/docker/zigbee2mqtt-container.json.

On voit bien que PathOnHost reste à /dev/ttyACM0 dans le docker inspect.

Peux-tu faire un

docker exec -ti zigbee2mqtt ls -als ./services/zigbee2mqtt/docker/zigbee2mqtt-container.json

Non impossible car le conteneur n’est pas lancé (ne se lance pas).

docker exec -ti zigbee2mqtt ls -als ./services/zigbee2mqtt/docker/zigbee2mqtt-container.json
Error response from daemon: Container bb25be6b4a4e0a5bd10398f720afa57e8fe08c017c1d34e50c8c594a4d82f45b is not running

Pardon, c’est sur le container gladys qu’il faut lancer la commande

docker exec -ti gladysDEBUG ls -als ./services/zigbee2mqtt/docker/zigbee2mqtt-container.json
     4 -rw-r--r--    1 root     root           646 Jan 15 14:35 ./services/zigbee2mqtt/docker/zigbee2mqtt-container.json
pi@gladys:~ $ docker exec -ti gladysDEBUG cat ./services/zigbee2mqtt/docker/zigbee2mqtt-container.json
{
  "name": "zigbee2mqtt",
  "Image": "koenkk/zigbee2mqtt:latest",
  "ExposedPorts": {},
  "HostConfig": {
    "Binds": ["/var/lib/gladysassistant/zigbee2mqtt/z2m:/app/data"],
    "PortBindings": {},
    "RestartPolicy": {
      "Name": "always"
    },
    "NetworkMode": "host",
    "Dns": [],
    "DnsOptions": [],
    "DnsSearch": [],
    "BlkioWeightDevice": [],
    "Devices": [
      {
        "PathOnHost": "/dev/ttyACM0",
        "PathInContainer": "/dev/ttyACM0",
        "CgroupPermissions": "rwm"
      }
    ]
  },
  "NetworkDisabled": false,
  "AttachStdin": false,
  "AttachStdout": false,
  "AttachStderr": false,
  "Tty": false
}

Je pense qu’une partie de ma PR est correcte : celle ou je modifie la variable avant de lancer les conteneurs.

Sinon l’exécution du sed qui modifie le fichier de conf n’est pas prise en compte, car le import du début récupère le contenu du fichier avant sa modification.

      // Update config, for futur starts
      await exec(`sed -i 's%"PathOnHost":.*%"PathOnHost": "${driverPath}",%' ./services/zigbee2mqtt/docker/zigbee2mqtt-container.json`);
      await exec(`sed -i 's%"PathInContainer":.*%"PathInContainer": "${driverPath}",%' ./services/zigbee2mqtt/docker/zigbee2mqtt-container.json`);
      // Update containerDescriptor var to reflect the previous changes
      containerDescriptor.HostConfig.Devices[0].PathOnHost = driverPath;
      containerDescriptor.HostConfig.Devices[0].PathInContainer = driverPath;

https://github.com/R6n0/Gladys/pull/2/commits/83b97124acd4a4b10475f9913f1d13f4413f3f7e

Ok. Possible. Mais étonnant de ne jamais avoir eu le soucis, avec plusieurs dongles.
Je retesterai chez moi.

Par contre, la DB est obligatoire (tu disais “tester sans” un peu plus haut) et donc -v /var/lib/gladysassistant:/var/lib/gladysassistant aussi puisque le device est stocké dedans, et ensiute, récupéré dans Gladys pour mettre à jour le fichier de config.

Testé à nouveau, même problème et même erreur.

De ton côté pour refaire le test, n’oublie pas de supprimer ou mettre des valeurs par défaut dans le fichier de conf qui est sensé être modifié par le code avant le lancement.
C’est comme ça que j’ai fait avec le fichier ./services/zigbee2mqtt/docker/zigbee2mqtt-container.json et je me suis rendu compte qu’il était utilisé avant sa modification.

ça doit marcher chez toi car tu as déjà modifié ce fichier par le passé, qui est présent sur l’OS et pas seulement dans le conteneur.

Ce fichier n’est pas partagé avec l’OS. Il doit uniquement se trouver dans le container.
A suivre…

As-tu réussi à renouveler le problème que j’ai rencontré ?

Bonsoir,
je suis nouveau dans la communauté Gladys, je viens de quitter Domoticz pour Gladys avec mon matériel Zigbee (Xiaomi, Ikea et Blitzwoif).
J’ai un sniffer CC2531 monté sur un Raspberry pi 3.
D’abord, merci pour l’intégration de Zigbee2mqtt à Gladys. Sinon j’ai bien réussi à intégrer mes capteurs de température et de porte Xiaomi, mais je n’ai pas encore trouvé comment faire avec mon ampoule Ikea (LED1736G9) ni la prise connecté E1603 mais j’ai bien le Switch E1743 d’intégré, par contre rien pour la prise BW-SHP13.
Je ne suis pas programmateur et je suis en phase découverte.
Je cherche aussi à voir comment faire un relevé de données (température, humidité…) pour tracer une courbe.

Hello :slight_smile:

J’ai travaillé aujourd’hui sur la partie Zigbee2MQTT initiée par @Reno :rocket:

Fait :

  • copier la branche de Reno, mettre à jour depuis master et regrouper les commits
  • corriger le souci de device différent de /dev/ttyACM0 (merci @Reno et @lmilcent)
  • corriger la prise en charge des devices sans led
  • générer une nouvelle image pour tester
  • ajouter un prefix aux containers (gladys-z2m-)
  • adapter affichage mobile et tablette

A faire :

  • donner la possibilité d’utiliser un container MQTT deja installé
  • gérer le cas “J’ai créé mes containers mais je veux changer de device”
  • finir les tests et vérifier la couverture
  • corriger nouveaux bugs

Le code est disponible ici : Zigbee2mqtt service by cicoub13 · Pull Request #1 · cicoub13/Gladys · GitHub
L’image ici : Docker Hub

Pour tester, lancez un nouveau container Docker sur votre Raspberry Pi avec un port et une base différents :

docker run -d \
--log-opt max-size=10m \
--restart=always \
--privileged \
--network=host \
--name gladys-dev-zigbee2mqtt \
-e NODE_ENV=production \
-e SERVER_PORT=1080 \
-e TZ=Europe/Paris \
-e SQLITE_FILE_PATH=/var/lib/gladysassistant/gladys-zigbee2mqtt.db \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /var/lib/gladysassistant:/var/lib/gladysassistant \
-v /dev:/dev \
-v /run/udev:/run/udev:ro \
cicoub13/gladys:dev-zigbee2mqtt

PS : je pousserai une PR sur le repo officiel Gladys quand on aura avancé sur le fait de contribuer à plusieurs sur une branche OU quand j’aurai terminé les points précédents.

Je suis preneur de tests + retours.

1 « J'aime »

Salut,

Génial merci ! Le service est en attente pour beaucoup de monde moi y compris.
Je test l’image ce soir :slight_smile:

Moi je mettrai gladys effectivement mais aussi le nom du service. On peut imaginer plus tard avoir deux docker identiques, mais pour deux services différents. Qu’en penses tu ?

Je peux aider sur cette partie au besoin :slight_smile:

Génial, merci beaucoup @Reno et @cicoub13, c’est du boulot !!
Je teste ça ce soir je pense, je l’attendais avec Impatience ! :star_struck:

wow, ça avance super bien! :smiley: :star_struck:

Euh n’attend pas ces chantiers là, si tu veux finir la PR avec l’aide de quelqu’un d’autre, tu peux donner l’accès à ton fork à quelqu’un d’autre :slight_smile:

1 « J'aime »

@cicoub13 tu as pu utiliser le flow github pour build l’image depuis ton fork ?

Edit: First try ( J’ai éditer la commande docker run de ton post , il faut udev sinon rien dans la liste des dongles )

021-01-31T10:52:23+0100 <info> installMqttContainer.js:32 (Zigbee2mqttManager.installMqttContainer) MQTT broker is being installed as Docker container...
2021-01-31T10:52:23+0100 <info> installMqttContainer.js:33 (Zigbee2mqttManager.installMqttContainer) Pulling eclipse-mosquitto:latest image...
2021-01-31T10:52:24+0100 <info> installMqttContainer.js:37 (Zigbee2mqttManager.installMqttContainer) Preparing broker environment...
2021-01-31T10:52:24+0100 <info> installMqttContainer.js:41 (Zigbee2mqttManager.installMqttContainer) Creating container...
2021-01-31T10:52:25+0100 <info> installMqttContainer.js:55 (Zigbee2mqttManager.installMqttContainer) Zigbee2MQTT MQTT broker is starting...
2021-01-31T10:52:30+0100 <info> installMqttContainer.js:61 (Zigbee2mqttManager.installMqttContainer) Creating user/pass...
2021-01-31T10:52:31+0100 <info> installMqttContainer.js:73 (Zigbee2mqttManager.installMqttContainer) Zigbee2MQTT MQTT broker is starting...
2021-01-31T10:52:36+0100 <info> installMqttContainer.js:77 (Zigbee2mqttManager.installMqttContainer) MQTT broker container successfully started
2021-01-31T10:52:36+0100 <info> installZ2mContainer.js:54 (Zigbee2mqttManager.installZ2mContainer) Zigbee2mqtt is starting...
2021-01-31T10:52:36+0100 <info> installZ2mContainer.js:66 (Zigbee2mqttManager.installZ2mContainer) Zigbee2mqtt successfully started
2021-01-31T10:52:37+0100 <info> connect.js:23 (MqttClient.<anonymous>) Connected to MQTT container mqtt://localhost:1884
2021-01-31T10:52:37+0100 <info> subscribe.js:12 (Zigbee2mqttManager.subscribe) Subscribing to MQTT topic zigbee2mqtt/#

image

J’ai déjà un conteneur qui se nomme zigbee2mqtt.

Yes ici : fix(zigbee2mqtt): Take USB Device path · cicoub13/Gladys@fa22444 · GitHub
En renseignant les secrets Docker et en lançant manuellement le Build Gladys dev images sur ma branche :ok_hand:

1 « J'aime »

Un truc à ajouter aussi dans la to-do list, le fait de pouvoir renseigner un Server mqtt si on veut pas que gladys gère cette partie.