Si aprecias ser dueño de su propia vida y de tu casa inteligente, valorarás montarte tu hub domótico, optando por aquellos dispositivo que más te convengan, desligándote de las barreras que, históricamente, han impuesto los fabricantes y conformando un ecosistema flexible con el que te sientas cómodo.
Nos ponemos en marcha con esta idea de montarnos nuestro propio hub domótico y, para ello, empezamos con el software necesario. ¿Arrancamos?
¿Qué vamos a hacer?
Vamos a montarnos nuestro propio hub domótico. Para ello ya pusimos en funcionamiento el hardware necesario En este artículo pondremos en funcionamiento el software base necesario para que, a partir de ahí, puedas optar por una de las 2 vías siguientes:
- Tal y como expresé en el primer capítulo de esta serie, domótica sustentada en el uso de dispositivos Zigbee con Homekit como sistema domótico.
- Domótica sustentada en el uso de dispositivos Zigbee pero con una alternativa a Homekit como sistema domótico, concretamente Home Assistant.
Los pasos que vamos a dar hoy serán:
- Instalar Portainer.
- Instalar Mosquitto como contenedor Docker.
- Instalar Zigbee2MQTT como contenedor Docker.
Antes de empezar tienes que tener a mano, en base al artículo anterior:
- IP del PC que va a hacer de hub.
- Punto de montaje lógico del coordinador zigbee.
- Usuario administrador del equipo.
Ahora, entra por SSH al PC que vas a usar de hub.
¡ATENCIÓN!
Lo que vamos a hacer tiene cierto nivel de complejidad.
Vas a poder seguir fácilmente las instrucciones, pero algo de conocimiento de uso comandos de terminal te va a hacer falta, al igual que sobre e funcionamiento de Docker con docker-compose.
Instalar Portainer
Portainer es una herramienta web que proporciona una interfaz gráfica de usuario para facilitar la gestión de entornos de contenedores. Se instala a sí mismo como un contenedor Docker.
Portainer simplifica enormemente la administración de contenedores eliminando la necesidad de interactuar directamente con la línea de comandos de Docker, actuando como un panel de control centralizado que te permite controlar y supervisar tus aplicaciones y servicios en contenedores de manera intuitiva, tanto en entornos locales como en la nube.
Ubuntu Server, que es el sistema operativo que instalamos en el capítulo anterior sobre la puesta en marcha del hardware, ya viene con Docker preinstalado, así que no hay que hacer nada en relación a Docker.
NOTA: Portainer no es estrictamente necesario; puedes usar docker-compose, o cualquier herramienta al estilo de Portainer, como Dockge o Arcane. Mi recomendación es hacerlo todo mediante docker-compose, pero reconozco que este tipo de herramienats gráficas facilitan la gestión.
Procedemos a su instalación:
- Crear volumen persistente donde Portainer almacene su información:
docker volume create portainer_data
- Crear un directorio, desde el directorio ‘Home’ del usuario con el que administras la máquina para generar archivo de docker-compose:
mkdir -p ~/dockers/portainer
cd ~/docker/portainer
nano docker-compose.yml
- Añadir estas líneas al
yamly grabar:
services:
portainer:
image: portainer/portainer-ce:latest
container_name: portainer
restart: always
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- portainer_data:/data
ports:
- 9000:9000
volumes:
portainer_data:
external: true
- Ejecuta lo siguiente para levantar el contenedor (dese el mismo directorio anterior):
sudo docker-compose up -d
- Accede a http://X.X.X.X:9000, donde X.X.X.X es la IP de tu hub y donde has desplegado Portainer desde un navegador de otro ordenador.
- Crear usuario y contraseña de administrador.
Instalar Mosquitto y Zigbee2MQTT
Mosquitto es un broker de mensajería que implementa el protocolo MQTT y sobre el que se basan la pieza siguiente. Es, de alguna manera, como los buzones de tu edificio donde el cartero deposita las cartas de cada uno de los residentes.
Zigbee2MQTT es la pasarela que traduce mensajes de protocolo MQTT a protocolo Zigbee y viceversa, eliminando la necesidad de usar gateways o bridges propietarios, que es justo lo que queremos evitar.
La instalación de todo la haremos con un único archivo de especificación desde el propio Portainer:
- Crear volumenes persistentes (mediante Bind Mount):
mkdir -p ~/docker-persistent-volumes/mosquitto/datadir
mkdir -p ~/docker-persistent-volumes/mosquitto/confdir
mkdir -p ~/docker-persistent-volumes/mosquitto/logdir
mkdir -p ~/docker-persistent-volumes/zigbee2mqtt
- Generamos un archivo de configuración para zigbee2mqtt mediante el comando:
sudo nano ~/docker-persistent-volumes/zigbee2mqtt/datadir/configuration.yaml
y le ponemos el siguiente contenido:
# Permitir descubrimiento de dispositivos desde Home Assistant. Comentar si no tenemos Home Assistant, pero te recomiendo que lo dejes para el futuro
homeassistant: true
# Permitir a nuevos dispositivos unirse a la red Zigbee!!
permit_join: true
# Establecer el nombre del contenedor del servicio MQTT. Está ligado al paso siguiente
mqtt:
base_topic: zigbee2mqtt
server: mqtt://192.168.0.2:1883 # Cambia '192.168.0.2' por la IP del PC
# Puerto del Dongle Zigbee
serial:
port: /dev/ttyUSB0 # Cambia por tu punto de montaje
# Activar el frontal web de Zigbee2MQTT. Poner puerto que convenga (8080 por defecto). No cambiar la IP de 'host'o no arranca el interfaz de ususario
frontend:
port: 8080
host: 0.0.0.0
# Permitir que Zigbee2MQTT genere clave de red (seguridad)
advanced:
network_key: GENERATE
- En Portainer pulsamos el botón Stacks → +Add Stack y escribimos lo siguiente, cambiando NOMBRE_USUARIO_ADMINISTRADOR por el usuario administrador del equipo:
services:
mosquitto:
image: "eclipse-mosquitto:latest"
container_name: mosquitto_mqtt
restart: unless-stopped
volumes:
- ~/docker-persistent volumes/mosquitto/confdir:/mosquitto/config
- ~/docker-persistent-volumes/mosquitto/datadir:/mosquitto/data
- ~/docker-persistent-volumes/mosquitto/logdir:/mosquitto/log
ports:
- "1883:1883"
- "9001:9001"
environment:
- TZ=Europe/Madrid
command: "mosquitto -c /mosquitto-no-auth.conf"
zigbee2mqtt:
image: "ghcr.io/koenkk/zigbee2mqtt"
container_name: zigbee2mqtt
restart: unless-stopped
depends_on:
- mosquitto
volumes:
- ~/docker-persistent-volumes/zigbee2mqtt:/app/data
- /run/udev:/run/udev:ro
ports:
- "8080:8080"
environment:
- TZ=Europe/Madrid
devices:
- /dev/ttyUSB0:/dev/ttyUSB0 #Cambia el "/dev/ttyUSB0" previo a los ":" por tu punto de montaje
NOTA: Recuerda que no es necesario Portainer y que puedes usar el comando de
docker-compose up -dpara levantar los contenedores que hay en este archivo YAML.
Prueba de funcionamiento
Vamos a realizar una prueba de funcionamiento tratando de emparejar un dispositivo Zigbee. Para ello:
- Accede a http://X.X.X.X:8080, donde X.X.X.X es la IP de tu hub, desde un browser de otro ordenador.
- Pulsa sobre Permit join (All).
- Pon el dispositivo Zigbee en modo de emparejamiento, según las instrucciones del fabricante; cada dispositivo puede tener un mecanismo de puesta en marcha del ‘paring mode’ distinto.
- Verás que empiezan a salir «mensajitos» por la pantalla. Eso es que está «descubriendo» a tu nuevo dispositivo. Puede llevarle algún tiempo. Si todo ha ido bien, verás el dispositivo que has emparejado en la lista de dispositivo, con una pequeña imagen del mismo al lado.
