It’s your template sensor in your home assistant instance… you get to choose what appropriate uses of attributes are. ![]()
In order to do it and minimize repeated templates, it’s better to structure it as one trigger-based sensor that gets the dates from the service call and two state-based sensors that process that into the attributes.
template:
- trigger:
- platform: time
at: "00:00:00"
- platform: homeassistant
event: start
action:
- service: calendar.get_events
data:
start_date_time: "{{today_at()}}"
duration:
days: 15
target:
entity_id: calendar.waste_pickup
response_variable: agenda
sensor:
- name: Waste Calendar Check
state: "{{ now() }}"
attributes:
date_map: |
{% set ns = namespace(types={}) %}
{% for type in ['Recycling', 'Trash'] %}
{% set date = (agenda['calendar.waste_pickup']['events'] | selectattr('summary', 'search', type, ignorecase=true)
| sort(attribute= 'start') | map(attribute='start') | map('as_datetime') | map('as_local') | first).date() %}
{% set ns.types = dict(ns.types, **{type: date|string}) %}
{%- endfor %}
{{ ns.types }}
- sensor:
- name: "Next Trash Pickup"
state: "{{ state_attr('sensor.waste_calendar_check', 'date_map')['Trash'] }}"
icon: mdi:calendar-arrow-right
<<: &waste_attr
attributes:
day_of_week: "{{ strptime(this.state, '%Y-%m-%d', now()).strftime('%A') }}"
days_until: |
{% set event = strptime(this.state, '%Y-%m-%d', now()) %}
{{ (event|as_local - today_at()).days }}
countdown: |
{% set delta = this.attributes.days_until %}
{% if delta == 0 %} Today
{% elif delta == 1 %} Tomorrow
{% elif delta == 2 %} Day after Tomorrow
{% else %} In {{ delta }} Days {% endif %}
- name: "Next Recycling Pickup"
state: "{{ state_attr('sensor.waste_calendar_check', 'date_map')['Recycling'] }}"
icon: mdi:calendar-arrow-right
<<: *waste_attr