Si aprecias ser dueño de su propia vida y de tu casa inteligente, apreciará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. ¿Arrancamos?
Objetivo
Como comenté en el artículo anterior, mi opción personal a la hora de conformar mi domótica ha sido HomeKit, como sistema domótico, y dispositivos Zigbee, principalmente, que no son capaces de entenderse con él .
Para alcanzar ese entendimiento mutuo necesitamos montarnos un gateway/bridge que permita a HomeKit dialogar con esos dispositivos Zigbee (con los WiFi o Matter, por ejemplo, ya lo hace de forma natural), es decir, realizar conversiones de protocolo (lo que típicamente se denomina, en el campo de las redes informáticas, un gateway) y transmitir datos entre 2 tipos distintos de red (lo que típicamente se denomina, en el campo de las redes informáticas, un bridge).
Permíteme la licencia de hablar de hub porque lo que vamos a montar lo es, aunque desvitaminado. Lo que nos interesa, y a lo que realmente va a estar dedicado el «bichillo», es a la faceta de gateway contra HomeKit.
Aclarado el propósito de esta serie de artículos, ¡empecemos por el principio!
Arquitectura de la solución
Sin entrar en detalles (lo haremos, pero no es el momento aún), el tinglado domótico que tengo, y que me permite casar HomeKit con todos los dispositivos, es el siguiente:
Te lo explico por encima:
- La familia (usuarios), a través del dispositivo Apple que sea, interactúa con el hub HomeKit.
- El hub HomeKit (un Apple TV) es cerebro domótico; los dispositivos están conectados y controlados por él.
- IoT WiFi: los pocos dispositivos con los que empecé a trastear, y que son «Works with Apple HomeKit», como hablan el idioma de HomeKit, no necesitan de ningún traductor.
- IoT Seguridad: el sistema de seguridad del que ya os he hablado es un sistema «cerrado», cuyo hub ya contiene un traductor hacia / desde HomeKit (bridge integrado en el hub).
- IoT Zigbee: aquí está la madre del cordero. Se trata de un proyecto DIY (háztelo tú mismo). Básicamente es un mini PC al que le he puesto una antena con un coordinador Zigbee más un puñado de contenedores docker para tener mi propio hub que contiene, también, un traductor hacia / desde HomeKit (bridge integrado en el hub).
A partir de este punto, nos centramos en ese Hub DIY que controlará toda la IoT Zigbee y que interlocutará con el sistema domótico que uso: HomeKit.
Recordad que, como dijimos en el primer episodio de esta serie, hay una serie de objetivos que queremos satisfacer:
- Gestión local
- Diversidad y econiomía
- Lingua franca
- App única
- Topología mallada
- No satrurar la WiFi
Arquitectura del hub
Internamente el hub va a constar de 3 piezas de software que son las que van a hacer toda la magia a efectos de que desde HomeKit podamos manejar dispositivos Zigbee que son, en teoría, imposibles de gestionar desde él:
- Zigbee2MQTT: pasarela que traduce mensajes de protocolo MQTT a protocolo Zigbee y viceversa, eliminando la necesidad de usar gateways o bridges propietarios.
- Homebridge: pasarela que traduce mensajes de protocolo MQTT a protocolo HomeKit y viceversa.
- Mosquitto: es un broker de mensajería que implementa el protocolo MQTT y sobre el que se basan las 2 piezas anteriores.
Como podrás desprender del gráfico, la idea subyacente es usar MQTT como «lingua franca» entre dispositivos cualesquiera y el sistema domótico. Esto significa que puedes controlar desde tu sistema domótico todos tus dispositivos, independientemente del fabricante del dispositivo y, por ende, del protocolo específico usado, pues todo acaba traducido a MQTT.
MQTT y Mosquitto
MQTT son las siglas de Message Queing Telemetry Transport.
Es un protocolo estándar y ligero de comunicación máquina-máquina que utiliza mensajes bajo un modelo de publicación/suscripción, diseñado para entornos de red inestables, con alta latencia y poco ancho de banda en el que una multitud de aplicaciones deben intercambiar información en tiempo real… vamos que está pensado para ir a la guerra de la domótica.
Mosquitto es un broker de mensajes de código abierto que implementa MQTT. Hay otros, también de código abierto (EMQX, NanoMQ, etc). Yo he optado por Mosquitto, pero es absolutamente indiferente; lo que importa es el protocolo.
Zigbee2MQTT
Zigbee2MQTT es un proyecto de código abierto que usa el protocolo MQTT a fin de que éste haga de puente, de «lingua franca», entre tus dispositivos Zigbee y tu sistema domótico. De esta forma, puedes controlar esos dispositivos Zigbee desde una única plataforma, independientemente del fabricante y sin necesidad de adquirir sus propios hubs.
Básicamente es un bridge entre Zigbee y MQTT, que es lo que usamos como «lingua franca».
Muy por encima, te explico qué hace por dentro. Si quieres ahorrarte esta parte, para no entrar en detalles que, la verdad, como usuarios, poco importan, pasa al siguiente punto.
Cuando se añade un dispositivo Zigbbe a la red, un proceso de Zigbee2MQTT «entrevista» al nuevo dispositivo a fin de averiguar qué dispositivo es, qué profile tiene y a qué clusters pertence. Esta «entrevista» es clave para que el dispositivo quede o no emparejado a Zigbee2MQTT pues, si el dispositivo no la supera, se queda fuera de tu ecosistema.
Un profile (perfil), determina los casos de uso que soporta el dispositivo y, por ende, su comportamiento (los casos de uso y el comportamiento de un sensor de temperatura no es el de una bombilla, ¿verdad?). Un profile, a su vez, tiene asignados distintos grupos de funcionalidad (clusters).
Un cluster es una especificación, incorporada en la Zigbee Cluster Library (ZCL), que define atributos (de estado o de cantidad física), tipos de mensajes y comandos que establecen un interface para proporcionar una funcionalidad específica.
Cada tipo de dispositivo debe usar una serie de profiles a efectos de que todos los dispositivos de un mismo tipo se comporten de forma homogénea, si bien un fabricante puede añadir sus propios profiles. Los profiles se exponen en los denominados endpoints (puerta o punto de acceso a la funcionalidad).
Gracias a la «entrevista» y a los clusters, Zigbee2MQTT sabe cómo gestionar ese dispositivo para convertir a/desde protocolo MQTT. Lo registra en una base de datos donde guarda información como fabricante, modelo, clusters asignados, etc.
Pongamos un ejemplo. Tenemos una bombilla, regulable en intensidad, conectada a un interruptor inteligente para encenderla y apagarla. El interruptor está vinculado al cluster «Level Control» (para controlar la intensidad de luz) y al «On /Off» (para controlar el encendido/apagado). De esta forma, el interruptor tiene un conjunto de atributos que mantiene actualizados, como el nivel de intensidad de iluminación o si está encendido o apagado. También dispone de comandos para que un cliente de ese interruptor interaccione con él (enciende, apaga, sube la intensidad al 100%, etc).
ZWave2MQTT
Si bien este componente y proyecto de código abierto no forma parte de la arquitectura de nuestro hub, no quería dejar pasar la ocasión de comentarte que ZWave2MQTT tiene el mismo propósito que Zigbee2MQTT, pero aplicado al protocolo Z-Wave, es decir, si quieres añadir dispositivos Z-Wave como complemento de los Zigbbe, o basar toda tu domótica en Z-Wave, pudes hacerlo.
Homebridge
Homebridge es un proyecto de código abierto que proporciona integración con HomeKit para aquellos dispositivos que no son en Apple HomeKit, es decir, es un bridge entre HomeKit y otras aplicaciones o dispositivos. Esta capacidad de integración es a través de plugins que puedes buscar e instalar directamente desde su interfaz de usuario.
En nuestro caso permitirá integrar Zigbee2MQTT en HomeKit, pero puedes tener conectadas a él otros. Yo, por ejemplo, tengo el sistema de seguridad, la TV, Alexa (los Echo dot) e incluso un calendario para forzar el lanzamiento de eventos, pero la lista de cosas que puedes conectar (cámaras, cerraduras, aspiradoras, bombillas inteligentes, …) es tremenda.
Componentes
Mínimos imprescindible:
- PC básico. Yo uso un mini PC NiPoGi AK1 PRO con un Intel N5105 con 8GB RAM. 169€.
- Linux (recomendado). Yo uso Ubuntu Server (sin interfaz gráfico). 0€.
- Coordinador Zigbee: Yo uso el SONOF Zigbee 3.0 Dongle Plus. 28€.
- Zigbee2MQTT. 0€
- Mosquitto. 0€
- Homebridge. 0€
Todos los componentes software los vamos a instalar mediante el uso de contenedores, con lo que os hará falta instalar Docker y Docker compose (si tenéis un Ubuntu Server, ya viene instalado). Adicionalmente, para los que prefieren usar interfaces gráficas, podéis instalar Portainer. Estos 3 elementos os van a costar unos frioleros… 0€.
Mientras yo voy preparando el próximo artículo a efectos de montarnos nuestro hub domótico, tú ve preparando el entorno necesario. El coste total del hub es de unos 197€, pero el uso que le podrás dar a este equipo va más allá de actuar como hub domótico.