CCCPaste

Indstil sluttid for opladning

alias: Indstil sluttid for opladning
description: "Sætter bilens opladningsdeadline baseret på kalenderaftaler og live rejsetid (inkl. 15 min. buffer), og deaktiverer hvis deadline er passeret eller er over 24 timer væk."
triggers:
  - alias: Når det er en ny dag
    trigger: time
    at: "00:01:00"
  - alias: Når lokationen for den næste aftale skifter
    trigger: state
    entity_id:
      - sensor.location_next_event
    to: null
    for: "00:00:05"
  - alias: Når tiden for den næste aftale skifter
    trigger: state
    entity_id:
      - sensor.location_next_event
    attribute: start_time
    for: "00:00:05"
  - trigger: state
    entity_id:
      - binary_sensor.monta_dino_juice_eliminator_cable_plugged_in
    to: "on"
    alias: Når bilen sættes til opladning
conditions: []
actions:
  - variables:
      buffer_time: 15
      valid_options: >-
        {# Hent alle muligheder fra EV Smart Charging #}
        {{ state_attr('select.ev_smart_charging_charge_completion_time', 'options') | default([]) }}
      deadline_option: >-
        {# Hent aftalens starttid og dens rejsetid #}
        {% set start_time = state_attr('sensor.location_next_event', 'start_time') | as_datetime | as_local %}
        {% set travel_time = states('sensor.rejsetid_naeste_aftale') | default(0) | int %}
        {# Initialiserer med den sikre fallback #}
        {% set final_option = 0 %}
        
        {# Valider tider #}
        {% if start_time is not none and travel_time > 0 %}
          {# Beregn sluttidspunkt #}
          {% set end_time = start_time - timedelta(minutes = travel_time + buffer_time) %}
          {# Tjek at tidspunktet er i fremtiden og indenfor 24 timer #}
          {% if end_time > now() and end_time <= (now() + timedelta(hours=24)) %}
            {# Filtrerer gyldige tider (<= deadline) fra options og vælg det seneste. #}
            {% set final_option = valid_options 
              | select('<=', end_time.strftime('%H:%M')) 
              | list
              | last %}
          {% endif %}
        {% endif %}
        {# Kom med tidspunktet #}
        {{ final_option | default(0) }}
  - action: homeassistant.update_entity
    metadata: {}
    data:
      entity_id:
        - sensor.rejsetid_naeste_aftale
    alias: Opdater rejsetiden til lokationen
    enabled: true
  - delay:
      hours: 0
      minutes: 0
      seconds: 5
      milliseconds: 0
    enabled: true
  - alias: Vælg mellem 2 muligheder
    choose:
      - conditions:
          - condition: template
            value_template: "{{ deadline_option != 0 }}"
            alias: Ikke 0
        sequence:
          - action: select.select_option
            metadata: {}
            data:
              option: "{{ deadline_option }}"
            target:
              entity_id: select.ev_smart_charging_charge_completion_time
            alias: Vælg tidspunktet
        alias: Vi har et tidspunkt
    default:
      - action: select.select_first
        metadata: {}
        data: {}
        target:
          entity_id: select.ev_smart_charging_charge_completion_time
mode: single