• 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Dockers de Home Assistant, MQTT y Zigbee2MQTT
#1
Hola

Vamos a describir como instalar tres contenedores distintos para la gestión de dispositivos zigbee de cara domotizar un entorno.

Inicialmente con tener sólo HomeAssistant y un adaptador wifi para comunicarse con los dispositivos, nos serviría.

Pero vamos a usar un contenedor llamado zigbee2mqtt. 
Este contenedor aporta un entorno más abierto, extendido e independiente se HA de cara a la adicción de dispositivos.

La gran ventaja es que podemos hacer cambios y reinicios en Home Assitant, y no afecta a los dispositivos y la red que se ha formado entre ellos, ya que estos quedan gestionados por zigbee2mqtt.

Y el tercer docker llamado MQTT (mosquito) es para intercomunicar los otros dos. 
MQTT aparece como una integración de Home Assistant.

Todos los contenedores van a usar carpetas persistentes que se crearán en la carpeta compartida DockerData de QTS. 
Las carpetas que se crean, serán homeassistant, mosquitto y zigbee2mqtt. 
En los ejemplos, estarán dentro de la carpeta compartida de QTS llamada DockerData.



Vamos a comenzar con el docker de HomeAssistant (HA)

Código:
docker run -d  --name homeassistant --privileged -p 8123:8123 --restart=unless-stopped -e TZ=Europe/Madrid -v /share/DockerData/homeassistant:/config  ghcr.io/home-assistant/home-assistant:stable

Usamos el puerto 8123 para acceder a su web, la primera vez nos pide crear un usuario, y dar datos de nuestra instalación.
Es importante que esté el parámetro -- privileged, si no está no dejará detectar/agregar dispositivos. Aunque en nuestro caso lo haremos desde zigbee2mqtt.

Si ya tenemos un adaptador wifi que nos haga de pasarela, HomeAssistant nos lo sugerirá para añadir y gestionar los dispositivos ZigBee que tengamos, pero NO no lo vamos a hacer ya que tenemos previsto hacerlo con otro docker.

El archivo configuration.yaml tendrá un contenido similar a éste

Código:
default_config:
tts:
  - platform: google_translate
automation: !include automations.yaml
script: !include scripts.yaml
scene: !include scenes.yaml

mqtt:
    discovery: true
    birth_message:
        topic: 'homeassistant/status'
        payload: 'online'
    will_message:
        topic: 'homeassistant/status'
        payload: 'offline'



Para el despliegue del docker de MQTT lanzamos la siguiente cadena

Código:
docker run -d --name=mosquitto -p 1883:1883 -p 9001:9001 --privileged -v /share/DockerData/mosquitto/conf:/mosquitto/config -v /share/DockerData/mosquitto/data:/mosquitto/data -v /share/DockerData/mosquitto/log:/mosquitto/log eclipse-mosquitto

Simplemente definimos los puertos que usará y las carpetas persistentes.

El contenido del archivo  de configuración de mosquitto /share/DockerData/mosquitto/conf/mosquito.conf es el siguiente:

Código:
persistence true
persistence_location /mosquitto/data/
log_dest file /mosquitto/log/mosquitto.log
password_file /mosquitto/config/mosquitto.passwd
listener 1883
allow_anonymous false

La última línea hace que puedan acceder sólo los usuarios que creamos en el contenedor. Es decir añadimos una pequeña capa de seguridad para evitar que otros usuarios puedan acceder a nuestro MQTT.

Para crear usuarios de mosquito nos metemos en el docker con el siguiente comando
Código:
docker exec -it contenedor /bin/sh


Luego lanzamos este otro para crear al usuario de nombre "usuario"
Código:
mosquitto_passwd -c /mosquitto/config/mosquitto.passwd usuario
Nos pedirá la clave y dejará el nombre y su clave cifrada dentro del archivo mosquitto.passwd.

Ese nombre y la clave que dimos, habremos de usarla a la hora de agregarlo como integración desde Home Assistant (Ajustes, dispositivos y servicios)
   


Ahora vamos a definir el docker de zigbee2mqtt 

Para hacer pruebas he usado una pasarela de Sonoff modelo ZBDongle Zigbee 3.0 USB Dongle Plus.

Pero antes hemos de asegurarnos que nuestra pasarela usb está asociada a un puerto serie y para añadir un poco mas de dificultad hemos de crear un archivo especial sin búferes e insertar unos módulos en el kernel que no son permanentes y no sobreviven a los reinicios de QTS.

Primero comprobaremos si tenemos o no tres archivos en nuestro QTS. Con un "ls" por archivo nos servirá para saber si los tenemos.
Código:
ls /dev/ttyUSB0
ls /usr/local/modules/usbserial.ko
ls /usr/local/modules/cp210x.ko

Si alguno de ellos no nos aparece, habremos de crearlos. 
Los comandos que tenemos que hacer para crear los tres son:

Código:
mknod /dev/ttyUSB0 c 188 0
insmod /usr/local/modules/usbserial.ko
insmod /usr/local/modules/cp210x.ko

Me he encontrado nas que tienen los dos últimos, y otras que tienen sólo el segundo archivo.

En cualquier caso, hay que agregar en el inicio de la nas para que los archivos que nos faltan, sean creados de forma automática.

Para eso usaremos el autoexec.sh de QTS y agregaremos de las tres líneas anteriores, las que necesitemos en nuestros archivo.sh 




Una vez existan los tres archivos, podemos ejecutar la cadena de creación del docker:
Código:
docker run -d --name zigbee2mqtt --restart=unless-stopped -e TZ=Europe/Madrid -v /share/DockerData/zigbee2mqtt/data:/app/data -v /run/udev:/run/udev:ro --device=/dev/ttyUSB0:/dev/ttyUSB0 -p 9250:8080 --privileged koenkk/zigbee2mqtt:latest

----
Nota:
He visto que en algún modelo de nas no funciona bien cuando creamos el archivo ttyUSB0 y he encontrado un paquete qpkg que los agrega.
Ha sido bajado de qnapclu.eu, pero como suele tener bastantes caídas agrego este enlace de mega con el qpkg.
gracias a Oroimenak por avisarme de ello.
----

Luego detenemos el contenedor con
Código:
docker stop zigbee2mqtt


modificamos el archivo  zigbee2mqtt-data/configuration.yaml con el siguiente contenido:

Código:
homeassistant: true
permit_join: true
mqtt:
  base_topic: zigbee2mqtt
  server: mqtt://ip_nas_donde_este_mosquitto:1883
  user: usuario_de_mosquito
  password: clave_usuario_de_mosquito
  version: 5
  include_device_information: true
serial:
  port: /dev/ttyUSB0
advanced:
  pan_id: 9876
  channel: 15
  log_directory: /var/log/zigbee2mqtt
  homeassistant_legacy_entity_attributes: false
  legacy_api: false
  legacy_availability_payload: false
experimental: {}
frontend:
  port: 8080
  host: 0.0.0.0
  update_check_interval: 10
device_options:
  legacy: false

Lo de permit_join: true es algo temporal para permitir agregar los dispositivos ZigBee que tengamos, pero una vez agregados en zigbee2mqtt, lo cambiaremos a false.

Luego arrancamos de nuevo el docker con
Código:
docker start zigbee2mqtt

Vamos por un navegador web a la dirección http://ip_de_la_nas:9250 y se nos presentará la web de zigbee2mqtt

   

Si ponemos un dispositivo en modo descubrimiento, lo veremos en la lista y podremos ir renombrarlos y describiéndolos a nuestro gusto.
Zigbee2mqtt está bastante al día y nos presentará el fabricante y su catálogo
   

incluso una imagen del tipo de dispositivo que ha detectado
   

   

Si ya hemos agregado en HomeAssistant a MQTT, veremos que esos dispositivos ya están accesibles y podemos hacer mas gestiones, automatizaciones e interaccionar con eventos y otros integradores desde Home Assistant.

En función del tipo de dispositivo que coloquemos podemos automatizar y domotizar infinidad de cosas. 
Hay sensores de apertura de puertas/ventanas, detectores de presencia, pulsadores, interruptores eléctricos con y sin control de consumo, sensores de temperatura, humedad y viento, ...
Y con reglas mas o menos sencilla podemos hacer reglas del tipo:
-si hay mas de x velocidad del viento, se recoja el toldo de la terraza.
-si es de noche (sabe cuando anochece), sabe por nuestro móvil que estamos en las cercanías y detecta que hay movimiento en determinada habitación, que se active esa luz,...
-que apague luces cuando no haya nadie en casa y conecte las videocámaras.
- o lo que se nos ocurra con nuestros sensores y dispositivos.

Convienen echar una ojeada a otro hilo, Oroimenak. Que cuenta como instalar el componente HACS.
Un saludo

Agur eta ondo ibili

Ganekogorta (TS-469Pro, TVS-673e, QBoat Sunny, TS-453Be, TR-002 y QHora-301w) Ʀɐɯ0η
  Responder
