Tutorial: Cómo usar los dispositivos Xiaomi Aqara (y otros Zigbee) sin el gateway

Tutorial: Cómo usar los dispositivos Xiaomi Aqara (y otros Zigbee) sin el gateway

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:

    • CC Debugger que podéis comprar aquí
    • CC2531 USB sniffer y el cable que podéis comprar aquí , recordad elegir la opción última que pone CC2531 + cable

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.

Eduardo Ruiz

Informático de vocación, apasionado de la tecnología y blogger desde hace mucho tiempo, escribo de lo que me entretiene y disfruto con ello. Si deseas seguirme, usa el rss del blog o en mi perfil de .