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

Aqara Marcas Tutoriales

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í, o aquí , o aquí (esta última es Aliexpress y suele ser más rápida)
    • CC2531 USB sniffer y el cable que podéis comprar aquí , recordad elegir la opción última que pone CC2531 + cable. También podéis comprarlo aquí (este link es de Aliexpress y es un poco más barato y suele tardar menos)

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
./bootstrap script
./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:

 

Quinta 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.

ACTUALIZACION: Después de algunas pruebas, he podido comprobar que el botón de Aqara, funciona desde la distancia más larga de la casa sin problemas, unos 7-8 metros con 2 paredes por medio, algo que me sorprende porque tenía entendido que no llegaría tanto.

¿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.

¿Quieres montarte tu propio sistema Smart Home?

¿Te gustaría empezar poco a poco teniendo Google Home, Alexa o Home Assistant para controlar las luces, calefacción y otros electrodomésticos de la casa? ¡Te ayudamos! Entra en nuestro Grupo de Telégram de Domótica y también puedes entrar a nuestro Foro de Domótica donde podrás empezar a leer y preguntar tus dudas. Además, si quieres estar al tanto de las ofertas de domótica que salen a diario para poder hacerte un sistema de domótica low cost, entra a nuestro Canal de ofertas de domótica y no te perderás ni una o si lo prefieres y no tienes Telegram, puedes entrar a nuestra página de ofertas de domótica o Smart Home en Facebook. ¡Te esperamos!

Comentarios en Facebook

