Skip to content

Instantly share code, notes, and snippets.

@Didgeridrew
Last active May 21, 2024 02:06
Show Gist options
  • Save Didgeridrew/b3e6ec256d21cfb154fc224874b0a0c6 to your computer and use it in GitHub Desktop.
Save Didgeridrew/b3e6ec256d21cfb154fc224874b0a0c6 to your computer and use it in GitHub Desktop.
HA: Trigger-based Template sensors for a selection of US Holidays
template:
- trigger:
- platform: homeassistant
event: start
- platform: time
at: "00:00:01"
sensor:
- name: "New Years Day"
unique_id: "37319374975705055206"
state: >
{%- set today = now().date() %}
{% set new_years = today.replace(month=1, day=1) %}
{% if new_years < now().date() %}
{% set new_years = today.replace(month=1, day=1, year= (now().year + 1)) %}
{% endif %}
{{ new_years }}
attributes:
days_until: >
{%- set today = now().date() %}
{% set new_years = today.replace(month=1, day=1) %}
{% if new_years < now().date() %}
{% set new_years = today.replace(month=1, day=1, year= (now().year + 1)) %}
{% endif %}
{% set x = new_years|string %}
{% set x = (((x|as_datetime|as_local).date() - now().date()).days)|int %}
{{ iif(x < 1, x + 365, x) }}
availability: "{{ now() is defined }}"
- name: "Dia de Los Reyes"
unique_id: "1984497531937520705056"
state: >
{%- set today = now().date() %}
{% set los_reyes = today.replace(month=1, day=6) %}
{% if los_reyes < now().date() %}
{% set los_reyes = today.replace(month=1, day=6, year= (now().year + 1)) %}
{% endif %}
{{ los_reyes }}
attributes:
days_until: >
{%- set today = now().date() %}
{% set los_reyes = today.replace(month=1, day=6) %}
{% if los_reyes < now().date() %}
{% set los_reyes = today.replace(month=1, day=6, year= (now().year + 1)) %}
{% endif %}
{% set x = los_reyes|string %}
{% set x = (((x|as_datetime|as_local).date() - now().date()).days)|int %}
{{ iif(x < 1, x + 365, x) }}
availability: "{{ now() is defined }}"
- name: "Martin Luther King Jr"
unique_id: "496217893819475026"
state: >
{%- set month, week, day = 1, 3, 0 %}
{%- set today = now().date() %}
{%- set temp = today.replace(month=month, day=1) %}
{%- set adjust = (day - temp.weekday()) % 7 %}
{%- set temp = temp + timedelta(days=adjust) %}
{%- set mlk = temp + timedelta(weeks = week-1) %}
{% set mlk = mlk|string|as_datetime|as_local %}
{{ iif(mlk < now(), (mlk + timedelta(days=365)).date(), mlk.date()) }}
attributes:
days_until: >
{%- set month, week, day = 1, 3, 0 %}
{%- set today = now().date() %}
{%- set temp = today.replace(month=month, day=1) %}
{%- set adjust = (day - temp.weekday()) % 7 %}
{%- set temp = temp + timedelta(days=adjust) %}
{%- set mlk = temp + timedelta(weeks = week-1) %}
{% set mlk = mlk|string|as_datetime|as_local %}
{% set x = mlk|string %}
{% set x = (((x|as_datetime|as_local).date() - now().date()).days)|int %}
{{ iif(x < 1, x + 365, x) }}
availability: "{{ now() is defined }}"
- name: "Valentines Day"
unique_id: "22719844595073910047"
state: >
{%- set today = now().date() %}
{% set valentines = today.replace(month=2, day=14) %}
{% if valentines < now().date() %}
{% set valentines = today.replace(month=2, day=14, year= (now().year + 1)) %}
{% endif %}
{{ valentines }}
attributes:
days_until: >
{%- set today = now().date() %}
{% set valentines = today.replace(month=2, day=14) %}
{% if valentines < now().date() %}
{% set valentines = today.replace(month=2, day=14, year= (now().year + 1)) %}
{% endif %}
{% set x = valentines|string %}
{% set x = (((x|as_datetime|as_local).date() - now().date()).days)|int %}
{{ iif(x < 1, x + 365, x) }}
availability: "{{ now() is defined }}"
- name: "Saint Patricks Day"
unique_id: "44595073912271980047"
state: >
{%- set today = now().date() %}
{% set st_patricks = today.replace(month=3, day=17) %}
{{ st_patricks }}
attributes:
days_until: >
{%- set today = now().date() %}
{% set st_patricks = today.replace(month=3, day=17) %}
{% set x = st_patricks|string %}
{% set x = (((x|as_datetime|as_local).date() - now().date()).days)|int %}
{{ iif(x < 1, x + 365, x) }}
availability: "{{ now() is defined }}"
- name: "Mardi Gras"
unique_id: "734459509122779462132"
state: >
{%- set today = now().date() %}
{% set easters = ['2022-04-17', '2023-04-09', '2024-03-31', '2025-04-20', '2026-04-05', '2027-03-28'] %}
{% set mardi_gras = easters|select('gt', today|string)|first %}
{{ (mardi_gras|as_datetime - timedelta(days = 47)).date()}}
attributes:
days_until: >
{%- set today = now().date() %}
{% set easters = ['2022-04-17', '2023-04-09', '2024-03-31', '2025-04-20', '2026-04-05', '2027-03-28'] %}
{% set mardi_gras = easters|select('gt', today|string)|first %}
{% set x = (mardi_gras|as_datetime - timedelta(days = 47)).date() %}
{% set x = ((x - now().date()).days)|int %}
{{ iif(x < 1, x + 365, x) }}
availability: "{{ now() is defined }}"
- name: "Easter"
unique_id: "189497506268132794"
state: >
{%- set today = now().date() %}
{% set easters = ['2022-04-17', '2023-04-09', '2024-03-31', '2025-04-20', '2026-04-05', '2027-03-28'] %}
{% set next_easter = easters|select('gt', today|string)|first %}
{{ next_easter }}
attributes:
days_until: >
{%- set today = now().date() %}
{% set easters = ['2022-04-17', '2023-04-09', '2024-03-31', '2025-04-20', '2026-04-05', '2027-03-28'] %}
{% set next_easter = easters|select('gt', today|string)|first %}
{% set x = next_easter|string %}
{% set x = (((x|as_datetime|as_local).date() - now().date()).days)|int %}
{{ iif(x < 1, x + 365, x) }}
availability: "{{ now() is defined }}"
- name: "Mothers Day"
unique_id: "749819475062189326"
state: >
{%- set month, week, day = 5, 2, 6 %}
{%- set today = now().date() %}
{%- set temp = today.replace(month=month, day=1) %}
{%- set adjust = (day - temp.weekday()) % 7 %}
{%- set temp = temp + timedelta(days=adjust) %}
{%- set mothers_day = temp + timedelta(weeks = week-1) %}
{{ mothers_day }}
attributes:
days_until: >
{%- set month, week, day = 5, 2, 6 %}
{%- set today = now().date() %}
{%- set temp = today.replace(month=month, day=1) %}
{%- set adjust = (day - temp.weekday()) % 7 %}
{%- set temp = temp + timedelta(days=adjust) %}
{%- set mothers_day = temp + timedelta(weeks = week-1) %}
{% set x = mothers_day|string%}
{% set x = (((x|as_datetime|as_local).date() - now().date()).days)|int %}
{{ iif(x < 1, x + 365, x) }}
availability: "{{ now() is defined }}"
- name: "Fathers Day"
unique_id: "962741899473268150"
state: >
{%- set month, week, day = 6, 3, 6 %}
{%- set today = now().date() %}
{%- set temp = today.replace(month=month, day=1) %}
{%- set adjust = (day - temp.weekday()) % 7 %}
{%- set temp = temp + timedelta(days=adjust) %}
{%- set fathers_day = temp + timedelta(weeks = week-1) %}
{{ fathers_day }}
attributes:
days_until: >
{%- set month, week, day = 6, 3, 6 %}
{%- set today = now().date() %}
{%- set temp = today.replace(month=month, day=1) %}
{%- set adjust = (day - temp.weekday()) % 7 %}
{%- set temp = temp + timedelta(days=adjust) %}
{%- set fathers_day = temp + timedelta(weeks = week-1) %}
{%- set x = fathers_day|string%}
{% set x = (((x|as_datetime|as_local).date() - now().date()).days)|int %}
{{ iif(x < 1, x + 365, x) }}
availability: "{{ now() is defined }}"
- name: Halloween
unique_id: "947396278926815041"
state: >
{%- set today = now().date() %}
{% set halloween = today.replace(month=10, day=31) %}
{{ halloween }}
attributes:
days_until: >
{%- set today = now().date() %}
{% set halloween = today.replace(month=10, day=31) %}
{% set x = halloween|string %}
{% set x = (((x|as_datetime|as_local).date() - now().date()).days)|int %}
{{ iif(x < 1, x + 365, x) }}
availability: "{{ now() is defined }}"
- name: "Veterans Day"
unique_id: "31975705053740693752"
state: >
{%- set today = now().date() %}
{% set veterans = today.replace(month=11, day=11) %}
{% if veterans < now().date() %}
{% set veterans = today.replace(month=11, day=11, year= (now().year + 1)) %}
{% endif %}
{{ veterans }}
attributes:
days_until: >
{%- set today = now().date() %}
{% set veterans = today.replace(month=11, day=11) %}
{% if veterans < now().date() %}
{% set veterans = today.replace(month=11, day=11, year= (now().year + 1)) %}
{% endif %}
{% set x = veterans|string %}
{% set x = (((x|as_datetime|as_local).date() - now().date()).days)|int %}
{{ iif(x < 1, x + 365, x) }}
availability: "{{ now() is defined }}"
- name: Christmas
unique_id: "14318885502034384968"
state: >
{%- set today = now().date() %}
{% set christmas = today.replace(month=12, day=25) %}
{{ christmas }}
attributes:
days_until: >
{%- set today = now().date() %}
{% set christmas = today.replace(month=12, day=25) %}
{% set x = christmas|string %}
{% set x = (((x|as_datetime|as_local).date() - now().date()).days)|int %}
{{ iif(x < 1, x + 365, x) }}
availability: "{{ now() is defined }}"
- name: Thanksgiving
unique_id: "69425309251060427914"
state: >
{%- set month, week, day = 11, 4, 3 %}
{%- set today = now().date() %}
{%- set temp = today.replace(month=month, day=1) %}
{%- set adjust = (day - temp.weekday()) % 7 %}
{%- set temp = temp + timedelta(days=adjust) %}
{%- set thanksgiving = temp + timedelta(weeks = week-1) %}
{{ thanksgiving }}
attributes:
days_until: >
{%- set month, week, day = 11, 4, 3 %}
{%- set today = now().date() %}
{%- set temp = today.replace(month=month, day=1) %}
{%- set adjust = (day - temp.weekday()) % 7 %}
{%- set temp = temp + timedelta(days=adjust) %}
{%- set thanksgiving = temp + timedelta(weeks = week-1) %}
{% set x = thanksgiving|string %}
{% set x = (((x|as_datetime|as_local).date() - now().date()).days)|int %}
{{ iif(x < 1, x + 365, x) }}
availability: "{{ now() is defined }}"
- name: Independence Day
unique_id: "9084317551034684857"
state: >
{%- set today = now().date() %}
{%- set temp = today.replace(month=7, day=4) %}
{%- set independence = temp %}
{{ independence }}
attributes:
days_until: >
{%- set today = now().date() %}
{%- set temp = today.replace(month=7, day=4) %}
{%- set x = temp|string %}
{% set x = (((x|as_datetime|as_local).date() - now().date()).days)|int %}
{{ iif(x < 1, x + 365, x) }}
availability: "{{ now() is defined }}"
- name: Memorial Day
unique_id: "20611770923315821822"
state: >
{%- set month, week, day = 5, 5, 0 %}
{%- set today = now().date() %}
{%- set temp = today.replace(month=month, day=1) %}
{%- set adjust = (day - temp.weekday()) % 7 %}
{%- set temp = temp + timedelta(days=adjust) %}
{%- set memorial = temp + timedelta(weeks = week - 1) %}
{{memorial}}
attributes:
days_until: >
{%- set month, week, day = 5, 5, 0 %}
{%- set today = now().date() %}
{%- set temp = today.replace(month=month, day=1) %}
{%- set adjust = (day - temp.weekday()) % 7 %}
{%- set temp = temp + timedelta(days=adjust) %}
{%- set memorial = temp + timedelta(weeks = week - 1) %}
{% set x = memorial|string %}
{% set x = (((x|as_datetime|as_local).date() - now().date()).days)|int %}
{{ iif(x < 1, x + 365, x) }}
availability: "{{ now() is defined }}"
- name: Labor Day
unique_id: "78754309251267813130"
state: >
{%- set month, week, day = 9, 1, 0 %}
{%- set today = now().date() %}
{%- set temp = today.replace(month=month, day=1) %}
{%- set adjust = (day - temp.weekday()) % 7 %}
{%- set temp = temp + timedelta(days=adjust) %}
{%- set labor = temp + timedelta(weeks = week - 1) %}
{{labor}}
attributes:
days_until: >
{%- set month, week, day = 9, 1, 0 %}
{%- set today = now().date() %}
{%- set temp = today.replace(month=month, day=1) %}
{%- set adjust = (day - temp.weekday()) % 7 %}
{%- set temp = temp + timedelta(days=adjust) %}
{%- set labor = temp + timedelta(weeks = week - 1) %}
{% set x = labor|string%}
{% set x = (((x|as_datetime|as_local).date() - now().date()).days)|int %}
{{ iif(x < 1, x + 365, x) }}
availability: "{{ now() is defined }}"
- name: Dia de Muertos
unique_id: "9750858485431103467"
state: >
{%- set today = now().date() %}
{%- set muertos = today.replace(month=11, day=2) %}
{{ muertos }}
attributes:
days_until: >
{%- set today = now().date() %}
{%- set muertos = today.replace(month=11, day=2) %}
{% set x = muertos|string %}
{% set x = (((x|as_datetime|as_local).date() - now().date()).days)|int %}
{{ iif(x < 1, x + 365, x) }}
availability: "{{ now() is defined }}"
- name: Rex Manning Day
unique_id: "4690662543745975107"
state: >
{%- set today = now().date() %}
{%- set rex_manning = today.replace(month=4, day=8) %}
{{ rex_manning }}
attributes:
days_until: >
{%- set today = now().date() %}
{%- set rex_manning = today.replace(month=4, day=8) %}
{% set x = rex_manning|string %}
{% set x = (((x|as_datetime|as_local).date() - now().date()).days)|int %}
{{ iif(x < 1, x + 365, x) }}
availability: "{{ now() is defined }}"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment