Skip to content

Instantly share code, notes, and snippets.

@EverythingSmartHome
Last active November 9, 2025 07:01
Show Gist options
  • Save EverythingSmartHome/13f14c328669f72eee717752069a0398 to your computer and use it in GitHub Desktop.
Save EverythingSmartHome/13f14c328669f72eee717752069a0398 to your computer and use it in GitHub Desktop.
A collection of useful templates for Home Assistant dashboards
{{ states.binary_sensor
| selectattr('attributes.device_class', 'in', ['door','window'])
| selectattr('state', 'equalto', 'on')
| list | count }}
{% set AREAS = ['kitchen','office','bedroom','living room'] %}
{% set DOMAIN = 'light' %}
{% set ns = namespace(ids=[]) %}
{% for a in AREAS %}
{% set ns.ids = ns.ids + area_entities(a) %}
{% endfor %}
{{ expand(ns.ids|unique)
| selectattr('domain','equalto', DOMAIN)
| selectattr('state','equalto','on')
| list | count }}
# Security 🔏
{% if states.sensor.open_doors_and_windows.state | int > 0 %}
You have {{states.sensor.open_doors_and_windows.state}} doors/windows open.
{% else %}
All windows and doors are closed.
{% endif %}
## Lights 💡
You have {{states.sensor.kitchen_light_count.state}} lights on currently.
{% set area_id = 'kitchen' %}
{% set ents = expand(area_entities(area_id)) %}
{% set lights = ents
| selectattr('domain', 'equalto', 'media_player')
| selectattr('state', 'equalto', 'playing') %}
{{ lights | list | count }}
{% set area_id = 'kitchen' %}
{% set ents = expand(area_entities(area_id)) %}
{% set switch = ents
| selectattr('domain', 'equalto', 'switch')
| selectattr('state', 'equalto', 'on') %}
{{ switch | list | count }}
{% set time = now().hour %}
{% if time >= 5 and time < 12 %}
{% set greeting = 'Good morning' %}
{% elif time >= 12 and time < 17 %}
{% set greeting = 'Good afternoon' %}
{% elif time >= 17 and time < 24 %}
{% set greeting = 'Good evening' %}
{% elif time >= 0 and time < 5 %}
{% set greeting = 'You should be sleeping' %}
{% endif %}
# {{greeting}}, {{user}}!
{% set time = now().hour %}
{% if time >= 5 and time < 12 %}
{% set greeting = 'Good morning' %}
{% elif time >= 12 and time < 17 %}
{% set greeting = 'Good afternoon' %}
{% elif time >= 17 and time < 24 %}
{% set greeting = 'Good evening' %}
{% elif time >= 0 and time < 5 %}
{% set greeting = 'You should be sleeping' %}
{% endif %}
{% if state_attr('calendar.lewis_s_calendar', 'start_time') == None %}
{% set cal_message = "you have no upcoming events, enjoy 🥳"%}
{% else %}
{% set start_time = state_attr('calendar.lewis_s_calendar', 'start_time') | as_timestamp | timestamp_custom("%H:%M", false) %}
{% set cal_message = "your next event is at " + start_time %}
{% endif %}
# {{greeting}}, {{user}}!
It's {{now().hour}}:{{now().minute}} and {{cal_message}}.
@geekee
Copy link

geekee commented Oct 22, 2025

I wanted to show only lights on a particular floor so this worked nicely for me:

{{ floor_areas('first_floor')
   |map('area_entities')|sum(start=[])
   |select('match', 'light')|select('is_state', 'on')
   |rejectattr('entity_id', 'is_hidden_entity')
   |list|count }}

@DeFlanko
Copy link

Not sure if this fits here but if you ever wanted to know all devices that report energy in kWh:

{% for s in states.sensor
    if 'energy' in s.entity_id and s.attributes.unit_of_measurement == 'kWh' %}
  - {{ s.entity_id }}: {{ s.state }} {{ s.attributes.unit_of_measurement }}
{% endfor %}

@joshbowman18-cell
Copy link

Any ideas on how you would add switches and Kasa outlets to the light count? Not outlets, just the one's I label "Lights"

@joshbowman18-cell
Copy link

Any ideas on how you would add switches and Kasa outlets to the light count? Not outlets, just the one's I label "Lights"

I found this Configuration that does it! https://www.home-assistant.io/integrations/switch_as_x/

@swrocks253
Copy link

How to add more area with "Switch On Count"? I tried use {% set area_id = ['living_room', 'bedroom'] %}.but no lucky

Thanks

Look how he did the light on count

@EverythingSmartHome
Copy link
Author

There is some great stuff in here, thanks everyone!

@HeatL1fer
Copy link

Is there a way to have the welcome msg with calendar even be in 12h format instead of 24?

@mdehaas
Copy link

mdehaas commented Nov 4, 2025

How to add more area with "Switch On Count"? I tried use {% set area_id = ['living_room', 'bedroom'] %}.but no lucky

Thanks

{% set AREAS = ['kitchen','office','bedroom','living room'] %}
{% set DOMAIN = 'switch' %}

{% set ns = namespace(ids=[]) %}
{% for a in AREAS %}
  {% set ns.ids = ns.ids + area_entities(a) %}
{% endfor %}
{{ expand(ns.ids|unique)
   | selectattr('domain','equalto', DOMAIN)
   | selectattr('state','equalto','on')
   | list | count }}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment