Skip to content

Instantly share code, notes, and snippets.

@ExeQue
Created May 5, 2025 19:30
Show Gist options
  • Save ExeQue/15e25001fa84f9bb312da3d86fb23c84 to your computer and use it in GitHub Desktop.
Save ExeQue/15e25001fa84f9bb312da3d86fb23c84 to your computer and use it in GitHub Desktop.
Home Assistant Garbage
template:
# Template sensor to store the list of dates
- sensor:
- name: "Relevant Dates"
state: >
{% set dates = [
"2025-05-03",
"2025-05-04",
"2025-05-05",
"2025-05-07"
] %}
{{ dates | join(',') }}
# Main template sensor to calculate the next relevant date and its attributes
- sensor:
- name: "Next Relevant Date"
state: >
{% set dates = states('sensor.relevant_dates').split(',') %}
{% set today = now().date() %}
{% set future_dates = dates | map('as_datetime') | selectattr('date', '>=', today) | list %}
{% set next_date = future_dates[0] if future_dates | length > 0 else None %}
{{ next_date.date() if next_date else 'None' }}
attributes:
name: "Genbrug"
title: >
{% set dates = states('sensor.relevant_dates').split(',') %}
{% set today = now().date() %}
{% set future_dates = dates | map('as_datetime') | selectattr('date', '>=', today) | list %}
{% set next_date = future_dates[0] if future_dates | length > 0 else None %}
{% if next_date %}
{{ next_date.strftime('%A d. %-d. %B') }} ({{ (next_date.date() - today).days }} dag{{ 'e' if (next_date.date() - today).days != 1 else '' }})
{% else %}
Ingen kommende dato
{% endif %}
service: "Genbrug"
next_date: >
{% set dates = states('sensor.relevant_dates').split(',') %}
{% set today = now().date() %}
{% set future_dates = dates | map('as_datetime') | selectattr('date', '>=', today) | list %}
{% set next_date = future_dates[0] if future_dates | length > 0 else None %}
{{ next_date.date() if next_date else 'None' }}
next_local: >
{% set dates = states('sensor.relevant_dates').split(',') %}
{% set today = now().date() %}
{% set future_dates = dates | map('as_datetime') | selectattr('date', '>=', today) | list %}
{% set next_date = future_dates[0] if future_dates | length > 0 else None %}
{% if next_date %}
{{ next_date.strftime('%A d. %-d. %B') }}
{% else %}
Ingen kommende dato
{% endif %}
next_local_short: >
{% set dates = states('sensor.relevant_dates').split(',') %}
{% set today = now().date() %}
{% set future_dates = dates | map('as_datetime') | selectattr('date', '>=', today) | list %}
{% set next_date = future_dates[0] if future_dates | length > 0 else None %}
{% if next_date %}
d. {{ next_date.strftime('%-d. %B') }}
{% else %}
Ingen kommende dato
{% endif %}
next_day_long: >
{% set dates = states('sensor.relevant_dates').split(',') %}
{% set today = now().date() %}
{% set future_dates = dates | map('as_datetime') | selectattr('date', '>=', today) | list %}
{% set next_date = future_dates[0] if future_dates | length > 0 else None %}
{% if next_date %}
{{ next_date.strftime('%A') }}
{% else %}
Ingen kommende dato
{% endif %}
next_day_short: >
{% set dates = states('sensor.relevant_dates').split(',') %}
{% set today = now().date() %}
{% set future_dates = dates | map('as_datetime') | selectattr('date', '>=', today) | list %}
{% set next_date = future_dates[0] if future_dates | length > 0 else None %}
{% if next_date %}
{{ next_date.strftime('%a.') }}
{% else %}
Ingen kommende dato
{% endif %}
next_day_min: >
{% set dates = states('sensor.relevant_dates').split(',') %}
{% set today = now().date() %}
{% set future_dates = dates | map('as_datetime') | selectattr('date', '>=', today) | list %}
{% set next_date = future_dates[0] if future_dates | length > 0 else None %}
{% if next_date %}
{{ next_date.strftime('%a')[:2] }}.
{% else %}
Ingen kommende dato
{% endif %}
next_in_days: >
{% set dates = states('sensor.relevant_dates').split(',') %}
{% set today = now().date() %}
{% set future_dates = dates | map('as_datetime') | selectattr('date', '>=', today) | list %}
{% set next_date = future_dates[0] if future_dates | length > 0 else None %}
{{ (next_date.date() - today).days if next_date else 'None' }}
next_in_weeks: >
{% set dates = states('sensor.relevant_dates').split(',') %}
{% set today = now().date() %}
{% set future_dates = dates | map('as_datetime') | selectattr('date', '>=', today) | list %}
{% set next_date = future_dates[0] if future_dates | length > 0 else None %}
{{ ((next_date.date() - today).days // 7) if next_date else 'None' }}
next_in_months: >
{% set dates = states('sensor.relevant_dates').split(',') %}
{% set today = now().date() %}
{% set future_dates = dates | map('as_datetime') | selectattr('date', '>=', today) | list %}
{% set next_date = future_dates[0] if future_dates | length > 0 else None %}
{{ ((next_date.date().year - today.year) * 12 + (next_date.date().month - today.month)) if next_date else 'None' }}
next_in_human: >
{% set dates = states('sensor.relevant_dates').split(',') %}
{% set today = now().date() %}
{% set future_dates = dates | map('as_datetime') | selectattr('date', '>=', today) | list %}
{% set next_date = future_dates[0] if future_dates | length > 0 else None %}
{% if next_date %}
{% set days = (next_date.date() - today).days %}
{% if days == 1 %}
1 dag
{% else %}
{{ days }} dage
{% endif %}
{% else %}
Ingen kommende dato
{% endif %}
next_is_today: >
{% set dates = states('sensor.relevant_dates').split(',') %}
{% set today = now().date() %}
{% set future_dates = dates | map('as_datetime') | selectattr('date', '>=', today) | list %}
{% set next_date = future_dates[0] if future_dates | length > 0 else None %}
{{ next_date.date() == today if next_date else false }}
next_is_tomorrow: >
{% set dates = states('sensor.relevant_dates').split(',') %}
{% set today = now().date() %}
{% set future_dates = dates | map('as_datetime') | selectattr('date', '>=', today) | list %}
{% set next_date = future_dates[0] if future_dates | length > 0 else None %}
{{ next_date.date() == (today + timedelta(days=1)) if next_date else false }}
next_is_this_week: >
{% set dates = states('sensor.relevant_dates').split(',') %}
{% set today = now().date() %}
{% set future_dates = dates | map('as_datetime') | selectattr('date', '>=', today) | list %}
{% set next_date = future_dates[0] if future_dates | length > 0 else None %}
{{ next_date.isocalendar().week == now().isocalendar().week if next_date else false }}
next_is_this_month: >
{% set dates = states('sensor.relevant_dates').split(',') %}
{% set today = now().date() %}
{% set future_dates = dates | map('as_datetime') | selectattr('date', '>=', today) | list %}
{% set next_date = future_dates[0] if future_dates | length > 0 else None %}
{{ next_date.date().month == today.month if next_date else false }}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment