Home Assistant Template

Using “Anniversary sensor for upcoming events for Home Assistant” it’s possible to get a list of events in the attributes. It is configured in the sensors yaml file.

 platform: anniversary
  name: events
  multiple: true
  items: 3
  anniversaries:
    - event: 'Jane'
      date: '2099-01-01'
      icon: mdi:cake-variant
      type: birthday

To get a nice sentence based result for Alexa speak announcements I use:

{%- macro ex(n) -%}
{%- set e = n |string %}
{%- set e = e [-1]%}
{%- if n in [11,12,13,14,15,16,17,18,19] %}
{%- set ex = 'th' %}
{%- elif e == '1' %}
{%- set ex = 'st' %}
{%- elif e == '2' %}
{%- set ex = 'nd' %}
{%- elif e == '3' %}
{%- set ex = 'rd' %}
{%- else %}
{%- set ex = 'th' %}
{%- endif %}{{ex}}
{%- endmacro %}
{%- macro indays(d) %}
{%- set dn = d | float%}
{%- if dn | float == 1 %}
{%- set t = 'tomorrow' %}
{%- elif dn == 0 %}{%- set t = 'today' %}
{%- else %}
{%- set t = 'in ' + d + ' days' %}
{%- endif %}{{ t}}
{%- endmacro -%}
{%- for state in state_attr('sensor.events','events')|list %}
{%- if state.event_in | float < 30 %}
{%- endif %}{{- state.event }}'s {{state.anniversary}}{{ex(state.anniversary)}} {{state.type}} {{indays(state.event_in)}}  
{%- endif %}
{% endfor %}

This provides a readable output using 1st or 2nd rather than just a simple number for the age/anniversary number.

To add icons and limit to events in the next month this can be used in a panel.

{%- macro ex(n) -%}
{%- set e = n |string %}
{%- set e = e [-1]%}
{%- if n in [11,12,13,14,15,16,17,18,19] %}
{%- set ex = 'th' %}
{%- elif e == '1' %}
{%- set ex = 'st' %}
{%- elif e == '2' %}
{%- set ex = 'nd' %}
{%- elif e == '3' %}
{%- set ex = 'rd' %}
{%- else %}
{%- set ex = 'th' %}
{%- endif %}{{ex}}
{%- endmacro %}
{%- macro indays(d) %}
{%- set dn = d | float%}
{%- if dn | float == 1 %}
{%- set t = 'tomorrow' %}
{%- elif dn == 0 %}{%- set t = 'today' %}
{%- else %}
{%- set t = 'in ' + d + ' days' %}
{%- endif %}{{ t}}
{%- endmacro -%}
{%- for state in state_attr('sensor.events','events')|list %}
{%- if state.event_in | float < 30 %}
{%- if state.type == 'birthday' %}
{%- set icon = 'mdi:cake' %}
{%- else %}
{%- set icon = 'mdi:bell' %}
{%- endif %}<ha-icon icon="{{icon}}"></ha-icon>&nbsp; {{- state.event }}'s {{state.anniversary}}{{ex(state.anniversary)}} {{state.type}} {{indays(state.event_in)}}  
{%- endif %}
{% endfor %}