48 Comentarios

  1. Bueno Eduardo he seguido todo el tutorial y el flaseo bien, pero cuando quiero seguir con la configuaracion del usb, no puedo. En mi hassio solo tengo acceso via ssh con el usuario root y no me reconoce ni el comando sudo, por lo tanto no puedo configurar nada. No se como seguir.
    Gracias

    Reply
    • ¿Has mirado el tutorial que publicamos para Hassio.io?

      Voy con el móvil y no puedo pegar la dirección, pero si usas el buscador lo encontrarás.

      Saludos!

      Reply
  2. Sí claro, pero en ese tutorial no explicas cómo se configura el Bridge, que creo que es el problema.
    Un saludo

    Reply
  3. El objetivo perseguido de poder utilizar los dispositivos es el que queremos todos los usuarios, pero la forma descrita en este tutorial se nos escapa a la mayoría de usuarios no expertos.
    Sería interesante que se crease un dispositivo estándar para esto, y entiendo que debe de estar en camino.

    Reply
    • Es posible que pueda estar en camino, pero no es algo fácil de comercializar, puesto que existen multitud de marcas y pueden dejar de funcionar de un momento para otro, es decir, los fabricantes pueden cambiar cosas en los productos (en los nuevos) que harían que no funcionara, por lo que una empresa no podría comprometerse a que funcionaran siempre

      Reply
  4. Hola:

    ¿Al final vas a hacer otro tutorial de cómo alargar el sistema de antenas?

    Reply
  5. Necesito ayuda:

    Me da un error “checking for the Boost program_options library… no
    configure: error: cannot find the flags to link with Boost program_options” al hacer ./configure y no puedo continuar.

    Lo estoy haciendo desde una Raspberry pi

    Agradecería cualquier ayuda. Gracias

    Reply
    • Prueba a instalar libboost-test-dev con “sudo apt-get install libboost-test-dev”

      Reply
  6. Buenas tardes!
    Primero de todo darte las gracias por este pedazo de artículo, estoy empezando con el mundo de la domótica y vuestra web me está ayudando mucho.
    Tengo un problema en abrir los links de ccdebugger y del CC2531 USB sniffer, no me dirigen a la web de compra, podrías enviarmelos?
    Muchas gracias

    Reply
    • Hola, gracias por el aviso, era cosa del servidor, creo que ya está arreglado, mira a ver si puedes descargarlos ahora y si no puedes, te agradecería que me avisaras 🙂

      Reply
      • Ya funcionan.
        Muchas gracias de nuevo

        Reply
  7. Hola.

    En primer lugar quería agradecerte tu trabajo.

    En segundo lugar, acabo de recibir mi gateway y me dispongo a flashearlo, pero la ventana del Flasher no me muestra ningún dispositivo, estando este conectado. Sin embargo, si cambio la lista desplegable “What do you want to program” a “Program evaluation board”, entonces si me aparece un dispositivo.

    No quiero flashear porque me veo venir que me quedo sin gateway, y lo estaba esperando con ansia, no me gustaría tener que esperar otras dos o tres semanas para seguir con las pruebas.

    ¿Tienes idea de por qué me aparece así, y de cómo podría continuar?

    Muchas gracias.

    Reply
  8. Hola de nuevo.

    Ni caso a mi último mensaje, he reseteado el debugger y ya ha aparecido.
    Yo lo tengo sin caja, y no tengo luz verde, no la he visto nunca, ni ahora que lo acabo de flashear…

    En fin, disculpa, y muchas gracias.

    Reply
  9. Hola,
    gracias por el blog, es muy interesante.
    Desde mi total desconocimiento, ¿qué utilidad tiene el CC Debugger y el CC2531 USB sniffer? Me refiero, que si cada uno será receptor de una señal o el “Debugger” sólo sirve para modificar el firmware del Sniffer.
    Con el montaje que describes, ¿se podrían usar sistemas por RF y por wifi (Zigbee) o sólo por este segundo?
    Mirando los disposivos que indicas he visto que en la página de Texas Instrument tienen esto: http://www.ti.com/tool/cc2531em-iot-home-gateway-rd?jktype=design. ¿Esto vendría a hacer la misma función o no tiene nada que ver?
    La verdad es que quiero empezar con algo de domótica, pero estoy muy perdido.

    Muchas gracias.

    Reply
    • El CC Debugger lo usamos para el cambio de firmware del CC2531, que se convierte en un gateway genérico de Zigbee. Sobre lo de usar RF y Zigbee, si te refieres a usar esas dos cosas con este Gateway, no es posible, ya que el cc2531 solo tiene conectividad Zigbee. Dentro de Home Assistant si que podrías usar cosas con Zigbee, cosas con RF, cosas con Z-Wave, cosas WiFi, etc, pero para cada una de esos tipos de conexión necesitas su respectivo gateway (con WiFi no necesitas nada). Respecto a lo que pones de la web de Ti, es lo mismo, solo que es el de desarrollo de Texas y vale 50$ frente a los 6-7€ que vale la versión china.

      Reply
  10. Muchas Gracias por el trabajo…He ido paso a paso y ha funcionado perfectamente. Ya tengo un sensor de temperatura integrado con HA. Ahora a por el Sonoff

    Reply
    • Muchas gracias a vosotros por la visita 🙂 si tienes cualquier duda, puedes entrar al grupo de Telegram, somos ya unos cuantos 🙂

      Reply
  11. Una pregunta… yo tengo Home Assistant un un Synology montado sobre Docker. Diferirá mucho la instalación en el Docker sobre este tutoríal???

    Muchas gracias.

    Reply
  12. Buenas… una consulta, tengo montado Home Assistant en un nas synology mediante Docker.
    Hay mucha deferencia a la hora de adaptar este tutoríal a la instalación de Home Assistant en Docker ???

    Reply
    • Lo único que puede cambiar es como detectar el dongle usb dentro de docker…

      Reply
  13. Hola!!

    Había seguido sin dificultad este tutorial otras veces, pero he tenido que reinstalar Homeassistant desde el principio, y ahora no consigo hacer funcionar el Zigbee2MQTT.

    Me tira el siguiente error cuando ejecuto “npm start” después de tenerlo todo instalado:

    zigbee2mqtt:info 2019-2-3 18:51:53 Starting zigbee-shepherd
    /opt/zigbee2mqtt/node_modules/objectbox/lib/db.js:10
    if (err) throw err;
    ^

    Error: EACCES: permission denied, open ‘/opt/zigbee2mqtt/data/database.db’
    npm ERR! code ELIFECYCLE
    npm ERR! errno 1
    npm ERR! zigbee2mqtt@1.1.1 start: `node index.js`
    npm ERR! Exit status 1
    npm ERR!
    npm ERR! Failed at the zigbee2mqtt@1.1.1 start script.
    npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

    npm ERR! A complete log of this run can be found in:
    npm ERR! /home/pi/.npm/_logs/2019-02-03T17_51_53_785Z-debug.log

    Reply
    • Parece problema de los permisos, creo que están con otro usuario creado (al menos la base de datos)

      Reply
    • Y has conseguido solucionarlo? tengo los mismos errores y hay poca ayuda con ellos.

      Reply
  14. Y has conseguido solucionarlo? tengo los mismos errores y hay poca ayuda con ellos.

    Reply
  15. hola , me da este error, y no se como puedo solucionarlo.

    zigbee2mqtt:info 2019-4-9 22:28:04 Starting zigbee-shepherd
    zigbee2mqtt:info 2019-4-9 22:28:15 zigbee-shepherd started
    zigbee2mqtt:info 2019-4-9 22:28:15 Coordinator firmware version: ‘20181024’
    zigbee2mqtt:info 2019-4-9 22:28:15 Currently 0 devices are joined:
    zigbee2mqtt:warn 2019-4-9 22:28:15 `permit_join` set to `true` in configuration
    zigbee2mqtt:warn 2019-4-9 22:28:15 Allowing new devices to join.
    zigbee2mqtt:warn 2019-4-9 22:28:15 Set `permit_join` to `false` once you joined
    zigbee2mqtt:info 2019-4-9 22:28:15 Zigbee: allowing new devices to join.
    zigbee2mqtt:info 2019-4-9 22:28:15 Connecting to MQTT server at mqtt://192.168.1
    zigbee2mqtt:info 2019-4-9 22:28:15 zigbee-shepherd ready
    zigbee2mqtt:error 2019-4-9 22:28:25 Not connected to MQTT server!

    Reply
    • O no tienes instalado o está mal configurado tu servidor MQTT con el que se tiene que comunicar zigbee2mqtt

      Reply
  16. Gracias por el manual.
    Entre este y el de ampliar la cobertura, he conectado un CC2530 como coordinador directamente
    al gpio de la rasberry, sin convertidor usb-serial.
    Las conexiones son:
    CC2530 raspberry
    P03 -> GPIO15
    P02-> GPIO14
    VCC-> 3.3V
    GND->GND
    en el CC2530, P20 a GND.
    En configuración del puerto, /dev/ttyAMA0

    Reply
    • Gracias por el aporte!

      Reply
    • Genial, me suena que había que especificar un parámetro en el yaml, ¿es así?

      Yo había pensado probarlo también, pero por falta de tiempo no me hice el ánimo, pero viene bien tener aquí estos datos, es posible que lo pruebe para ver si mejora la estabilidad, porque a mí personalmente se me desenlazan dispositivos de vez en cuando.

      ¡Gracias!

      Reply

Contestar

Tu e-mail no será publicadoRequired fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Lost Password

Registro