- binary_sensor: - name: tesla_charge_now state: > {% set deadline_raw = states('input_datetime.tesla_charge_deadline') %} {% set deadline_ts = as_timestamp(deadline_raw) if deadline_raw not in ['unknown','unavailable',''] else none %} {% set hours_needed = states('sensor.tesla_charge_hours_needed') | float(0) | round(0, 'ceil') %} {% set prices = (state_attr('sensor.energidataservice','today') or []) + (state_attr('sensor.energidataservice','tomorrow') or []) %} {# Filter gyldige slots før deadline #} {% set valid = [] %} {% for p in prices %} {% if p.hour %} {% set ts = as_timestamp(p.hour) %} {% if not deadline_ts or ts <= deadline_ts %} {% set valid = valid + [p] %} {% endif %} {% endif %} {% endfor %} {# Sortér kronologisk #} {% set valid = valid | sort(attribute='hour') %} {# Find billigste sammenhængende blok #} {% set best_block = [] %} {% set best_price = 999 %} {% for i in range(0, (valid | length) - hours_needed + 1) %} {% set block = valid[i:i+hours_needed] %} {% set total = block | map(attribute='price') | sum %} {% if total < best_price %} {% set best_price = total %} {% set best_block = block %} {% endif %} {% endfor %} {% set now_slot = now().replace(minute=0, second=0, microsecond=0).isoformat() %} {{ best_block | selectattr('hour','equalto',now_slot) | list | count > 0 }}