#2
Buen tutorial. Haber si me pongo con el mqtt haber que tal me van los sensores Áqara, haber si es más efectivo que el docker Deconz
  Responder
#3
Todos estos comandos que comentas entiendo que se realizan desde ssh con putty??
Yo tengo creados estos contenedores desde container station , si tengo instalado zigbee2mqtt como puedo actualizar la versión sin perder los dispositivos conectados o que manera es la mejor de actualizar una versión de docker?
Si tengo creados estos contenedores y instalo después portainer , como puedo gestionarlos desde portainer o hay que instalar primero portainer y después los otros contenedores ?
Porque no me aparecen en portainer los contenedores creados antes?
  Responder
#4
(31-01-2023, 09:36 AM)PedroSantoña escribió: Todos estos comandos que comentas entiendo que se realizan desde ssh con putty??
Yo tengo creados estos contenedores desde container station , si tengo instalado zigbee2mqtt como puedo actualizar la versión sin perder los dispositivos conectados  o que manera es la mejor de actualizar una versión de docker?
Si tengo creados estos contenedores y instalo después portainer , como puedo gestionarlos desde portainer o hay que instalar primero portainer y después los otros contenedores ?
Porque no me aparecen en portainer los contenedores creados antes?
Si, en Windows puedes usar putty para lanzar comandos por consola.

para actualizar los docker, hay algunos docker que permiten comprobarlos y actualizarlos automáticamente (yo personalmente prefiero hacerlo a mano).
para ello detengo y elimino el docker, vuelvo a instalarlo y los datos permaneces ya que usamos carpetas persistentes (no se borran al quitar el docker).

Yo antes de actualizar, leo la documentación del docker, y en función de ello hago la actualización. Algunos piden algún cambio extra. Por ejemplo con Nextcloud hay que asegurarse que la versión de la base datos es la correcta.
Un saludo

Agur eta ondo ibili

Ganekogorta (TS-469Pro, TVS-673e, QBoat Sunny, TS-453Be, TR-002 y QHora-301w) Ʀɐɯ0η
  Responder
#5
Hola, a ver si me podeis ayudar,

he conseguido levantar el servicio, pero a la hora de abrir la web de administracion de zigbee2mqtt no me sale nada.

Tengo un dongle sonoff P

El log entiendo que me lo da sin problemas

