This commit is contained in:
2026-03-24 18:25:18 +01:00
parent 64032e6682
commit 7f0859f446
+41
View File
@@ -0,0 +1,41 @@
- 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 }}