paint-brush
Cómo transformar una RaspberryPi en un puente universal Zigbee y Z-Wavepor@BlackLight
105,623 lecturas
105,623 lecturas

Cómo transformar una RaspberryPi en un puente universal Zigbee y Z-Wave

por Fabio Manganiello10m2020/03/01
Read on Terminal Reader
Read this story w/o Javascript

Demasiado Largo; Para Leer

¿Cómo transformar un RaspberryPi en un puente universal Zigbee y Z-Wave? Cómo configurar un puente universal para ellos usando solo una Raspberry Pi y un dongle USB, y cómo mover permanentemente sus puentes inteligentes existentes a la sala de almacenamiento. Hemos trabajado recientemente para lograr este objetivo en ornitorrinco, pero, en mi opinión, todos aún requieren un cierto grado de configuración del usuario (como especificar qué es cada dispositivo y qué se supone que debe hacer) que no debería ser necesario.

Companies Mentioned

Mention Thumbnail
Mention Thumbnail

Coin Mentioned

Mention Thumbnail
featured image - Cómo transformar una RaspberryPi en un puente universal Zigbee y Z-Wave
Fabio Manganiello HackerNoon profile picture

La domótica tiene mucho potencial para hacernos la vida más fácil. Pero para tener éxito en su tarea, a menudo requiere que llene su casa con puentes que puedan conectar sus dispositivos inteligentes a su red Wi-Fi. A menos que compre un dispositivo inteligente que se comunica directamente a través de Wi-Fi (como un enchufe inteligente TP-Link o Belkin ), lo más probable es que muchos de sus dispositivos inteligentes favoritos usen Bluetooth, Zigbee o Z-Wave para comunicarse. Estos protocolos resuelven algunos de los problemas de Wi-Fi cuando se trata de dispositivos inteligentes, como la latencia, la topología centralizada y los requisitos de energía relativamente altos, pero requieren hardware físico intermedio para realizar el protocolo inteligente <-> traducción de Wi-Fi. y hacer que los dispositivos sean realmente controlables desde un cliente conectado a Wi-Fi.

Lo malo es que probablemente necesitará un puente o concentrador diferente para cada clase de dispositivo que quiera usar. Las luces Philips Hue vienen con su propio puente, lo mismo para Lutron, lo mismo para HomeKit, lo mismo para Belkin, lo mismo para Switchbot, y la lista continúa. Lo irónico es que la mayoría de estos dispositivos hablan el mismo protocolo (ya sea Zigbee o Z-Wave) pero, en la mayoría de los casos, solo pueden controlar sus propios dispositivos. Intenta imaginar una realidad alternativa en la que todas las tarjetas ethernet puedan enviar y recibir paquetes TCP/IP, pero necesitarás un adaptador solo para tráfico HTTP, uno para FTP, otro para SMTP, etc.: esa es más o menos la realidad. hoy cuando se trata de puentes y concentradores inteligentes.

Para resolver el problema, muchas empresas están lanzando al mercado aún más concentradores y puentes (desde Samsung SmartThings, hasta la gran cantidad de dispositivos Amazon Echo, Google y Apple, etc.), a menudo compatibles solo con un subconjunto de los dispositivos que existen. e incompatibles entre sí, a menudo incompatibles por diseño con dispositivos producidos por competidores: eso solo trae aún más fragmentación al actual infierno de hogares inteligentes.

Además, muchos concentradores generalmente solo pueden hablar con la aplicación de su teléfono inteligente, lo que agrega un infierno de aplicaciones al infierno del puente.

Uno de los objetivos más buscados hoy en día cuando se trata de domótica es (o debería ser) encontrar formas consistentes de comunicarse con tantos dispositivos como sea posible utilizando la misma herramienta, la misma caja y la misma interfaz.

Recientemente he trabajado para lograr este objetivo en ornitorrinco. Otras plataformas también han abordado el problema (desde HASS.io hasta Openhab) pero, en mi opinión, todas requieren un cierto grado de configuración del usuario (como especificar qué es cada dispositivo y qué se supone que debe hacer) que, en mi opinión, no debería no será necesario. En este artículo, repasaremos qué son realmente Zigbee y Z-Wave, qué necesita para configurar un puente universal para ellos usando solo una Raspberry Pi y un dongle USB, y cómo mover permanentemente sus puentes inteligentes existentes al trastero.

Zigbee contra Z-Wave

Podría decirse que Zigbee y Z-Wave se han convertido en los protocolos de comunicación dominantes en las industrias de hogares inteligentes e IoT. Comparten algunas características comunes, tales como:

  • Son más adecuados para dispositivos de baja potencia. Wi-Fi es un protocolo que consume relativamente mucha energía, necesita lidiar con las pérdidas de paquetes, se basa en una topología centralizada y no es ideal para la comunicación con dispositivos que pueden estar inactivos durante mucho tiempo debido a su alta sobrecarga en la reconexión. En cambio, Zigbee y Z-Wave se diseñaron para funcionar bien con dispositivos de baja potencia, tener baja latencia y optimizarse para enviar menos bytes en la red. En teoría, algunos dispositivos Z-Wave o Zigbee pueden funcionar con la misma batería durante un par de años; un dispositivo Wi-Fi similar generalmente no durará más de un par de días. Si bien las redes Wi-Fi generalmente se configuran con una topología basada en estrellas (un punto de acceso/enrutador en el medio y todos los dispositivos se conectan a él), Zigbee y Z-Wave se han diseñado para admitir topologías más flexibles.
  • Cada dispositivo puede ser tanto un cliente como un repetidor en la red, cada uno puede conectarse directamente a otros dispositivos y expandir la red sin necesidad de introducir más enrutadores o puntos de acceso. Esto permite la creación de redes de malla escalables que pueden incluir dispositivos que de otro modo estarían fuera de alcance.

Cuando se trata de las diferencias:

  • Número de dispositivos : las redes Z-Wave están limitadas a 232 dispositivos, mientras que Zigbee admite hasta 65k dispositivos.
  • Máximo de saltos : Z-Wave admite hasta cuatro saltos entre un dispositivo y el controlador de red, mientras que Zigbee teóricamente no tiene tales limitaciones.
  • Rango operativo : la mayoría de los dispositivos Zigwave funcionan en torno al espectro de 2,4 GHz, aunque algunos dispositivos específicos también usan 784 MHz en China, 868 MHz en Europa y 915 MHz en EE. UU. y Australia. En cambio, los dispositivos Z-Wave operan alrededor del rango de 850 a 900 MHz (a 868,42 MHz en Europa, a 908,42 MHz en América del Norte y otras frecuencias en otros países según sus regulaciones).
  • Rango de señal : una regla general cuando se trata de ondas electromagnéticas es que, a una potencia de transmisión fija, cuanto mayor sea la frecuencia, menor será el rango. Significa que los dispositivos Z-Wave, que funcionan a frecuencias más bajas, suelen tener un alcance más largo en comparación con Zigbee. Una señal Z-Wave sin obstrucciones puede viajar hasta 100 metros en exteriores, aunque una pauta común es 30 metros en interiores para señales sin obstrucciones y 15 metros si hay paredes en el medio. En cambio, el alcance interior de Zigbee suele estar limitado a unos 12 metros. Sin embargo, las redes Zigbee teóricamente admiten una cantidad ilimitada de saltos entre los nodos y el controlador, por lo que el rango se puede ampliar fácilmente agregando más nodos a la red.
  • Fiabilidad de la señal : Z-Wave tiene un mayor alcance que Zigbee. Significa que, a una distancia fija, su señal suele ser más fiable. Además, Zigbee opera en el espectro relativamente "más silencioso" de 800 a 900 MHz, por lo que no tiene que compartir el saturado espectro de 2,4 GHz con dispositivos Wi-Fi y Bluetooth. Eso en general conduce a una comunicación más confiable.
  • Propiedad y protocolo : Z-Wave es una tecnología patentada desarrollada y mantenida por Sigma Designs. Sigma (adquirida por Silicon Labs en 2018) es propietaria del protocolo, licencia los dispositivos compatibles y ejecuta Z-Wave Alliance, y otorga certificaciones a los dispositivos que cumplen con el estándar. Su punto de venta es, en mi opinión, la fuerte aplicación de un protocolo compartido tanto en el lado del hardware como del software. Cada sensor, valor de configuración o interruptor está definido por un tipo de variable, un rango, una política de solo lectura frente a lectura y escritura y una representación estructurada que se aplica a todos los dispositivos compatibles. Eso hace que sea muy fácil desarrollar interfaces consistentes que puedan representar y controlar de manera integral cualquier dispositivo siempre que hable Z-Wave, incluso si la implementación no sabe exactamente qué dispositivo es. Zigbee, por otro lado, es un estándar abierto mantenido por Zigbee Alliance. También cuenta con un proceso de certificación, pero consta de dos partes: una parte certifica el hardware y la otra certifica el software. Es posible producir hardware certificado por Zigbee incluso si el software no está certificado ni es compatible con otros clientes. Si bien esto hace que el protocolo sea mucho más abierto que Z-Wave, también hace que la tarea de escribir un software de interfaz multipropósito sea mucho más difícil, ya que diferentes dispositivos pueden nombrar sus propiedades siguiendo diferentes convenciones.

Eso debería cubrir la mayor parte del conocimiento que necesita cuando se trata de la teoría de Zigbee y Z-Wave. Encontrará muchos dispositivos inteligentes compatibles con Zigbee y Z-Wave. Algunos ejemplos de dispositivos Zigbee son las bombillas inteligentes Philips Hue e Ikea, los termostatos Honeywell, los enchufes y bombillas inteligentes Belkin, los sensores Bosch y los productos Osram. Z-Wave incluye alrededor de 65 000 dispositivos compatibles, incluidas muchas puertas de garaje, sensores de presencia y temperatura, termostatos, atenuadores, controles remotos, detectores de humo, etc.

Hardware y software

Usaremos una RaspberryPi en los siguientes ejemplos como un puente de bricolaje (cualquier modelo y cualquier distribución deberían funcionar bien) y platypush como una plataforma de automatización del hogar que también ejecuta las integraciones Zigbee y Z-Wave.

Haciendo tu propio puente Zigbee

En el lado del hardware necesitarás:

  • Uno o más dispositivos compatibles con Zigbee, como luces Philips Hue, Ikea o Osram o interruptores Belkin.
  • Un adaptador/sniffer de Zigbee a USB. El CC2531 es una de las opciones más populares que existen. Un depurador Zigbee + cable adaptador , que necesitará para actualizar el firmware en el dongle.
  • Una RaspberryPi o dispositivo similar (cualquier modelo y distribución debería funcionar bien), o cualquier computadora que quieras usar como puente.

En el lado del software:

platypush usa zigbee2mqtt como backend para interactuar con el dongle Zigbee. Instale el firmware zigbee2mqtt en el dongle siguiendo las instrucciones (para Windows, macOS y Linux) en su sitio web . Puede consultar una lista de los dispositivos compatibles aquí . Instale, inicie y habilite una instancia de MQTT en la máquina local, si aún no tiene un servidor ejecutándose en su red. Si está ejecutando Debian/Ubuntu/Raspbian y quiere usar Mosquitto, por ejemplo:

 [sudo] apt-get install mosquitto [sudo] systemctl start mosquitto .service [sudo] systemctl enable mosquitto .service

Instalar zigbee2mqtt:

 [sudo] apt- get install nodejs git make g++ gcc git clone http s: //github. com /Koenkk/zigbee2mqtt cd zigbee2mqtt npm install vi data/configuration # Change mqtt.server and serial.port to respectively # match your MQTT server and USB dongle device. npm start

También puede hacer un servicio systemd a partir de él:

 [Unit] Description =zigbee2mqtt After =network.target [Service] ExecStart =/usr/bin/npm start WorkingDirectory =/path/to/zigbee2mqtt StandardOutput =inherit StandardError =inherit Restart =always [Install] WantedBy =multi-user.target

Tenga en cuenta que el archivo de configuración zigbee2mqtt también incluye una opción permit_join. Establézcalo en verdadero mientras empareja sus dispositivos Zigbee por primera vez, y configúrelo en falso después para evitar que otros dispositivos se unan a la red de forma accidental o maligna; siempre puede permitir temporalmente las uniones más adelante.

Una vez iniciado y en modo permit_join, puede comenzar a emparejar dispositivos Zigbee con su nueva red. Eso generalmente se hace al hacer un restablecimiento de fábrica del dispositivo. El procedimiento varía según el dispositivo: las bombillas Philips Hue, por ejemplo, se pueden reiniciar desde la aplicación (si están emparejadas con un puente) o presionando los botones ON/OFF de un atenuador Hue simultáneamente durante 10 segundos mientras mantiene el atenuador. a menos de 10 cm de la bombilla. Otros dispositivos Zigbee pueden incluir un botón de reinicio en su lugar. Una vez que un dispositivo Zigbee se une a la red, los registros de zigbee2mqtt deberían mostrar un seguimiento como el siguiente:

 Successfully interviewed '0x 0015 8d 0001 dc126a', device has successfully been paired

Instala Redis y platypush con las extensiones Zigbee, HTTP y MQTT:

 [sudo] apt-get install redis- server [sudo] systemctl start redis.service [sudo] systemctl enable redis.service pip install 'platypush[zigbee,http,mqtt]'

Edita tu

 ~/.config/platypush/config.yaml
archivo para habilitar los servicios Zigbee y HTTP:

 backend.http: port: 8008 zigbee.mqtt: host: localhost backend.zigbee.mqtt: enabled: true

Inicie platypush (ya sea ejecutando platypush o iniciando el servicio systemd platypush.service). Abra http://host-or-ip:8008/ en un navegador. El panel web debe incluir el ícono de Zigbee en la barra de navegación, podrá controlar su red desde allí.

Puede enviar solicitudes a través de la API admitida a través de HTTP, código Python o a través del backend platypush que haya configurado:

 # HTTP request curl -XPOST -H 'Content- Type : application/json' -d ' { "type" : "request" , "action" : "zigbee.mqtt.device_set" , "args" : { "device" : "White Bulb" , "property" : "state" , "value" : "ON" } }' http: //localhost:8008/execute


 # Python usage from platypush.context import get_plugin get_plugin( 'zigbee.mqtt' ).device_set(device= 'White Bulb' , property= 'state' , value= 'ON' )

O conecte cualquier lógica personalizada a los eventos admitidos :

 event.hook.OnLightBulbOn: if : type: platypush.message.event.zigbee.mqtt.ZigbeeMqttDevicePropertySetEvent device: White Bulb then: - if ${properties.get( 'state' ) == 'ON' }: - action: tts.say args: text: "The light went on"

¡Felicitaciones, ahora está listo para usar sus dispositivos Zigbee y construir automatización sin puentes!

Haciendo tu propio puente Z-Wave

Hacer un puente Z-Wave DIY es incluso más simple que hacer un puente Zigbee, ya que no necesitará un depurador para actualizar un firmware personalizado ni un servicio MQTT en el medio.

Necesitará un dongle adaptador USB Z-Wave. Yo uso este , pero cualquier dongle compatible debería funcionar. Tome nota de dónde está asignado el adaptador en su sistema, por ejemplo, /dev/ttyUSB0.

Instale Redis y platypush con las extensiones Z-Wave y HTTP:

 [sudo] apt-get install redis- server [sudo] systemctl start redis.service [sudo] systemctl enable redis.service pip install 'platypush[zwave,http]'

Configura tus integraciones en

 ~/.config/platypush/config.yaml
:

 backend.http: port: 8008 zwave: device: /dev/ttyUSB0 backend.zwave: enabled: true

Inicie platypush (ejecutando platypush o a través del servicio systemd) y dirija su navegador a http://host-or-ip:8008/ . Verá una nueva pestaña para la integración de Z-Wave. Algunas capturas de pantalla del panel web de Z-Wave.

Cada dispositivo compatible con Z-Wave tiene su propia forma de vincularse a una red. Todo lo que necesita hacer es presionar el botón + para poner la red en modo de emparejamiento y luego emparejar sus dispositivos dentro de un minuto a través del procedimiento mencionado en el manual del usuario. Dado que Z-Wave tiene un protocolo más estricto y todos los dispositivos compatibles publican sus valores con el mismo formato, la interfaz de Z-Wave es mucho más granular y detallada en comparación con Zigbee.

Por supuesto, puede enviar comandos a la nueva red a través de la API disponible y suscribirse a ganchos personalizados en eventos Z-Wave :

 # HTTP request curl -XPOST -H 'Content- Type : application/json' -d ' { "type" : "request" , "action" : "zwave.get_value" , "args" : { "value_label" : "Temperature" , "node_name" : "Kitchen Sensor" } }' http: //localhost:8008/execute
 # Python usage from platypush.context import get_plugin get_plugin( 'zwave' ).get_value(value_label= 'Temperature' , node_name= 'Kitchen Sensor' )
 # Example output { "type" : "response" "target" : "http" , "response" : { "errors" : [], "output" : { "command_class" : 49 , "data" : 26.799999237060547 , "data_items" : "Read only" , "genre" : "User" , "index" : 1 , "is_read_only" : true , "is_write_only" : false , "label" : "Temperature" , "node_id" : 3 , "type" : "Decimal" , "units" : "C" , "value_id" : 72057594093256722 } }, }
 # Trigger a custom action when motion is detected event.hook.OnZWaveValueEvent: if : type: platypush.message.event.zwave.ZwaveValueChangedEvent then: - if ${node[ 'name' ] == 'Motion Sensor' and value[ 'label' ] == 'Sensor' and value[ 'data' ] is True }: - action: tts.say args: text: Motion has been detected

¡Ahora debería tener todos los ingredientes para construir sus redes de IoT personalizadas y deshacerse de esos puentes para siempre!

Publicado anteriormente en https://medium.com/the-monolith/transform-a-raspberrypi-into-a-universal-zigbee-and-z-wave-bridge-b686cdd1849e