• 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


Mensajes en este tema
Dockers de Home Assistant, MQTT y Zigbee2MQTT - por Ganekogorta - 30-12-2022, 08:24 PM
Ganekogorta - por Ganekogorta - 31-01-2023, 12:13 PM



Usuarios navegando en este tema: 1 invitado(s)