Updated 25 September 2026
"The automation is on but nothing happens." "It worked yesterday." "It fires when I press Run, but never by itself." "It only works sometimes."
These all sound like the same fault, and they're not. The single most useful thing you can do is find out which of two situations you're in, because they have completely different causes:
Automations are more literal than people expect. A trigger fires on a change, not on a state that's already true. A for: timer starts again from zero after a restart. A condition written as a template can quietly evaluate to false. An action aimed at a light that was renamed does nothing and says nothing. None of these produce an obvious error, which is why "it just doesn't work" is such a common description.
Work through these in order. The first three take a minute and find most problems.
id: don't get traces, so add one.enabled: false written as a top-level key, which isn't valid there). Check Settings → System → Logs and Settings → System → Repairs for the reason.to: "on" fires when the entity becomes on. If it was already on when you saved the automation, nothing happens until it goes off and on again. A Numeric state trigger with above: 25 fires when the value crosses 25, not while it sits above it. A template trigger fires only when its result goes from false to true.for: against restarts and blips.** A trigger like "door open for 10 minutes" needs ten unbroken minutes. A Home Assistant restart starts the clock again, and so does an entity flicking to unavailable for a second, which Wi-Fi and cloud devices do regularly. If the entity was already in that state when Home Assistant restarted, the trigger never fires at all, because the entity never changes into the state again. If this automation must not miss, add a second trigger on Home Assistant starting, and a condition that checks how long the entity has really been in that state.single: if the automation is still running (say, in a five-minute delay) when it triggers again, the new trigger is ignored and a warning is logged. A motion light usually wants restart, so each new movement resets the timer. Look for "Already running" in the log.after: and before: handles midnight for you. A template that compares times as text does not: "04:00" < "20:30" is true, so a "before bedtime" check written that way passes at four in the morning. If you have a template comparing times, replace it with a Time condition, and make sure every window has both a start and an end.on versus On, home versus a zone name, a number stored as 21.0 versus 21.Two causes don't show up in any of the above and are worth knowing about.
**A duplicated section in configuration.yaml.** If the file has two template: blocks (or two sensor: blocks, and so on), Home Assistant keeps only the last one. Every sensor defined in the first block silently stops existing. The config check passes. Automations that depend on those sensors stop working with no error. Search your config for any top-level key that appears twice, and merge them into one.
A threshold that fires without anything crossing. After a restart or a blip to unavailable, a numeric trigger can fire as soon as the real value comes back, even though nothing crossed the threshold. That's the opposite of "not triggering", but it's the same investigation, and the fix (a condition that checks where the value came from) costs you real crossings too, so only add it where a false trigger is expensive.
Do it properly
restart for motion lights, queued for things that must happen in order, parallel for independent runs, single for one-off notifications.entity_id, not device_id, in triggers, conditions and actions.Or we'll look for you — from A$29, no subscription. We find and repair broken references (Repair, A$89); a trigger, condition or mode that needs changing, we point out in the report for you to change.