Sensor Zemismart ZPS-Z1 mmWave
Índice
Sensor Zemismart ZPS-Z1 mmWave: Análisis Completo y Guía de Integración con Zigbee2MQTT
El sensor Zemismart ZPS-Z1 se posiciona como una solución avanzada para la detección de presencia, utilizando tecnología mmWave de 24 GHz. Este artículo ofrece una inmersión profunda en sus capacidades, funcionalidades y, lo más importante, cómo integrarlo de manera efectiva en tu ecosistema de domótica a través de Zigbee2MQTT. Exploraremos cada aspecto del dispositivo, desde sus puntos de datos (DPs) hasta su configuración detallada.
Comprendiendo el Sensor Zemismart ZPS-Z1
El Zemismart ZPS-Z1 es un sensor de presencia innovador que va más allá de las tecnologías PIR tradicionales. Su funcionamiento se basa en la emisión y recepción de ondas milimétricas, lo que le permite detectar movimiento e incluso presencia estática con una precisión notable y un alcance considerable. Está diseñado para integrarse en sistemas de hogar inteligente, ofreciendo datos detallados sobre la ocupación del espacio.
Integración con Zigbee2MQTT: Un Enfoque Técnico
La integración del Zemismart ZPS-Z1 en redes Zigbee se facilita enormemente mediante Zigbee2MQTT. Esta herramienta actúa como un puente, traduciendo los mensajes Zigbee a MQTT, lo que permite que otros sistemas de domótica, como Home Assistant, interactúen con el sensor. La configuración requiere un conocimiento básico de los puntos de datos (DPs) del dispositivo, que son la clave para controlar y leer su estado.
Puntos de Datos Clave (DPs) del ZPS-Z1
Para una gestión efectiva del sensor, es fundamental conocer los DPs que utiliza. Estos identifican las diferentes funciones y datos que el dispositivo puede enviar o recibir:
- DP.PRESENCE_STATE (1): Indica el estado de presencia: ausencia, presencia o sensor_close (obstrucción).
- DP.DETECTION_RANGE (2): Define el alcance máximo de detección del radar.
- DP.ILLUMINANCE (101): Mide el nivel de luz ambiental en lux.
- DP.ENERGY_VALUE (102): Proporciona valores de energía de movimiento y presencia por zona, útiles para diagnóstico.
- DP.AI_SELF_LEARNING (103): Controla el estado del auto-aprendizaje (calibración automática).
- DP.HEARTBEAT_ENABLE (104): Activa o desactiva el envío de “latidos” o informes de energía en tiempo real.
- DP.HEART (105): Señal interna de mantenimiento de conexión.
- DP.SENSITIVITY_PRESET (112): Permite seleccionar un perfil de sensibilidad predefinido (alta, media, baja, personalizada).
- DP.ZONE_MAP (117): Define qué zonas de detección están activas o bloqueadas.
- DP.NO_PERSON_TIME (119): Configura el tiempo de espera antes de que se declare ausencia tras la última detección.
- DP.INDICATOR (123): Controla el indicador LED del sensor.
- DP.ENERGY_THRESHOLD (124): Establece los umbrales de energía para el disparo de detección en cada zona.
Funciones de Conversión de Zigbee2MQTT
El código de Zigbee2MQTT para el ZPS-Z1 incluye funciones `fromZigbee` y `toZigbee` que facilitan la interacción. Estas funciones traducen los DPs del dispositivo a atributos comprensibles en MQTT y viceversa.
Procesamiento de Datos de Entrada (fromZigbee)
La función `fzConverter` se encarga de interpretar los mensajes recibidos del sensor:
- Presencia y Ocupación: Transforma el DP1 en los estados `presence_state` y `occupancy`.
- Rango de Detección: Lee el DP2 para establecer `detection_range`.
- Iluminancia: Decodifica el DP101 para obtener el valor de `illuminance`.
- Valores de Energía por Zona: Utiliza `decodeEnergyBuffer` para procesar el DP102, proporcionando `zone_X_motion_energy` y `zone_X_presence_energy`.
- Estado de Auto-Calibración: Mapea el DP103 a `auto_calibration_status`.
- Streaming de Energía: Interpreta el DP104 para reflejar el estado de `energy_streaming`.
- Sensibilidad: Decodifica el DP112 en `sensitivity_preset`.
- Mapa de Zonas: Procesa el DP117 para determinar el estado `zone_X_active`.
- Temporizador de Ausencia: Lee el DP119 para configurar `presence_clear_cooldown`.
- Indicador LED: Controla `led_indicator` a partir del DP123.
- Umbrales de Energía: Decodifica el DP124, actualizando `zone_X_motion_threshold` y `zone_X_presence_threshold`, y almacenando los valores brutos para futuras operaciones de escritura.
Procesamiento de Comandos de Salida (toZigbee)
La función `tzConverter` maneja los comandos enviados al sensor:
- Ajuste de Rango de Detección: Envía el DP2 con el valor ajustado de `detection_range`.
- Configuración de Sensibilidad: Utiliza el DP112 para aplicar `sensitivity_preset`.
- Modificación del Temporizador de Ausencia: Envía el DP119 para ajustar `presence_clear_cooldown`.
- Control del LED: Gestiona el DP123 para `led_indicator`.
- Gestión del Streaming de Energía: Controla el DP104 para `energy_streaming`, iniciando o deteniendo los temporizadores de keep-alive según sea necesario.
- Inicio/Cancelación de Auto-Calibración: Envía comandos al DP103 para `auto_calibration`.
- Modificación del Estado de Zona: Implementa una lógica de lectura-modificación-escritura para actualizar `zone_X_active` enviando el DP117.
- Ajuste de Umbrales por Zona: Procesa `zone_X_motion_threshold` y `zone_X_presence_threshold`, convirtiendo los valores y enviando el DP124. Tras la escritura de umbrales, se fuerza la sensibilidad a ‘custom’ y se actualizan los estados correspondientes.
Funciones Auxiliares para la Gestión de Datos
El código incluye varias funciones de utilidad para simplificar la manipulación de datos:
- `toApp(raw)` y `toRaw(app)`: Funciones para escalar valores entre el rango 0-100 (aplicación) y 0-255 (bruto del dispositivo).
- `startKeepAlive(device, endpoint)` y `stopKeepAlive(ieeeAddr)`: Gestionan el envío periódico de comandos para mantener activa la comunicación, especialmente cuando el `energy_streaming` está habilitado.
- `sendDP(endpoint, dp, datatype, data)`: Función genérica para enviar comandos a un DP específico.
- `currentZoneArray(meta)`: Recupera el estado actual de las zonas de detección desde la metainformación de Zigbee2MQTT.
- `encodeZoneMap(zones)`: Convierte un array booleano de zonas a un buffer de 10 bytes.
- `decodeEnergyBuffer(data)` y `encodeEnergyBuffer(arrA, arrB)`: Funciones para decodificar y codificar los buffers de 20 bytes utilizados para los valores y umbrales de energía por zona.
Configuración y Exposición de Entidades en Zigbee2MQTT
La sección `exposes` del archivo de definición de Zigbee2MQTT detalla todas las entidades que el sensor pondrá a disposición de tu sistema de domótica. Esto incluye:
- Entidades Primarias: `occupancy`, `presence_state`, `illuminance`.
- Ajustes de Detección: `detection_range`, `presence_clear_cooldown`, `sensitivity_preset`.
- Funciones de Calibración: `auto_calibration`, `auto_calibration_status`.
- Configuración General: `led_indicator`, `energy_streaming`.
- Datos de Diagnóstico por Zona: `zone_X_motion_energy`, `zone_X_presence_energy`.
- Control de Zonas: `zone_X_active`.
- Umbrales por Zona: `zone_X_motion_threshold`, `zone_X_presence_threshold`.
Las funciones auxiliares `buildZoneActiveExposes()`, `buildEnergyExposes()` y `buildThresholdExposes()` generan dinámicamente estas entidades para cada una de las 10 zonas, facilitando la configuración y el uso.
La Definición Completa del Dispositivo
El objeto `definition` centraliza toda la información necesaria para que Zigbee2MQTT reconozca y gestione el Zemismart ZPS-Z1:
- `zigbeeModel` y `model`: Identifican el dispositivo.
- `vendor`: Indica el fabricante.
- `description`: Breve descripción del propósito del sensor.
- `fromZigbee` y `toZigbee`: Referencian los conversores definidos.
- `onEvent`: Maneja eventos como la desconexión del dispositivo, deteniendo los procesos de keep-alive.
- `configure`: Define la acción de configuración inicial, incluyendo el enlace al cluster Tuya y una consulta de datos inicial.
- `exposes`: Lista todas las entidades expuestas, como se detalló anteriormente.
- `meta`: Contiene metadatos, como la desactivación del manejador de DPs Tuya incorporado (`tuyaDatapoints: null`) para dar paso a la lógica personalizada.
La correcta implementación de este código en tu configuración de Zigbee2MQTT permitirá que el sensor Zemismart ZPS-Z1 funcione de manera óptima, proporcionando datos precisos sobre la presencia y el entorno, y permitiendo un control granular sobre sus diversas funciones a través de tu sistema de domótica.