Bonjour,
Comme promis, voici un tutoriel afin de connecter une clé SMLIGHT à Gladys via le réseau et non via USB car sinon on perd tout l’intérêt de cette clé en la branchant en USB ![]()
Gladys ne prenant en charge que le mode USB @pierre-gilles arrête moi si je me trompe
, je suis partie sur une installation avec un MQTT et Z2M externe à Gladys.
Cela pourrait peut-être faire l’objet d’une demande de fonctionnalité, qu’en penses-tu @pierre-gilles ?
Ici pour z2m en https j’utilise le port 443 mais pour éviter tout conflit si vous décider de tout installer sur la même machine il faudrait modifier par le port 4343 par exemple ![]()
J’avais déjà fais un tuto complet sur HAOS à l’époque ou je l’utilisais que vous pouvez retrouver ici :
Installation Mosquitto (Mqtt)
Installer une VM sous ubuntu 24.04, mettez la complétement à jour et lancez les commandes suivantes :
Pour installer docker :
curl -sSL https://get.docker.com/ | CHANNEL=stable sh
systemctl enable --now docker
Ajouter un utilisateur docker_mosquitto par exemple :
adduser docker_mosquitto
Récuperer son ID : (Ici 1002)
cat /etc/passwd [ grep docker_mosquitto

Créer le dossier mosquitto dans /opt
mkdir /opt/mosquitto
Créer le fichier docker-compose.yml avec le contenu suivant : (Remplacer 1002 par les ID que l’on a récupéré juste avant)
services:
mosquitto:
image: eclipse-mosquitto:2.0.22
container_name: mosquitto
restart: unless-stopped
user: "1002:1002"
ports:
- "1883:1883" # MQTT
- "8883:8883" # MQTTS (secure)
- "9001:9001" # WebSockets
volumes:
- ./mosquitto/config:/mosquitto/config
- ./mosquitto/data:/mosquitto/data
- ./mosquitto/log:/mosquitto/log
- /etc/localtime:/etc/localtime:ro
- /etc/letsencrypt/live/mqtt.xxx.local.srv-home.fr/chain.pem:/etc/letsencrypt/live/mqtt.xxx.local.srv-home.fr/chain.pem:ro
- /etc/letsencrypt/live/mqtt.xxx.local.srv-home.fr/privkey.pem:/etc/letsencrypt/live/mqtt.xxx.local.srv-home.fr/privkey.pem:ro
- /etc/letsencrypt/live/mqtt.xxx.local.srv-home.fr/cert.pem:/etc/letsencrypt/live/mqtt.xxx.local.srv-home.fr/cert.pem:ro
Créer un dossier mosquitto et les sous dossiers et appliquer les droits : (Celui-ci contiendra la configuration les datas et les logs)
mkdir /opt/mosquitto/mosquitto
mkdir /opt/mosquitto/mosquitto/data
mkdir /opt/mosquitto/mosquitto/config
mkdir /opt/mosquitto/mosquitto/log
touch mkdir /opt/mosquitto/mosquitto/log/mosquitto.log
chown -R 1002:1002 /opt/mosquitto/mosquitto
Créer le fichier de config dans /opt/mosquitto/mosquitto/config/mosquitto.conf
persistence true
persistence_location /mosquitto/data/
log_dest file /mosquitto/log/mosquitto.log
listener 1883 localhost
allow_anonymous false
#password_file /mosquitto/config/passwd
tls_version tlsv1.3
listener 8883
certfile /etc/letsencrypt/live/mqtt.xxx.local.srv-home.fr/cert.pem
cafile /etc/letsencrypt/live/mqtt.xxx.local.srv-home.fr/chain.pem
keyfile /etc/letsencrypt/live/mqtt.xxx.local.srv-home.fr/privkey.pem
listener 9001
protocol websockets
certfile /etc/letsencrypt/live/mqtt.xxx.local.srv-home.fr/cert.pem
cafile /etc/letsencrypt/live/mqtt.xxx.local.srv-home.fr/chain.pem
keyfile /etc/letsencrypt/live/mqtt.xxx.local.srv-home.fr/privkey.pem
Activez le SSL : (A adapter en fonction du plugin que vous utilisez pour récupérer le certificat de votre nom de domaine) Ici il s’agit d’un exemple avec infomaniak
apt install certbot
apt install python3-pip
pip install certbot-dns-infomaniak
export INFOMANIAK_API_TOKEN=xxx
certbot certonly \
--authenticator dns-infomaniak \
--server https://acme-v02.api.letsencrypt.org/directory \
--agree-tos \
--rsa-key-size 4096 \
-d 'mqtt.xxx.local.srv-home.fr'
Par défaut, certbot installe un service qui renouvelle périodiquement ses certificats automatiquement. Pour ce faire, la commande doit connaître la clé API, sinon elle échouera silencieusement.
Afin d’activer le renouvellement automatique de vos certificats génériques, vous devrez modifier /lib/systemd/system/certbot.service. Ajoutez-y la ligne suivante dans Service, en remplaçant <YOUR_API_TOKEN> par votre jeton :
Environment="INFOMANIAK_API_TOKEN=<YOUR_API_TOKEN>"
Ensuite ouvrez le fichier de config
nano /etc/letsencrypt/renewal/xxx.conf
Ajouter
renew_hook = docker restart mosquitto
chmod -R 755 /etc/letsencrypt/live
chmod -R 755 /etc/letsencrypt/archive
Lancer le container
cd /opt/mosquitto
docker compose up -d
Vous pouvez voir les logs du container docker :
docker logs mosquitto -f
Activer l’authentification (Remplacer username par un utilisateur, par exemple « mqttuser »
docker exec -it mosquitto mosquitto_passwd -c /mosquitto/config/passwd username
Décommenter la ligne « password_file /mosquitto/config/passwd » dans le fichier « /opt/mosquitto/mosquitto/config/mosquitto.conf » ce qui donner maintenant
persistence true
persistence_location /mosquitto/data/
log_dest file /mosquitto/log/mosquitto.log
listener 1883 localhost
allow_anonymous false
password_file /mosquitto/config/passwd
tls_version tlsv1.3
listener 8883
certfile /etc/letsencrypt/live/mqtt.xxx.local.srv-home.fr/cert.pem
cafile /etc/letsencrypt/live/mqtt.xxx.local.srv-home.fr/chain.pem
keyfile /etc/letsencrypt/live/mqtt.xxx.local.srv-home.fr/privkey.pem
listener 9001
protocol websockets
certfile /etc/letsencrypt/live/mqtt.xxx.local.srv-home.fr/cert.pem
cafile /etc/letsencrypt/live/mqtt.xxx.local.srv-home.fr/chain.pem
keyfile /etc/letsencrypt/live/mqtt.xxx.local.srv-home.fr/privkey.pem
Relancer ensuite le container :
docker restart mosquitto
Vous pourrez ensuite renseigner ce login dans Gladys et juste après dans zigbee2mqtt ![]()
Installation Zigbee2mqtt
Installer une VM sous ubuntu 24.04, mettez la complétement à jour et suivre la procédure suivante :
Linux Docker | Zigbee2MQTT
Pour installer docker :
curl -sSL https://get.docker.com/ | CHANNEL=stable sh
systemctl enable --now docker
Voici mon fichier docker-compose.yml :
services:
zigbee2mqtt:
container_name: zigbee2mqtt
image: koenkk/zigbee2mqtt:2.8.0
restart: unless-stopped
volumes:
- ./data:/app/data
- /run/udev:/run/udev:ro
- /etc/localtime:/etc/localtime:ro
- /etc/letsencrypt/live/z2m.xxx.local.srv-home.fr/fullchain.pem:/etc/letsencrypt/live/z2m.xxx.local.srv-home.fr/fullchain.pem:ro
- /etc/letsencrypt/live/z2m.xxx.local.srv-home.fr/privkey.pem:/etc/letsencrypt/live/z2m.xxx.local.srv-home.fr/privkey.pem:ro
# devices:
# - /dev/serial/by-id/usb-Silicon_Labs_Sonoff_Zigbee_3.0_USB_Dongle_Plus_0001-if00-port0:/dev/serial/by-id/usb-Silicon_Labs_Sonoff_Zigbee_3.0_USB_Dongle_Plus_0001-if00-port0
ports:
- "443:443" # Port externe 443 → port interne 443
environment:
- TZ=Europe/Paris
networks:
- z2m_net
networks:
z2m_net:
driver: bridge
Voici mon fichier /opt/z2m/data/configuration.yaml à titre d’exemple, il faut modifier le auth_token qui vous permettra de vous connecter à l’interface web ainsi que le mot de passe de l’utilisateur z2m que l’on a mis précédemment lors de l’installation de MQTT
homeassistant:
enabled: false
mqtt:
base_topic: zigbee2mqtt
server: mqtts://mqtt.xxx.local.srv-home.fr:8883
user: mqttuser
password: achanger
keepalive: 60
reject_unauthorized: true
version: 4
include_device_information: true
serial:
port: tcp://192.168.xx.xx:7638
baudrate: 460800
adapter: zstack
disable_led: false
advanced:
pan_id: GENERATE
network_key: GENERATE
channel: 25
homeassistant_legacy_entity_attributes: false
legacy_api: false
legacy_availability_payload: false
log_level: info
log_syslog:
app_name: Zigbee2MQTT
eol: /n
host: localhost
localhost: localhost
path: /dev/log
pid: process.pid
port: 514
protocol: udp4
type: '5424'
last_seen: ISO_8601
frontend:
enabled: true
package: zigbee2mqtt-windfront
port: 443
host: 0.0.0.0
url: https://z2m.xxx.local.srv-home.fr
ssl_cert: /etc/letsencrypt/live/z2m.xxx.local.srv-home.fr/fullchain.pem
ssl_key: /etc/letsencrypt/live/z2m.xxx.local.srv-home.fr/privkey.pem
auth_token: achanger
Remplacer ceci par l’IP de votre clé et n’oubliez pas de changer auth_token et password
port: tcp://192.168.xx.xx:7638
Activer le SSL : (A adapter en fonction du plugin que vous utilisez pour récupérer le certificat de votre nom de domaine) Ici il s’agit d’un exemple avec infomaniak
apt install certbot
apt install python3-pip
pip install certbot-dns-infomaniak
export INFOMANIAK_API_TOKEN=xxx
certbot certonly \
--authenticator dns-infomaniak \
--server https://acme-v02.api.letsencrypt.org/directory \
--agree-tos \
--rsa-key-size 4096 \
-d 'z2m.xxx.local.srv-home.fr'
Par défaut, certbot installe un service qui renouvelle périodiquement ses certificats automatiquement. Pour ce faire, la commande doit connaître la clé API, sinon elle échouera silencieusement.
Afin d’activer le renouvellement automatique de vos certificats génériques, vous devrez modifier /lib/systemd/system/certbot.service. Ajoutez-y la ligne suivante dans Service, en remplaçant <YOUR_API_TOKEN> par votre jeton :
Environment="INFOMANIAK_API_TOKEN=<YOUR_API_TOKEN>"
nano /etc/letsencrypt/renewal/z2m.xxx.local.srv-home.fr
Ajouter (Si vous avez une astuce pour intégrer un reload je suis preneur ![]()
renew_hook = docker restart zigbee2mqtt
chmod -R 755 /etc/letsencrypt/live
chmod -R 755 /etc/letsencrypt/archive
Dans le fichier /etc/systemd/system/zigbee2mqtt.service j’ai du remplacer User=pi par User=root. J’e n’ai pas trouvé de moyen de faire autrement pour le moment mais si vous avez une idée pour le faire tourner avec un utilisateur avec moins de droits, je suis preneur également ![]()
Lancer le container
cd /opt/z2m
docker compose up -d
Zigbee2mqtt doit être maintenant disponible à l’adresse https://z2m.xxx.local.srv-home.fr en indiquant bien le mot de passe que vous avez mis dans auth_token
Ne pas utiliser le SSL/TLS
Vous pouvez très bien vous passer de la partie SSL/TLS et utiliser le port 8080 pour Z2M et le port 1883 avec Mqtt en modifiant la conf
Config z2m :
docker-compose.yml :
services:
zigbee2mqtt:
container_name: zigbee2mqtt
image: koenkk/zigbee2mqtt:2.8.0
restart: unless-stopped
volumes:
- ./data:/app/data
- /run/udev:/run/udev:ro
- /etc/localtime:/etc/localtime:ro
# devices:
# - /dev/serial/by-id/usb-Silicon_Labs_Sonoff_Zigbee_3.0_USB_Dongle_Plus_0001-if00-port0:/dev/serial/by-id/usb-Silicon_Labs_Sonoff_Zigbee_3.0_USB_Dongle_Plus_0001-if00-port0
ports:
- "8080:8080" # Port externe 8080 → port interne 8080
environment:
- TZ=Europe/Paris
networks:
- z2m_net
networks:
z2m_net:
driver: bridge
configuration.yaml :
homeassistant:
enabled: false
mqtt:
base_topic: zigbee2mqtt
server: mqtt://mqtt.xxx.local.srv-home.fr:1883
user: mqttuser
password: achanger
keepalive: 60
reject_unauthorized: true
version: 4
include_device_information: true
serial:
port: tcp://192.168.xx.xx:7638
baudrate: 460800
adapter: zstack
disable_led: false
advanced:
pan_id: GENERATE
network_key: GENERATE
channel: 25
homeassistant_legacy_entity_attributes: false
legacy_api: false
legacy_availability_payload: false
log_level: info
log_syslog:
app_name: Zigbee2MQTT
eol: /n
host: localhost
localhost: localhost
path: /dev/log
pid: process.pid
port: 514
protocol: udp4
type: '5424'
last_seen: ISO_8601
frontend:
enabled: true
package: zigbee2mqtt-windfront
port: 8080
host: 0.0.0.0
url: http://192.168.xx.xx
# ssl_cert: /etc/letsencrypt/live/z2m.xxx.local.srv-home.fr/fullchain.pem
# ssl_key: /etc/letsencrypt/live/z2m.xxx.local.srv-home.fr/privkey.pem
auth_token: achanger
Conf mqtt :
persistence true
persistence_location /mosquitto/data/
log_dest file /mosquitto/log/mosquitto.log
listener 1883
allow_anonymous false
password_file /mosquitto/config/passwd
Configurer ensuite Gladys pour utiliser le broker MQTT externe :
Et tout devrait être ok :
Le tutoriel n’est peut être pas parfait mais essaye de couvrir tout les cas possible et il est possible que j’ai oublié des choses donc si vous avez des remarques ou des questions, n’hésitez pas ![]()

