Hola,
Como prometí, aquí tienes un tutorial para conectar una clave SMLIGHT a Gladys a través de la red y no a través de USB, porque si no se pierde todo el interés de esta clave al conectarla por USB ![]()
Como Gladys solo admite el modo USB @pierre-gilles deténme si me equivoco
, me decidí por una instalación con un MQTT y Z2M externos a Gladys.
Esto podría ser quizás objeto de una solicitud de funcionalidad, ¿qué opinas @pierre-gilles ?
Aquí para z2m en https uso el puerto 443, pero para evitar cualquier conflicto si decides instalar todo en la misma máquina, sería mejor cambiarlo al puerto 4343 por ejemplo ![]()
Ya había hecho un tutorial completo sobre HAOS en la época en que lo usaba, que puedes encontrar aquí :
https://forum.hacf.fr/t/tuto-installer-haos-sur-proxmox-avec-z2m-et-mqtt-full-ssl-tls-lets-encrypt/
Instalación de Mosquitto (Mqtt)
Instalar una VM con ubuntu 24.04, actualízala completamente y ejecuta los siguientes comandos :
Para instalar docker :
curl -sSL https://get.docker.com/ | CHANNEL=stable sh
systemctl enable --now docker
Añadir un usuario docker_mosquitto por ejemplo :
adduser docker_mosquitto
Recuperar su ID : (Aquí 1002)
cat /etc/passwd [ grep docker_mosquitto

Crear la carpeta mosquitto en /opt
mkdir /opt/mosquitto
Crear el archivo docker-compose.yml con el siguiente contenido : (Reemplazar 1002 por los ID que se recuperaron justo antes)
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
Crear una carpeta mosquitto y las subcarpetas y aplicar los permisos : (Esta contendrá la configuración, los datos y los registros)
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
Crear el archivo de configuración en /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
Activar el SSL : (Ajustar según el plugin que utilices para obtener el certificado de tu dominio) Aquí es un ejemplo con 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'
Por defecto, certbot instala un servicio que renueva periódicamente sus certificados automáticamente. Para ello, el comando debe conocer la clave API, de lo contrario fallará en silencio.
Para activar el renovación automática de sus certificados genéricos, deberá modificar /lib/systemd/system/certbot.service. Añada la siguiente línea en Service, reemplazando,<YOUR_API_TOKEN> por su token:
Environment="INFOMANIAK_API_TOKEN=<YOUR_API_TOKEN>"
Luego abra el archivo de configuración
nano /etc/letsencrypt/renewal/xxx.conf
Agregar
renew_hook = docker restart mosquitto
chmod -R 755 /etc/letsencrypt/live
chmod -R 755 /etc/letsencrypt/archive
Ejecutar el contenedor
cd /opt/mosquitto
docker compose up -d
Puede ver los registros del contenedor de docker:
docker logs mosquitto -f
Activar la autenticación (Reemplazar username por un usuario, por ejemplo « mqttuser »
docker exec -it mosquitto mosquitto_passwd -c /mosquitto/config/passwd username
Descomentar la línea « password_file /mosquitto/config/passwd » en el archivo « /opt/mosquitto/mosquitto/config/mosquitto.conf » lo que dará ahora
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
Reiniciar el contenedor:
docker restart mosquitto
Luego podrá ingresar este inicio de sesión en Gladys y luego en zigbee2mqtt ![]()
Instalación Zigbee2mqtt
Instalar una VM bajo ubuntu 24.04, actualícela por completo y siga el siguiente procedimiento:
Linux Docker | Zigbee2MQTT
Para instalar docker:
curl -sSL https://get.docker.com/ | CHANNEL=stable sh
systemctl enable --now docker
Aquí está mi archivo 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" # Puerto externo 443 → puerto interno 443
environment:
- TZ=Europe/Paris
networks:
- z2m_net
networks:
z2m_net:
driver: bridge
Aquí está mi archivo /opt/z2m/data/configuration.yaml como ejemplo, debe modificar el auth_token que le permitirá conectarse a la interfaz web así como la contraseña del usuario z2m que configuramos anteriormente durante la instalación 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
Reemplazar esto por la IP de su llave y no olvide cambiar auth_token y password
port: tcp://192.168.xx.xx:7638
Activar SSL: (Ajustar según el complemento que utilice para obtener el certificado de su nombre de dominio) Aquí es un ejemplo con 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'
Por defecto, certbot instala un servicio que renueva periódicamente sus certificados automáticamente. Para ello, el comando debe conocer la clave API, de lo contrario fallará en silencio.
Para activar el renovación automática de sus certificados genéricos, deberá modificar /lib/systemd/system/certbot.service. Agregue la siguiente línea en Service, reemplazando <YOUR_API_TOKEN> por su token:
Environment="INFOMANIAK_API_TOKEN=<YOUR_API_TOKEN>"
nano /etc/letsencrypt/renewal/z2m.xxx.local.srv-home.fr
Agregar (Si tiene un truco para integrar un recarga, lo acepto ![]()
renew_hook = docker restart zigbee2mqtt
chmod -R 755 /etc/letsencrypt/live
chmod -R 755 /etc/letsencrypt/archive
En el archivo /etc/systemd/system/zigbee2mqtt.service tuve que reemplazar User=pi por User=root. No he encontrado una manera de hacerlo de otra manera por el momento, pero si tiene una idea para ejecutarlo con un usuario con menos privilegios, también lo acepto ![]()
Ejecutar el contenedor
cd /opt/z2m
docker compose up -d
Zigbee2mqtt debe estar ahora disponible en la dirección https://z2m.xxx.local.srv-home.fr indicando la contraseña que ha puesto en auth_token
No usar SSL/TLS
Puede prescindir perfectamente de la parte SSL/TLS y usar el puerto 8080 para Z2M y el puerto 1883 con Mqtt modificando la configuración
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" # Puerto externo 8080 → puerto interno 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
**Configuración de mqtt:**
persistence true
persistence_location /mosquitto/data/
log_dest file /mosquitto/log/mosquitto.log
listener 1883
allow_anonymous false
password_file /mosquitto/config/passwd
**Configurar Gladys para usar el broker MQTT externo:**

Y todo debería estar bien:

El tutorial no es perfecto, pero intenta cubrir todos los casos posibles y es posible que haya olvidado algo, así que si tienes comentarios o preguntas, no dudes en hacerlo :slight_smile: