ev_tools:
group:
# Sikrer, at gruppen er ON, hvis en kalender har en begivenhed.
alle_aftale_kalendere:
name: Alle Kalendere med Aftaler
entities:
- calendar.broby_it
- calendar.jacob_lindvig_gmail_com
- calendar.plejefamilie
# Tilføj her alle andre kalender-entiteter, der indeholder aftaler med lokationer.
template:
- sensor:
- name: Lokation for næste aftale
unique_id: 719b694ec3374083a3826a1690ee8eda
state: >
{# Hovedtilstanden returnerer lokationen fra den næste gyldige aftale #}
{% set next_event = state_attr(this.entity_id, 'next_event_data') %}
{{ next_event.location if next_event is not none else 'unavailable' }}
attributes:
has_valid_event: "{{ this.attributes.next_event_data is not none }}"
event_source: "{{ this.attributes.next_event_data.source if next_event_data is not none else 'N/A' }}"
start_time: "{{ this.attributes.next_event_data.start_time if next_event_data is not none else 'unavailable' }}"
# --- AVANCERET LOGIK: FINDER NÆRMESTE EKSTERNE AFTALE ---
next_event_data: >-
{# Namespace til at akkumulere gyldige begivenheder #}
{% set ns = namespace(valid_events = []) %}
{# Elementer fra ens adresse (gade, nummer, postnummer) #}
{% set HOME_FILTERS = ['egevej', '17', '7000'] %}
{# Itererer kalendere og henter starttid/lokation for hver aftale. #}
{% for entity_id in state_attr('group.alle_aftale_kalendere', 'entity_id') | default([]) %}
{% set start_time_str = state_attr(entity_id, 'start_time') %}
{% set location = state_attr(entity_id, 'location') %}
{# Tjekker om aftalen er ude af huset (True, hvis mindst ét hjemme-filter ikke matcher). #}
{% set is_external_event = HOME_FILTERS
| reject('in', location | lower)
| list
| length > 0 %}
{# 1. FØR-FILTER: Validerer rå data (Ikke tomme eller ugyldige) #}
{% if start_time_str is not none and location is not none and location | trim != '' %}
{# 2. HOVEDFILTER: Skal være i fremtiden OG kræve ekstern kørsel #}
{% if start_time_str | as_datetime | as_local > now() and is_external_event %}
{# AKKUMULERING: Gemmer de rensede aftaledata i namespacen #}
{% set ns.valid_events = ns.valid_events + [{
'start_time': start_time_str,
'location': location,
'source': entity_id
}] %}
{% endif %}
{% endif %}
{% endfor %}
{# 3. FINAL OUTPUT: Vælger den tidligste begivenhed fra listen #}
{{ ns.valid_events | min(attribute='start_time') }}