# Derived template sensors for the eg4-battery daemon's 3-pack stack. # Include into configuration.yaml as: # template: !include eg4_battery/template_sensors.yaml # # Per-pack entities created: # sensor.lifepower4_N_pack_power W (V × I, signed; + = charging) # sensor.lifepower4_N_temperature_max °C (max of 5 temp sensors) # sensor.lifepower4_N_cell_imbalance_pct % (delta / min_cell) × 100 # # Stack-wide rollups: # sensor.lifepower4_stack_pack_power_total W (sum of all 3 pack_powers) # sensor.lifepower4_stack_soc_avg % (average SoC across packs) # sensor.lifepower4_stack_temperature_max °C (hottest point anywhere) - sensor: # ---- pack 1 ---- - name: "lifepower4_1 pack_power" unique_id: lifepower4_1_pack_power unit_of_measurement: "W" device_class: power state_class: measurement state: > {% set v = states('sensor.lifepower4_1_pack_voltage') | float(0) %} {% set i = states('sensor.lifepower4_1_pack_current') | float(0) %} {{ (v * i) | round(1) }} - name: "lifepower4_1 temperature_max" unique_id: lifepower4_1_temperature_max unit_of_measurement: "°C" device_class: temperature state_class: measurement state: > {% set t = [ states('sensor.lifepower4_1_temperature_01') | int(0), states('sensor.lifepower4_1_temperature_02') | int(0), states('sensor.lifepower4_1_temperature_03') | int(0), states('sensor.lifepower4_1_temperature_04') | int(0), states('sensor.lifepower4_1_temperature_pcb') | int(0), ] %} {{ t | max }} - name: "lifepower4_1 cell_imbalance_pct" unique_id: lifepower4_1_cell_imbalance_pct unit_of_measurement: "%" state_class: measurement state: > {% set d = states('sensor.lifepower4_1_cell_voltage_delta_mv') | float(0) %} {% set mn = states('sensor.lifepower4_1_cell_voltage_min') | float(0) %} {{ (d / (mn * 1000) * 100) | round(3) if mn > 0 else 0 }} # ---- pack 2 ---- - name: "lifepower4_2 pack_power" unique_id: lifepower4_2_pack_power unit_of_measurement: "W" device_class: power state_class: measurement state: > {% set v = states('sensor.lifepower4_2_pack_voltage') | float(0) %} {% set i = states('sensor.lifepower4_2_pack_current') | float(0) %} {{ (v * i) | round(1) }} - name: "lifepower4_2 temperature_max" unique_id: lifepower4_2_temperature_max unit_of_measurement: "°C" device_class: temperature state_class: measurement state: > {% set t = [ states('sensor.lifepower4_2_temperature_01') | int(0), states('sensor.lifepower4_2_temperature_02') | int(0), states('sensor.lifepower4_2_temperature_03') | int(0), states('sensor.lifepower4_2_temperature_04') | int(0), states('sensor.lifepower4_2_temperature_pcb') | int(0), ] %} {{ t | max }} - name: "lifepower4_2 cell_imbalance_pct" unique_id: lifepower4_2_cell_imbalance_pct unit_of_measurement: "%" state_class: measurement state: > {% set d = states('sensor.lifepower4_2_cell_voltage_delta_mv') | float(0) %} {% set mn = states('sensor.lifepower4_2_cell_voltage_min') | float(0) %} {{ (d / (mn * 1000) * 100) | round(3) if mn > 0 else 0 }} # ---- pack 3 ---- - name: "lifepower4_3 pack_power" unique_id: lifepower4_3_pack_power unit_of_measurement: "W" device_class: power state_class: measurement state: > {% set v = states('sensor.lifepower4_3_pack_voltage') | float(0) %} {% set i = states('sensor.lifepower4_3_pack_current') | float(0) %} {{ (v * i) | round(1) }} - name: "lifepower4_3 temperature_max" unique_id: lifepower4_3_temperature_max unit_of_measurement: "°C" device_class: temperature state_class: measurement state: > {% set t = [ states('sensor.lifepower4_3_temperature_01') | int(0), states('sensor.lifepower4_3_temperature_02') | int(0), states('sensor.lifepower4_3_temperature_03') | int(0), states('sensor.lifepower4_3_temperature_04') | int(0), states('sensor.lifepower4_3_temperature_pcb') | int(0), ] %} {{ t | max }} - name: "lifepower4_3 cell_imbalance_pct" unique_id: lifepower4_3_cell_imbalance_pct unit_of_measurement: "%" state_class: measurement state: > {% set d = states('sensor.lifepower4_3_cell_voltage_delta_mv') | float(0) %} {% set mn = states('sensor.lifepower4_3_cell_voltage_min') | float(0) %} {{ (d / (mn * 1000) * 100) | round(3) if mn > 0 else 0 }} # ---- stack-wide rollups ---- - name: "lifepower4_stack pack_power_total" unique_id: lifepower4_stack_pack_power_total unit_of_measurement: "W" device_class: power state_class: measurement state: > {% set p = [ states('sensor.lifepower4_1_pack_power') | float(0), states('sensor.lifepower4_2_pack_power') | float(0), states('sensor.lifepower4_3_pack_power') | float(0), ] %} {{ p | sum | round(1) }} - name: "lifepower4_stack soc_avg" unique_id: lifepower4_stack_soc_avg unit_of_measurement: "%" device_class: battery state_class: measurement state: > {% set s = [ states('sensor.lifepower4_1_soc') | float(0), states('sensor.lifepower4_2_soc') | float(0), states('sensor.lifepower4_3_soc') | float(0), ] %} {{ (s | sum / s | length) | round(1) }} - name: "lifepower4_stack temperature_max" unique_id: lifepower4_stack_temperature_max unit_of_measurement: "°C" device_class: temperature state_class: measurement state: > {% set t = [ states('sensor.lifepower4_1_temperature_max') | int(0), states('sensor.lifepower4_2_temperature_max') | int(0), states('sensor.lifepower4_3_temperature_max') | int(0), ] %} {{ t | max }} # --- integration → energy (pack_power integrated to Wh) --- # Paste this at the top level of configuration.yaml, NOT inside `template:`: # # sensor: # - platform: integration # source: sensor.lifepower4_1_pack_power # name: lifepower4_1_pack_energy # unit_prefix: k # round: 3 # method: left # # ... repeat for pack 2 and 3 ... # # Then wire the resulting sensor.lifepower4_N_pack_energy into the HA # Energy dashboard → Home battery storage → one entry per pack.