Seguimos con proyectos de IoT y domótica. En este caso, y para el piso de Forcarey, estoy preparando un sistema de control de apertura de puertas y ventanas con dispositivos Zigbee. Para ello, he escogido los sensores Aqara MCCGQ11LM. Son unos dispositivos fiables, razonablemente baratos, y -lo más importante- están perfectamente soportados en Zigbee2MQTT.
Y es que la gracia de todo este asunto es que no voy a hacer uso del gateway propietario de Aqara/Xiaomi. Desde hace ya algún tiempo tengo experiencia haciendo uso de Zigbee2MQTT como gateway de código abierto para algunos dispositivos Zigbee que tengo instalados en Santiponce, y la idea -como no podía ser menos- era hacer uso de la misma tecnología en Forcarey. Para ello estoy diseñando un pequeño dispositivo, basado en una placa Orange Pi Zero, que actúe como gateway de los dispositivos que voy a desplegar en el nuevo piso.
Sí, el dispositivo con conectividad HSDPA que comentábamos en el artículo anterior.
En lo referente a la instalación de Zigbee2MQTT, en líneas generales basta con seguir las instrucciones de instalación que proporciona la web oficial, con una salvedad: en la versión de Armbian que manejo (Buster 20.08.1 con versión de kernel 5.8.5) a la hora de compilar Zigbee2MQTT daba algunos errores con serialport y node-gyp, que están reportados. En mi caso ninguna de las soluciones propuestas funcionaba. Lo único con lo que conseguí hacerlo funcionar fue ignorando la parte de usar el repositorio de Node.js que se indica en las instrucciones en el apartado 2 de las mismas, e instalar tanto Node.js como específicamente node-gyp desde los repositorios oficiales de Debian. De esta manera todo el proceso de instalación concluyó correctamente.
Una vez concluida la instalación, creé el servicio para iniciar automáticamente Zigbee2MQTT al inicio del sistema, asocié los dispositivos, que fueron reconocidos sin mayor inconveniente, con lo que el proceso de configuración del hardware ha quedado concluido. En cuanto al software, el sistema de notificación de actividad de los sensores, en base a recepción de eventos de los dispositivos y su volcado a un servidor MQTT, está concluido. Los eventos se muestran de la siguiente manera:
…lo que nos permite, a partir de aquí, crear el sistema de notificaciones. ¿Cómo lo voy a hacer en mi caso? Con el estupendo software Home Assistant, que constituye la base de mi sistema de domótica. Pero eso ya quedará para otro artículo.
Etiquetas: aqara, armbian, debian, domótica, forcarey, home assistant, iot, MCCGQ11LM, mqtt, node.js, orange pi zero, zigbee, zigbee2mqtt
Seguimos con actualizaciones sobre domótica. En esta ocasión se trata de un mando un tanto especial: un Aqara Cube de Xiaomi. Consiste en un cubo con una serie de sensores de movimiento y acelerómetros que permiten (según el fabricante) definir seis gestos con el que controlar distintos elementos del sistema de domotica: agitar, golpear dos veces, girar a la izquierda, girar sobre una cara, voltear 90º y voltear 180º. Y especifico lo de “que dice el fabricante” porque existe la manera de sacar mucho más partido de las especificaciones base: utilizar Zigbee2MQTT.
El cubo se integra en el sistema de domótica (bien el del fabricante, bien de un tercero) mediante protocolo Zigbee. Y es aquí donde viene lo interesante: si se hace uso del sistema de integración de código abierto Zigbee2MQTT, se descubre que el cubo envía mucha más información de la que el fabricante permite hacer uso en su sistema propietario. A las acciones anteriores añade información extra de la cara desde la que se realiza la acción; en el caso de las acciones de giro, si es a derecha o izquierda, y el ángulo del giro aplicado; y en el caso de las acciones de volteo, las caras origen y destino. Todo esto permite dotar de mucha más potencia a la integración con el sistema, definiendo una gran variedad de gestos para controlar distintos sistemas. La única pega es que el cubo sólo identifica visualmente una cara (con el logo del producto), pero no el resto, así que puede resultar un tanto confuso a menos que nosotros marquemos visualmente el cubo de alguna manera.
En cuanto a la integración con el sistema, en la parte Zigbee2MQTT es prácticamente inmediata: el mismo sistema identifica e integra el cubo en sus elementos soportados, sin necesidad de acciones adicionales. Una vez integrado, las acciones realizadas se vuelcan a log y al servidor MQTT con un formato JSON como el siguiente:
info 2020-01-28 15:05:20: MQTT publish: topic ‘zigbee2mqtt/0x00158d0002e94430′, payload ‘{“battery”:37,”voltage”:2865,”linkquality”:157,”action”:”shake”}’
info 2020-01-28 15:05:20: MQTT publish: topic ‘zigbee2mqtt/0x00158d0002e94430′, payload ‘{“battery”:37,”voltage”:2865,”linkquality”:157,”action”:”"}’
info 2020-01-28 15:05:34: MQTT publish: topic ‘zigbee2mqtt/0x00158d0002e94430′, payload ‘{“battery”:37,”voltage”:2865,”linkquality”:141,”action”:”rotate_left”,”angle”:-164.38}’
info 2020-01-28 15:05:34: MQTT publish: topic ‘zigbee2mqtt/0x00158d0002e94430′, payload ‘{“battery”:37,”voltage”:2865,”linkquality”:141,”angle”:-164.38,”action”:”"}’
info 2020-01-28 15:05:35: MQTT publish: topic ‘zigbee2mqtt/0x00158d0002e94430′, payload ‘{“battery”:37,”voltage”:2865,”linkquality”:134,”angle”:-6.42,”action”:”rotate_left”}’
info 2020-01-28 15:05:35: MQTT publish: topic ‘zigbee2mqtt/0x00158d0002e94430′, payload ‘{“battery”:37,”voltage”:2865,”linkquality”:134,”angle”:-6.42,”action”:”"}’
info 2020-01-28 15:05:38: MQTT publish: topic ‘zigbee2mqtt/0x00158d0002e94430′, payload ‘{“battery”:37,”voltage”:2865,”linkquality”:144,”angle”:202.68,”action”:”rotate_right”}’
info 2020-01-28 15:05:38: MQTT publish: topic ‘zigbee2mqtt/0x00158d0002e94430′, payload ‘{“battery”:37,”voltage”:2865,”linkquality”:144,”angle”:202.68,”action”:”"}’
En lo referente a la integración con el sistema de domótica Home Assistant, tampoco supone mayor problema. La idea es definir automatizaciones para los distintos elementos a controlar, con una sintaxis similar a la siguiente:
automation:
– alias: Respond to Cube action
trigger:
platform: mqtt
topic: ‘zigbee2mqtt/condition:
condition: template
value_template: '{{ "tap" == trigger.payload_json.action }}'
action:
entity_id: light.bedroom
service: light.toggle
…en las que la idea es recoger el valor JSON del topic MQTT correspondiente, y disparar acciones en el sistema. Esto se puede complicar todo lo que se quiera, para identificar las caras del cubo, ángulos de giro, etc… ¿Y el resultado? Pues algo como lo que sigue:
Control de las luces del salón de la casa.
Control de la pérgola del patio.
La experiencia de uso es muy buena, ya que permite integrar el control de múltiples dispositivos en un mismo mando, y obviar el uso del control del teléfono para acciones avanzadas, como veníamos haciendo hasta ahora. Una gran adquisición.
Etiquetas: aqara cube, domótica, home assistant, zigbee, zigbee2mqtt