Determining if people are home or away in Home Assistant

These snippets help us determine if people are home or away, how long they’ve been away, and what type of away mode the home is currently in. I use these in an upcoming video about controlling your home’s climate in Home Assistant.

The first is a binary sensor helper (binary_sensor.people_home) for determining if people are home. You could extend this to include readings from presence sensors, but this template only relies on the home zone’s persons attribute that lists the people currently within the zone. If your home zone is different from zone.home, make sure you update the template accordingly.

{{ state_attr('zone.home', 'persons') | length > 0 }}

The next is an automation that sets a date/time input helper (input_datetime.away_since) when the sensor above changes to zero.

alias: Set away since timestamp
description: ""
triggers:
  - trigger: state
    entity_id:
      - binary_sensor.people_home
    to: "0"
conditions: []
actions:
  - action: input_datetime.set_datetime
    metadata: {}
    data:
      datetime: "{{ now() }}"
    target:
      entity_id: input_datetime.away_since
mode: single

Bringing it all together, we create a template sensor helper (sensor.away_mode) that represents how long the zone has been empty with one of three options: home, away, and extended.

  • If the zone hasn’t been occupied for at least the last 30 minutes, away is used.
  • If the zone hasn’t been occupied for at least the last 12 hours, extended is used.
  • Otherwise, home is used.
{% if states('binary_sensor.people_home') == 'on' %}
  home
{% elif as_local( as_datetime( states('input_datetime.away_since') ) ) < (now() - timedelta(hours=12)) %}
  extended
{% elif as_local( as_datetime( states('input_datetime.away_since') ) ) < (now() - timedelta(minutes=30)) %}
  away
{% else %}
  home
{% endif %}

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *