diff --git a/include/templates/tesla_charging.yaml b/include/templates/tesla_charging.yaml index 70b8aa5..d7f0cca 100644 --- a/include/templates/tesla_charging.yaml +++ b/include/templates/tesla_charging.yaml @@ -6,7 +6,7 @@ sensors: {% set capacity = 75 %} {% set soc = states('sensor.snowywhite_battery') | float(0) %} {% set limit = states('number.snowywhite_charge_limit') | float(100) %} - {{ ((limit - soc)/100 * capacity)|round(2) }} + {{ [0, ((limit - soc)/100 * capacity)] | max | round(2) }} tesla_charge_hours_needed: friendly_name: "Tesla Charge Hours Needed" @@ -16,6 +16,40 @@ sensors: {% set kwh = states('sensor.tesla_kwh_needed') | float(0) %} {{ (kwh / power)|round(2) }} + tesla_charging_plan: + friendly_name: "Tesla Charging Plan" + value_template: > + {% 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 = [1, + states('sensor.tesla_charge_hours_needed') | float(0) | round(0, 'ceil') + ] | max %} + + {% set prices = (state_attr('sensor.energidataservice','today') or []) + + (state_attr('sensor.energidataservice','tomorrow') or []) %} + + {% set valid = [] %} + {% for p in prices %} + {% if p.hour is defined and p.hour %} + {% set ts = as_timestamp(p.hour) %} + {% if not deadline_ts or ts <= deadline_ts %} + {% set valid = valid + [p] %} + {% endif %} + {% endif %} + {% endfor %} + + {% set cheapest = (valid | sort(attribute='price'))[:hours_needed] %} + + {% set times = cheapest + | map(attribute='hour') + | map('as_timestamp') + | map('timestamp_local') + | list %} + + {{ times | join(', ') if times | count > 0 else 'none' }} + binary_sensors: tesla_charge_now: friendly_name: "Tesla Charge Now"