¿Tus bombillas aparecen encendidas cuando apagas el interruptor de la pared? Aprende a mostrar el estado real de tus bombillas zigbee.
¿Por qué aparecen encendidas?
Si tienes integradas bombillas a través de zigbee2mqtt en Home Assistant es muy posible que lo hayas notado. Cuando controlas siempre la bombilla a través de Home Assistant u otros dispositivos inteligentes no hay problema. Sin embargo, cuando colocas tu bombilla en una lámpara que a veces accionas con los interruptores de toda la vida se produce esta incoherencia.
Esto sucede porque están funcionando de forma simultánea dos mecanismos que no están coordinados:
- Por un lado, el protocolo Zigbee que da la orden a la bombilla para encenderse y apagarse (entre otros).
- Por otro, el circuito eléctrico tradicional que apaga la bombilla cuando se corta la corriente.
En la práctica, esto supone que si la bombilla está encendida y la apagas a través del interruptor tradicional, la bombilla se apagará, pero seguirá apareciendo con el estado de «encendida» en tu panel de control.
Como te puedas imaginar, esto supone un problema para tus automatizaciones, tus escenas y tus tarjetas de ocupación. Si el estado mostrado no es real, nada de lo que funcione dependiendo de ello actuará correctamente.
¿Cómo puedo mostrar el estado real?
Aunque viene desactivada por defecto, el complemento zigbee2mqtt cuenta con una propiedad denominada ‘Availability‘ o «disponibilidad». Esta propiedad permite identificar si los dispositivos están ‘online’ u ‘offline’, y funciona de forma diferente dependiendo si se trata de un dispositivo activo o pasivo.
- Con los dispositivos activos (principalmente, los que están alimentados por corriente eléctrica), por defecto envía una señal cada 10 minutos al dispositivo, marcándolo como ‘offline’ si no responde.
- Con los dispositivos pasivos (alimentados por batería) por defecto realiza la comprobación cada 25 horas.
Las bombillas corresponden al primer caso, y esto nos dá un hilo del que tirar para mostrar el estado real. Lo que vamos a hacer es crear un ayudante, que nos va a servir como entidad virtual para registrar el estado real de la bombilla.
Creación y actualización del ayudante
Para mostrar el estado real de tus bombillas zigbee tienes que hacer lo siguiente:
- El primer paso es activar la opción de ‘Availability’ en zigbee2mqtt. Para ello accede al complemento desde el menú lateral. Luego navega por el menú superior hasta Ajustes > Ajustes > Disponibilidad. Si seleccionas la opción ‘simple’ los dispositivos pasarán a estar ‘offline’ de acuerdo a lo indicado en el apartado anterior. Si seleccionas la opción ‘advanced’ podrás parametrizar el tiempo que zigbee2mqtt considera para marcar los dispositivos como offline.
- Lo siguiente es crear el ayudante que va a registrar el estado real. Ve a Ajustes > Dispositivos y servicios > Ayudantes > Crear ayudante. Selecciona el tipo «alternar» o ‘boolean’ y asígnale un nombre (por ejemplo, «bombilla salon»). Esto creará la entidad ‘input_boolean.bombilla_salon‘ que puede tomar los valores ‘on’ y ‘off’. Esta será la entidad que utilizaremos en el futuro, ya que mostrará el estado real de las bombillas.
- Por último, tenemos que crear una automatización que actualice el estado en cualquier circunstancia. Básicamente, lo que va a hacer esta actualización es encender y apagar el ayudante, cuando la bombilla pase a estado ‘on’ y ‘off’ respectivamente, pero también lo va a hacer cuando zigbee2mqtt mande el ‘topic’ correspondiente a MQTT, que es el siguiente:
trigger: - platform: mqtt topic: zigbee2mqtt/[FRIENDLY-NAME]/availability payload: offline
En este código tienes que reemplazar el nombre de tu dispositivo tal y como está asignado en zigbee2mqtt. Asimismo, para identificar cuando enciendes el interruptor de la pared tendrías que cambiar el payload a ‘online’.
A continuación te dejo el código completo de la automatización del ejemplo.
alias: Actualización de estado (bombilla salón) description: "Esta automatización actualiza el estado real de la bombilla del salón" trigger: - platform: mqtt topic: zigbee2mqtt/bombilla_salon/availability payload: offline id: Bombilla apagada alias: Bombilla apagada por interruptor - platform: state entity_id: - light.bombilla_salon to: "off" id: Bombilla apagada ha alias: Bombilla apagada por HA - platform: mqtt topic: zigbee2mqtt/bombilla_salon/availability payload: online id: Bombilla encendida alias: Bombilla encendida por interruptor - platform: state entity_id: - light.bombilla_salon to: "on" id: Bombilla encendida ha alias: Bombilla encendida por HA condition: [] action: - choose: - conditions: - condition: trigger id: - Bombilla apagada - Bombilla apagada ha sequence: - service: input_boolean.turn_off data: {} target: entity_id: input_boolean.bombilla_salon - conditions: - condition: trigger id: - Bombilla encendida - Bombilla encendida ha - condition: state entity_id: light.bombilla_salon state: "on" sequence: - service: input_boolean.turn_on data: {} target: entity_id: input_boolean.bombilla_salon mode: single
Si lo prefieres también puedes importar el blueprint correspondiente con este botón, para crear la automatización en pocos segundos.