Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 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') }}
Advertisement
Add Comment
Please, Sign In to add comment