Graceful Shutdown Sensor

OK, tried it. Still doesn’t trigger

type or paste code here

I don’t know what to tell you other than it works for me.

I’m using two Event Triggers (to detect homeassistant_started and homeassistant_stop) in a Trigger-based Template Sensor that records the time when Home Assistant starts and stops (i.e. shutdown).

I don’t use it in any automation, but in the mqtt integration it has the “Enable will message” option that apparently works fine.

You could set the will message to “Soft restart” and check it when the HA starts.
If topic = “Soft restart” do nothing and set the topic to “Running”
If topic = “Running” HA was not turned off properly, run your automations and set the topic to “Running”.

It wasn’t well explained, but I think it’s enough for you to get the idea.

Here’s a Trigger-based Template Sensor I recently created that reports one of two states on startup:

  • start if Home Assistant was shutdown normally prior to starting.
  • interrupt if Home Assistant was not shutdown normally prior to starting.

It also maintains a history of the ten most recent stop/started events, sorted in reverse chronological order (i.e. most recent is first). This attribute is optional.

- trigger:
    - platform: event
        - homeassistant_started
        - homeassistant_stop
    - name: Start Stop
      state: >
        {% if trigger.event.event_type == 'homeassistant_started' %}
          {{ iif(this.state|default('unknown') == 'shutdown', 'start', 'interrupt') }}
        {% else %}
        {% endif %}
        history: >
          {% set current = this.attributes.get('history', []) %}
          {% set new = [{
            "event": trigger.event.event_type[14:],
            "time": now().isoformat() }] %}
          {{ (new + current)[:10] }}

After creating the Trigger-based Template Sensor, it will initially report unknown. Initialize it by restarting Home Assistant (Developer Tools> YAML > Restart). On startup, it should now report start.

Here’s what it looks like on startup after Home Assistant was interrupted (i.e. not shutdown properly). The sensor reports interrupt. The history attribute shows there was no stop event prior to the most recent started event, indicating Home Assistant had been interrupted and didn’t get a chance to shutdown normally.

You can create an automation with a State Trigger to monitor the sensor when it changes to: interrupt and have it notify you that there was a recent interruption (potentially due to a power failure).


Originally I tried to have the Event Trigger detect homeassistant_start which occurs before homeassistant_started but it failed to be detected. I assume it may be because the Template integration is loaded after the homeassistant_start event occurs so the Trigger-based Template Sensor never gets the opportunity to detect it.


The history attribute is optional and can be eliminated without affecting the sensor’s operation. It’s included merely as a convenience; the sensor’s recorded History (i.e. in the database) shows the same information.


This is very clever. Thank you for sharing it.

That is indeed clever. And it seems to work for me too. Maybe because it’s not part of an automation. Whereas what I was trying was part of an automation.
Thanks very much.

1 Like

You’re welcome!

Please consider marking my post above with the Solution tag. It will automatically place a check-mark next to the topic’s title which signals to other users that this topic has been resolved. This helps users find answers to similar questions.

For more information about the Solution tag, refer to guideline 21 in the FAQ.

I have used this idea to create an event state history for timers which will allow me to differentiate between timer.started, timer.paused, timer.restarted, timer.cancelled, and timer.finished instead of the timer states of active, idle, and paused.

Thank you, again, for the seed.