Zigbee2MQTT:info 2023-02-13 07:54:23: Logging to console and directory: '/var/log/zigbee2mqtt' filename: log.txt
Zigbee2MQTT:info 2023-02-13 07:54:23: Starting Zigbee2MQTT version 1.30.1 (commit #eb878d3)
Zigbee2MQTT:info 2023-02-13 07:54:23: Starting zigbee-herdsman (0.14.89)
Zigbee2MQTT:info 2023-02-13 07:54:24: zigbee-herdsman started (resumed)
Zigbee2MQTT:info 2023-02-13 07:54:24: Coordinator firmware version: '{"meta":{"maintrel":1,"majorrel":2,"minorrel":7,"product":1,"revision":20210708,"transportrev":2},"type":"zStack3x0"}'
Zigbee2MQTT:info 2023-02-13 07:54:24: Currently 0 devices are joined:
Zigbee2MQTT:warn 2023-02-13 07:54:24: `permit_join` set to `true` in configuration.yaml.
Zigbee2MQTT:warn 2023-02-13 07:54:24: Allowing new devices to join.
Zigbee2MQTT:warn 2023-02-13 07:54:24: Set `permit_join` to `false` once you joined all devices.
Zigbee2MQTT:info 2023-02-13 07:54:24: Zigbee: allowing new devices to join.
Zigbee2MQTT:info 2023-02-13 07:54:24: Connecting to MQTT server at mqtt://XXX.XXX.XXX.XXX:1883


y el configuration.yaml

homeassistant: true
permit_join: true
mqtt:
base_topic: zigbee2mqtt
server: mqtt://XXX.XXX.XXX.XXX:1883
user: XXXXXXXX
password: XXXXXXXXXX
version: 5
include_device_information: true
serial:
port: /dev/ttyUSB0
advanced:
pan_id: 9876
channel: 15
log_directory: /var/log/zigbee2mqtt
homeassistant_legacy_entity_attributes: false
legacy_api: false
legacy_availability_payload: false
experimental: {}
frontend: true
device_options:
legacy: false
  Responder
#6
(13-02-2023, 08:57 AM)Selucov escribió: Hola, a ver si me podeis ayudar,

he conseguido levantar el servicio, pero a la hora de abrir la web de administracion de zigbee2mqtt no me sale nada.

Tengo un dongle sonoff P

El log entiendo que me lo da sin problemas

Zigbee2MQTT:info  2023-02-13 07:54:23: Logging to console and directory: '/var/log/zigbee2mqtt' filename: log.txt
Zigbee2MQTT:info  2023-02-13 07:54:23: Starting Zigbee2MQTT version 1.30.1 (commit #eb878d3)
Zigbee2MQTT:info  2023-02-13 07:54:23: Starting zigbee-herdsman (0.14.89)
Zigbee2MQTT:info  2023-02-13 07:54:24: zigbee-herdsman started (resumed)
Zigbee2MQTT:info  2023-02-13 07:54:24: Coordinator firmware version: '{"meta":{"maintrel":1,"majorrel":2,"minorrel":7,"product":1,"revision":20210708,"transportrev":2},"type":"zStack3x0"}'
Zigbee2MQTT:info  2023-02-13 07:54:24: Currently 0 devices are joined:
Zigbee2MQTT:warn  2023-02-13 07:54:24: `permit_join` set to  `true` in configuration.yaml.
Zigbee2MQTT:warn  2023-02-13 07:54:24: Allowing new devices to join.
Zigbee2MQTT:warn  2023-02-13 07:54:24: Set `permit_join` to `false` once you joined all devices.
Zigbee2MQTT:info  2023-02-13 07:54:24: Zigbee: allowing new devices to join.
Zigbee2MQTT:info  2023-02-13 07:54:24: Connecting to MQTT server at mqtt://XXX.XXX.XXX.XXX:1883


y el configuration.yaml

homeassistant: true
permit_join: true
mqtt:
  base_topic: zigbee2mqtt
  server: mqtt://XXX.XXX.XXX.XXX:1883
  user: XXXXXXXX
  password: XXXXXXXXXX
  version: 5
  include_device_information: true
serial:
  port: /dev/ttyUSB0
advanced:
  pan_id: 9876
  channel: 15
  log_directory: /var/log/zigbee2mqtt
  homeassistant_legacy_entity_attributes: false
  legacy_api: false
  legacy_availability_payload: false
experimental: {}
frontend: true
device_options:
  legacy: false
Pero puedes acceder a la web de zigbeemqtt y no ves ningún equipo o no puedes acceder a la web de zigbeemqtt?

si puedes acceder, no te aparecerá ningún equipo ya que debes de ponerlos en modo enlace y ahí es cuando te empezarán a aparecer.
  Responder
#7
(13-02-2023, 10:55 AM)Oroimenak escribió:
(13-02-2023, 08:57 AM)Selucov escribió: Hola, a ver si me podeis ayudar,

he conseguido levantar el servicio, pero a la hora de abrir la web de administracion de zigbee2mqtt no me sale nada.

Tengo un dongle sonoff P

El log entiendo que me lo da sin problemas

Zigbee2MQTT:info  2023-02-13 07:54:23: Logging to console and directory: '/var/log/zigbee2mqtt' filename: log.txt
Zigbee2MQTT:info  2023-02-13 07:54:23: Starting Zigbee2MQTT version 1.30.1 (commit #eb878d3)
Zigbee2MQTT:info  2023-02-13 07:54:23: Starting zigbee-herdsman (0.14.89)
Zigbee2MQTT:info  2023-02-13 07:54:24: zigbee-herdsman started (resumed)
Zigbee2MQTT:info  2023-02-13 07:54:24: Coordinator firmware version: '{"meta":{"maintrel":1,"majorrel":2,"minorrel":7,"product":1,"revision":20210708,"transportrev":2},"type":"zStack3x0"}'
Zigbee2MQTT:info  2023-02-13 07:54:24: Currently 0 devices are joined:
Zigbee2MQTT:warn  2023-02-13 07:54:24: `permit_join` set to  `true` in configuration.yaml.
Zigbee2MQTT:warn  2023-02-13 07:54:24: Allowing new devices to join.
Zigbee2MQTT:warn  2023-02-13 07:54:24: Set `permit_join` to `false` once you joined all devices.
Zigbee2MQTT:info  2023-02-13 07:54:24: Zigbee: allowing new devices to join.
Zigbee2MQTT:info  2023-02-13 07:54:24: Connecting to MQTT server at mqtt://XXX.XXX.XXX.XXX:1883


y el configuration.yaml

homeassistant: true
permit_join: true
mqtt:
  base_topic: zigbee2mqtt
  server: mqtt://XXX.XXX.XXX.XXX:1883
  user: XXXXXXXX
  password: XXXXXXXXXX
  version: 5
  include_device_information: true
serial:
  port: /dev/ttyUSB0
advanced:
  pan_id: 9876
  channel: 15
  log_directory: /var/log/zigbee2mqtt
  homeassistant_legacy_entity_attributes: false
  legacy_api: false
  legacy_availability_payload: false
experimental: {}
frontend: true
device_options:
  legacy: false
Pero puedes acceder a la web de zigbeemqtt y no ves ningún equipo o no puedes acceder a la web de zigbeemqtt?

si puedes acceder, no te aparecerá ningún equipo ya que debes de ponerlos en modo enlace y ahí es cuando te empezarán a aparecer.

no puedo acceder a la web, me sale que no existe.

No se puede acceder a este sitio webLa página 192.168.1.99 ha rechazado la conexión.
Prueba a:

Comprobar la conexión
Comprobar el proxy y el cortafuegos
ERR_CONNECTION_REFUSED
  Responder
#8
[quote pid="22736" dateline="1676285277"]
y el configuration.yaml
[quote pid="22735" dateline="1676278551"]
[quote pid="22734" dateline="1676271440"]

homeassistant: true
permit_join: true
mqtt:
  base_topic: zigbee2mqtt
  server: mqtt://XXX.XXX.XXX.XXX:1883
  user: XXXXXXXX
  password: XXXXXXXXXX
  version: 5
  include_device_information: true
serial:
  port: /dev/ttyUSB0
advanced:
  pan_id: 9876
  channel: 15
  log_directory: /var/log/zigbee2mqtt
  homeassistant_legacy_entity_attributes: false
  legacy_api: false
  legacy_availability_payload: false
experimental: {}
frontend: true
device_options:
  legacy: false
[/quote]
Pero puedes acceder a la web de zigbeemqtt y no ves ningún equipo o no puedes acceder a la web de zigbeemqtt?

si puedes acceder, no te aparecerá ningún equipo ya que debes de ponerlos en modo enlace y ahí es cuando te empezarán a aparecer.
[/quote]

no puedo acceder a la web, me sale que no existe.

No se puede acceder a este sitio webLa página 192.168.1.99 ha rechazado la conexión.
Prueba a:

Comprobar la conexión
Comprobar el proxy y el cortafuegos
ERR_CONNECTION_REFUSED
[/quote]
yo creo que el problema es que no le has especificado bien el puerto, a mi en archivo yaml en el punto (frontend:true) me pone ( frontend : port y el numero de puerto que seleccione)

yo creo que el problema es que no le has especificado bien el puerto, a mi en archivo yaml en el punto (frontend:true) me pone ( frontend : port y el numero de puerto que seleccione)
Si tienes bien configurado el puerto en container station te tiene que aparecer el símbolo de enlace para acceder a zigbee2mqtt

(13-02-2023, 01:01 PM)PedroSantoña escribió: yo creo que el problema es que no le has especificado bien el puerto, a mi en archivo yaml en el punto (frontend:true) me pone ( frontend : port y el numero de puerto que seleccione)

yo creo que el problema es que no le has especificado bien el puerto, a mi en archivo yaml en el punto (frontend:true) me pone ( frontend : port y el numero de puerto que seleccione)
Si tienes bien configurado el puerto en container station te tiene que aparecer el símbolo de enlace para acceder a zigbee2mqtt

.docx   zigbee.docx (Tamaño: 333,42 KB / Descargas: 103)
.docx   zigbee.docx (Tamaño: 333,42 KB / Descargas: 103)
  Responder
#9
he cambiado el puerto varias veces y sigue igual

se me olvido indicarlo, este es el docker-compose que uso:

version: '3'
services:
zigbee2mqtt:
container_name: zigbee2mqtt
restart: unless-stopped
image: koenkk/zigbee2mqtt
volumes:
- /share/DockerVolumes/zigbee2mqtt:/app/data
- /share/DockerVolumes/zigbee2mqtt/logvar:/var/log/zigbee2mqtt
- /run/udev:/run/udev:ro
ports:
- 9250:8080
environment:
- TZ=Europe/Madrid
devices:
- /dev/ttyUSB0:/dev/ttyUSB0
privileged: true
  Responder
#10
Yo lo instalé con este yaml y me funciono
https://indomus.it/guide/come-installare...erstation/

Prueba a ver si te funciona
  Responder




Usuarios navegando en este tema: 1 invitado(s)