Integrar Zigbee en OpenHab

Logo Zigbee

A poco que nos adentremos en el mundo de la domótica, nos daremos cuenta de que muchos de los dispositivos necesitan para funcionar un gateway o controlador propio del fabricante. Esto ocurre, por ejemplo, con los dispositivos de Xiaomi que, aunque utilizan el protocolo ZigBee, necesitan el controlador de la marca ¿O no?


Siguiendo con el ejemplo de Xiaomi, este fabricante destaca por su alta relación calidad/precio en sus productos, por lo tanto no es una cuestión de precio el no adquirir su controlador. El fin de esta publicación, es utilizar un único controlador para todos aquellos dispositivos que usen el protocolo ZigBee.

Tipos de dispositivos ZigBee

Una de las ventajas del sistema ZigBee es que suele utilizar una red mallada entre los dispositivos. Es decir, un mismo dispositivo hace de receptor y emisor de los mensajes. Por lo que, no depende tanto de una buena antena que nos dé cobertura desde el controlador, sino que cuantos más dispositivos, mejor cobertura tendremos.

Hay tres tipos de dispositivos Zigbee.

El primero y más importante, es el que llamaremos coordinador o controlador o gateway. Utilizaré este modulo CC2531 con antena como coordinador, es decir como controlador. En nuestra red ZigBee sólo puede haber un coordinador, y en mi caso será éste.

El segundo tipo, son los que hacen de router. Puede ser un dispositivo cuya única función es la de repetir de un dispositivo a otro, o puede ser que además de su función principal, como por ejemplo una bombilla o un enchufe, haga las funciones de router. En estos casos , suelen ser dispositivos conectados a la red eléctrica. En mi caso, utilizaré este otro módulo CC2531 como router*, y estará conectado simplemente a un cargador de móvil. Él se encargará de aumentar la cobertura de la red en un primer momento.

El tercer y último dispositivo, son los dispositivos finales. Suelen ser pequeños y funcionan con una simple batería y, para evitar un consumo excesivo, no funcionan como routers. Son de este tipo, por ejemplo, los sensores de movimiento o de temperatura de Xiaomi.

La lista de la compra es muy sencilla. El material puedes adquirirlo en AliExpress, y tenerlo en tu casa en unos días:


  1. CC Debugger Zigbee Emulator Support Upgrade Online Shell 2540 2541 2530 Protocol Analysis
    Debugger Zigbee Emulator

  2. Wireless CC2531 CC2540 Zigbee Sniffer Board Bluetooth BLE 4.0 Dongle Capture Module USB Programmer Downloader Cable Connector
    Zigbee Dongle

Flashing CC2531

En primer lugar, instalaremos lo necesario:

sudo pacman -S libusb boost-libs git

Y clonaremos cc-tool del repositorio git:

git clone https://aur.archlinux.org/cc-tool-git.git
cd cc-tool-git
less PKGBUILD
makepkg -si
cd ..
rm -rf cc-tool-git

A continuación descargaremos el firmware desde Koenkk/Z-Stack-firmware, y tendremos en cuenta que dependiendo del tipo de dispositivo, es decir, si vamos a flashear un coordinador o un router, necesitaremos descargar diferentes ficheros.

Coordinator

Para el coordinador descargaremos el fichero CC2531_DEFAULT_20190608.zip o el último disponible en Z-Stack-firmware/coordinator/Z-Stack_Home_1.2/bin/default. Esta versión es la recomendada al inicio de implementar una red Zigbee. Cuando tengamos una red estable y bien consolidada, con varios dispositivos, es posible que nos interese cambiar a la versión source_routing. Pero por el momento utilizaremos la default.

Router

Para el router, descargaremos el fichero CC2531_router_2020_09_29.zip o el último disponible en Z-Stack-firmware/router/CC2531/bin/

Conexión

Llegados a este punto, conectaremos el debugger con el adaptador, mediante el extremo correcto del cable plano al debugger, y el otro extremo al adaptador.

A continuación conectaremos el cable plano más delgado del adaptador al dongle. Importante: tanto el pin 1 del debugger como el pin 1 del adaptador deben coincidir. Normalmente uno de los extremos del cable plano es de color rojo. Esto nos ayudará a conectar ambos pines.



Pin 1 del adaptador, hilo rojo
Pin 1 del dongle, hilo rojo

Conectar todo el material

Y por último, conectaremos el debugger a un puerto USB libre y el dongle a otro. El led del debugger debería encenderse en verde. En el caso de que el indicador fuese rojo, podríamos intentar reiniarlo con el botón reset.

Flasheamos

Y por fín vamos a flashear el dongle. Para ello ejecutaremos el comando siguiente, desde la misma carpeta en la que hemos descargado y descomprimido el firmware:

sudo cc-tool -e -w CC2531ZNP-Prod.hex

El comando retornará información, hasta que nos indique que se ha completado el proceso, momento el que podremos desconectar del equipo, tanto el dongle como el debugger:

Programmer: CC Debugger
  Target: CC2531
  Erasing flash...
  Completed
  Writing flash (241 KB)...
  Completed (17.96 s.)

Ahora nuestro coordinador estará listo para integrarse en Openhab

Para flashear como router, basta con repetir el mismo procedimiento pero con el firmware adecuado

sudo cc-tool -e -w router-cc2531-std.hex

Configurando Zigbee en la raspberry

Conectaremos nuestro dongle a un puerto libre de la Raspberry y nos conectaremos a ella mediante ssh.

Al igual que hicimos con el RFXTRX433E, crearemos un enlace simbólico con el dongle. Averiguaremos el IDVENDOR, que es el código que identifica al fabricante y el IDPRODUCT que identifica el producto, mediante:

sudo lsusb -v | grep 'idVendor\|idProduct\|iProduct\|iSerial'
idVendor           0x0451 Texas Instruments, Inc.
idProduct          0x16a8 CC2531 ZigBee
iProduct                2 TI CC2531 USB CDC
iSerial                 3 __0X98104B025944E02X

Con esta información, crearemos o modificaremos el siguiente fichero:

sudo nano /etc/udev/rules.d/10-local.rules

y añadiremos la siguiente linea:

SUBSYSTEM=="tty", ATTRS{idVendor}=="0451", ATTRS{idProduct}=="16a8", ATTRS{serial}=="__0X98104B025944E02X", SYMLINK+="ttyUSB-ZIGBEE"

Verificaremos que exista el fichero /etc/default/openhab3. Si existe, bastará añadir el nuevo enlace simbólico ttyUSB-ZIGBEE al final del fichero:

sudo nano /etc/default/openhab3
EXTRA_JAVA_OPTS="-Dgnu.io.rxtx.SerialPorts=/dev/ttyUSB-rfxtrx433:/dev/ttyUSB-upsriello:/dev/ttyUSB-zwstick:/dev/ttyUSB-ZIGBEE"

Si no existiera, lo crearíamos:

sudo nano /etc/default/openhab3
EXTRA_JAVA_OPTS="-Dgnu.io.rxtx.SerialPorts=/dev/ttyUSB-zigZIGBEE"

Recargaremos las reglas para que tenga en cuenta la modificación:

sudo udevadm control \--reload-rules

A partir de ahí, cada vez que conectemos ese dispositivo a un puerto USB, Linux le asignará siempre el mismo nombre.

Añadiendo Zigbee en OpenHab

Empezaremos instalando el enlace Zigbee Binding.

Desde openHAB, seleccionaremos en el menú de la izquierda Configuración, things. Pincharemos en el botón inferior derecha + a continuación pincharemos en Install more bindings y en el cuadro de búsqueda introduciremos zigbee:

Instalación de ZigBee Binding en openHAB 3

Y confirmaremos la instalación:

Confirmamos instalación de ZigBee Binding en openHAB 3

Confirmamos instalación de ZigBee Binding en openHAB 3

Y una vez instalado, tendremos soporte para varios tipos de dispositivos. El primero que añadiremos será el propio dongle.

Para ello, nos dirigiremos a

Configuration
,
Things
y pincharemos de nuevo en el gran icono azul, en la parte inferior derecha. Seleccionaremos
Zigbee Binding
, y a continuación
CC2531EMK Coordinator
:

ZigBee CC2531EMK Coordinator

La configuración es muy sencilla. Bastará con desplegar y seleccionar el puerto que hemos definido anteriormente:

Configuración ZigBee CC2531EMK Coordinator

Finalizaremos la instalación con el botón

Create Thing
.

A partir de aquí, ya podríamos empezar a integrar bombillas, enchufes y la mayoría de dispositivos sin tener que adquirir diferentes controladores para diferentes dispositivos ZigBee .

Soy Jaume Ferré, aficionado a los nuevas tecnologias, aunque ya no lo son tanto.
¡Gracias por leerme!

Valora este artículo1 2 3 4 5 (0 votos)

(0 votos)

Categorias del blog

twitter

Últimos tweets