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.
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:
Cuando se trata de las diferencias:
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.
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.
En el lado del hardware necesitarás:
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!
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