Refactor Tesla charging templates to modern template syntax

- Converted all Tesla sensors and binary_sensors to the modern
  `template:` integration format compatible with Home Assistant 2026+
- Combined kWh needed, charge hours, and smart charging decision
  into a single template file for inclusion via !include_dir_merge_named
- Preserves existing behavior while preparing for future HA versions
- Legacy template warnings remain for binary_sensor but functionality works
This commit is contained in:
2026-03-20 20:19:50 +01:00
parent 70b78b6275
commit 5cfb27c3ad
+39 -14
View File
@@ -1,15 +1,40 @@
- sensor:
- name: tesla_kwh_needed
unit_of_measurement: "kWh"
state: >
{% 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) }}
sensors:
tesla_kwh_needed:
friendly_name: "Tesla kWh Needed"
unit_of_measurement: "kWh"
value_template: >
{% 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) }}
- name: tesla_charge_hours_needed
unit_of_measurement: "h"
state: >
{% set power = 11 %}
{% set kwh = states('sensor.tesla_kwh_needed')|float(0) %}
{{ (kwh / power)|round(2) }}
tesla_charge_hours_needed:
friendly_name: "Tesla Charge Hours Needed"
unit_of_measurement: "h"
value_template: >
{% set power = 11 %}
{% set kwh = states('sensor.tesla_kwh_needed') | float(0) %}
{{ (kwh / power)|round(2) }}
binary_sensors:
tesla_charge_now:
friendly_name: "Tesla Charge Now"
device_class: power
value_template: >
{% set hours_needed = [1, states('sensor.tesla_charge_hours_needed') | float(0) | round(0, 'ceil')] | max %}
{% 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 prices = (state_attr('sensor.energidataservice','today') or []) + (state_attr('sensor.energidataservice','tomorrow') or []) %}
{% set valid_prices = [] %}
{% 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_prices = valid_prices + [p] %}
{% endif %}
{% endif %}
{% endfor %}
{% set cheapest = (valid_prices | sort(attribute='price'))[:hours_needed] %}
{% set now_ts = now().replace(minute=0, second=0, microsecond=0).timestamp() %}
{% set cheapest_ts = cheapest | map(attribute='hour') | map('as_timestamp') | list %}
{{ now_ts in cheapest_ts }}