Files
shaggy-solar/eg4battery/homeassistant/template_sensors.yaml
2026-04-24 16:34:10 -04:00

175 lines
6.6 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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.