JLindvig

ev_tools

Nov 2nd, 2025 (edited)
648
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
YAML 2.99 KB | None | 0 0
  1. ev_tools:
  2.   group:
  3.    # Sikrer, at gruppen er ON, hvis en kalender har en begivenhed.
  4.     alle_aftale_kalendere:
  5.       name: Alle Kalendere med Aftaler
  6.       entities:
  7.        - calendar.broby_it
  8.         - calendar.jacob_lindvig_gmail_com
  9.         - calendar.plejefamilie
  10.         # Tilføj her alle andre kalender-entiteter, der indeholder aftaler med lokationer.
  11.  
  12.   template:
  13.     - sensor:
  14.         - name: Lokation for næste aftale
  15.           unique_id: 719b694ec3374083a3826a1690ee8eda
  16.           state: >
  17.            {# Hovedtilstanden returnerer lokationen fra den næste gyldige aftale #}
  18.             {% set next_event = state_attr(this.entity_id, 'next_event_data') %}
  19.             {{ next_event.location if next_event is not none else 'unavailable' }}
  20.           attributes:
  21.             has_valid_event: "{{ this.attributes.next_event_data is not none }}"
  22.             event_source: "{{ this.attributes.next_event_data.source if next_event_data is not none else 'N/A' }}"
  23.             start_time: "{{ this.attributes.next_event_data.start_time if next_event_data is not none else 'unavailable' }}"
  24.  
  25.             # --- AVANCERET LOGIK: FINDER NÆRMESTE EKSTERNE AFTALE ---
  26.             next_event_data: >-
  27.               {# Namespace til at akkumulere gyldige begivenheder #}
  28.               {% set ns = namespace(valid_events = []) %}
  29.               {# Elementer fra ens adresse (gade, nummer, postnummer) #}
  30.               {% set HOME_FILTERS = ['egevej', '17', '7000'] %}
  31.  
  32.               {# Itererer kalendere og henter starttid/lokation for hver aftale. #}
  33.               {% for entity_id in state_attr('group.alle_aftale_kalendere', 'entity_id') | default([]) %}
  34.                 {% set start_time_str = state_attr(entity_id, 'start_time') %}
  35.                 {% set location = state_attr(entity_id, 'location') %}
  36.  
  37.                 {# Tjekker om aftalen er ude af huset (True, hvis mindst ét hjemme-filter ikke matcher). #}
  38.                 {% set is_external_event = HOME_FILTERS
  39.                   | reject('in', location | lower)
  40.                   | list
  41.                   | length > 0 %}
  42.  
  43.                 {# 1. FØR-FILTER: Validerer rå data (Ikke tomme eller ugyldige) #}
  44.                 {% if start_time_str is not none and location is not none and location | trim != '' %}
  45.                   {# 2. HOVEDFILTER: Skal være i fremtiden OG kræve ekstern kørsel #}
  46.                   {% if start_time_str | as_datetime | as_local > now() and is_external_event %}
  47.                     {# AKKUMULERING: Gemmer de rensede aftaledata i namespacen #}
  48.                     {% set ns.valid_events = ns.valid_events + [{
  49.                       'start_time': start_time_str,
  50.                       'location': location,
  51.                       'source': entity_id
  52.                     }] %}
  53.                   {% endif %}
  54.                 {% endif %}
  55.               {% endfor %}
  56.               {# 3. FINAL OUTPUT: Vælger den tidligste begivenhed fra listen #}
  57.               {{ ns.valid_events | min(attribute='start_time') }}
  58.  
Advertisement
Add Comment
Please, Sign In to add comment