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') }}