Zigbee2mqtt : Image docker de test basée Gladys v4

D’après ce que je vois dans tes logs, il n’y a pas d’erreur sur l’installation et le démarrage des containers.
C’est étonnant puisque tu dis avoir déjà un container avec ce nom.

Le broker mqtt est lancé sur le port 1884 pour ne pas entrer en conflit avec celui du service MQTT.
Si j’ai bien compris, @pierre-gilles préférait un broker séparé.

Du coup, pour ton problème de connexion, peux-tu regarder les logs des 2 containers du service ?

J’ai oublié de vous dire qu’on peut voir physiquement si la configuration du service a bien fonctionné : au démarrage, la led du dongle devrait s’éteindre.

Autre chose, il y a un bonus caché dans un des onglets. Un bon point à celui qui le trouve… :wink:

Hello, d’abord je souhaite te remercier pour ton taff, ça va être cool de pouvoir se passer d’une passerelle Xiaomi :slight_smile:

J’ai cependant un problème de droit sur mon installation, le conteneur MQTT démare bien mais redémarre en boucle, car il n’arrive pas à ouvrir son fichier de conf (log du conteneur mqtt : 1605448659: Error: Unable to open config file /mosquitto/config/mosquitto.conf.).
J’ai pourtant bien le mapping $DATA_PATH/gladys_zigbee:/var/lib/gladysassistant dans mes volumes et j’ai également forcé Gladys a utilisé l’user root (user: “0:0”) dans mon fichier docker-compose mais rien n’y fait…

Une idée ?

Tu dis utiliser un docker-compose. Pourrais-tu le partager ?

Vu le problème, le fichier de configuration du broker n’a pas été généré.
Pourrais-tu également donner ton log Gladys, comme l’a fait Vonox ?

OK je regarde ça ce soir, mais le problème c’est que comme le conteneur existe déjà, il n’est pas configuré pour le conteneur mqtt créé par le service.

Je te tiens au jus

Le fichier de config semble bien généré sur mon hote (en l’occurrence HypriotOS) avec le contenu suivant :

port 1884
allow_anonymous false
# connection_messages false
allow_duplicate_messages true
password_file /mosquitto/config/mosquitto.passwd

Les logs de Gladys indique ceci :

2020-11-15T14:52:29+0100 <info> index.js:63 (Server.<anonymous>) Server listening on port 7124
2020-11-15T14:54:34+0100 <info> init.js:49 () Zigbee2mqtt USB dongle attached to /dev/ttyACM0
2020-11-15T14:54:41+0100 <info> init.js:49 () Zigbee2mqtt USB dongle attached to /dev/ttyACM0
2020-11-15T14:54:41+0100 <info> installMqttContainer.js:30 (Zigbee2mqttManager.installMqttContainer) MQTT broker is being installed as Docker container...
2020-11-15T14:54:41+0100 <info> installMqttContainer.js:31 (Zigbee2mqttManager.installMqttContainer) Pulling eclipse-mosquitto:latest image...
2020-11-15T14:54:43+0100 <info> installMqttContainer.js:34 (Zigbee2mqttManager.installMqttContainer) Preparing broker environment...
2020-11-15T14:54:43+0100 <info> installMqttContainer.js:38 (Zigbee2mqttManager.installMqttContainer) Creating container...
2020-11-15T14:54:43+0100 <info> installMqttContainer.js:52 (Zigbee2mqttManager.installMqttContainer) Zigbee2MQTT MQTT broker is starting...
2020-11-15T14:54:49+0100 <info> installMqttContainer.js:58 (Zigbee2mqttManager.installMqttContainer) Creating user/pass...
2020-11-15T14:54:49+0100 <error> installMqttContainer.js:73 (Zigbee2mqttManager.installMqttContainer) MQTT broker container failed to start: Error: (HTTP code 409) unexpected - Container 759eade851c945c48f396ace17a720ae1494882d4fbce9deeee5f6284b1c38de is restarting, wait until the container is running 
    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:1223:12)
    at processTicksAndRejections (internal/process/task_queues.js:84:21) {
  reason: undefined,
  statusCode: 409,
{
    message: 'Container 759eade851c945c48f396ace17a720ae1494882d4fbce9deeee5f6284b1c38de is restarting, wait until the container is running'
  }
}
2020-11-15T14:54:49+0100 <error> index.js:14 (process.<anonymous>) unhandledRejection catched: Promise {
  <rejected> Error: (HTTP code 409) unexpected - Container 759eade851c945c48f396ace17a720ae1494882d4fbce9deeee5f6284b1c38de is restarting, wait until the container is running 
      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:1223:12)
      at processTicksAndRejections (internal/process/task_queues.js:84:21) {
    reason: undefined,
    statusCode: 409,
    json: {
      message: 'Container 759eade851c945c48f396ace17a720ae1494882d4fbce9deeee5f6284b1c38de is restarting, wait until the container is running'
    }
  }
}
2020-11-15T14:54:49+0100 <error> index.js:15 (process.<anonymous>) Error: (HTTP code 409) unexpected - Container 759eade851c945c48f396ace17a720ae1494882d4fbce9deeee5f6284b1c38de is restarting, wait until the container is running 
    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:1223:12)
    at processTicksAndRejections (internal/process/task_queues.js:84:21) {
  reason: undefined,
  statusCode: 409,
{
    message: 'Container 759eade851c945c48f396ace17a720ae1494882d4fbce9deeee5f6284b1c38de is restarting, wait until the container is running'
  }
}
2020-11-15T14:56:41+0100 <info> init.js:49 () Zigbee2mqtt USB dongle attached to /dev/ttyACM0
2020-11-15T14:56:41+0100 <info> installMqttContainer.js:83 (Zigbee2mqttManager.installMqttContainer) Zigbee2MQTT MQTT broker is starting...
2020-11-15T14:56:46+0100 <info> installMqttContainer.js:95 (Zigbee2mqttManager.installMqttContainer) MQTT broker container successfully started
2020-11-15T14:56:47+0100 <info> installZ2mContainer.js:29 (Zigbee2mqttManager.installZ2mContainer) Zigbee2mqtt is being installed as Docker container...
2020-11-15T14:56:47+0100 <info> installZ2mContainer.js:30 (Zigbee2mqttManager.installZ2mContainer) Pulling koenkk/zigbee2mqtt:latest image...
2020-11-15T14:56:49+0100 <info> installZ2mContainer.js:33 (Zigbee2mqttManager.installZ2mContainer) Preparing Zigbee2mqtt environment...
2020-11-15T14:56:49+0100 <info> installZ2mContainer.js:39 (Zigbee2mqttManager.installZ2mContainer) Creating container...
2020-11-15T14:56:49+0100 <info> installZ2mContainer.js:47 (Zigbee2mqttManager.installZ2mContainer) Zigbee2mqtt successfully installed as Docker container
2020-11-15T14:56:49+0100 <info> installZ2mContainer.js:59 (Zigbee2mqttManager.installZ2mContainer) Zigbee2mqtt is starting...
2020-11-15T14:56:54+0100 <info> installZ2mContainer.js:71 (Zigbee2mqttManager.installZ2mContainer) Zigbee2mqtt successfully started
2020-11-15T14:56:55+0100 <warn> connect.js:41 (MqttClient.<anonymous>) Disconnected from MQTT server

Mon docker-compose.yml ressemble à ceci :

version: "2.4"

services:
    gladys:
        image: r6n0/gladys-zigbee2mqtt:latest
        container_name: Gladys_Zigbee2Mqtt
        restart: always
        user: "0:0"
        privileged: true
        # depends_on: 
        #   - zigbee2mqttAssistant
        #   - rhasspy
        logging:
          options:
            max-size: "10m"
        network_mode: host
        dns:
          - 1.1.1.1
          - 1.0.0.1
        # ports:
        #   - $GLADYS_PORT:$GLADYS_PORT
        environment:
          - "TZ=${TZ}"
          - "NODE_ENV=production"
          - "SERVER_PORT=$GLADYS_PORT"
          - "SQLITE_FILE_PATH=/var/lib/gladysassistant/gladys-production.db"
        volumes:
          - "/etc/timezone:/etc/timezone:ro"
          - "/etc/localtime:/etc/localtime:ro"
          - "/var/run/docker.sock:/var/run/docker.sock"
          - "/run/udev:/run/udev:ro"
          - "/dev:/dev"
          - "$DATA_PATH/gladys_zigbee:/var/lib/gladysassistant"
        labels:
          - "hidden_${COMPOSE_PROJECT_NAME}"
          - "com.centurylinklabs.watchtower.enable=true"
          - "traefik.enable=false"

Avec les variables d’environnement suivantes :

COMPOSE_PROJECT_NAME=Gladys

#-----------------------------------------------------
## GLOBAL
#-----------------------------------------------------
PUID=0
PGID=0

TZ=Europe/Paris

CONFIG_PATH=./.config
LOG_PATH=/var/data/logs/gladys
DATA_PATH=/var/data/docker/gladys
#-----------------------------------------------------


#-----------------------------------------------------
## Gladys
#-----------------------------------------------------
GLADYS_PORT=7124
#-----------------------------------------------------

Je pense que ça vient de là également.
Par contre, Gladys aurait dû se connecter au broker…

Ce doit être une question de droits.
Vérifie que les droits sur le fichier /var/lib/gladysassistant/zigbee2mqtt/mqtt/mosquitto.conf.
Dans le container mqtt, l’utilisateur n’est pas root mais mosquitto. Ce pourrait être le problème.

Les droits sur le fichier sont bien en root/root et avec la valeur 644 que j’ajoute ou non dans mon docker-compose la valeur user: "0:0".

Du coup il y aurait un moyen de spécifier au conteneur MQTT l’utilisateur à utiliser ? (si il le même que celui de Gladys ça faciliterait la chose je pense et ça éviterai ce genre de soucis à l’avenir).

EDIT : ou bien d’utiliser une image alternative ?
Dans mon cas sur des test précédant j’utilisais l’image eclipse-mosquitto qui est si mes souvenirs sont bons en root par défaut (même si c’est pas top forcément niveau sécu…)

D’un point de vue sécurité, il n’est absolument pas conseillé de lancer les containers en tant que root !
Pourquoi lances-tu Gladys de cette façon ?
L’exemple de la doc ne le fait pas. Par contre, l’option privileged est utilisée.

C’est bien l’image eclipse-mosquitto qui est lancée et elle n’utilise pas l’utilisateur root. Aucune image bien faite, d’ailleurs…

Pour l’utilisation du root, c’était juste un test (ce n’est pas comme ça que je le lance habituellement) pour voir si l’ajout d’un user changeait les droits sur le fichier de config de mosquitto mais cela ne change rien.

Ça doit donc venir de HypriotOS alors, puisque l’ensemble des fichiers de Gladys sont créés par root…
Capture
Dommage j’aimais bien cette distri légère avec un simple docker dessus…

On peut essayer quand même, ça m’intéresse.
Pourrais-tu lister les droits dans le répertoire Zigbee2mqtt ?

Yes les voici :

$ ls -al /var/data/docker/gladys/gladys_zigbee/zigbee2mqtt/
total 12
drwxr-xr-x 3 root root 4096 nov.  15 17:04 .
drwxr-xr-x 3 root root 4096 nov.  15 17:04 ..
drwxr-xr-x 2 root root 4096 nov.  15 17:04 mqtt
HypriotOS/armv7: pirate@black-pearl in ~/Docker/Gladys_Rhasspy_Zigbee
$ ls -al /var/data/docker/gladys/gladys_zigbee/zigbee2mqtt/mqtt/
total 12
drwxr-xr-x 2 root root 4096 nov.  15 17:04 .
drwxr-xr-x 3 root root 4096 nov.  15 17:04 ..
-rw-r--r-- 1 root root  139 nov.  15 17:04 mosquitto.conf
-rw-r--r-- 1 root root    0 nov.  15 17:04 mosquitto.passwd

Normalement, le propriétaire du répertoire mqtt devrait être 1883:1883 sur l’hôte et mosquitto:mosquitto dans le container.
Il faut que tu relances le container sans l’utilisateur root mais avant, il faut nettoyer ce qui a été généré par l’install précédente :

  • Supprimer les fichers et répertoires :

rm -r /var/lib/gladysassistant/zigbee2mqtt

  • Supprimer les containers z2m-mqtt et zigbee2mqtt.

Il s’agit bien du conteneur sans l’utilisateur root et avec nettoyage au préalable, je pense que par défaut sur HypriotOS, l’utilisateur qui a les droits sur Docker est root, j’ai beau lancer n’importe quel conteneur, les données en persistances sont toujours root…

Me voilà de retour

J’ai pas pu tester plus car il faudra gérer cette erreur ( renvoyé l’info dans l’UI )

2020-11-15T18:05:02+0100 <error> installMqttContainer.js:43 (Zigbee2mqttManager.installMqttContainer) MQTT broker failed to install as Docker container: Error: (HTTP code 500) server error - toomanyrequests: You have reached your pull rate limit. You may increase the limit by authenticating and upgrading: https://www.docker.com/increase-rate-limit 
    at /src/server/node_modules/docker-modem/lib/modem.js:257:17
    at IncomingMessage.<anonymous> (/src/server/node_modules/docker-modem/lib/modem.js:284:9)
    at IncomingMessage.emit (events.js:326:22)
    at endReadableNT (_stream_readable.js:1223:12)
    at processTicksAndRejections (internal/process/task_queues.js:84:21) {
  reason: 'server error',
  statusCode: 500,
  json: null
}

ça ne m’était pas encore arrivé, quoi qu’il en soit j’avais pas l’info qu’un truc se passer mal :wink:

Tu peux faire un “docker login” sur l’hôte de ton docker, ça permet de se connecter au Docker Hub qui maintenant nécessite une authentification car il y a une limite sur le nombre de pull depuis ce Docker Hub…

Oui oui je sais, suis pas pressé :beer: :slight_smile: ( le login ne change rien )

J’ai dû bricoler pour avoir les 3 conteneurs qui tournent, impossible d’avoir le conteneur zigbee2mqtt ( j’ai du virer les pass sur la conf mqtt pour pouvoir utiliser mon ancien conteneur , bref )

Du coup normalement c’est bon car coté status

image

Par contre dans les logs:

Edit: ça a fini par fonctionner

Bien jouer @Reno , j’ai jamais été aussi content de voir mes sensors sur le dashboard

image

2 « J'aime »

Je recois ma clé demain hate de tester tout ca :slight_smile: