Después de la larga espera para poder recibir los dispositivos que nos hacen falta para poder usar los dispositivos Aqara, además de otros muchos Zigbee como podrían ser las luces del IKEA, podemos ponernos manos a la obra para empezar a usarlos con tan solo este dispositivo y poder prescindir del gateway de cada marca.
Por si llegas de nuevo y quieres comprar los dispositivos porque estás interesado en poder quitarte la dependencia del gateway y de internet, lo que tienes que comprar es:
Si quieres ver un poco la explicación que dimos hace un tiempo sobre este gateway genérico de Zigbee, puedes ver la explicación del método alternativo para poder usar los dispositivos de Xiaomi Aqara antes de empezar el tutorial.
Primera parte: Flasheamos el sniffer CC2531
Antes de nada, comentar que existen diferentes dispositivos compatibles con este proyecto, el que os indico para comprar es el más genérico y el que tiene conexión USB, pero, os comentaré en otras publicaciones de otros que se supone que tienen más alcance.
Necesitaremos conectar, para poder flashear, el debugger (la caja negra que lleva el micro USB en un extremo) con el cable que trae al conector que viene con el sniffer, y, el cable fino que sale de este conector, al sniffer a los pines que tenemos para ello. Aquí lo podéis ver:
Flasheo del CC2531 desde Windows
Necesitaremos descargar el SmartRF Flash Programmer (pero no la versión V2). Es gratis, pero tendréis que crear una cuenta en Texas Instruments.
Como no podía ser menos, necesitaremos el driver del CC debugger, lo instalamos y para comprobar que está correctamente instalado, con el CC Debugger conectado, miraremos si nos aparece en la lista de dispositivos, si no, habrá que instalar el driver de forma manual.
(Nota del autor: Por estos berenjenales, veréis que la mayoría de guías las hago en Linux, ya que, desde hace muchos años, solo uso Linux, o al menos, como sistema principal, salvo si cambio a Windows para usarlo como Frontend del Steam).
Realizamos la conexión completa cuando veamos que todo está OK como he explicado antes y conectamos tanto el CC Debugger como el sniffer, ambos, a 2 USB del PC, en el caso de que se ponga la luz roja, pulsad en el “reset” que lleva el debugger (a mi no me pasó).
Ahora toca descargar el CC2531ZNP-Prod.hex que le grabaremos al dispositivo. Si no os aclaráis con la descarga desde github, os lo he subido aquí, pero, es recomendable mirar por si hay actualizaciones.
Arrancamos el SmartRF Flash Programmer y lo dejamos como aparece para finalmente pulsar sobre “Perform actions”
Flasheo del CC2531 desde Linux/Mac
Necesitaremos instalar los requisitos del cc-tool, según el wiki del proyecto serán:
- Ubuntu: libusb-1.0, libboost-all-dev, git - Fedora: boost-devel, libusb1-devel, git - Mac OS: libusb boost pkgconfig git
En mi caso, al ser Ubuntu se instalaría con:
sudo apt-get install libusb-1.0 libboost-all-dev git
Una vez que tengamos instalado esas dependencias, lo que haremos será un clonado del repositorio del git de cc-tool para poder usarlo, para eso, nos vamos a una ventana de terminal y dentro de la carpeta donde queramos que se descargue el cc-tool ejecutamos esto:
git clone https://github.com/dashesy/cc-tool.git
cd cc-tool
./configure
make
De esta forma, se descarga el cc-tool, entramos a la carpeta y lo compilamos (pero no instalamos en el sistema).
Ahora toca descargar el CC2531ZNP-Prod.hex que le grabaremos al dispositivo. Si no os aclaráis con la descarga desde github, os lo he subido aquí, pero, es recomendable mirar por si hay actualizaciones.
Y, ahora, con todo conectado entre sí, conectamos tanto el CC Debugger como el sniffer, ambos, a 2 USB del PC, en el caso de que se ponga la luz roja, pulsad en el “reset” que lleva el debugger (a mi no me pasó), flasheamos el dispositivo. Para ello, en la misma carpeta donde esté el cc-tool ya compilado, llevamos el fichero .hex descargado en el punto anterior y en el terminal ejecutamos:
sudo ./cc-tool -e -w CC2531ZNP-Prod.hex
Una vez hecho esto, nuestro dispositivo ya está preparado para ser usado como gateway genérico.
Segunda parte: Instalamos el Bridge
Antes de comenzar, a fecha de cuando el tutorial se ha publicado, en el WiKi del proyecto, avisan de que no funciona en Raspbian Jessie, y, por lo tanto, la guía está pensada para Raspbian Strech, que es, la última versión que ahora mismo hay publicada. Si veis que han solucionado los problemas o que hay nueva versión, avisad que actualice la guía.
Vamos a empezar pinchando solo el sniffer en nuestra Raspberry Pi para ver que dispositivo usará. Solo pinchamos lo que parece un pendrive sin funda. Normalmente, aparecerá como /dev/ttyACM0
Ahora comenzamos con la instalación del bridge, para ello, al estar dentro de la Raspberry por SSH, podremos lanzar los siguientes comandos:
sudo curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
Y cuando acabe:
sudo apt-get install -y nodejs git make g++ gcc
Ahora, comprobaremos que la versión instalada es la correcta con los comandos:
node --version npm --version
Debería salir algo así:
Ahora vamos a clonar el repositorio del zigbee2mqtt:
sudo git clone https://github.com/Koenkk/zigbee2mqtt.git /opt/zigbee2mqtt
Y le daremos los permisos al usuario pi:
sudo chown -R pi:pi /opt/zigbee2mqtt
Y, finalmente, vamos al directorio del zigbee2mqtt para instalarlo con lo siguiente:
cd /opt/zigbee2mqtt npm install
La salida, debería ser algo así:
No asustarse por los warnings que pueda dar.
Tercera parte: Configuramos el Bridge
Hay que tener en cuenta que tenemos que configurar el servidor MQTT, por lo que si no lo tienes, te recomendamos el tutorial para instalar un servidor MQTT que publicamos hace un tiempo.
Para poder entrar a editar la configuración pondremos:
nano /opt/zigbee2mqtt/data/configuration.yaml
Dentro del fichero veremos:
# Home Assistant integration (MQTT discovery) homeassistant: true # allow new devices to join permit_join: true # MQTT settings mqtt: # MQTT base topic for zigbee2mqtt MQTT messages base_topic: zigbee2mqtt # MQTT server URL server: 'mqtt://localhost' # MQTT server authentication, uncomment if required: user: usuariodenuestromqtt password: contraseñadenuestromqtt # Serial settings serial: # Location of CC2531 USB sniffer port: /dev/ttyACM0
Donde tenemos que configurar para dejarlo como lo anterior, cambiando el false de homeassistant a true si llevamos idea de usarlo con homeassistant. El port, si es diferente al de por defecto, deberíamos ponerlo el correcto y si el servidor mqtt está en otro equipo, tendremos que cambiar el localhost por la ip o host donde esté.
Después de la configuración, podremos probar si funciona nuestro bridge con el siguiente comando:
npm start
Y la salida será algo así:
Ahora, como nuestra intención es que tengamos el sistema siempre funcionando, lo cerramos con CONTROL+C y crearemos el demonio (tranquilo, es solo la manera de llamar a los servicios que corren en segundo plano):
sudo nano /etc/systemd/system/zigbee2mqtt.service
Y escribimos dentro:
[Unit] Description=zigbee2mqtt After=network.target [Service] ExecStart=/usr/bin/npm start WorkingDirectory=/opt/zigbee2mqtt StandardOutput=inherit StandardError=inherit Restart=always User=pi [Install] WantedBy=multi-user.target
Ahora comprobamos que no da error al arrancar con:
sudo systemctl start zigbee2mqtt
y posteriormente:
systemctl status zigbee2mqtt.service
Tenemos que ver la salida de esta forma:
Si ha sido tu caso, podemos poner esto para que se ejecute solo cada vez que arrancamos la Pi:
sudo systemctl enable zigbee2mqtt.service
Si has tenido algún problema o quieres parar o activarlo de forma manual, estos son los comandos que te ayudarán:
# Parar zigbee2mqtt sudo systemctl stop zigbee2mqtt # Arrancar zigbee2mqtt sudo systemctl start zigbee2mqtt # Ver la salida de zigbee2mqtt sudo journalctl -u zigbee2mqtt.service -f
Cuarta parte: Emparejamos los dispositivos Xiaomi Aqara (o cualquier Zigbee de los soportados)
Ahora que ya está todo listo, es el momento de poder emparejar los dispositivos, como hemos visto, en la configuración dejamos puesto “permit_join: true”, lo que hace que el gateway esté en modo promiscuo y cualquier dispositivo Zigbee se empareje con solo ponerlo en modo emparejamiento, esto quiere decir, que cuando tengamos todos nuestros dispositivos ya emparejados, tendremos que cambiarlo a false para evitar emparejar cosas que no queramos.
El funcionamiento es bien sencillo, ya que, no necesitamos ninguna app, ni darnos de alta en ningún servidor, tan solo, para poder controlar que se enlazan, tendremos que ejecutar (si tenemos el sistema como demonio ya:
sudo journalctl -u zigbee2mqtt.service -f
De esta forma vemos en tiempo real la salida del programa y así ver si se ha emparejado.
Ahora, solo nos quedará poner el dispositivo en modo emparejamiento, en los Xiaomi Aqara, en muchos de ellos tenemos un botón que tendremos que mantener pulsado durante 3 ó 5 segundos y se pondrá a parpadear, en ese momento, si estamos a una distancia que alcance nuestro gateway, se emparejará solo y veremos algo así:
Si vemos que no se empareja, quizá estamos lejos y tendremos que acercarnos. Para mejorar la cobertura, haré otro tutorial para poder poner como si fueran repetidores y así conseguir cubrir toda una casa.
Cabe decir que algunos dispositivos no se emparejan a la primera, pero, por ejemplo, el Cubo de Aqara me costó algunos intentos. El detector de agua de Xiaomi fue inmediato y desde el primer momento, empezó a funcionar y mandar toda la información de estado, mostrando esto en el log:
Quita parte: Actualizamos el zigbee2mqtt a la última versión
En el Wiki del proyecto, podemos ver como actualizar nuestro bridge para poder tenerlo a la última, un consejo es que, salvo que exista algún problema de seguridad, algo no te vaya bien, o ahora soporten dispositivos que tienes y quieres instalar, si todo te funciona, no actualices a la ligera…si necesitas actualizar, esto es lo que debes hacer:
# Paramos el bridge zigbee2mqtt y vamos al directorio donde se instaló sudo systemctl stop zigbee2mqtt cd /opt/zigbee2mqtt # Guardamos nuestra configuración cp -R data data-backup # Actualizamos git checkout HEAD -- npm-shrinkwrap.json git pull rm -rf node_modules npm install # Restauramos nuestra configuración cp -R data-backup/* data rm -rf data-backup # Volvemos a poner en marcha el bridge zigbee2mqtt sudo systemctl start zigbee2mqtt
Como vemos, se para el bridge y se activa al final, por lo que es importante que no esté corriendo.
Sexta parte (opcional): Integrar zigbee2mqtt con Home Assistant
Como hemos visto en la configuración, he puesto a true el valor de homeassistant que lleva para que sea capaz de tener el auto discovery, es decir, poder ir apareciendo los dispositivos en Home Assistant sin tener que añadir cada dispositivo individualmente. Si tenemos problemas para poder integrarlos de forma automática, podemos seguir los guiones de configuración que nos muestran aquí y tendremos que poner a false el valor de homeassistant.
Para poder integrar este gateway genérico, tendremos que editar nuestro configuration.yaml de Home Assistant como habitualmente hacemos y donde tenemos la configuración de nuestro “mqtt:” añadir, después de los datos de configuración lo siguiente:
discovery: true birth_message: topic: 'hass/status' payload: 'online' will_message: topic: 'hass/status' payload: 'offline'
Una vez hecho esto, tocará reiniciar para que coja la nueva configuración y veamos si de verdad ha sido detectado el nuevo gateway por medio del servidor mqtt.Si todo ha ido bien, tendremos en nuestro Home Assistant los dispositivos Aqara (o de la marca que sea que soporte este gateway) de manera automática como vemos en las capturas:
Con esto, ya solo quedaría modificar las automatizaciones que tengamos (en mi caso no son pocas), para adaptarlas a este nuevo dispositivo. Pronto haré algún artículo para comentar sobre el funcionamiento, el alcance, y como he dicho antes, habrá otro artículo, cuando me llegue, para ampliar el alcance de la red por si se os queda corto con uno, ya que tener, si que tiene menos alcance de la de Xiaomi.
¿Os ha funcionado?
IMPORTANTE: Con el fin de ayudaros de una forma más directa, he creado un grupo en Telegram de Home Assistant en Español donde podemos ayudarnos todos así como evitar que os quedéis atascados, si tenéis telegram podéis pulsar aquí para uniros y si no lo tenéis, os recomiendo que os lo instaléis ya que lo usaremos en el tutorial para notificarnos.
La entrada Tutorial: Cómo usar los dispositivos Xiaomi Aqara (y otros Zigbee) sin el gateway se publicó primero en Domótica en Casa.