¿Tu automatización «no hace nada» aunque todo parece correcto? Casi siempre es por una de estas dos reglas:
- Una automatización arranca cuando algo cambia, no mientras algo es cierto.
- Las condiciones se comprueban una sola vez, justo después de que reaccione el disparador.
Este artículo las explica paso a paso, con lo que ocurre al guardar, recargar y reiniciar, y cómo escribir una automatización que funcione pase primero lo que pase. Es de nivel avanzado: conviene conocer ya los disparadores y los modos.
1. Los disparadores reaccionan a cambios
Una automatización no está vigilando si algo es cierto. Espera un cambio y entonces arranca. Por debajo, esos cambios son eventos: casi siempre, el cambio de estado de una entidad.
Paso a paso:
- Creas un disparador «Temperatura por encima de 25 °C» y lo guardas cuando ya hace 26 °C. No pasa nada: no ha habido ningún cruce.
- La temperatura baja a 25 °C o menos. El disparador queda preparado.
- Vuelve a superar los 25 °C. Ahora sí se dispara.
Por la misma razón:
- Una automatización «mientras sea de noche» no arranca porque sea de noche. Arranca cuando se hace de noche, por ejemplo con la puesta de sol.
- Esperar a un disparador se comporta igual que un disparador: espera un cambio. Si el estado que esperas ya está ahí cuando empieza a esperar, sigue esperando.
2. Qué cuenta como cambio
No toda actualización de una entidad pone en marcha una automatización.
- Solo cambia un atributo, como el brillo de una luz. El disparador Estado cambió sin «De» ni «A» sí reacciona. Si indicas un estado, ya no, porque el estado no ha cambiado.
- Se escribe el mismo estado que ya tenía. Normalmente no se genera ningún evento, así que no reacciona. Algunas entidades se pueden configurar para emitir actualizaciones aunque el valor no cambie.
- Vuelve de
unavailableounknown. El disparador Estado cambió sí reacciona, por ejemplo deunavailableaon, salvo que tenga un «De» concreto, comooff. Los disparadores específicos, como «Luz encendida», no reaccionan a esa vuelta. - Con «Durante al menos», el cambio solo cuenta cuando el nuevo estado ha durado ese tiempo. Los formatos de duración los tienes en Duraciones en las automatizaciones.
3. Arranque, recarga y reinicio
Los disparadores solo reaccionan a lo que cambia mientras están preparados. Home Assistant los prepara al final del arranque, y de nuevo cuando recargas o guardas una automatización.
Por eso:
- Cuando las integraciones crean sus entidades durante el arranque, esos cambios no ponen en marcha automatizaciones.
- El disparador Home Assistant con Evento: Inicio solo reacciona al arrancar Home Assistant. Si recargas, guardas o vuelves a activar la automatización, no reacciona hasta el siguiente arranque.
- Un umbral que ya se había superado cuando se prepara el disparador no lo dispara, ni siquiera tras reiniciar.
Recargar, apagar y encender o reiniciar no hacen lo mismo:
| Recargar o guardar | Apagar y encender | Reiniciar | |
|---|---|---|---|
| Se vuelven a preparar | Solo las que cambiaste | Solo esa | Todas, al final del arranque |
| Ejecuciones en curso | Se detienen las de las cambiadas | Se detienen las suyas | Se detienen todas |
| Esperas «Durante al menos» | Se cancelan | Se cancelan | Se cancelan todas |
| «Home Assistant se inicia» | No reacciona | No reacciona | Reacciona |
Una espera cancelada no se reanuda. Si una automatización esperaba «la puerta lleva abierta 10 minutos» y reinicias a los 8, el reloj no sigue: el disparador necesita un cambio nuevo para volver a empezar. Si la puerta sigue abierta, ya no avisará.
Cómo hacer que reaccione también tras un reinicio
Si necesitas que la automatización se ejecute aunque el cambio ocurriera antes, añade un segundo disparador de arranque y deja que las condiciones comprueben la situación actual:
triggers:
- trigger: state
entity_id: binary_sensor.puerta_entrada
to: "on"
for: "00:10:00"
- trigger: homeassistant
event: start
conditions:
- condition: state
entity_id: binary_sensor.puerta_entrada
state: "on"
actions:
- action: notify.mobile_app_mi_movil
data:
message: "La puerta de entrada sigue abierta."
Tras un reinicio, el aviso llega en cuanto arranca Home Assistant si la puerta está abierta, aunque no lleve 10 minutos. Si necesitas medir el tiempo de forma exacta aunque haya reinicios, guarda la hora del cambio en un ayudante de fecha y hora y compárala en la condición.
4. Las condiciones miran el estado actual, una vez
Una condición se comprueba una sola vez, justo después de que el disparador reaccione, y con el estado de ese instante, que puede no ser ya el del cambio que la puso en marcha.
Por eso:
- Si la condición no se cumple cuando reacciona el disparador, no pasa nada, aunque se cumpla un minuto después. Una condición nunca pone en marcha una automatización.
- Si un interruptor se enciende y se apaga enseguida, la automatización arranca, pero una condición «el interruptor está encendido» ya no se cumple.
- Esperar a una plantilla se comporta como una condición: si la plantilla ya es cierta cuando empieza la espera, la automatización sigue al momento. Es lo contrario que «Esperar a un disparador».
5. Cuando dos cosas tienen que ser ciertas
Quieres encender el salón cuando Ana está en casa y ya es de noche. Si el disparador es «Ana llega a casa» y la condición es «es de noche», solo funciona si Ana llega de noche. Si llega de día, cuando se pone el sol no ocurre nada: la puesta de sol no es un disparador.
La solución: un disparador por cada cambio y una condición por cada situación.
alias: "Salón al anochecer con Ana en casa"
triggers:
- trigger: zone.entered
target:
entity_id: person.ana
options:
zone: zone.home
- trigger: sun
event: sunset
conditions:
- condition: state
entity_id: person.ana
state: home
- condition: state
entity_id: sun.sun
state: below_horizon
actions:
- action: light.turn_on
target:
entity_id: light.salon
- Si Ana llega de noche, reacciona el primer disparador y las dos condiciones se cumplen.
- Si Ana llega de día, el primer disparador reacciona pero la condición del sol no se cumple. Al anochecer reacciona el segundo disparador, y ahora sí se cumplen las dos.
- Para «es de noche» se usa
sun.sunenbelow_horizon. La condición de sol «después de la puesta» solo es cierta hasta la medianoche.
En resumen
Piensa en momentos, no en situaciones: ¿qué cambio debería poner en marcha la automatización? Añade un disparador por cada uno, deja que las condiciones comprueben el estado en ese instante y recuerda que guardar, recargar o reiniciar cancela las esperas en curso. Si algo no funciona, abre las Trazas de la automatización: ahí ves qué disparador reaccionó y qué condición falló.
Fuente: documentación oficial de Home Assistant, How automations react to changes.