From ae6b257404f18c21f3d08a99d427c942fd497479 Mon Sep 17 00:00:00 2001 From: Txu Date: Sun, 10 Nov 2024 18:07:37 +0100 Subject: [PATCH] All HA Dashboards unified in one --- ...and_2bms_slaves.yaml => WHOLE_SYSTEM.yaml} | 1883 ++++++++++++-- .../home_assistant_dashboards/batteries.yaml | 2222 ----------------- 2 files changed, 1679 insertions(+), 2426 deletions(-) rename components/jk_rs485_bms/home_assistant_dashboards/{0bms_master_and_2bms_slaves.yaml => WHOLE_SYSTEM.yaml} (56%) delete mode 100644 components/jk_rs485_bms/home_assistant_dashboards/batteries.yaml diff --git a/components/jk_rs485_bms/home_assistant_dashboards/0bms_master_and_2bms_slaves.yaml b/components/jk_rs485_bms/home_assistant_dashboards/WHOLE_SYSTEM.yaml similarity index 56% rename from components/jk_rs485_bms/home_assistant_dashboards/0bms_master_and_2bms_slaves.yaml rename to components/jk_rs485_bms/home_assistant_dashboards/WHOLE_SYSTEM.yaml index bc79dc26..0c41c6c4 100644 --- a/components/jk_rs485_bms/home_assistant_dashboards/0bms_master_and_2bms_slaves.yaml +++ b/components/jk_rs485_bms/home_assistant_dashboards/WHOLE_SYSTEM.yaml @@ -4,31 +4,126 @@ views: path: default_view badges: [] cards: - - type: entities - entities: - - entity: sensor.yambms_smart_bms_1_charging_instruction - name: Instruction - - entity: sensor.yambms_smart_bms_1_charging_status - name: Status - - entity: sensor.yambms_smart_bms_1_capacity_remaining_s - name: Remaining - - entity: sensor.yambms_smart_bms_1_battery_capacity_s - name: Battery Capacity (Σ) - - entity: sensor.yambms_smart_bms_1_charging_cycles_o - name: Cycles - - entity: sensor.yambms_smart_bms_1_current_s - name: Current - - entity: sensor.yambms_smart_bms_1_power_s - name: Power - - entity: sensor.yambms_smart_bms_1_total_voltage_o - name: Voltage - - entity: sensor.yambms_smart_bms_1_requested_charge_voltage - name: RCV - - entity: number.yambms_smart_bms_1_float_voltage - secondary_info: none - name: RFV - - entity: switch.broadcast_changes_to_all_bmss - state_color: false + - type: vertical-stack + cards: + - type: custom:stack-in-card + keep: + margin: false + box_shadow: false + background: false + cards: + - type: grid + square: false + columns: 1 + cards: + - type: markdown + content: >- + + {%- set total_bms = namespace(value=0) %} {%- set + total_online_bms = namespace(value=0) %} {% for idx in + range(0, 16)-%} + {% if states('binary_sensor.yambms_jk_bms_%d_status_online' % idx)=='on' or states('binary_sensor.rs485_bms%d_status_online' % idx)=='off' %} + {% set total_bms.value = total_bms.value +1 %} + {% if states('binary_sensor.yambms_jk_bms_%d_status_online' % idx)=='on' %} + {% set total_online_bms.value = total_online_bms.value +1 %} + {% endif %} + {%- endif %} + + {% endfor %}
ONLINE BMSs: + {{total_online_bms.value}}/{{total_bms.value}}
+ - type: gauge + name: SOC (Smart Shunt) + entity: sensor.victron_system_battery_soc_2 + needle: true + max: 100 + min: 0 + segments: + - from: 0 + color: '#db4437' + - from: 5 + color: '#ffa600' + - from: 25 + color: '#43a047' + - type: grid + square: false + columns: 1 + cards: + - type: markdown + content: >- + {%- set power_draw = + states('sensor.yambms_jk_bms_1_battery_power')|float + + states('sensor.yambms_jk_bms_2_battery_power')|float %} + {%- set power_charging = + states('sensor.yambms_jk_bms_1_battery_power_charging')|float + + + states('sensor.yambms_jk_bms_2_battery_power_charging')|float + %} {%- set power_discharging = + states('sensor.yambms_jk_bms_1_battery_power_discharging')|float + + + states('sensor.yambms_jk_bms_2_battery_power_discharging')|float + %} + + {%- set power_label = "(charging)" if (power_charging)>0 + else "(discharging)" if (power_discharging)>0 + else "" %} + + {%- set power_value = power_charging if + (power_charging)>0 + else power_discharging if (power_discharging)>0 + else power_draw %} + + {%- set font_start = '' if + (power_charging)>0 + else '' if (power_discharging)>0 + else '' %} + + {%- set font_end = '' if (power_charging)>0 or + (power_discharging)>0 else '' %} + +
{{font_start}}{{ "%.3f" % power_value }}W + {{power_label}}{{font_end}}
+ + {% macro pad_right(w, s) %} {{ s }} {% set slen = w - + (s|length) %} + {% for idx in range(slen)%}   {%endfor %} + {%- endmacro %} + + {% macro green(s) %} {{ s }} {%- endmacro %} +
+ - type: grid + square: false + columns: 2 + cards: + - type: markdown + content: >- + {%- set total_voltage = + (states('sensor.yambms_jk_bms_1_battery_voltage')|float + + states('sensor.yambms_jk_bms_2_battery_voltage')|float)/2 + %} + +
{{"%.3f" % + total_voltage}}V
{% macro + pad_right(w, s) %} {{ s }} {% set slen = w - (s|length) + %} + {% for idx in range(slen)%}   {%endfor %} + {%- endmacro %} + + {% macro green(s) %} {{ s }} {%- endmacro %} +
+ - type: markdown + content: >- + {%- set total_current = + (states('sensor.yambms_jk_bms_1_battery_current')|float)+(states('sensor.yambms_jk_bms_2_battery_current')|float) + %} + +
{{"%.3f" % + total_current}}A
{% macro + pad_right(w, s) %} {{ s }} {% set slen = w - (s|length) + %} {% for idx in range(slen)%}   {%endfor %} {%- + endmacro %} {% macro green(s) %} {{ s }} {%- endmacro %} - type: vertical-stack cards: - type: custom:stack-in-card @@ -48,6 +143,93 @@ views: height: 10px; /* Ajusta el valor según tu preferencia */ overflow: hidden; } + - type: gauge + name: SOC + entity: sensor.yambms_jk_bms_1_battery_capacity_state_of_charge + needle: true + max: 100 + min: 0 + segments: + - from: 0 + color: '#db4437' + - from: 5 + color: '#ffa600' + - from: 25 + color: '#43a047' + - type: grid + square: false + columns: 1 + cards: + - type: markdown + content: >- + {%- set power_draw = + states('sensor.yambms_jk_bms_1_battery_power')|float %} + {%- set power_charging = + states('sensor.yambms_jk_bms_1_battery_power_charging')|float + %} {%- set power_discharging = + states('sensor.yambms_jk_bms_1_battery_power_discharging')|float + %} + + {%- set power_label = "(charging)" if (power_charging)>0 + else "(discharging)" if (power_discharging)>0 + else "" %} + + {%- set power_value = power_charging if + (power_charging)>0 + else power_discharging if (power_discharging)>0 + else power_draw %} + + {%- set font_start = '' if + (power_charging)>0 + else '' if (power_discharging)>0 + else '' %} + + {%- set font_end = '' if (power_charging)>0 or + (power_discharging)>0 else '' %} + +
{{font_start}}{{ "%.3f" % power_value }}W + {{power_label}}{{font_end}}
+ + {% macro pad_right(w, s) %} {{ s }} {% set slen = w - + (s|length) %} + {% for idx in range(slen)%}   {%endfor %} + {%- endmacro %} + + {% macro green(s) %} {{ s }} {%- endmacro %} +
+ - type: grid + square: false + columns: 2 + cards: + - type: markdown + content: >- + {%- set total_voltage = + (states('sensor.yambms_jk_bms_1_battery_voltage')|float) + %} + +
{{"%.3f" % + total_voltage}}V
{% macro + pad_right(w, s) %} {{ s }} {% set slen = w - (s|length) + %} + {% for idx in range(slen)%}   {%endfor %} + {%- endmacro %} + + {% macro green(s) %} {{ s }} {%- endmacro %} +
+ - type: markdown + content: >- + {%- set total_current = + (states('sensor.yambms_jk_bms_1_battery_current')|float) + %} + +
{{"%.3f" % + total_current}}A
{% macro + pad_right(w, s) %} {{ s }} {% set slen = w - (s|length) + %} {% for idx in range(slen)%}   {%endfor %} {%- + endmacro %} {% macro green(s) %} {{ s }} {%- endmacro %} - type: grid square: false columns: 2 @@ -83,8 +265,6 @@ views: {{alarm_label}} ({{ alarm_active }}/{{ alarm_count -}}) - type: markdown content: >- - {%- set soc = - states('sensor.yambms_jk_bms_1_battery_capacity_state_of_charge') %} {%- set soh = states('sensor.yambms_jk_bms_1_battery_soh_valuation') %} {%- set max_idx = @@ -110,7 +290,7 @@ views: %} {%- set min_resistance = (states('sensor.yambms_jk_bms_1_cell_resistance_min')|float) %} - + @@ -138,127 +318,19 @@ views: height: 10px; /* Ajusta el valor según tu preferencia */ overflow: hidden; } - - type: grid - square: false - columns: 2 - cards: - - type: markdown - content: >- - {% macro pad_right(w, s) %} {{ s }} {% set slen = w - - (s|length) %} {% for idx in range(slen)%}   {%endfor - %} {%- endmacro %} {% macro green(s) %} {{ s }} {%- - endmacro %}
{{ pad_right(14, 'MOS Temp.:') }} - {{ - green(states('sensor.yambms_jk_bms_2_temperature_powertube') - + ' °C') }}
{{ pad_right(15, 'Battery T1:') }} {{ - green(states('sensor.yambms_jk_bms_2_temperature_sensor_1') - + ' °C') }}
{{ pad_right(15, 'Battery T2:') }} {{ - green(states('sensor.yambms_jk_bms_2_temperature_sensor_2') - + ' °C') }}
{{ pad_right(15, 'Battery T3:') }} {{ - green(states('sensor.yambms_jk_bms_2_temperature_sensor_3') - + ' °C') }}
{{ pad_right(15, 'Battery T4:') }} {{ - green(states('sensor.yambms_jk_bms_2_temperature_sensor_4') - + ' °C') }}
{{ pad_right(15, 'Battery - T5:') }} {{ - green(states('sensor.yambms_jk_bms_2_temperature_sensor_5') - + ' °C') }}

- -
{%- set alarm_active = - states('sensor.yambms_jk_bms_2_battery_total_alarms_active')|int - %} {%- set alarm_active = 0 %} - {%- set alarm_count = states('sensor.yambms_jk_bms_2_battery_total_alarms_count')|int %} - {%- set alarm_label = 'ALARMS' if alarm_active==0 - else 'ALARMS' %} - {{alarm_label}} ({{ alarm_active }}/{{ alarm_count -}}) - - type: markdown - content: >- - {%- set soc = - states('sensor.yambms_jk_bms_2_battery_capacity_state_of_charge') %} - {%- set soh = - states('sensor.yambms_jk_bms_2_battery_soh_valuation') %} {%- set - max_idx = - states('sensor.yambms_jk_bms_2_cell_voltage_max_cell_number') - %} {%- set min_idx = - states('sensor.yambms_jk_bms_2_cell_voltage_min_cell_number') - %} {%- set max_idx = - states('sensor.yambms_jk_bms_2_cell_voltage_max_cell_number') - %} {%- set min_idxr = - states('sensor.yambms_jk_bms_2_cell_resistance_min_cell_number') - %} {%- set max_idxr = - states('sensor.yambms_jk_bms_2_cell_resistance_max_cell_number') - %} {%- set delta_voltage = - (states('sensor.yambms_jk_bms_2_cell_delta_voltage')|float) - %} {%- set average_voltage = - (states('sensor.yambms_jk_bms_2_cell_average_voltage')|float) %} {%- - set max_voltage = - (states('sensor.yambms_jk_bms_2_cell_voltage_max')|float) - %} {%- set min_voltage = - (states('sensor.yambms_jk_bms_2_cell_voltage_min')|float) - %} {%- set max_resistance = - (states('sensor.yambms_jk_bms_2_cell_resistance_max')|float) - %} {%- set min_resistance = - (states('sensor.yambms_jk_bms_2_cell_resistance_min')|float) - %}
SOC:{{soc}} %
SOH:{{soh}} %
delta:{{delta_voltage}} V
avg:{{average_voltage}} V
- - - - - - - - -
SOC:{{soc}} %
SOH:{{soh}} %
delta:{{delta_voltage}} V
avg:{{average_voltage}} V
Vmax:{{max_voltage}} V [cell {{max_idx}}]
Vmin:{{min_voltage}} V [cell {{min_idx}}]
Rmax:{{max_resistance}} Ω [cell {{max_idxr}}]
Rmin:{{min_resistance}} Ω [cell {{min_idxr}}]
- - type: entities - entities: - - entity: button.yambms_esp32_restart - - entity: sensor.yambms_smart_bms_1_battery_capacity_s - - entity: sensor.yambms_smart_bms_1_capacity_remaining_s - - entity: sensor.yambms_smart_bms_1_cell_count - - entity: sensor.yambms_smart_bms_1_cell_ovp_min - - entity: sensor.yambms_smart_bms_1_cell_ovpr_min - - entity: sensor.yambms_smart_bms_1_cell_uvpr_max - - entity: sensor.yambms_smart_bms_1_charging_cycles_o - - entity: sensor.yambms_smart_bms_1_charging_instruction - - entity: sensor.yambms_smart_bms_1_charging_status - - entity: sensor.yambms_smart_bms_1_current_s - - entity: sensor.yambms_smart_bms_1_max_cell_voltage - - entity: sensor.yambms_smart_bms_1_max_charge_current_s - - entity: sensor.yambms_smart_bms_1_max_discharge_current_s - - entity: sensor.yambms_smart_bms_1_max_voltage_cell - - entity: sensor.yambms_smart_bms_1_min_cell_voltage - - entity: sensor.yambms_smart_bms_1_min_voltage_cell - - entity: sensor.yambms_smart_bms_1_power_s - - entity: sensor.yambms_smart_bms_1_total_voltage_o - - entity: sensor.yambms_smart_bms_1_warning - title: SMART BMS STATUS - - type: vertical-stack - cards: - - type: custom:stack-in-card - keep: - margin: false - box_shadow: false - background: false - cards: - - type: grid - square: false - columns: 1 - cards: - - type: markdown - content: >- - - {%- set total_bms = namespace(value=0) %} {%- set - total_online_bms = namespace(value=0) %} {% for idx in - range(0, 16)-%} - {% if states('binary_sensor.yambms_jk_bms_%d_status_online' % idx)=='on' or states('binary_sensor.rs485_bms%d_status_online' % idx)=='off' %} - {% set total_bms.value = total_bms.value +1 %} - {% if states('binary_sensor.yambms_jk_bms_%d_status_online' % idx)=='on' %} - {% set total_online_bms.value = total_online_bms.value +1 %} - {% endif %} - {%- endif %} - - {% endfor %}
ONLINE BMSs: - {{total_online_bms.value}}/{{total_bms.value}}
+ - type: gauge + name: SOC + entity: sensor.yambms_jk_bms_2_battery_capacity_state_of_charge + needle: true + max: 100 + min: 0 + segments: + - from: 0 + color: '#db4437' + - from: 5 + color: '#ffa600' + - from: 25 + color: '#43a047' - type: grid square: false columns: 1 @@ -266,16 +338,11 @@ views: - type: markdown content: >- {%- set power_draw = - states('sensor.yambms_jk_bms_1_battery_power')|float + states('sensor.yambms_jk_bms_2_battery_power')|float %} {%- set power_charging = - states('sensor.yambms_jk_bms_1_battery_power_charging')|float - + states('sensor.yambms_jk_bms_2_battery_power_charging')|float %} {%- set power_discharging = - states('sensor.yambms_jk_bms_1_battery_power_discharging')|float - + - states('sensor.yambms_jk_bms_2_battery_power_discharging')|float + states('sensor.yambms_jk_bms_2_battery_power_discharging')|float %} {%- set power_label = "(charging)" if (power_charging)>0 @@ -313,8 +380,7 @@ views: - type: markdown content: >- {%- set total_voltage = - (states('sensor.yambms_jk_bms_1_battery_voltage')|float + - states('sensor.yambms_jk_bms_2_battery_voltage')|float)/2 + (states('sensor.yambms_jk_bms_2_battery_voltage')|float) %}
{{"%.3f" % @@ -324,51 +390,143 @@ views: {% for idx in range(slen)%}   {%endfor %} {%- endmacro %} - {% macro green(s) %} {{ s }} {%- endmacro %} -
- - type: markdown - content: >- - {%- set total_current = - (states('sensor.yambms_jk_bms_1_battery_current')|float)+(states('sensor.yambms_jk_bms_2_battery_current')|float) - %} - -
{{"%.3f" % - total_current}}A
{% macro - pad_right(w, s) %} {{ s }} {% set slen = w - (s|length) - %} {% for idx in range(slen)%}   {%endfor %} {%- - endmacro %} {% macro green(s) %} {{ s }} {%- endmacro %} + {% macro green(s) %} {{ s }} {%- endmacro %} +
+ - type: markdown + content: >- + {%- set total_current = + (states('sensor.yambms_jk_bms_2_battery_current')|float) + %} + +
{{"%.3f" % + total_current}}A
{% macro + pad_right(w, s) %} {{ s }} {% set slen = w - (s|length) + %} {% for idx in range(slen)%}   {%endfor %} {%- + endmacro %} {% macro green(s) %} {{ s }} {%- endmacro %} + - type: grid + square: false + columns: 2 + cards: + - type: markdown + content: >- + {% macro pad_right(w, s) %} {{ s }} {% set slen = w - + (s|length) %} {% for idx in range(slen)%}   {%endfor + %} {%- endmacro %} {% macro green(s) %} {{ s }} {%- + endmacro %}
{{ pad_right(14, 'MOS Temp.:') }} + {{ + green(states('sensor.yambms_jk_bms_2_temperature_powertube') + + ' °C') }}
{{ pad_right(15, 'Battery T1:') }} {{ + green(states('sensor.yambms_jk_bms_2_temperature_sensor_1') + + ' °C') }}
{{ pad_right(15, 'Battery T2:') }} {{ + green(states('sensor.yambms_jk_bms_2_temperature_sensor_2') + + ' °C') }}
{{ pad_right(15, 'Battery T3:') }} {{ + green(states('sensor.yambms_jk_bms_2_temperature_sensor_3') + + ' °C') }}
{{ pad_right(15, 'Battery T4:') }} {{ + green(states('sensor.yambms_jk_bms_2_temperature_sensor_4') + + ' °C') }}
{{ pad_right(15, 'Battery + T5:') }} {{ + green(states('sensor.yambms_jk_bms_2_temperature_sensor_5') + + ' °C') }}

+ +
{%- set alarm_active = + states('sensor.yambms_jk_bms_2_battery_total_alarms_active')|int + %} {%- set alarm_active = 0 %} + {%- set alarm_count = states('sensor.yambms_jk_bms_2_battery_total_alarms_count')|int %} + {%- set alarm_label = 'ALARMS' if alarm_active==0 + else 'ALARMS' %} + {{alarm_label}} ({{ alarm_active }}/{{ alarm_count -}}) + - type: markdown + content: >- + {%- set soh = + states('sensor.yambms_jk_bms_2_battery_soh_valuation') %} {%- set + max_idx = + states('sensor.yambms_jk_bms_2_cell_voltage_max_cell_number') + %} {%- set min_idx = + states('sensor.yambms_jk_bms_2_cell_voltage_min_cell_number') + %} {%- set max_idx = + states('sensor.yambms_jk_bms_2_cell_voltage_max_cell_number') + %} {%- set min_idxr = + states('sensor.yambms_jk_bms_2_cell_resistance_min_cell_number') + %} {%- set max_idxr = + states('sensor.yambms_jk_bms_2_cell_resistance_max_cell_number') + %} {%- set delta_voltage = + (states('sensor.yambms_jk_bms_2_cell_delta_voltage')|float) + %} {%- set average_voltage = + (states('sensor.yambms_jk_bms_2_cell_average_voltage')|float) %} {%- + set max_voltage = + (states('sensor.yambms_jk_bms_2_cell_voltage_max')|float) + %} {%- set min_voltage = + (states('sensor.yambms_jk_bms_2_cell_voltage_min')|float) + %} {%- set max_resistance = + (states('sensor.yambms_jk_bms_2_cell_resistance_max')|float) + %} {%- set min_resistance = + (states('sensor.yambms_jk_bms_2_cell_resistance_min')|float) + %} + + + + + + + + +
SOH:{{soh}} %
delta:{{delta_voltage}} V
avg:{{average_voltage}} V
Vmax:{{max_voltage}} V [cell {{max_idx}}]
Vmin:{{min_voltage}} V [cell {{min_idx}}]
Rmax:{{max_resistance}} Ω [cell {{max_idxr}}]
Rmin:{{min_resistance}} Ω [cell {{min_idxr}}]
+ - graph: line + type: sensor + detail: 2 + entity: sensor.victron_system_bus_charge_power + unit: W - type: entities entities: - - entity: sensor.yambms_jk_bms_1_temperature_powertube - name: powertube - - entity: sensor.yambms_jk_bms_1_temperature_sensor_1 - name: T1 - - entity: sensor.yambms_jk_bms_1_temperature_sensor_2 - name: T2 - - entity: sensor.yambms_jk_bms_1_temperature_sensor_3 - name: T3 - - entity: sensor.yambms_jk_bms_1_temperature_sensor_4 - name: T4 - - entity: sensor.yambms_jk_bms_1_temperature_sensor_5 - name: T5 - title: Temperatures BMS 01 + - entity: sensor.yambms_smart_bms_1_charging_instruction + name: Instruction + - entity: sensor.yambms_smart_bms_1_charging_status + name: Status + - entity: sensor.yambms_smart_bms_1_capacity_remaining_s + name: Remaining + - entity: sensor.yambms_smart_bms_1_battery_capacity_s + name: Battery Capacity (Σ) + - entity: sensor.yambms_smart_bms_1_charging_cycles_o + name: Cycles + - entity: sensor.yambms_smart_bms_1_current_s + name: Current + - entity: sensor.yambms_smart_bms_1_power_s + name: Power + - entity: sensor.yambms_smart_bms_1_total_voltage_o + name: Voltage + - entity: sensor.yambms_smart_bms_1_requested_charge_voltage + name: RCV + - entity: number.yambms_smart_bms_1_float_voltage + secondary_info: none + name: RFV + - entity: switch.yambms_jk_pb_rs485_sniffer_broadcast_changes_to_all_bms + state_color: false - type: entities entities: - - entity: sensor.yambms_jk_bms_2_temperature_powertube - name: Powertube - - entity: sensor.yambms_jk_bms_2_temperature_sensor_1 - name: T1 - - entity: sensor.yambms_jk_bms_2_temperature_sensor_2 - name: T2 - - entity: sensor.yambms_jk_bms_2_temperature_sensor_3 - name: T3 - - entity: sensor.yambms_jk_bms_2_temperature_sensor_4 - name: T4 - - entity: sensor.yambms_jk_bms_2_temperature_sensor_5 - name: T5 - title: Temperatures BMS 02 + - entity: button.yambms_esp32_restart + - entity: sensor.yambms_smart_bms_1_battery_capacity_s + - entity: sensor.yambms_smart_bms_1_capacity_remaining_s + - entity: sensor.yambms_smart_bms_1_cell_count + - entity: sensor.yambms_smart_bms_1_cell_ovp_min + - entity: sensor.yambms_smart_bms_1_cell_ovpr_min + - entity: sensor.yambms_smart_bms_1_cell_uvpr_max + - entity: sensor.yambms_smart_bms_1_charging_cycles_o + - entity: sensor.yambms_smart_bms_1_charging_instruction + - entity: sensor.yambms_smart_bms_1_charging_status + - entity: sensor.yambms_smart_bms_1_current_s + - entity: sensor.yambms_smart_bms_1_max_cell_voltage + - entity: sensor.yambms_smart_bms_1_max_charge_current_s + - entity: sensor.yambms_smart_bms_1_max_discharge_current_s + - entity: sensor.yambms_smart_bms_1_max_voltage_cell + - entity: sensor.yambms_smart_bms_1_min_cell_voltage + - entity: sensor.yambms_smart_bms_1_min_voltage_cell + - entity: sensor.yambms_smart_bms_1_power_s + - entity: sensor.yambms_smart_bms_1_total_voltage_o + - entity: sensor.yambms_smart_bms_1_warning + title: SMART BMS STATUS - type: entities entities: - entity: binary_sensor.yambms_canbus_1_status @@ -383,16 +541,41 @@ views: name: Smart BMS 1 Alarm - entity: sensor.yambms_smart_bms_1_last_complete_charge name: Smart BMS 1 Last Complete Charge - - entity: sensor.yambms_smart_bms_1_last_complete_charge_human_readable - name: Smart BMS 1 Last Complete Charge Human Readable - entity: sensor.yambms_smart_bms_1_warning name: Smart BMS 1 Warning - - entity: sensor.yambms_uptime_human_readable - name: Uptime Human Readable - - entity: sensor.yambms_uptime_sensor - name: Uptime Sensor - entity: sensor.yambms_esp32_uptime title: Esp32-S3 + - type: custom:digital-clock + - type: entities + entities: + - entity: sensor.victron_system_bus_charge_current + - entity: sensor.victron_system_bus_charge_power + - entity: sensor.victron_system_grid_l1 + - entity: sensor.victron_battery_timetogo + - entity: sensor.victron_system_battery_soc + - type: entities + entities: + - entity: sensor.myups_carga + name: Carga + - entity: sensor.myups_carga_de_la_bateria + name: Carga de la batería + - entity: sensor.myups_datos_de_estado + name: Datos de estado + - entity: sensor.myups_estado + name: Estado + - sensor.myups_tension_de_entrada + - entity: sensor.myups_tension_de_salida + name: Tensión de salida + title: Myups + - show_name: true + show_icon: true + type: button + tap_action: + action: toggle + entity: switch.aerotermia_master_modbus_switch_2 + - type: entities + entities: + - entity: sensor.aerotermia_outdoor_temperature_modbus_sensor_ok_2 - title: BMS Summary path: bmss-summary badges: [] @@ -2247,6 +2430,10 @@ views: name: ShortCircuit release time - entity: number.yambms_jk_bms_1_precharging_time_from_discharge name: Precharging time from discharging + - entity: number.yambms_jk_bms_1_cell_request_charge_voltage_time + name: Absortion Time + - entity: number.yambms_jk_bms_1_cell_request_float_voltage_time + name: Float Time title: CHARGING protection - type: entities entities: @@ -2263,6 +2450,7 @@ views: - entity: >- sensor.yambms_jk_bms_1_discharging_short_circuit_protection_release_time name: ShortCircuit release time + - entity: number.yambms_jk_bms_2_cell_request_float_voltage_time title: DISCHARGING PROTECTION - type: entities entities: @@ -2317,6 +2505,10 @@ views: name: ShortCircuit release time - entity: number.yambms_jk_bms_2_precharging_time_from_discharge name: Precharging time from discharging + - entity: number.yambms_jk_bms_2_cell_request_charge_voltage_time + name: Absortion Time + - entity: number.yambms_jk_bms_2_cell_request_float_voltage_time + name: Float Time title: CHARGING protection - type: entities entities: @@ -2346,3 +2538,1286 @@ views: - entity: number.yambms_jk_bms_2_max_balancing_current name: MAX current title: BALANCING PROTECTION + - title: YamBMS + type: sections + max_columns: 3 + sections: + - type: grid + cards: + - graph: line + type: sensor + entity: sensor.yambms_smart_bms_1_total_voltage_o + detail: 2 + layout_options: + grid_columns: 2 + grid_rows: 2 + name: Voltage + hours_to_show: 8 + - graph: line + type: sensor + entity: sensor.yambms_smart_bms_1_battery_soc + detail: 2 + name: SoC + hours_to_show: 8 + - type: gauge + entity: sensor.yambms_smart_bms_1_current_s + needle: true + severity: + green: 0 + yellow: -250 + red: -500 + max: 500 + min: -500 + name: Current + layout_options: + grid_columns: 2 + grid_rows: 3 + - type: gauge + entity: sensor.yambms_smart_bms_1_power_s + needle: true + severity: + green: 0 + yellow: -2500 + red: -5000 + max: 5000 + min: -5000 + name: Power + layout_options: + grid_columns: 2 + grid_rows: 3 + - type: tile + entity: sensor.yambms_smart_bms_1_installed_battery_capacity_s + name: Installed Battery Capacity + - type: tile + entity: sensor.yambms_smart_bms_1_battery_soh + name: Battery SoH + - type: tile + entity: sensor.yambms_smart_bms_1_battery_capacity_s + name: Battery Capacity + - type: tile + entity: sensor.yambms_smart_bms_1_capacity_remaining_s + name: Capacity Remaining + - type: tile + entity: sensor.yambms_smart_bms_1_delta_cell_voltage + name: Delta Cell Voltage + - type: tile + entity: binary_sensor.yambms_smart_bms_1_equalizing_state + name: Equalizing state + - type: entities + entities: + - entity: sensor.yambms_smart_bms_1_max_cell_voltage + name: Max Cell V. + - entity: sensor.yambms_smart_bms_1_max_voltage_cell + name: Cell number + layout_options: + grid_columns: 2 + grid_rows: 2 + - type: entities + entities: + - entity: sensor.yambms_smart_bms_1_min_cell_voltage + name: Min Cell V. + - entity: sensor.yambms_smart_bms_1_min_voltage_cell + name: Cell number + layout_options: + grid_columns: 2 + grid_rows: 2 + - type: entities + entities: + - entity: sensor.yambms_smart_bms_1_max_temperature + name: Max temp. + - entity: sensor.yambms_smart_bms_1_max_temperature_sensor + name: Sensor number + layout_options: + grid_columns: 2 + grid_rows: 2 + - type: entities + entities: + - entity: sensor.yambms_smart_bms_1_min_temperature + name: Min temp. + - entity: sensor.yambms_smart_bms_1_min_temperature_sensor + name: Sensor number + layout_options: + grid_columns: 2 + grid_rows: 2 + title: YamBMS - Battery + column_span: 1 + - type: grid + cards: + - type: tile + entity: binary_sensor.yambms_canbus_1_status + name: CANBUS Status + - type: tile + entity: binary_sensor.yambms_esp32_online_status + name: ESP32 Status + - type: tile + entity: sensor.yambms_smart_bms_1_charging_status + name: Charging Status + - type: tile + entity: sensor.yambms_esp32_uptime + name: ESP32 Uptime + - type: tile + entity: sensor.yambms_smart_bms_1_charging_instruction + name: Charging Instruction + - type: tile + entity: sensor.yambms_smart_bms_1_last_complete_charge + name: Last Complete Charge + - type: tile + entity: sensor.yambms_smart_bms_1_alarm + name: Alarm + - type: tile + entity: sensor.yambms_smart_bms_1_warning + name: Warning + - type: entities + entities: + - entity: sensor.yambms_smart_bms_1_bms_count + name: BMS count + - entity: sensor.yambms_smart_bms_1_bms_combined + name: BMS combined + - entity: sensor.yambms_smart_bms_1_bms_in_alarm + name: BMS in alarm + layout_options: + grid_columns: 2 + grid_rows: 3 + - type: entities + entities: + - entity: sensor.yambms_smart_bms_1_shunt_count + name: Shunt count + - entity: sensor.yambms_smart_bms_1_shunt_combined + name: Shunt combined + layout_options: + grid_columns: 2 + grid_rows: 3 + - type: entities + entities: + - entity: sensor.yambms_smart_bms_1_requested_charge_voltage + name: Requested Charge Voltage + - entity: sensor.yambms_smart_bms_1_requested_charge_current + name: Requested Charge Current + - entity: sensor.yambms_smart_bms_1_requested_discharge_voltage + name: Requested Discharge Voltage + - entity: sensor.yambms_smart_bms_1_requested_discharge_current + name: Requested Discharge Current + - entity: binary_sensor.yambms_smart_bms_1_requested_force_charge + name: Requested Force Charge + - type: tile + entity: sensor.yambms_smart_bms_1_running_version + name: Running version + - type: tile + entity: sensor.yambms_smart_bms_1_last_version + name: Last version + title: YamBMS - Status + column_span: 1 + - title: Control + cards: + - type: entities + entities: + - entity: select.yambms_canbus_1_bms_name + name: CANBUS 1 BMS Name + - entity: select.yambms_canbus_1_protocol + name: CANBUS 1 Protocol + title: YamBMS - CANBUS Protocol + - type: entities + entities: + - entity: switch.yambms_smart_bms_1_charge_enabled + name: YamBMS 1 Charge enabled + - entity: switch.yambms_smart_bms_1_discharge_enabled + name: YamBMS 1 Discharge enabled + - entity: binary_sensor.yambms_smart_bms_1_bms_charge_switch_state + name: YamBMS 1 BMS Charge switch state + - entity: binary_sensor.yambms_smart_bms_1_bms_discharge_switch_state + name: YamBMS 1 BMS Discharge switch state + title: YamBMS - Charge / Discharge switch + - type: entities + entities: + - entity: switch.yambms_smart_bms_1_automatic_charge_voltage + name: Automatic Charge Voltage + - entity: number.yambms_smart_bms_1_auto_cvl_boost_charge_v + name: Auto CVL Boost Charge V. + title: YamBMS - Auto CVL + - type: entities + entities: + - entity: sensor.yambms_smart_bms_1_charging_status + name: Charging Status + - entity: sensor.yambms_smart_bms_1_charging_instruction + name: Charging Instruction + - entity: switch.yambms_smart_bms_1_float_charge_enabled + name: Float charge enabled + - entity: switch.yambms_smart_bms_1_eoc_timer_enabled + name: EOC timer enabled + - entity: number.yambms_smart_bms_1_bulk_voltage + name: Bulk voltage + - entity: number.yambms_smart_bms_1_float_voltage + name: Float voltage + - entity: number.yambms_smart_bms_1_inverter_offset_v + name: Inverter Offset V. + title: YamBMS - Charging Settings + - type: entities + entities: + - entity: switch.yambms_smart_bms_1_automatic_charge_current + name: Automatic Charge Current + - entity: switch.yambms_smart_bms_1_automatic_discharge_current + name: Automatic Discharge Current + title: YamBMS - Auto CCL / DCL + - type: entities + entities: + - entity: number.yambms_smart_bms_1_rebulk_soc + name: Rebulk SoC + - entity: number.yambms_smart_bms_1_rebulk_v + name: Rebulk V. + - entity: switch.yambms_smart_bms_1_force_bulk_top_bal + name: Force Bulk (top bal) + title: YamBMS - ReBulk + - type: entities + entities: + - entity: number.yambms_smart_bms_1_max_charge_current + name: Max charge current (%) + - entity: number.yambms_smart_bms_1_max_discharge_current + name: Max discharge current (%) + title: YamBMS - Max current (%) + - type: entities + entities: + - entity: switch.yambms_smart_bms_1_request_force_charge + name: Request force charge + - entity: number.yambms_smart_bms_1_request_force_charge_start_soc + name: Force charge Start SoC + - entity: number.yambms_smart_bms_1_request_force_charge_stop_soc + name: Force charge Stop SoC + - entity: binary_sensor.yambms_smart_bms_1_requested_force_charge + name: Requested Force Charge + title: YamBMS - Request force charge + - type: entities + entities: + - entity: sensor.yambms_smart_bms_1_requested_charge_voltage + name: Requested Charge Voltage + - entity: sensor.yambms_smart_bms_1_requested_discharge_voltage + name: Requested Discharge Voltage + - entity: sensor.yambms_smart_bms_1_requested_charge_current + name: Requested Charge Current + - entity: sensor.yambms_smart_bms_1_requested_discharge_current + name: Requested Discharge Current + title: YamBMS - Requested Values + - type: entities + entities: + - entity: sensor.yambms_smart_bms_1_last_complete_charge + name: Last Complete Charge + - entity: binary_sensor.yambms_esp32_online_status + name: ESP32 Online Status + - entity: sensor.yambms_esp32_uptime + name: ESP32 Uptime + - entity: sensor.yambms_esp32_esphome_version + name: ESP32 ESPHome version + - entity: button.yambms_esp32_restart + name: ESP32 Restart + title: YamBMS - Diagnostic + - type: entities + entities: + - entity: binary_sensor.yambms_canbus_1_status + name: CANBUS 1 Status + - entity: switch.yambms_canbus_1_inverter_heartbeat_monitoring + name: CANBUS 1 Inverter Heartbeat Monitoring + - entity: sensor.yambms_canbus_1_inverter_heartbeat + name: CANBUS 1 Inverter Heartbeat + title: YamBMS - Inverter Heartbeat + - type: entities + entities: + - entity: sensor.yambms_debug_heap_free + name: Debug Heap free (%) + - entity: sensor.yambms_debug_heap_free_2 + name: Debug Heap free + - entity: sensor.yambms_debug_heap_max_block + name: Debug Heap max block (%) + - entity: sensor.yambms_debug_heap_max_block_2 + name: Debug Heap max block + - entity: sensor.yambms_debug_loop_time + name: Debug Loop time + - entity: sensor.yambms_debug_reset_reason + name: Debug Reset reason + title: YamBMS - DEBUG + - title: BMS + type: sections + max_columns: 3 + sections: + - type: grid + title: BMS 1 + column_span: 1 + cards: + - type: grid + square: false + columns: 1 + cards: + - type: markdown + content: >- +
Time : {{ + states('sensor.yambms_jk_bms_1_total_runtime_formatted') | + upper }} + layout_options: + grid_columns: 2 + grid_rows: 1 + - type: grid + square: false + columns: 1 + cards: + - type: markdown + content: >- +
Error : {{ + states('sensor.yambms_jk_bms_1_errors')}} + layout_options: + grid_columns: 2 + grid_rows: 1 + - type: grid + square: false + columns: 3 + cards: + - type: markdown + content: >- +
Charge : {% if + states('binary_sensor.yambms_jk_bms_1_status_charging') == + 'on' %} {{ + states('binary_sensor.yambms_jk_bms_1_status_charging') | + upper }} {% else %} {{ + states('binary_sensor.yambms_jk_bms_1_status_charging') | + upper }} {% endif %} + - type: markdown + content: >- +
Discharge : {% if + states('binary_sensor.yambms_jk_bms_1_status_discharging') == + 'on' %} {{ + states('binary_sensor.yambms_jk_bms_1_status_discharging') | + upper }} {% else %} {{ + states('binary_sensor.yambms_jk_bms_1_status_discharging') | + upper }} {% endif %} + - type: markdown + content: >- +
Balance : {% if + states('binary_sensor.yambms_jk_bms_1_status_balancing') == + 'on' %} {{ + states('binary_sensor.yambms_jk_bms_1_status_balancing') | + upper }} {% else %} {{ + states('binary_sensor.yambms_jk_bms_1_status_balancing') | + upper }} {% endif %} + - type: grid + square: false + columns: 2 + cards: + - type: markdown + content: >- +
{{ + states('sensor.yambms_jk_bms_1_battery_voltage') }} + V
Battery Power :  {{ + states('sensor.yambms_jk_bms_1_battery_power') }} W
+ Battery Capacity :  {{ + states('number.yambms_jk_bms_1_battery_capacity_total_setting') + }} Ah
Cycle Capacity :  {{ + states('sensor.yambms_jk_bms_1_battery_capacity_total_charging_cycle') + }} Ah
Ave. Cell Vol. :  {{ + states('sensor.yambms_jk_bms_1_cell_average_voltage') }} + V
Balance Cur. :  {{ + states('sensor.yambms_jk_bms_1_balancing_current') }} + A
Battery T1 :  {{ + states('sensor.yambms_jk_bms_1_temperature_sensor_1') }} + °C + - type: markdown + content: >- +
{{ + states('sensor.yambms_jk_bms_1_battery_current') }} + A
Remain Battery :  {{ + states('sensor.yambms_jk_bms_1_battery_capacity_state_of_charge') + }} %
Remain Capacity :  {{ + states('sensor.yambms_jk_bms_1_battery_capacity_remaining') }} + Ah
Cycle Count :  {{ + states('sensor.yambms_jk_bms_1_charging_cycles') }}
+ Delta Cell Vol. :  {{ + states('sensor.yambms_jk_bms_1_cell_delta_voltage') }} + V
MOS Temp. :  {{ + states('sensor.yambms_jk_bms_1_temperature_powertube') }} + °C
Battery T2 :  {{ + states('sensor.yambms_jk_bms_1_temperature_sensor_2') }} + °C + - type: grid + square: false + columns: 1 + cards: + - type: markdown + content:
Cells Voltage / Wire Resistance + - type: grid + square: false + columns: 2 + cards: + - type: markdown + content: >- +
01.    {% if + states('sensor.yambms_jk_bms_1_max_voltage_cell') == '1' %} + {{ + states('sensor.yambms_jk_bms_1_cell_voltage_01') }} V + {% elif states('sensor.yambms_jk_bms_1_min_voltage_cell') == + '1' %} {{ + states('sensor.yambms_jk_bms_1_cell_voltage_01') }} V + {% else %} {{ states('sensor.yambms_jk_bms_1_cell_voltage_01') + }} V {% endif %}    /    {{ + states('sensor.yambms_jk_bms_1_cell_resistance_01') }} Ω
+ 02.    {% if + states('sensor.yambms_jk_bms_1_max_voltage_cell') == '2' %} + {{ + states('sensor.yambms_jk_bms_1_cell_voltage_02') }} V + {% elif states('sensor.yambms_jk_bms_1_min_voltage_cell') == + '2' %} {{ + states('sensor.yambms_jk_bms_1_cell_voltage_02') }} V + {% else %} {{ states('sensor.yambms_jk_bms_1_cell_voltage_02') + }} V {% endif %}    /    {{ + states('sensor.yambms_jk_bms_1_cell_resistance_02') }} Ω
+ 03.    {% if + states('sensor.yambms_jk_bms_1_max_voltage_cell') == '3' %} + {{ + states('sensor.yambms_jk_bms_1_cell_voltage_03') }} V + {% elif states('sensor.yambms_jk_bms_1_min_voltage_cell') == + '3' %} {{ + states('sensor.yambms_jk_bms_1_cell_voltage_03') }} V + {% else %} {{ states('sensor.yambms_jk_bms_1_cell_voltage_03') + }} V {% endif %}    /    {{ + states('sensor.yambms_jk_bms_1_cell_resistance_03') }} Ω
+ 04.    {% if + states('sensor.yambms_jk_bms_1_max_voltage_cell') == '4' %} + {{ + states('sensor.yambms_jk_bms_1_cell_voltage_04') }} V + {% elif states('sensor.yambms_jk_bms_1_min_voltage_cell') == + '4' %} {{ + states('sensor.yambms_jk_bms_1_cell_voltage_04') }} V + {% else %} {{ states('sensor.yambms_jk_bms_1_cell_voltage_04') + }} V {% endif %}    /    {{ + states('sensor.yambms_jk_bms_1_cell_resistance_04') }} Ω
+ 05.    {% if + states('sensor.yambms_jk_bms_1_max_voltage_cell') == '5' %} + {{ + states('sensor.yambms_jk_bms_1_cell_voltage_05') }} V + {% elif states('sensor.yambms_jk_bms_1_min_voltage_cell') == + '5' %} {{ + states('sensor.yambms_jk_bms_1_cell_voltage_05') }} V + {% else %} {{ states('sensor.yambms_jk_bms_1_cell_voltage_05') + }} V {% endif %}    /    {{ + states('sensor.yambms_jk_bms_1_cell_resistance_05') }} Ω
+ 06.    {% if + states('sensor.yambms_jk_bms_1_max_voltage_cell') == '6' %} + {{ + states('sensor.yambms_jk_bms_1_cell_voltage_06') }} V + {% elif states('sensor.yambms_jk_bms_1_min_voltage_cell') == + '6' %} {{ + states('sensor.yambms_jk_bms_1_cell_voltage_06') }} V + {% else %} {{ states('sensor.yambms_jk_bms_1_cell_voltage_06') + }} V {% endif %}    /    {{ + states('sensor.yambms_jk_bms_1_cell_resistance_06') }} Ω
+ 07.    {% if + states('sensor.yambms_jk_bms_1_max_voltage_cell') == '7' %} + {{ + states('sensor.yambms_jk_bms_1_cell_voltage_07') }} V + {% elif states('sensor.yambms_jk_bms_1_min_voltage_cell') == + '7' %} {{ + states('sensor.yambms_jk_bms_1_cell_voltage_07') }} V + {% else %} {{ states('sensor.yambms_jk_bms_1_cell_voltage_07') + }} V {% endif %}    /    {{ + states('sensor.yambms_jk_bms_1_cell_resistance_07') }} Ω
+ 08.    {% if + states('sensor.yambms_jk_bms_1_max_voltage_cell') == '8' %} + {{ + states('sensor.yambms_jk_bms_1_cell_voltage_08') }} V + {% elif states('sensor.yambms_jk_bms_1_min_voltage_cell') == + '8' %} {{ + states('sensor.yambms_jk_bms_1_cell_voltage_08') }} V + {% else %} {{ states('sensor.yambms_jk_bms_1_cell_voltage_08') + }} V {% endif %}    /    {{ + states('sensor.yambms_jk_bms_1_cell_resistance_08') }} Ω +
+ - type: markdown + content: >- +
09.    {% if + states('sensor.yambms_jk_bms_1_max_voltage_cell') == '9' %} + {{ + states('sensor.yambms_jk_bms_1_cell_voltage_09') }} V + {% elif states('sensor.yambms_jk_bms_1_min_voltage_cell') == + '9' %} {{ + states('sensor.yambms_jk_bms_1_cell_voltage_09') }} V + {% else %} {{ states('sensor.yambms_jk_bms_1_cell_voltage_09') + }} V {% endif %}    /    {{ + states('sensor.yambms_jk_bms_1_cell_resistance_09') }} Ω
+ 10.    {% if + states('sensor.yambms_jk_bms_1_max_voltage_cell') == '10' %} + {{ + states('sensor.yambms_jk_bms_1_cell_voltage_10') }} V + {% elif states('sensor.yambms_jk_bms_1_min_voltage_cell') == + '10' %} {{ + states('sensor.yambms_jk_bms_1_cell_voltage_10') }} V + {% else %} {{ states('sensor.yambms_jk_bms_1_cell_voltage_10') + }} V {% endif %}    /    {{ + states('sensor.yambms_jk_bms_1_cell_resistance_10') }} Ω
+ 11.    {% if + states('sensor.yambms_jk_bms_1_max_voltage_cell') == '11' %} + {{ + states('sensor.yambms_jk_bms_1_cell_voltage_11') }} V + {% elif states('sensor.yambms_jk_bms_1_min_voltage_cell') == + '11' %} {{ + states('sensor.yambms_jk_bms_1_cell_voltage_11') }} V + {% else %} {{ states('sensor.yambms_jk_bms_1_cell_voltage_11') + }} V {% endif %}    /    {{ + states('sensor.yambms_jk_bms_1_cell_resistance_11') }} Ω
+ 12.    {% if + states('sensor.yambms_jk_bms_1_max_voltage_cell') == '12' %} + {{ + states('sensor.yambms_jk_bms_1_cell_voltage_12') }} V + {% elif states('sensor.yambms_jk_bms_1_min_voltage_cell') == + '12' %} {{ + states('sensor.yambms_jk_bms_1_cell_voltage_12') }} V + {% else %} {{ states('sensor.yambms_jk_bms_1_cell_voltage_12') + }} V {% endif %}    /    {{ + states('sensor.yambms_jk_bms_1_cell_resistance_12') }} Ω
+ 13.    {% if + states('sensor.yambms_jk_bms_1_max_voltage_cell') == '13' %} + {{ + states('sensor.yambms_jk_bms_1_cell_voltage_13') }} V + {% elif states('sensor.yambms_jk_bms_1_min_voltage_cell') == + '13' %} {{ + states('sensor.yambms_jk_bms_1_cell_voltage_13') }} V + {% else %} {{ states('sensor.yambms_jk_bms_1_cell_voltage_13') + }} V {% endif %}    /    {{ + states('sensor.yambms_jk_bms_1_cell_resistance_13') }} Ω
+ 14.    {% if + states('sensor.yambms_jk_bms_1_max_voltage_cell') == '14' %} + {{ + states('sensor.yambms_jk_bms_1_cell_voltage_14') }} V + {% elif states('sensor.yambms_jk_bms_1_min_voltage_cell') == + '14' %} {{ + states('sensor.yambms_jk_bms_1_cell_voltage_14') }} V + {% else %} {{ states('sensor.yambms_jk_bms_1_cell_voltage_14') + }} V {% endif %}    /    {{ + states('sensor.yambms_jk_bms_1_cell_resistance_14') }} Ω
+ 15.    {% if + states('sensor.yambms_jk_bms_1_max_voltage_cell') == '15' %} + {{ + states('sensor.yambms_jk_bms_1_cell_voltage_15') }} V + {% elif states('sensor.yambms_jk_bms_1_min_voltage_cell') == + '15' %} {{ + states('sensor.yambms_jk_bms_1_cell_voltage_15') }} V + {% else %} {{ states('sensor.yambms_jk_bms_1_cell_voltage_15') + }} V {% endif %}    /    {{ + states('sensor.yambms_jk_bms_1_cell_resistance_15') }} Ω
+ 16.    {% if + states('sensor.yambms_jk_bms_1_max_voltage_cell') == '16' %} + {{ + states('sensor.yambms_jk_bms_1_cell_voltage_16') }} V + {% elif states('sensor.yambms_jk_bms_1_min_voltage_cell') == + '16' %} {{ + states('sensor.yambms_jk_bms_1_cell_voltage_16') }} V + {% else %} {{ states('sensor.yambms_jk_bms_1_cell_voltage_16') + }} V {% endif %}    /    {{ + states('sensor.yambms_jk_bms_1_cell_resistance_16') }} Ω +
+ - type: entities + entities: + - entity: switch.yambms_jk_bms_1_combine_enabled + name: Combine + - entity: binary_sensor.yambms_jk_bms_1_combine_availability + name: Cb. Availability + - entity: binary_sensor.yambms_jk_bms_1_can_be_combined + name: Can be combined + layout_options: + grid_columns: 2 + grid_rows: 3 + - type: entity-filter + entities: + - entity: switch.yambms_jk_bms_1_charging + name: Charge + - entity: switch.yambms_jk_bms_1_discharging + name: Discharge + - entity: switch.yambms_jk_bms_1_balancing + name: Balance + conditions: + - condition: state + state_not: unavailable + layout_options: + grid_columns: 2 + grid_rows: 3 + - type: grid + title: BMS 2 + column_span: 1 + cards: + - type: grid + square: false + columns: 1 + cards: + - type: markdown + content: >- +
Time : {{ + states('sensor.yambms_jk_bms_2_total_runtime_formatted') | + upper }} + layout_options: + grid_columns: 2 + grid_rows: 1 + - type: grid + square: false + columns: 1 + cards: + - type: markdown + content: >- +
Error : {{ + states('sensor.yambms_jk_bms_2_errors')}} + layout_options: + grid_columns: 2 + grid_rows: 1 + - type: grid + square: false + columns: 3 + cards: + - type: markdown + content: >- +
Charge : {% if + states('binary_sensor.yambms_jk_bms_2_status_charging') == + 'on' %} {{ + states('binary_sensor.yambms_jk_bms_2_status_charging') | + upper }} {% else %} {{ + states('binary_sensor.yambms_jk_bms_2_status_charging') | + upper }} {% endif %} + - type: markdown + content: >- +
Discharge : {% if + states('binary_sensor.yambms_jk_bms_2_status_discharging') == + 'on' %} {{ + states('binary_sensor.yambms_jk_bms_2_status_discharging') | + upper }} {% else %} {{ + states('binary_sensor.yambms_jk_bms_2_status_discharging') | + upper }} {% endif %} + - type: markdown + content: >- +
Balance : {% if + states('binary_sensor.yambms_jk_bms_2_status_balancing') == + 'on' %} {{ + states('binary_sensor.yambms_jk_bms_2_status_balancing') | + upper }} {% else %} {{ + states('binary_sensor.yambms_jk_bms_2_status_balancing') | + upper }} {% endif %} + - type: grid + square: false + columns: 2 + cards: + - type: markdown + content: >- +
{{ + states('sensor.yambms_jk_bms_2_battery_voltage') }} + V
Battery Power :  {{ + states('sensor.yambms_jk_bms_2_battery_power') }} W
+ Battery Capacity :  {{ + states('number.yambms_jk_bms_2_battery_capacity_total_setting') + }} Ah
Cycle Capacity :  {{ + states('sensor.yambms_jk_bms_2_battery_capacity_total_charging_cycle') + }} Ah
Ave. Cell Vol. :  {{ + states('sensor.yambms_jk_bms_2_cell_average_voltage') }} + V
Balance Cur. :  {{ + states('sensor.yambms_jk_bms_2_balancing_current') }} + A
Battery T1 :  {{ + states('sensor.yambms_jk_bms_2_temperature_sensor_1') }} + °C + - type: markdown + content: >- +
{{ + states('sensor.yambms_jk_bms_2_battery_current') }} + A
Remain Battery :  {{ + states('sensor.yambms_jk_bms_2_battery_capacity_state_of_charge') + }} %
Remain Capacity :  {{ + states('sensor.yambms_jk_bms_2_battery_capacity_remaining') }} + Ah
Cycle Count :  {{ + states('sensor.yambms_jk_bms_2_charging_cycles') }}
+ Delta Cell Vol. :  {{ + states('sensor.yambms_jk_bms_2_cell_delta_voltage') }} + V
MOS Temp. :  {{ + states('sensor.yambms_jk_bms_2_temperature_powertube') }} + °C
Battery T2 :  {{ + states('sensor.yambms_jk_bms_2_temperature_sensor_2') }} + °C + - type: grid + square: false + columns: 1 + cards: + - type: markdown + content:
Cells Voltage / Wire Resistance + - type: grid + square: false + columns: 2 + cards: + - type: markdown + content: >- +
01.    {% if + states('sensor.yambms_jk_bms_2_max_voltage_cell') == '1' %} + {{ + states('sensor.yambms_jk_bms_2_cell_voltage_01') }} V + {% elif states('sensor.yambms_jk_bms_2_min_voltage_cell') == + '1' %} {{ + states('sensor.yambms_jk_bms_2_cell_voltage_01') }} V + {% else %} {{ states('sensor.yambms_jk_bms_2_cell_voltage_01') + }} V {% endif %}    /    {{ + states('sensor.yambms_jk_bms_2_cell_resistance_01') }} Ω
+ 02.    {% if + states('sensor.yambms_jk_bms_2_max_voltage_cell') == '2' %} + {{ + states('sensor.yambms_jk_bms_2_cell_voltage_02') }} V + {% elif states('sensor.yambms_jk_bms_2_min_voltage_cell') == + '2' %} {{ + states('sensor.yambms_jk_bms_2_cell_voltage_02') }} V + {% else %} {{ states('sensor.yambms_jk_bms_2_cell_voltage_02') + }} V {% endif %}    /    {{ + states('sensor.yambms_jk_bms_2_cell_resistance_02') }} Ω
+ 03.    {% if + states('sensor.yambms_jk_bms_2_max_voltage_cell') == '3' %} + {{ + states('sensor.yambms_jk_bms_2_cell_voltage_03') }} V + {% elif states('sensor.yambms_jk_bms_2_min_voltage_cell') == + '3' %} {{ + states('sensor.yambms_jk_bms_2_cell_voltage_03') }} V + {% else %} {{ states('sensor.yambms_jk_bms_2_cell_voltage_03') + }} V {% endif %}    /    {{ + states('sensor.yambms_jk_bms_2_cell_resistance_03') }} Ω
+ 04.    {% if + states('sensor.yambms_jk_bms_2_max_voltage_cell') == '4' %} + {{ + states('sensor.yambms_jk_bms_2_cell_voltage_04') }} V + {% elif states('sensor.yambms_jk_bms_2_min_voltage_cell') == + '4' %} {{ + states('sensor.yambms_jk_bms_2_cell_voltage_04') }} V + {% else %} {{ states('sensor.yambms_jk_bms_2_cell_voltage_04') + }} V {% endif %}    /    {{ + states('sensor.yambms_jk_bms_2_cell_resistance_04') }} Ω
+ 05.    {% if + states('sensor.yambms_jk_bms_2_max_voltage_cell') == '5' %} + {{ + states('sensor.yambms_jk_bms_2_cell_voltage_05') }} V + {% elif states('sensor.yambms_jk_bms_2_min_voltage_cell') == + '5' %} {{ + states('sensor.yambms_jk_bms_2_cell_voltage_05') }} V + {% else %} {{ states('sensor.yambms_jk_bms_2_cell_voltage_05') + }} V {% endif %}    /    {{ + states('sensor.yambms_jk_bms_2_cell_resistance_05') }} Ω
+ 06.    {% if + states('sensor.yambms_jk_bms_2_max_voltage_cell') == '6' %} + {{ + states('sensor.yambms_jk_bms_2_cell_voltage_06') }} V + {% elif states('sensor.yambms_jk_bms_2_min_voltage_cell') == + '6' %} {{ + states('sensor.yambms_jk_bms_2_cell_voltage_06') }} V + {% else %} {{ states('sensor.yambms_jk_bms_2_cell_voltage_06') + }} V {% endif %}    /    {{ + states('sensor.yambms_jk_bms_2_cell_resistance_06') }} Ω
+ 07.    {% if + states('sensor.yambms_jk_bms_2_max_voltage_cell') == '7' %} + {{ + states('sensor.yambms_jk_bms_2_cell_voltage_07') }} V + {% elif states('sensor.yambms_jk_bms_2_min_voltage_cell') == + '7' %} {{ + states('sensor.yambms_jk_bms_2_cell_voltage_07') }} V + {% else %} {{ states('sensor.yambms_jk_bms_2_cell_voltage_07') + }} V {% endif %}    /    {{ + states('sensor.yambms_jk_bms_2_cell_resistance_07') }} Ω
+ 08.    {% if + states('sensor.yambms_jk_bms_2_max_voltage_cell') == '8' %} + {{ + states('sensor.yambms_jk_bms_2_cell_voltage_08') }} V + {% elif states('sensor.yambms_jk_bms_2_min_voltage_cell') == + '8' %} {{ + states('sensor.yambms_jk_bms_2_cell_voltage_08') }} V + {% else %} {{ states('sensor.yambms_jk_bms_2_cell_voltage_08') + }} V {% endif %}    /    {{ + states('sensor.yambms_jk_bms_2_cell_resistance_08') }} Ω +
+ - type: markdown + content: >- +
09.    {% if + states('sensor.yambms_jk_bms_2_max_voltage_cell') == '9' %} + {{ + states('sensor.yambms_jk_bms_2_cell_voltage_09') }} V + {% elif states('sensor.yambms_jk_bms_2_min_voltage_cell') == + '9' %} {{ + states('sensor.yambms_jk_bms_2_cell_voltage_09') }} V + {% else %} {{ states('sensor.yambms_jk_bms_2_cell_voltage_09') + }} V {% endif %}    /    {{ + states('sensor.yambms_jk_bms_2_cell_resistance_09') }} Ω
+ 10.    {% if + states('sensor.yambms_jk_bms_2_max_voltage_cell') == '10' %} + {{ + states('sensor.yambms_jk_bms_2_cell_voltage_10') }} V + {% elif states('sensor.yambms_jk_bms_2_min_voltage_cell') == + '10' %} {{ + states('sensor.yambms_jk_bms_2_cell_voltage_10') }} V + {% else %} {{ states('sensor.yambms_jk_bms_2_cell_voltage_10') + }} V {% endif %}    /    {{ + states('sensor.yambms_jk_bms_2_cell_resistance_10') }} Ω
+ 11.    {% if + states('sensor.yambms_jk_bms_2_max_voltage_cell') == '11' %} + {{ + states('sensor.yambms_jk_bms_2_cell_voltage_11') }} V + {% elif states('sensor.yambms_jk_bms_2_min_voltage_cell') == + '11' %} {{ + states('sensor.yambms_jk_bms_2_cell_voltage_11') }} V + {% else %} {{ states('sensor.yambms_jk_bms_2_cell_voltage_11') + }} V {% endif %}    /    {{ + states('sensor.yambms_jk_bms_2_cell_resistance_11') }} Ω
+ 12.    {% if + states('sensor.yambms_jk_bms_2_max_voltage_cell') == '12' %} + {{ + states('sensor.yambms_jk_bms_2_cell_voltage_12') }} V + {% elif states('sensor.yambms_jk_bms_2_min_voltage_cell') == + '12' %} {{ + states('sensor.yambms_jk_bms_2_cell_voltage_12') }} V + {% else %} {{ states('sensor.yambms_jk_bms_2_cell_voltage_12') + }} V {% endif %}    /    {{ + states('sensor.yambms_jk_bms_2_cell_resistance_12') }} Ω
+ 13.    {% if + states('sensor.yambms_jk_bms_2_max_voltage_cell') == '13' %} + {{ + states('sensor.yambms_jk_bms_2_cell_voltage_13') }} V + {% elif states('sensor.yambms_jk_bms_2_min_voltage_cell') == + '13' %} {{ + states('sensor.yambms_jk_bms_2_cell_voltage_13') }} V + {% else %} {{ states('sensor.yambms_jk_bms_2_cell_voltage_13') + }} V {% endif %}    /    {{ + states('sensor.yambms_jk_bms_2_cell_resistance_13') }} Ω
+ 14.    {% if + states('sensor.yambms_jk_bms_2_max_voltage_cell') == '14' %} + {{ + states('sensor.yambms_jk_bms_2_cell_voltage_14') }} V + {% elif states('sensor.yambms_jk_bms_2_min_voltage_cell') == + '14' %} {{ + states('sensor.yambms_jk_bms_2_cell_voltage_14') }} V + {% else %} {{ states('sensor.yambms_jk_bms_2_cell_voltage_14') + }} V {% endif %}    /    {{ + states('sensor.yambms_jk_bms_2_cell_resistance_14') }} Ω
+ 15.    {% if + states('sensor.yambms_jk_bms_2_max_voltage_cell') == '15' %} + {{ + states('sensor.yambms_jk_bms_2_cell_voltage_15') }} V + {% elif states('sensor.yambms_jk_bms_2_min_voltage_cell') == + '15' %} {{ + states('sensor.yambms_jk_bms_2_cell_voltage_15') }} V + {% else %} {{ states('sensor.yambms_jk_bms_2_cell_voltage_15') + }} V {% endif %}    /    {{ + states('sensor.yambms_jk_bms_2_cell_resistance_15') }} Ω
+ 16.    {% if + states('sensor.yambms_jk_bms_2_max_voltage_cell') == '16' %} + {{ + states('sensor.yambms_jk_bms_2_cell_voltage_16') }} V + {% elif states('sensor.yambms_jk_bms_2_min_voltage_cell') == + '16' %} {{ + states('sensor.yambms_jk_bms_2_cell_voltage_16') }} V + {% else %} {{ states('sensor.yambms_jk_bms_2_cell_voltage_16') + }} V {% endif %}    /    {{ + states('sensor.yambms_jk_bms_2_cell_resistance_16') }} Ω +
+ - type: entities + entities: + - entity: switch.yambms_jk_bms_2_combine_enabled + name: Combine + - entity: binary_sensor.yambms_jk_bms_2_combine_availability + name: Cb. Availability + - entity: binary_sensor.yambms_jk_bms_2_can_be_combined + name: Can be combined + layout_options: + grid_columns: 2 + grid_rows: 3 + - type: entity-filter + entities: + - entity: switch.yambms_jk_bms_2_charging + name: Charge + - entity: switch.yambms_jk_bms_2_discharging + name: Discharge + - entity: switch.yambms_jk_bms_2_balancing + name: Balance + conditions: + - condition: state + state_not: unavailable + layout_options: + grid_columns: 2 + grid_rows: 3 + - type: grid + title: BMS 3 + column_span: 1 + cards: + - type: grid + square: false + columns: 1 + cards: + - type: markdown + content: >- +
Time : {{ + states('sensor.yambms_jk_bms_3_total_runtime_formatted') | + upper }} + layout_options: + grid_columns: 2 + grid_rows: 1 + - type: grid + square: false + columns: 1 + cards: + - type: markdown + content: >- +
Error : {{ + states('sensor.yambms_jk_bms_3_errors')}} + layout_options: + grid_columns: 2 + grid_rows: 1 + - type: grid + square: false + columns: 3 + cards: + - type: markdown + content: >- +
Charge : {% if + states('binary_sensor.yambms_jk_bms_3_status_charging') == + 'on' %} {{ + states('binary_sensor.yambms_jk_bms_3_status_charging') | + upper }} {% else %} {{ + states('binary_sensor.yambms_jk_bms_3_status_charging') | + upper }} {% endif %} + - type: markdown + content: >- +
Discharge : {% if + states('binary_sensor.yambms_jk_bms_3_status_discharging') == + 'on' %} {{ + states('binary_sensor.yambms_jk_bms_3_status_discharging') | + upper }} {% else %} {{ + states('binary_sensor.yambms_jk_bms_3_status_discharging') | + upper }} {% endif %} + - type: markdown + content: >- +
Balance : {% if + states('binary_sensor.yambms_jk_bms_3_status_balancing') == + 'on' %} {{ + states('binary_sensor.yambms_jk_bms_3_status_balancing') | + upper }} {% else %} {{ + states('binary_sensor.yambms_jk_bms_3_status_balancing') | + upper }} {% endif %} + - type: grid + square: false + columns: 2 + cards: + - type: markdown + content: >- +
{{ + states('sensor.yambms_jk_bms_3_battery_voltage') }} + V
Battery Power :  {{ + states('sensor.yambms_jk_bms_3_battery_power') }} W
+ Battery Capacity :  {{ + states('number.yambms_jk_bms_3_battery_capacity_total_setting') + }} Ah
Cycle Capacity :  {{ + states('sensor.yambms_jk_bms_3_battery_capacity_total_charging_cycle') + }} Ah
Ave. Cell Vol. :  {{ + states('sensor.yambms_jk_bms_3_cell_average_voltage') }} + V
Balance Cur. :  {{ + states('sensor.yambms_jk_bms_3_balancing_current') }} + A
Battery T1 :  {{ + states('sensor.yambms_jk_bms_3_temperature_sensor_1') }} + °C + - type: markdown + content: >- +
{{ + states('sensor.yambms_jk_bms_3_battery_current') }} + A
Remain Battery :  {{ + states('sensor.yambms_jk_bms_3_battery_capacity_state_of_charge') + }} %
Remain Capacity :  {{ + states('sensor.yambms_jk_bms_3_battery_capacity_remaining') }} + Ah
Cycle Count :  {{ + states('sensor.yambms_jk_bms_3_charging_cycles') }}
+ Delta Cell Vol. :  {{ + states('sensor.yambms_jk_bms_3_cell_delta_voltage') }} + V
MOS Temp. :  {{ + states('sensor.yambms_jk_bms_3_temperature_powertube') }} + °C
Battery T2 :  {{ + states('sensor.yambms_jk_bms_3_temperature_sensor_2') }} + °C + - type: grid + square: false + columns: 1 + cards: + - type: markdown + content:
Cells Voltage / Wire Resistance + - type: grid + square: false + columns: 2 + cards: + - type: markdown + content: >- +
01.    {% if + states('sensor.yambms_jk_bms_3_max_voltage_cell') == '1' %} + {{ + states('sensor.yambms_jk_bms_3_cell_voltage_01') }} V + {% elif states('sensor.yambms_jk_bms_3_min_voltage_cell') == + '1' %} {{ + states('sensor.yambms_jk_bms_3_cell_voltage_01') }} V + {% else %} {{ states('sensor.yambms_jk_bms_3_cell_voltage_01') + }} V {% endif %}    /    {{ + states('sensor.yambms_jk_bms_3_cell_resistance_01') }} Ω
+ 02.    {% if + states('sensor.yambms_jk_bms_3_max_voltage_cell') == '2' %} + {{ + states('sensor.yambms_jk_bms_3_cell_voltage_02') }} V + {% elif states('sensor.yambms_jk_bms_3_min_voltage_cell') == + '2' %} {{ + states('sensor.yambms_jk_bms_3_cell_voltage_02') }} V + {% else %} {{ states('sensor.yambms_jk_bms_3_cell_voltage_02') + }} V {% endif %}    /    {{ + states('sensor.yambms_jk_bms_3_cell_resistance_02') }} Ω
+ 03.    {% if + states('sensor.yambms_jk_bms_3_max_voltage_cell') == '3' %} + {{ + states('sensor.yambms_jk_bms_3_cell_voltage_03') }} V + {% elif states('sensor.yambms_jk_bms_3_min_voltage_cell') == + '3' %} {{ + states('sensor.yambms_jk_bms_3_cell_voltage_03') }} V + {% else %} {{ states('sensor.yambms_jk_bms_3_cell_voltage_03') + }} V {% endif %}    /    {{ + states('sensor.yambms_jk_bms_3_cell_resistance_03') }} Ω
+ 04.    {% if + states('sensor.yambms_jk_bms_3_max_voltage_cell') == '4' %} + {{ + states('sensor.yambms_jk_bms_3_cell_voltage_04') }} V + {% elif states('sensor.yambms_jk_bms_3_min_voltage_cell') == + '4' %} {{ + states('sensor.yambms_jk_bms_3_cell_voltage_04') }} V + {% else %} {{ states('sensor.yambms_jk_bms_3_cell_voltage_04') + }} V {% endif %}    /    {{ + states('sensor.yambms_jk_bms_3_cell_resistance_04') }} Ω
+ 05.    {% if + states('sensor.yambms_jk_bms_3_max_voltage_cell') == '5' %} + {{ + states('sensor.yambms_jk_bms_3_cell_voltage_05') }} V + {% elif states('sensor.yambms_jk_bms_3_min_voltage_cell') == + '5' %} {{ + states('sensor.yambms_jk_bms_3_cell_voltage_05') }} V + {% else %} {{ states('sensor.yambms_jk_bms_3_cell_voltage_05') + }} V {% endif %}    /    {{ + states('sensor.yambms_jk_bms_3_cell_resistance_05') }} Ω
+ 06.    {% if + states('sensor.yambms_jk_bms_3_max_voltage_cell') == '6' %} + {{ + states('sensor.yambms_jk_bms_3_cell_voltage_06') }} V + {% elif states('sensor.yambms_jk_bms_3_min_voltage_cell') == + '6' %} {{ + states('sensor.yambms_jk_bms_3_cell_voltage_06') }} V + {% else %} {{ states('sensor.yambms_jk_bms_3_cell_voltage_06') + }} V {% endif %}    /    {{ + states('sensor.yambms_jk_bms_3_cell_resistance_06') }} Ω
+ 07.    {% if + states('sensor.yambms_jk_bms_3_max_voltage_cell') == '7' %} + {{ + states('sensor.yambms_jk_bms_3_cell_voltage_07') }} V + {% elif states('sensor.yambms_jk_bms_3_min_voltage_cell') == + '7' %} {{ + states('sensor.yambms_jk_bms_3_cell_voltage_07') }} V + {% else %} {{ states('sensor.yambms_jk_bms_3_cell_voltage_07') + }} V {% endif %}    /    {{ + states('sensor.yambms_jk_bms_3_cell_resistance_07') }} Ω
+ 08.    {% if + states('sensor.yambms_jk_bms_3_max_voltage_cell') == '8' %} + {{ + states('sensor.yambms_jk_bms_3_cell_voltage_08') }} V + {% elif states('sensor.yambms_jk_bms_3_min_voltage_cell') == + '8' %} {{ + states('sensor.yambms_jk_bms_3_cell_voltage_08') }} V + {% else %} {{ states('sensor.yambms_jk_bms_3_cell_voltage_08') + }} V {% endif %}    /    {{ + states('sensor.yambms_jk_bms_3_cell_resistance_08') }} Ω +
+ - type: markdown + content: >- +
09.    {% if + states('sensor.yambms_jk_bms_3_max_voltage_cell') == '9' %} + {{ + states('sensor.yambms_jk_bms_3_cell_voltage_09') }} V + {% elif states('sensor.yambms_jk_bms_3_min_voltage_cell') == + '9' %} {{ + states('sensor.yambms_jk_bms_3_cell_voltage_09') }} V + {% else %} {{ states('sensor.yambms_jk_bms_3_cell_voltage_09') + }} V {% endif %}    /    {{ + states('sensor.yambms_jk_bms_3_cell_resistance_09') }} Ω
+ 10.    {% if + states('sensor.yambms_jk_bms_3_max_voltage_cell') == '10' %} + {{ + states('sensor.yambms_jk_bms_3_cell_voltage_10') }} V + {% elif states('sensor.yambms_jk_bms_3_min_voltage_cell') == + '10' %} {{ + states('sensor.yambms_jk_bms_3_cell_voltage_10') }} V + {% else %} {{ states('sensor.yambms_jk_bms_3_cell_voltage_10') + }} V {% endif %}    /    {{ + states('sensor.yambms_jk_bms_3_cell_resistance_10') }} Ω
+ 11.    {% if + states('sensor.yambms_jk_bms_3_max_voltage_cell') == '11' %} + {{ + states('sensor.yambms_jk_bms_3_cell_voltage_11') }} V + {% elif states('sensor.yambms_jk_bms_3_min_voltage_cell') == + '11' %} {{ + states('sensor.yambms_jk_bms_3_cell_voltage_11') }} V + {% else %} {{ states('sensor.yambms_jk_bms_3_cell_voltage_11') + }} V {% endif %}    /    {{ + states('sensor.yambms_jk_bms_3_cell_resistance_11') }} Ω
+ 12.    {% if + states('sensor.yambms_jk_bms_3_max_voltage_cell') == '12' %} + {{ + states('sensor.yambms_jk_bms_3_cell_voltage_12') }} V + {% elif states('sensor.yambms_jk_bms_3_min_voltage_cell') == + '12' %} {{ + states('sensor.yambms_jk_bms_3_cell_voltage_12') }} V + {% else %} {{ states('sensor.yambms_jk_bms_3_cell_voltage_12') + }} V {% endif %}    /    {{ + states('sensor.yambms_jk_bms_3_cell_resistance_12') }} Ω
+ 13.    {% if + states('sensor.yambms_jk_bms_3_max_voltage_cell') == '13' %} + {{ + states('sensor.yambms_jk_bms_3_cell_voltage_13') }} V + {% elif states('sensor.yambms_jk_bms_3_min_voltage_cell') == + '13' %} {{ + states('sensor.yambms_jk_bms_3_cell_voltage_13') }} V + {% else %} {{ states('sensor.yambms_jk_bms_3_cell_voltage_13') + }} V {% endif %}    /    {{ + states('sensor.yambms_jk_bms_3_cell_resistance_13') }} Ω
+ 14.    {% if + states('sensor.yambms_jk_bms_3_max_voltage_cell') == '14' %} + {{ + states('sensor.yambms_jk_bms_3_cell_voltage_14') }} V + {% elif states('sensor.yambms_jk_bms_3_min_voltage_cell') == + '14' %} {{ + states('sensor.yambms_jk_bms_3_cell_voltage_14') }} V + {% else %} {{ states('sensor.yambms_jk_bms_3_cell_voltage_14') + }} V {% endif %}    /    {{ + states('sensor.yambms_jk_bms_3_cell_resistance_14') }} Ω
+ 15.    {% if + states('sensor.yambms_jk_bms_3_max_voltage_cell') == '15' %} + {{ + states('sensor.yambms_jk_bms_3_cell_voltage_15') }} V + {% elif states('sensor.yambms_jk_bms_3_min_voltage_cell') == + '15' %} {{ + states('sensor.yambms_jk_bms_3_cell_voltage_15') }} V + {% else %} {{ states('sensor.yambms_jk_bms_3_cell_voltage_15') + }} V {% endif %}    /    {{ + states('sensor.yambms_jk_bms_3_cell_resistance_15') }} Ω
+ 16.    {% if + states('sensor.yambms_jk_bms_3_max_voltage_cell') == '16' %} + {{ + states('sensor.yambms_jk_bms_3_cell_voltage_16') }} V + {% elif states('sensor.yambms_jk_bms_3_min_voltage_cell') == + '16' %} {{ + states('sensor.yambms_jk_bms_3_cell_voltage_16') }} V + {% else %} {{ states('sensor.yambms_jk_bms_3_cell_voltage_16') + }} V {% endif %}    /    {{ + states('sensor.yambms_jk_bms_3_cell_resistance_16') }} Ω +
+ - type: entities + entities: + - entity: switch.yambms_jk_bms_3_combine_enabled + name: Combine + - entity: binary_sensor.yambms_jk_bms_3_combine_availability + name: Cb. Availability + - entity: binary_sensor.yambms_jk_bms_3_can_be_combined + name: Can be combined + layout_options: + grid_columns: 2 + grid_rows: 3 + - type: entity-filter + entities: + - entity: switch.yambms_jk_bms_3_charging + name: Charge + - entity: switch.yambms_jk_bms_3_discharging + name: Discharge + - entity: switch.yambms_jk_bms_3_balancing + name: Balance + conditions: + - condition: state + state_not: unavailable + layout_options: + grid_columns: 2 + grid_rows: 3 + - title: Shunt + type: sections + max_columns: 3 + sections: + - type: grid + cards: + - graph: line + type: sensor + entity: sensor.yambms_shunt_1_voltage + detail: 2 + layout_options: + grid_columns: 2 + grid_rows: 2 + name: Voltage + hours_to_show: 8 + - graph: line + type: sensor + entity: sensor.yambms_shunt_1_soc + detail: 2 + name: SoC + hours_to_show: 8 + - type: gauge + entity: sensor.yambms_shunt_1_current + needle: true + severity: + green: 0 + yellow: -250 + red: -500 + max: 500 + min: -500 + name: Current + layout_options: + grid_columns: 2 + grid_rows: 3 + - type: gauge + entity: sensor.yambms_shunt_1_power + needle: true + severity: + green: 0 + yellow: -2500 + red: -5000 + max: 5000 + min: -5000 + name: Power + layout_options: + grid_columns: 2 + grid_rows: 3 + - type: entity-filter + entities: + - entity: sensor.yambms_shunt_1_voltage + name: Shunt 1 Voltage + - entity: sensor.yambms_shunt_1_current + name: Shunt 1 Current + - entity: sensor.yambms_shunt_1_power + name: Shunt 1 Power + - entity: sensor.yambms_shunt_1_soc + name: Shunt 1 SoC + - entity: sensor.yambms_shunt_1_temperature + name: Shunt 1 Temperature + - entity: sensor.yambms_shunt_1_charged_power + name: Shunt 1 Charged Power + - entity: sensor.yambms_shunt_1_discharged_power + name: Shunt 1 Discharged Power + - entity: sensor.yambms_shunt_1_battery_capacity + name: Shunt 1 Battery Capacity + conditions: + - condition: state + state_not: unavailable + - type: entities + entities: + - entity: switch.yambms_shunt_1_combine_enabled + name: Shunt 1 Combine enabled + - entity: binary_sensor.yambms_shunt_1_combine_availability + name: Shunt 1 Combine Availability + - entity: binary_sensor.yambms_shunt_1_can_be_combined + name: Shunt 1 Can be combined + title: Shunt 1 + column_span: 1 diff --git a/components/jk_rs485_bms/home_assistant_dashboards/batteries.yaml b/components/jk_rs485_bms/home_assistant_dashboards/batteries.yaml deleted file mode 100644 index d2d8ed54..00000000 --- a/components/jk_rs485_bms/home_assistant_dashboards/batteries.yaml +++ /dev/null @@ -1,2222 +0,0 @@ -title: JK-BMS monitor -views: - - title: WHOLE SYSTEM - path: default_view - badges: [] - cards: - - type: vertical-stack - cards: - - type: custom:stack-in-card - keep: - margin: false - box_shadow: false - background: false - cards: - - type: grid - square: false - columns: 1 - cards: - - type: markdown - content: >- - - {%- set total_bms = namespace(value=0) %} {%- set - total_online_bms = namespace(value=0) %} {% for idx in - range(0, 16)-%} - {% if states('binary_sensor.rs485_bms%d_status_online' % idx)=='on' or states('binary_sensor.rs485_bms%d_status_online' % idx)=='off' %} - {% set total_bms.value = total_bms.value +1 %} - {% if states('binary_sensor.rs485_bms%d_status_online' % idx)=='on' %} - {% set total_online_bms.value = total_online_bms.value +1 %} - {% endif %} - {%- endif %} - - {% endfor %}
ONLINE BMSs: - {{total_online_bms.value}}/{{total_bms.value}}
- - type: grid - square: false - columns: 1 - cards: - - type: markdown - content: >- - {%- set power_draw = - states('sensor.rs485_bms0_battery_power')|float + - states('sensor.rs485_bms1_battery_power')|float %} {%- - set power_charging = - states('sensor.rs485_bms0_battery_power_charging')|float + - states('sensor.rs485_bms1_battery_power_charging')|float - %} {%- set power_discharging = - states('sensor.rs485_bms0_battery_power_discharging')|float - + - states('sensor.rs485_bms1_battery_power_discharging')|float - %} - - {%- set power_label = "(charging)" if (power_charging)>0 - else "(discharging)" if (power_discharging)>0 - else "" %} - - {%- set power_value = power_charging if - (power_charging)>0 - else power_discharging if (power_discharging)>0 - else power_draw %} - - {%- set font_start = '' if - (power_charging)>0 - else '' if (power_discharging)>0 - else '' %} - - {%- set font_end = '' if (power_charging)>0 or - (power_discharging)>0 else '' %} - -
{{font_start}}{{ "%.3f" % power_value }}W - {{power_label}}{{font_end}}
- - {% macro pad_right(w, s) %} {{ s }} {% set slen = w - - (s|length) %} - {% for idx in range(slen)%}   {%endfor %} - {%- endmacro %} - - {% macro green(s) %} {{ s }} {%- endmacro %} -
- - type: grid - square: false - columns: 2 - cards: - - type: markdown - content: >- - {%- set total_voltage = - (states('sensor.rs485_bms0_battery_voltage')|float + - states('sensor.rs485_bms1_battery_voltage')|float)/2 %} - -
{{"%.3f" % - total_voltage}}V
{% macro - pad_right(w, s) %} {{ s }} {% set slen = w - (s|length) - %} - {% for idx in range(slen)%}   {%endfor %} - {%- endmacro %} - - {% macro green(s) %} {{ s }} {%- endmacro %} -
- - type: markdown - content: >- - {%- set total_current = - (states('sensor.rs485_bms0_battery_current')|float)+(states('sensor.rs485_bms1_battery_current')|float) - %} - -
{{"%.3f" % - total_current}}A
{% macro - pad_right(w, s) %} {{ s }} {% set slen = w - (s|length) - %} {% for idx in range(slen)%}   {%endfor %} {%- - endmacro %} {% macro green(s) %} {{ s }} {%- endmacro %} - - type: vertical-stack - cards: - - type: custom:stack-in-card - keep: - margin: false - box_shadow: false - background: false - cards: - - type: grid - square: false - columns: 1 - cards: - - type: markdown - content:
BMS 00
- style: | - ha-card { - height: 10px; /* Ajusta el valor según tu preferencia */ - overflow: hidden; - } - - type: grid - square: false - columns: 2 - cards: - - type: markdown - content: >- - {% macro pad_right(w, s) %} {{ s }} {% set slen = w - - (s|length) %} {% for idx in range(slen)%}   {%endfor - %} {%- endmacro %} {% macro green(s) %} {{ s }} {%- - endmacro %}
{{ pad_right(14, 'MOS Temp.:') }} - {{ green(states('sensor.rs485_bms0_temperature_powertube') - + ' °C') }}
{{ pad_right(15, 'Battery T1:') }} {{ - green(states('sensor.rs485_bms0_temperature_sensor_1') + - ' °C') }}
{{ pad_right(15, 'Battery T2:') }} {{ - green(states('sensor.rs485_bms0_temperature_sensor_2') + - ' °C') }}
{{ pad_right(15, 'Battery T3:') }} {{ - green(states('sensor.rs485_bms0_temperature_sensor_3') + - ' °C') }}
{{ pad_right(15, 'Battery T4:') }} {{ - green(states('sensor.rs485_bms0_temperature_sensor_4') + - ' °C') }}
{{ pad_right(15, 'Battery T5:') - }} {{ - green(states('sensor.rs485_bms0_temperature_sensor_5') + - ' °C') }}

- -
{%- set alarm_active = - states('sensor.rs485_bms0_battery_total_alarms_active')|int - %} {%- set alarm_active = 0 %} - {%- set alarm_count = states('sensor.rs485_bms0_battery_total_alarms_count')|int %} - {%- set alarm_label = 'ALARMS' if alarm_active==0 - else 'ALARMS' %} - {{alarm_label}} ({{ alarm_active }}/{{ alarm_count -}}) - - type: markdown - content: >- - {%- set soc = - states('sensor.rs485_bms0_battery_capacity_state_of_charge') %} - {%- set soh = - states('sensor.rs485_bms0_battery_soh_valuation') %} {%- set - max_idx = - states('sensor.rs485_bms0_cell_voltage_max_cell_number') - %} {%- set min_idx = - states('sensor.rs485_bms0_cell_voltage_min_cell_number') - %} {%- set max_idx = - states('sensor.rs485_bms0_cell_voltage_max_cell_number') - %} {%- set min_idxr = - states('sensor.rs485_bms0_cell_resistance_min_cell_number') - %} {%- set max_idxr = - states('sensor.rs485_bms0_cell_resistance_max_cell_number') - %} {%- set delta_voltage = - (states('sensor.rs485_bms0_cell_delta_voltage')|float) %} - {%- set average_voltage = - (states('sensor.rs485_bms0_cell_average_voltage')|float) %} {%- - set max_voltage = - (states('sensor.rs485_bms0_cell_voltage_max')|float) %} - {%- set min_voltage = - (states('sensor.rs485_bms0_cell_voltage_min')|float) - %} {%- set max_resistance = - (states('sensor.rs485_bms0_cell_resistance_max')|float) - %} {%- set min_resistance = - (states('sensor.rs485_bms0_cell_resistance_min')|float) - %} - - - - - - - - -
SOC:{{soc}} %
SOH:{{soh}} %
delta:{{delta_voltage}} V
avg:{{average_voltage}} V
Vmax:{{max_voltage}} V [cell {{max_idx}}]
Vmin:{{min_voltage}} V [cell {{min_idx}}]
Rmax:{{max_resistance}} Ω [cell {{max_idxr}}]
Rmin:{{min_resistance}} Ω [cell {{min_idxr}}]
- - type: vertical-stack - cards: - - type: custom:stack-in-card - keep: - margin: false - box_shadow: false - background: false - cards: - - type: grid - square: false - columns: 1 - cards: - - type: markdown - content:
BMS 01
- style: | - ha-card { - height: 10px; /* Ajusta el valor según tu preferencia */ - overflow: hidden; - } - - type: grid - square: false - columns: 2 - cards: - - type: markdown - content: >- - {% macro pad_right(w, s) %} {{ s }} {% set slen = w - - (s|length) %} {% for idx in range(slen)%}   {%endfor - %} {%- endmacro %} {% macro green(s) %} {{ s }} {%- - endmacro %}
{{ pad_right(14, 'MOS Temp.:') }} - {{ green(states('sensor.rs485_bms1_temperature_powertube') - + ' °C') }}
{{ pad_right(15, 'Battery T1:') }} {{ - green(states('sensor.rs485_bms1_temperature_sensor_1') + - ' °C') }}
{{ pad_right(15, 'Battery T2:') }} {{ - green(states('sensor.rs485_bms1_temperature_sensor_2') + - ' °C') }}
{{ pad_right(15, 'Battery T3:') }} {{ - green(states('sensor.rs485_bms1_temperature_sensor_3') + - ' °C') }}
{{ pad_right(15, 'Battery T4:') }} {{ - green(states('sensor.rs485_bms1_temperature_sensor_4') + - ' °C') }}
{{ pad_right(15, 'Battery T5:') - }} {{ - green(states('sensor.rs485_bms1_temperature_sensor_5') + - ' °C') }}

- -
{%- set alarm_active = - states('sensor.rs485_bms1_battery_total_alarms_active')|int - %} {%- set alarm_active = 0 %} - {%- set alarm_count = states('sensor.rs485_bms1_battery_total_alarms_count')|int %} - {%- set alarm_label = 'ALARMS' if alarm_active==0 - else 'ALARMS' %} - {{alarm_label}} ({{ alarm_active }}/{{ alarm_count -}}) - - type: markdown - content: >- - {%- set soc = - states('sensor.rs485_bms1_battery_capacity_state_of_charge') %} - {%- set soh = - states('sensor.rs485_bms1_battery_soh_valuation') %} {%- set - max_idx = - states('sensor.rs485_bms1_cell_voltage_max_cell_number') - %} {%- set min_idx = - states('sensor.rs485_bms1_cell_voltage_min_cell_number') - %} {%- set max_idx = - states('sensor.rs485_bms1_cell_voltage_max_cell_number') - %} {%- set min_idxr = - states('sensor.rs485_bms1_cell_resistance_min_cell_number') - %} {%- set max_idxr = - states('sensor.rs485_bms1_cell_resistance_max_cell_number') - %} {%- set delta_voltage = - (states('sensor.rs485_bms1_cell_delta_voltage')|float) %} - {%- set average_voltage = - (states('sensor.rs485_bms1_cell_average_voltage')|float) %} {%- - set max_voltage = - (states('sensor.rs485_bms1_cell_voltage_max')|float) %} - {%- set min_voltage = - (states('sensor.rs485_bms1_cell_voltage_min')|float) - %} {%- set max_resistance = - (states('sensor.rs485_bms1_cell_resistance_max')|float) - %} {%- set min_resistance = - (states('sensor.rs485_bms1_cell_resistance_min')|float) - %} - - - - - - - - -
SOC:{{soc}} %
SOH:{{soh}} %
delta:{{delta_voltage}} V
avg:{{average_voltage}} V
Vmax:{{max_voltage}} V [cell {{max_idx}}]
Vmin:{{min_voltage}} V [cell {{min_idx}}]
Rmax:{{max_resistance}} Ω [cell {{max_idxr}}]
Rmin:{{min_resistance}} Ω [cell {{min_idxr}}]
- - title: BMS Summary - path: bmss-summary - badges: [] - cards: - - type: vertical-stack - cards: - - type: custom:stack-in-card - keep: - margin: false - box_shadow: false - background: false - cards: - - type: grid - square: false - columns: 1 - cards: - - type: markdown - content: >- -
BMS_00 [{{ - states('sensor.rs485_bms0_total_runtime_formatted') | - string }}]  {{ - (states('sensor.rs485_bms0_battery_capacity_state_of_charge') - + ' %') }} ({{ - (states('sensor.rs485_bms0_battery_capacity_remaining')) }}Ah) -
- - type: grid - square: false - columns: 2 - cards: - - type: markdown - content: >- - {%- set online = - states('binary_sensor.rs485_bms0_status_online') - %} - - {%- set is_working = "online" if (online|bool) else - "offline" %} - - {%- set font_start = '' if - (online|bool) else '' %} - - {%- set font_end = '' if is_working else - '' %} - - {{ font_start }} {{ "BMS:"}} {{ is_working }} {{font_end - -}} - - - {%- set precharging = - states('binary_sensor.rs485_bms0_status_precharging') - %} - - {%- set is_working = "working" if (precharging|bool) else - "idle" %} - - {%- set font_start = '' if - (precharging|bool) else '' %} - - {%- set font_end = '' if is_working else - '' %} - - {{ font_start }} {{ "Precharging:"}} {{ is_working }} - {{font_end -}} - - - {%- set heating = - states('binary_sensor.rs485_bms0_status_heating') - %} - - {%- set is_working = "working" if (heating|bool) else - "idle" %} - - {%- set font_start = '' if - (heating|bool) else '' %} - - {%- set font_end = '' if is_working else - '- - {%- set charging = - states('binary_sensor.rs485_bms0_status_charging') - %} - - {%- set is_working = "working" if (charging|bool) else - "idle" %} - - {%- set font_start = '' if - (charging|bool) else '' %} - - {%- set font_end = '' if is_working else - '' %} - - {{ font_start }} {{ "Charging:"}} {{ is_working }} {{ - font_end -}} - - - {%- set discharging = - states('binary_sensor.rs485_bms0_status_discharging') - %} - - {%- set is_working = "working" if (discharging|bool) else - "idle" %} - - {%- set font_start = '' if - (discharging|bool) else '' %} - - {%- set font_end = '' if is_working else - '' %} - - {{ font_start }} {{ "Discharging:"}} {{ is_working }} {{ - font_end -}} - - {%- set balancing_direction = - states('sensor.rs485_bms0_balancing_direction')%} {%- - set is_working = "charging" if - (balancing_direction|int)==1 - else "discharging" if (balancing_direction|int)==2 - else "idle" if (balancing_direction|int)==0 - else 'unknown' %} - {%- set font_start = '' if - (balancing_direction|int)>0 - else '' if (balancing_direction|int)<0 - else '' %} - {%- set font_end = '' if - (balancing_direction|int)!=0 else '' %} {{ - font_start }} {{ "
Balancing:"}} {{ is_working }} - {{font_end -}} - - type: custom:stack-in-card - keep: - margin: false - box_shadow: false - background: false - cards: - - type: grid - square: false - columns: 1 - cards: - - type: markdown - content: >- - {%- set power_draw = - states('sensor.rs485_bms0_battery_power')|float %} {%- - set power_charging = - states('sensor.rs485_bms0_battery_power_charging')|float - %} {%- set power_discharging = - states('sensor.rs485_bms0_battery_power_discharging')|float - %} - - {%- set power_label = "(charging)" if (power_charging)>0 - else "(discharging)" if (power_discharging)>0 - else "" %} - - {%- set power_value = power_charging if - (power_charging)>0 - else power_discharging if (power_discharging)>0 - else power_draw %} - - {%- set font_start = '' if - (power_charging)>0 - else '' if (power_discharging)>0 - else '' %} - - {%- set font_end = '' if (power_charging)>0 or - (power_discharging)>0 else '' %} - -
{{font_start}}{{ power_value }}W - {{power_label}}{{font_end}}
- - {% macro pad_right(w, s) %} {{ s }} {% set slen = w - - (s|length) %} - {% for idx in range(slen)%}   {%endfor %} - {%- endmacro %} - - {% macro green(s) %} {{ s }} {%- endmacro %} -
- - type: grid - square: false - columns: 2 - cards: - - type: markdown - content: >- -
{{states('sensor.rs485_bms0_battery_voltage') - }}V
{% macro pad_right(w, s) %} - {{ s }} {% set slen = w - (s|length) %} - {% for idx in range(slen)%}   {%endfor %} - {%- endmacro %} - - {% macro green(s) %} {{ s }} {%- endmacro %} -
- - type: markdown - content: >- -
{{ - states('sensor.rs485_bms0_battery_current') }} - A
{% macro pad_right(w, s) %} {{ - s }} {% set slen = w - (s|length) %} {% for idx in - range(slen)%}   {%endfor %} {%- endmacro %} {% macro - green(s) %} {{ s }} - {%- endmacro %} - - type: custom:stack-in-card - keep: - margin: false - box_shadow: false - background: false - cards: - - type: grid - square: false - columns: 2 - cards: - - type: markdown - content: >- -
{%- set ovp = - states('sensor.rs485_bms0_cell_overvoltage_protection') - %} {%- set slv = - states('sensor.rs485_bms0_cell_smart_sleep_voltage') %} - {%- set rcv = - states('sensor.rs485_bms0_cell_request_charge_voltage') - %} {%- set bsv = - states('sensor.rs485_bms0_cell_balancing_starting_voltage') - %} {%- set soc100 = - states('sensor.rs485_bms0_cell_soc100_voltage') %} {%- - set ovpr = - states('sensor.rs485_bms0_cell_overvoltage_protection_recovery') - %} {%- set rfv = - states('sensor.rs485_bms0_cell_request_float_voltage') %} - {%- set uvpr = - states('sensor.rs485_bms0_cell_undervoltage_protection_recovery') - %} {%- set soc0 = - states('sensor.rs485_bms0_cell_soc0_voltage') %} {%- set - uvp = - states('sensor.rs485_bms0_cell_undervoltage_protection') - %} {%- set poff = - states('sensor.rs485_bms0_cell_power_off_voltage') %} {%- - set rcvt = - states('sensor.rs485_bms0_cell_request_charge_voltage_time') - %} {%- set rfvt = - states('sensor.rs485_bms0_cell_request_float_voltage_time') - %} {%- set TimeOVPR = - states('sensor.rs485_bms0_cell_overvoltage_protection_release_time') - %} {%- set TimeUVPR = - states('sensor.rs485_bms0_cell_undervoltage_protection_release_time') - %} - - - - {%- set rcvt = 'N/D' if rcvt == 'unknown' - else "%.1f" % rcvt|float %} - {%- set rfvt = 'N/D' if rfvt == 'unknown' - else "%.1f" % rfvt|float %} - - - - - -
VOLTAGE - SETTINGS
OVP{{ovp}}V - @{{TimeOVPR}}s
Smart Sleep - {{slv}}V
RCV{{rcv}}V - @{{rcvt}}h
Bal.Start.{{bsv}}V
SOC 100%{{soc100}}V
OVPR{{ovpr}}V
RFV{{rfv}}V @{{rfvt}}h
UVPR{{uvpr}}V
SOC - 0%{{soc0}}V
UVP{{uvp}}V - @{{TimeUVPR}}s
Power - OFF{{poff}}V

- -
TEMPERATURES {% macro pad_right(w, s) %} {{ s - }} {% set slen = w - (s|length) %} {% for idx in - range(slen)%}   {%endfor %} {%- endmacro %} {% macro - green(s) %} {{ s }} - {%- endmacro %}
{{ pad_right(14, 'MOS - Temp.:') }} {{ - green(states('sensor.rs485_bms0_temperature_powertube') + - ' °C') }}
{{ pad_right(15, 'Battery T1:') }} {{ - green(states('sensor.rs485_bms0_temperature_sensor_1') + - ' °C') }}
{{ pad_right(15, 'Battery T2:') }} {{ - green(states('sensor.rs485_bms0_temperature_sensor_2') + - ' °C') }}
{{ pad_right(15, 'Battery T3:') }} {{ - green(states('sensor.rs485_bms0_temperature_sensor_3') + - ' °C') }}
{{ pad_right(15, 'Battery T4:') }} {{ - green(states('sensor.rs485_bms0_temperature_sensor_4') + - ' °C') }}
{{ pad_right(15, 'Battery T5:') - }} {{ - green(states('sensor.rs485_bms0_temperature_sensor_5') + - ' °C') }}
- - type: markdown - content: >- - {%- set min_idx = - states('sensor.rs485_bms0_cell_voltage_min_cell_number') - %} - - {%- set max_idx = - states('sensor.rs485_bms0_cell_voltage_max_cell_number') - %} - - {%- set min_idxr = - states('sensor.rs485_bms0_cell_resistance_min_cell_number') - %} - - {%- set max_idxr = - states('sensor.rs485_bms0_cell_resistance_max_cell_number') - %} - - {%- set delta = - (states('sensor.rs485_bms0_cell_delta_voltage')|float) - %} - - {% - for idx in range(1, 17) -%} - {%- set is_max = 1 if ((max_idx | int) == (idx | int)) else 0 %} - {%- set is_min = 1 if ((min_idx | int) == (idx | int)) else 0 %} - {%- set is_maxr = 1 if ((max_idxr | int) == (idx | int)) else 0 %} - {%- set is_minr = 1 if ((min_idxr | int) == (idx | int)) else 0 %} - {%- set cell_volt = states('sensor.rs485_bms0_cell_voltage_%02d' % idx) %} - {%- set cell_resistance = states('sensor.rs485_bms0_cell_resistance_%02d' % idx) %} - {%- set font_start = '' if is_max - else '' if is_min - else '' %} - {%- set font_end = '' if is_max or is_min - else '' %} - {%- set font_start_resistance = '' if is_minr - else '' if is_maxr - else '' %} - {%- set font_end_resistance = '' if is_maxr or is_minr - else '' %} - {% endfor %} -
CELL - INFO  (Δ: {{delta}}V)
{{ "%02d" % idx}}.{{ font_start }} {{ cell_volt }} V {{ font_end -}} /{{ font_start_resistance }} {{ cell_resistance |float * 1000 }} mΩ {{ font_end_resistance }}
{%- set network_nodes_available = - states('sensor.rs485_bms0_network_nodes_available') %} - NET:{{network_nodes_available}}   - - type: custom:stack-in-card - keep: - margin: false - box_shadow: false - background: false - cards: - - type: custom:stack-in-card - margin: false - columns: 2 - mode: horizontal - cards: - - type: markdown - content: >- - {% macro pad_right(w, s) %} {{ s }} {% set slen = w - - (s|length) %} - {% for idx in range(slen)%}   {%endfor %} - {%- endmacro %} - - {% macro green(s) %} {{ s }} {%- endmacro %}
- {{ pad_right(20, 'Cycle Capacity:') }} {{ - green(states('sensor.rs485_bms0_battery_capacity_total_charging_cycle') - + " Ah") }}
{{ pad_right(15, "Rem. Capacity:") - -}} {{ - green(states('sensor.rs485_bms0_battery_capacity_remaining') - + " Ah") }}
{{ pad_right(20, "Total Capacity:") -}} {{ - green(states('sensor.rs485_bms0_battery_capacity_total_setting') - + " Ah")}}
- -
- - type: markdown - content: >- - {% macro pad_right(w, s) %} {{ s }} {% set slen = w - - (s|length) %} {% for idx in range(slen)%}   {%endfor - %} {%- endmacro %} {% macro green(s) %} {{ s }} {%- - endmacro %}
{{ pad_right(18, "SOC:") -}} {{ - green(states('sensor.rs485_bms0_battery_capacity_state_of_charge') - + ' %') }}
{{ pad_right(18, "SOH:") -}} {{ - green(states('sensor.rs485_bms0_battery_soh_valuation') + - ' %') }}
{{ pad_right(18, 'Cycle Count:') }} {{ - green(states('sensor.rs485_bms0_charging_cycles' )+ ' - cycles') }}
- {{ pad_right(20, 'Balance Curr:') }} - {{green(states('sensor.rs485_bms0_balancing_current') + ' - A') }}
{{ pad_right(20, 'Balancing Trig.:') }} - {{green(states('sensor.rs485_bms0_balancing_trigger_voltage') + ' V') }} -
- - type: vertical-stack - cards: - - type: custom:stack-in-card - keep: - margin: false - box_shadow: false - background: false - cards: - - type: grid - square: false - columns: 1 - cards: - - type: markdown - content: >- -
BMS_01 [{{ - states('sensor.rs485_bms1_total_runtime_formatted') | - string }}]  {{ - (states('sensor.rs485_bms1_battery_capacity_state_of_charge') - + ' %') }} ({{ - (states('sensor.rs485_bms1_battery_capacity_remaining')) }}Ah) -
- - type: grid - square: false - columns: 2 - cards: - - type: markdown - content: >- - {%- set online = - states('binary_sensor.rs485_bms1_status_online') - %} - - {%- set is_working = "online" if (online|bool) else - "offline" %} - - {%- set font_start = '' if - (online|bool) else '' %} - - {%- set font_end = '' if is_working else - '' %} - - {{ font_start }} {{ "BMS:"}} {{ is_working }} {{font_end - -}} - - - {%- set precharging = - states('binary_sensor.rs485_bms1_status_precharging') - %} - - {%- set is_working = "working" if (precharging|bool) else - "idle" %} - - {%- set font_start = '' if - (precharging|bool) else '' %} - - {%- set font_end = '' if is_working else - '' %} - - {{ font_start }} {{ "Precharging:"}} {{ is_working }} - {{font_end -}} - - - {%- set heating = - states('binary_sensor.rs485_bms1_status_heating') - %} - - {%- set is_working = "working" if (heating|bool) else - "idle" %} - - {%- set font_start = '' if - (heating|bool) else '' %} - - {%- set font_end = '' if is_working else - '- - {%- set charging = - states('binary_sensor.rs485_bms1_status_charging') - %} - - {%- set is_working = "working" if (charging|bool) else - "idle" %} - - {%- set font_start = '' if - (charging|bool) else '' %} - - {%- set font_end = '' if is_working else - '' %} - - {{ font_start }} {{ "Charging:"}} {{ is_working }} {{ - font_end -}} - - - {%- set discharging = - states('binary_sensor.rs485_bms1_status_discharging') - %} - - {%- set is_working = "working" if (discharging|bool) else - "idle" %} - - {%- set font_start = '' if - (discharging|bool) else '' %} - - {%- set font_end = '' if is_working else - '' %} - - {{ font_start }} {{ "Discharging:"}} {{ is_working }} {{ - font_end -}} - - {%- set balancing_direction = - states('sensor.rs485_bms1_balancing_direction')%} {%- - set is_working = "charging" if - (balancing_direction|int)>0 - else "discharging" if (balancing_direction|int)<0 - else 'idle' %} - {%- set font_start = '' if - (balancing_direction|int)>0 - else '' if (balancing_direction|int)<0 - else '' %} - {%- set font_end = '' if - (balancing_direction|int)!=0 else '' %} {{ - font_start }} {{ "
Balancing:"}} {{ is_working }} - {{font_end -}} - - type: custom:stack-in-card - keep: - margin: false - box_shadow: false - background: false - cards: - - type: grid - square: false - columns: 1 - cards: - - type: markdown - content: >- - {%- set power_draw = - states('sensor.rs485_bms1_battery_power')|float %} {%- - set power_charging = - states('sensor.rs485_bms1_battery_power_charging')|float - %} {%- set power_discharging = - states('sensor.rs485_bms1_battery_power_discharging')|float - %} - - {%- set power_label = "(charging)" if (power_charging)>0 - else "(discharging)" if (power_discharging)>0 - else "" %} - - {%- set power_value = power_charging if - (power_charging)>0 - else power_discharging if (power_discharging)>0 - else power_draw %} - - {%- set font_start = '' if - (power_charging)>0 - else '' if (power_discharging)>0 - else '' %} - - {%- set font_end = '' if (power_charging)>0 or - (power_discharging)>0 else '' %} - -
{{font_start}}{{ power_value }}W - {{power_label}}{{font_end}}
- - {% macro pad_right(w, s) %} {{ s }} {% set slen = w - - (s|length) %} - {% for idx in range(slen)%}   {%endfor %} - {%- endmacro %} - - {% macro green(s) %} {{ s }} {%- endmacro %} -
- - type: grid - square: false - columns: 2 - cards: - - type: markdown - content: >- -
{{states('sensor.rs485_bms1_battery_voltage') - }}V
{% macro pad_right(w, s) %} - {{ s }} {% set slen = w - (s|length) %} - {% for idx in range(slen)%}   {%endfor %} - {%- endmacro %} - - {% macro green(s) %} {{ s }} {%- endmacro %} -
- - type: markdown - content: >- -
{{ - states('sensor.rs485_bms1_battery_current') }} - A
{% macro pad_right(w, s) %} {{ - s }} {% set slen = w - (s|length) %} {% for idx in - range(slen)%}   {%endfor %} {%- endmacro %} {% macro - green(s) %} {{ s }} - {%- endmacro %} - - type: custom:stack-in-card - keep: - margin: false - box_shadow: false - background: false - cards: - - type: grid - square: false - columns: 2 - cards: - - type: markdown - content: >- -
{%- set ovp = - states('sensor.rs485_bms1_cell_overvoltage_protection') - %} {%- set slv = - states('sensor.rs485_bms1_cell_smart_sleep_voltage') %} - {%- set rcv = - states('sensor.rs485_bms1_cell_request_charge_voltage') - %} {%- set bsv = - states('sensor.rs485_bms1_cell_balancing_starting_voltage') - %} {%- set soc100 = - states('sensor.rs485_bms1_cell_soc100_voltage') %} {%- - set ovpr = - states('sensor.rs485_bms1_cell_overvoltage_protection_recovery') - %} {%- set rfv = - states('sensor.rs485_bms1_cell_request_float_voltage') %} - {%- set uvpr = - states('sensor.rs485_bms1_cell_undervoltage_protection_recovery') - %} {%- set soc0 = - states('sensor.rs485_bms1_cell_soc0_voltage') %} {%- set - uvp = - states('sensor.rs485_bms1_cell_undervoltage_protection') - %} {%- set poff = - states('sensor.rs485_bms1_cell_power_off_voltage') %} {%- - set rcvt = - states('sensor.rs485_bms1_cell_request_charge_voltage_time') - %} {%- set rfvt = - states('sensor.rs485_bms1_cell_request_float_voltage_time') - %} {%- set TimeOVPR = - states('sensor.rs485_bms1_cell_overvoltage_protection_release_time') - %} {%- set TimeUVPR = - states('sensor.rs485_bms1_cell_undervoltage_protection_release_time') - %} - - - - {%- set rcvt = 'N/D' if rcvt == 'unknown' - else "%.1f" % rcvt|float %} - {%- set rfvt = 'N/D' if rfvt == 'unknown' - else "%.1f" % rfvt|float %} - - - - - -
VOLTAGE - SETTINGS
OVP{{ovp}}V - @{{TimeOVPR}}s
Smart Sleep - {{slv}}V
RCV{{rcv}}V - @{{rcvt}}h
Bal.Start.{{bsv}}V
SOC 100%{{soc100}}V
OVPR{{ovpr}}V
RFV{{rfv}}V @{{rfvt}}h
UVPR{{uvpr}}V
SOC - 0%{{soc0}}V
UVP{{uvp}}V - @{{TimeUVPR}}s
Power - OFF{{poff}}V

- -
TEMPERATURES {% macro pad_right(w, s) %} {{ s - }} {% set slen = w - (s|length) %} {% for idx in - range(slen)%}   {%endfor %} {%- endmacro %} {% macro - green(s) %} {{ s }} - {%- endmacro %}
{{ pad_right(14, 'MOS - Temp.:') }} {{ - green(states('sensor.rs485_bms1_temperature_powertube') + - ' °C') }}
{{ pad_right(15, 'Battery T1:') }} {{ - green(states('sensor.rs485_bms1_temperature_sensor_1') + - ' °C') }}
{{ pad_right(15, 'Battery T2:') }} {{ - green(states('sensor.rs485_bms1_temperature_sensor_2') + - ' °C') }}
{{ pad_right(15, 'Battery T3:') }} {{ - green(states('sensor.rs485_bms1_temperature_sensor_3') + - ' °C') }}
{{ pad_right(15, 'Battery T4:') }} {{ - green(states('sensor.rs485_bms1_temperature_sensor_4') + - ' °C') }}
{{ pad_right(15, 'Battery T5:') - }} {{ - green(states('sensor.rs485_bms1_temperature_sensor_5') + - ' °C') }}
- - type: markdown - content: >- - {%- set min_idx = - states('sensor.rs485_bms1_cell_voltage_min_cell_number') - %} - - {%- set max_idx = - states('sensor.rs485_bms1_cell_voltage_max_cell_number') - %} - - {%- set min_idxr = - states('sensor.rs485_bms1_cell_resistance_min_cell_number') - %} - - {%- set max_idxr = - states('sensor.rs485_bms1_cell_resistance_max_cell_number') - %} - - {%- set delta = - (states('sensor.rs485_bms1_cell_delta_voltage')|float) - %} - - {% - for idx in range(1, 17) -%} - {%- set is_max = 1 if ((max_idx | int) == (idx | int)) else 0 %} - {%- set is_min = 1 if ((min_idx | int) == (idx | int)) else 0 %} - {%- set is_maxr = 1 if ((max_idxr | int) == (idx | int)) else 0 %} - {%- set is_minr = 1 if ((min_idxr | int) == (idx | int)) else 0 %} - {%- set cell_volt = states('sensor.rs485_bms1_cell_voltage_%02d' % idx) %} - {%- set cell_resistance = states('sensor.rs485_bms1_cell_resistance_%02d' % idx) %} - {%- set font_start = '' if is_max - else '' if is_min - else '' %} - {%- set font_end = '' if is_max or is_min - else '' %} - {%- set font_start_resistance = '' if is_minr - else '' if is_maxr - else '' %} - {%- set font_end_resistance = '' if is_maxr or is_minr - else '' %} - {% endfor %} -
CELL - INFO  (Δ: {{delta}}V)
{{ "%02d" % idx}}.{{ font_start }} {{ cell_volt }} V {{ font_end -}} /{{ font_start_resistance }} {{ cell_resistance |float * 1000 }} mΩ {{ font_end_resistance }}
{%- set network_nodes_available = - states('sensor.rs485_bms1_network_nodes_available') %} - NET:{{network_nodes_available}}   - - type: custom:stack-in-card - keep: - margin: false - box_shadow: false - background: false - cards: - - type: custom:stack-in-card - margin: false - columns: 2 - mode: horizontal - cards: - - type: markdown - content: >- - {% macro pad_right(w, s) %} {{ s }} {% set slen = w - - (s|length) %} - {% for idx in range(slen)%}   {%endfor %} - {%- endmacro %} - - {% macro green(s) %} {{ s }} {%- endmacro %}
- {{ pad_right(20, 'Cycle Capacity:') }} {{ - green(states('sensor.rs485_bms1_battery_capacity_total_charging_cycle') - + " Ah") }}
{{ pad_right(15, "Rem. Capacity:") - -}} {{ - green(states('sensor.rs485_bms1_battery_capacity_remaining') - + " Ah") }}
{{ pad_right(20, "Total Capacity:") -}} {{ - green(states('sensor.rs485_bms1_battery_capacity_total_setting') - + " Ah")}}
- -
- - type: markdown - content: >- - {% macro pad_right(w, s) %} {{ s }} {% set slen = w - - (s|length) %} {% for idx in range(slen)%}   {%endfor - %} {%- endmacro %} {% macro green(s) %} {{ s }} {%- - endmacro %}
{{ pad_right(18, "SOC:") -}} {{ - green(states('sensor.rs485_bms1_battery_capacity_state_of_charge') - + ' %') }}
{{ pad_right(18, "SOH:") -}} {{ - green(states('sensor.rs485_bms1_battery_soh_valuation') + - ' %') }}
{{ pad_right(18, 'Cycle Count:') }} {{ - green(states('sensor.rs485_bms1_charging_cycles' )+ ' - cycles') }}
- {{ pad_right(20, 'Balance Curr:') }} - {{green(states('sensor.rs485_bms1_balancing_current') + ' - A') }}
{{ pad_right(20, 'Balancing Trig.:') }} - {{green(states('sensor.rs485_bms1_balancing_trigger_voltage') + ' V') }} -
- - title: BMS0 (cells) - badges: [] - cards: - - type: gauge - needle: true - max: 3.65 - min: 3 - segments: - - from: 2 - color: '#db4437' - - from: 2.4 - color: '#ffa600' - - from: 3.1 - color: '#43a047' - - from: 3.35 - color: '#999999' - - from: 3.45 - color: '#00a6ee' - - from: 3.6 - color: '#ffa600' - - from: 3.65 - color: '#db4437' - entity: sensor.rs485_bms0_cell_voltage_01 - - type: gauge - needle: true - max: 3.65 - min: 3 - segments: - - from: 2 - color: '#db4437' - - from: 2.4 - color: '#ffa600' - - from: 3.1 - color: '#43a047' - - from: 3.35 - color: '#999999' - - from: 3.45 - color: '#00a6ee' - - from: 3.6 - color: '#ffa600' - - from: 3.65 - color: '#db4437' - entity: sensor.rs485_bms0_cell_voltage_05 - - type: gauge - needle: true - max: 3.65 - min: 3 - segments: - - from: 2 - color: '#db4437' - - from: 2.4 - color: '#ffa600' - - from: 3.1 - color: '#43a047' - - from: 3.35 - color: '#999999' - - from: 3.45 - color: '#00a6ee' - - from: 3.6 - color: '#ffa600' - - from: 3.65 - color: '#db4437' - entity: sensor.rs485_bms0_cell_voltage_02 - - type: gauge - needle: true - max: 3.65 - min: 3 - segments: - - from: 2 - color: '#db4437' - - from: 2.4 - color: '#ffa600' - - from: 3.1 - color: '#43a047' - - from: 3.35 - color: '#999999' - - from: 3.45 - color: '#00a6ee' - - from: 3.6 - color: '#ffa600' - - from: 3.65 - color: '#db4437' - entity: sensor.rs485_bms0_cell_voltage_06 - - type: gauge - needle: true - max: 3.65 - min: 3 - segments: - - from: 2 - color: '#db4437' - - from: 2.4 - color: '#ffa600' - - from: 3.1 - color: '#43a047' - - from: 3.35 - color: '#999999' - - from: 3.45 - color: '#00a6ee' - - from: 3.6 - color: '#ffa600' - - from: 3.65 - color: '#db4437' - entity: sensor.rs485_bms0_cell_voltage_03 - - type: gauge - needle: true - max: 3.65 - min: 3 - segments: - - from: 2 - color: '#db4437' - - from: 2.4 - color: '#ffa600' - - from: 3.1 - color: '#43a047' - - from: 3.35 - color: '#999999' - - from: 3.45 - color: '#00a6ee' - - from: 3.6 - color: '#ffa600' - - from: 3.65 - color: '#db4437' - entity: sensor.rs485_bms0_cell_voltage_07 - - type: gauge - needle: true - max: 3.65 - min: 3 - segments: - - from: 2 - color: '#db4437' - - from: 2.4 - color: '#ffa600' - - from: 3.1 - color: '#43a047' - - from: 3.35 - color: '#999999' - - from: 3.45 - color: '#00a6ee' - - from: 3.6 - color: '#ffa600' - - from: 3.65 - color: '#db4437' - entity: sensor.rs485_bms0_cell_voltage_04 - - type: gauge - needle: true - max: 3.65 - min: 3 - segments: - - from: 2 - color: '#db4437' - - from: 2.4 - color: '#ffa600' - - from: 3.1 - color: '#43a047' - - from: 3.35 - color: '#999999' - - from: 3.45 - color: '#00a6ee' - - from: 3.6 - color: '#ffa600' - - from: 3.65 - color: '#db4437' - entity: sensor.rs485_bms0_cell_voltage_08 - - type: gauge - needle: true - max: 3.65 - min: 3 - segments: - - from: 2 - color: '#db4437' - - from: 2.4 - color: '#ffa600' - - from: 3.1 - color: '#43a047' - - from: 3.35 - color: '#999999' - - from: 3.45 - color: '#00a6ee' - - from: 3.6 - color: '#ffa600' - - from: 3.65 - color: '#db4437' - entity: sensor.rs485_bms0_cell_voltage_09 - - type: gauge - needle: true - max: 3.65 - min: 3 - segments: - - from: 2 - color: '#db4437' - - from: 2.4 - color: '#ffa600' - - from: 3.1 - color: '#43a047' - - from: 3.35 - color: '#999999' - - from: 3.45 - color: '#00a6ee' - - from: 3.6 - color: '#ffa600' - - from: 3.65 - color: '#db4437' - entity: sensor.rs485_bms0_cell_voltage_10 - - type: gauge - needle: true - max: 3.65 - min: 3 - segments: - - from: 2 - color: '#db4437' - - from: 2.4 - color: '#ffa600' - - from: 3.1 - color: '#43a047' - - from: 3.35 - color: '#999999' - - from: 3.45 - color: '#00a6ee' - - from: 3.6 - color: '#ffa600' - - from: 3.65 - color: '#db4437' - entity: sensor.rs485_bms0_cell_voltage_11 - - type: gauge - needle: true - max: 3.65 - min: 3 - segments: - - from: 2 - color: '#db4437' - - from: 2.4 - color: '#ffa600' - - from: 3.1 - color: '#43a047' - - from: 3.35 - color: '#999999' - - from: 3.45 - color: '#00a6ee' - - from: 3.6 - color: '#ffa600' - - from: 3.65 - color: '#db4437' - entity: sensor.rs485_bms0_cell_voltage_12 - - type: gauge - needle: true - max: 3.65 - min: 3 - segments: - - from: 2 - color: '#db4437' - - from: 2.4 - color: '#ffa600' - - from: 3.1 - color: '#43a047' - - from: 3.35 - color: '#999999' - - from: 3.45 - color: '#00a6ee' - - from: 3.6 - color: '#ffa600' - - from: 3.65 - color: '#db4437' - entity: sensor.rs485_bms0_cell_voltage_13 - - type: gauge - needle: true - max: 3.65 - min: 3 - segments: - - from: 2 - color: '#db4437' - - from: 2.4 - color: '#ffa600' - - from: 3.1 - color: '#43a047' - - from: 3.35 - color: '#999999' - - from: 3.45 - color: '#00a6ee' - - from: 3.6 - color: '#ffa600' - - from: 3.65 - color: '#db4437' - entity: sensor.rs485_bms0_cell_voltage_14 - - type: gauge - needle: true - max: 3.65 - min: 3 - segments: - - from: 2 - color: '#db4437' - - from: 2.4 - color: '#ffa600' - - from: 3.1 - color: '#43a047' - - from: 3.35 - color: '#999999' - - from: 3.45 - color: '#00a6ee' - - from: 3.6 - color: '#ffa600' - - from: 3.65 - color: '#db4437' - entity: sensor.rs485_bms0_cell_voltage_15 - - type: gauge - needle: true - max: 3.65 - min: 3 - segments: - - from: 2 - color: '#db4437' - - from: 2.4 - color: '#ffa600' - - from: 3.1 - color: '#43a047' - - from: 3.35 - color: '#999999' - - from: 3.45 - color: '#00a6ee' - - from: 3.6 - color: '#ffa600' - - from: 3.65 - color: '#db4437' - entity: sensor.rs485_bms0_cell_voltage_16 - - graph: line - type: sensor - detail: 1 - entity: sensor.rs485_bms0_cell_voltage_max_cell_number - - graph: line - type: sensor - detail: 1 - entity: sensor.rs485_bms0_cell_voltage_min_cell_number - - title: BMS1 (cells) - badges: [] - cards: - - type: gauge - needle: true - max: 3.65 - min: 3 - segments: - - from: 2 - color: '#db4437' - - from: 2.4 - color: '#ffa600' - - from: 3.1 - color: '#43a047' - - from: 3.35 - color: '#999999' - - from: 3.45 - color: '#00a6ee' - - from: 3.6 - color: '#ffa600' - - from: 3.65 - color: '#db4437' - entity: sensor.rs485_bms1_cell_voltage_01 - - type: gauge - needle: true - max: 3.65 - min: 3 - segments: - - from: 2 - color: '#db4437' - - from: 2.4 - color: '#ffa600' - - from: 3.1 - color: '#43a047' - - from: 3.35 - color: '#999999' - - from: 3.45 - color: '#00a6ee' - - from: 3.6 - color: '#ffa600' - - from: 3.65 - color: '#db4437' - entity: sensor.rs485_bms1_cell_voltage_05 - - type: gauge - needle: true - max: 3.65 - min: 3 - segments: - - from: 2 - color: '#db4437' - - from: 2.4 - color: '#ffa600' - - from: 3.1 - color: '#43a047' - - from: 3.35 - color: '#999999' - - from: 3.45 - color: '#00a6ee' - - from: 3.6 - color: '#ffa600' - - from: 3.65 - color: '#db4437' - entity: sensor.rs485_bms1_cell_voltage_02 - - type: gauge - needle: true - max: 3.65 - min: 3 - segments: - - from: 2 - color: '#db4437' - - from: 2.4 - color: '#ffa600' - - from: 3.1 - color: '#43a047' - - from: 3.35 - color: '#999999' - - from: 3.45 - color: '#00a6ee' - - from: 3.6 - color: '#ffa600' - - from: 3.65 - color: '#db4437' - entity: sensor.rs485_bms1_cell_voltage_06 - - type: gauge - needle: true - max: 3.65 - min: 3 - segments: - - from: 2 - color: '#db4437' - - from: 2.4 - color: '#ffa600' - - from: 3.1 - color: '#43a047' - - from: 3.35 - color: '#999999' - - from: 3.45 - color: '#00a6ee' - - from: 3.6 - color: '#ffa600' - - from: 3.65 - color: '#db4437' - entity: sensor.rs485_bms1_cell_voltage_03 - - type: gauge - needle: true - max: 3.65 - min: 3 - segments: - - from: 2 - color: '#db4437' - - from: 2.4 - color: '#ffa600' - - from: 3.1 - color: '#43a047' - - from: 3.35 - color: '#999999' - - from: 3.45 - color: '#00a6ee' - - from: 3.6 - color: '#ffa600' - - from: 3.65 - color: '#db4437' - entity: sensor.rs485_bms1_cell_voltage_07 - - type: gauge - needle: true - max: 3.65 - min: 3 - segments: - - from: 2 - color: '#db4437' - - from: 2.4 - color: '#ffa600' - - from: 3.1 - color: '#43a047' - - from: 3.35 - color: '#999999' - - from: 3.45 - color: '#00a6ee' - - from: 3.6 - color: '#ffa600' - - from: 3.65 - color: '#db4437' - entity: sensor.rs485_bms1_cell_voltage_04 - - type: gauge - needle: true - max: 3.65 - min: 3 - segments: - - from: 2 - color: '#db4437' - - from: 2.4 - color: '#ffa600' - - from: 3.1 - color: '#43a047' - - from: 3.35 - color: '#999999' - - from: 3.45 - color: '#00a6ee' - - from: 3.6 - color: '#ffa600' - - from: 3.65 - color: '#db4437' - entity: sensor.rs485_bms1_cell_voltage_08 - - type: gauge - needle: true - max: 3.65 - min: 3 - segments: - - from: 2 - color: '#db4437' - - from: 2.4 - color: '#ffa600' - - from: 3.1 - color: '#43a047' - - from: 3.35 - color: '#999999' - - from: 3.45 - color: '#00a6ee' - - from: 3.6 - color: '#ffa600' - - from: 3.65 - color: '#db4437' - entity: sensor.rs485_bms1_cell_voltage_09 - - type: gauge - needle: true - max: 3.65 - min: 3 - segments: - - from: 2 - color: '#db4437' - - from: 2.4 - color: '#ffa600' - - from: 3.1 - color: '#43a047' - - from: 3.35 - color: '#999999' - - from: 3.45 - color: '#00a6ee' - - from: 3.6 - color: '#ffa600' - - from: 3.65 - color: '#db4437' - entity: sensor.rs485_bms1_cell_voltage_10 - - type: gauge - needle: true - max: 3.65 - min: 3 - segments: - - from: 2 - color: '#db4437' - - from: 2.4 - color: '#ffa600' - - from: 3.1 - color: '#43a047' - - from: 3.35 - color: '#999999' - - from: 3.45 - color: '#00a6ee' - - from: 3.6 - color: '#ffa600' - - from: 3.65 - color: '#db4437' - entity: sensor.rs485_bms1_cell_voltage_11 - - type: gauge - needle: true - max: 3.65 - min: 3 - segments: - - from: 2 - color: '#db4437' - - from: 2.4 - color: '#ffa600' - - from: 3.1 - color: '#43a047' - - from: 3.35 - color: '#999999' - - from: 3.45 - color: '#00a6ee' - - from: 3.6 - color: '#ffa600' - - from: 3.65 - color: '#db4437' - entity: sensor.rs485_bms1_cell_voltage_12 - - type: gauge - needle: true - max: 3.65 - min: 3 - segments: - - from: 2 - color: '#db4437' - - from: 2.4 - color: '#ffa600' - - from: 3.1 - color: '#43a047' - - from: 3.35 - color: '#999999' - - from: 3.45 - color: '#00a6ee' - - from: 3.6 - color: '#ffa600' - - from: 3.65 - color: '#db4437' - entity: sensor.rs485_bms1_cell_voltage_13 - - type: gauge - needle: true - max: 3.65 - min: 3 - segments: - - from: 2 - color: '#db4437' - - from: 2.4 - color: '#ffa600' - - from: 3.1 - color: '#43a047' - - from: 3.35 - color: '#999999' - - from: 3.45 - color: '#00a6ee' - - from: 3.6 - color: '#ffa600' - - from: 3.65 - color: '#db4437' - entity: sensor.rs485_bms1_cell_voltage_14 - - type: gauge - needle: true - max: 3.65 - min: 3 - segments: - - from: 2 - color: '#db4437' - - from: 2.4 - color: '#ffa600' - - from: 3.1 - color: '#43a047' - - from: 3.35 - color: '#999999' - - from: 3.45 - color: '#00a6ee' - - from: 3.6 - color: '#ffa600' - - from: 3.65 - color: '#db4437' - entity: sensor.rs485_bms1_cell_voltage_15 - - type: gauge - needle: true - max: 3.65 - min: 3 - segments: - - from: 2 - color: '#db4437' - - from: 2.4 - color: '#ffa600' - - from: 3.1 - color: '#43a047' - - from: 3.35 - color: '#999999' - - from: 3.45 - color: '#00a6ee' - - from: 3.6 - color: '#ffa600' - - from: 3.65 - color: '#db4437' - entity: sensor.rs485_bms1_cell_voltage_16 - - graph: line - type: sensor - detail: 1 - entity: sensor.rs485_bms1_cell_voltage_max_cell_number - - graph: line - type: sensor - detail: 1 - entity: sensor.rs485_bms1_cell_voltage_min_cell_number - - path: bms0_settings - title: BMS0 (SETTINGS) - icon: '' - badges: [] - cards: - - type: custom:stack-in-card - keep: - margin: false - box_shadow: false - background: false - cards: - - type: grid - square: false - columns: 2 - cards: - - type: markdown - content: >- - {%- set vid = states('sensor.rs485_bms0_info_vendorid') %} {%- - set swv = states('sensor.rs485_bms0_info_software_version') %} - {%- set hwv = - states('sensor.rs485_bms0_info_hardware_version') %} {%- set - dna = states('sensor.rs485_bms0_info_device_name') %} {%- set - dsn = states('sensor.rs485_bms0_info_device_serial_number') - %} {%- set pin = - states('sensor.rs485_bms0_info_device_password') %} {%- set - settings_pin = - states('sensor.rs485_bms0_info_device_setup_passcode') %} {%- - set uart1 = states('sensor.rs485_bms0_uart1_protocol_number') - %} {%- set uart2 = - states('sensor.rs485_bms0_uart2_protocol_number') %} {%- set - cell_number_settings = - states('sensor.rs485_bms0_cell_count_settings') %} {%- set - cell_number_real = states('sensor.rs485_bms0_cell_count_real') - %} - - - - -
BMS INFO:
VendorID:{{vid}}
HARD - ver:{{swv}}
SOFT - ver:{{hwv}}
DEV - name:{{dna}}
DEV - S/N{{dsn}}
BT - PASS:{{pin}}
- PASS:{{settings_pin}}
UART1:{{uart1}}
UART2:{{uart2}}
Cells - (sett.):{{cell_number_settings}}
Cells - (real):{{cell_number_real}}

- - type: markdown - content: >- - {%- set min_idx = - states('sensor.rs485_bms0_cell_voltage_min_cell_number') %} - - {%- set max_idx = - states('sensor.rs485_bms0_cell_voltage_max_cell_number') %} - - {%- set delta = - (states('sensor.rs485_bms0_cell_delta_voltage')|float) %} - -
NETWORK - DEVICES:  
{%- set - network_nodes_available = - states('sensor.rs485_bms0_network_nodes_available') %} -
- - {{network_nodes_available}}
   - - type: entities - entities: - - entity: switch.rs485_bms0_charging - name: CHARGE - - entity: switch.rs485_bms0_discharging - name: DISCHARGE - - entity: switch.rs485_bms0_balancing - name: BALANCING - - entity: switch.rs485_bms0_emergency - name: EMERGENCY - - entity: switch.rs485_bms0_heating - name: HEATING - - entity: switch.rs485_bms0_disable_temperature_sensors - name: DISABLE TEMPERATURE SENSORS - - entity: switch.rs485_bms0_display_always_on - name: DISPLAY ALWAYS ON - - entity: switch.rs485_bms0_smart_sleep_on - name: SMART SLEEP ON - - entity: switch.rs485_bms0_disable_pcl_module - name: DISABLE PCL MODULE - - entity: switch.rs485_bms0_timed_stored_data - name: TIMED_STORED_DATA - - entity: switch.rs485_bms0_charging_float_mode - name: CHARGE FLOAT MODE - title: Switch (Read Only) - show_header_toggle: false - - type: vertical-stack - cards: - - type: custom:stack-in-card - keep: - margin: false - box_shadow: false - background: false - cards: - - type: grid - square: false - columns: 1 - cards: - - type: markdown - content: |- -
- {%- set alarm_active = states('sensor.rs485_bms0_battery_total_alarms_active')|int %} - {%- set alarm_active = 0 %} - {%- set alarm_count = states('sensor.rs485_bms0_battery_total_alarms_count')|int %} - {%- set alarm_label = 'ALARMS BMS_00' if alarm_active==0 - else 'ALARMS BMS_00' %} - {{alarm_label}} ({{ alarm_active }}/{{ alarm_count -}})
- - type: grid - square: false - columns: 1 - cards: - - type: markdown - content: >- - {%- set alarm_active = - states('sensor.rs485_bms0_battery_total_alarms_active')|int - %} - - {%- set alarm_count = - states('sensor.rs485_bms0_battery_total_alarms_count')|int - %} - - {%- set alarm_active = 0 %} - - {%- set alarms_label = '
No alarms found. Working - well
' if (alarm_active==0) - else 'ALARMS FOUND:' %} - {{ alarms_label }} - -
{% for state in states -%} - {% if state.entity_id.startswith('binary_sensor.rs485_bms0_alarm_') and state.state!="off" %} - {% set last_word = state.name.split()[-1] | string %} - {% set last_status = state.state %} - {%- set font_start = '' if last_status=="off" - else '' if last_status=="on" - else '' %} - {%- set font_end = '' if last_status - else '' %} - {{ font_start }} {{ last_word }} (status: {{last_status}}) {{ font_end -}}
- {% endif %} - {% endfor %}
- - type: grid - square: false - columns: 1 - cards: - - type: markdown - content: |- -
- {%- set alarm_active = states('sensor.rs485_bms1_battery_total_alarms_active')|int %} - {%- set alarm_active = 0 %} - {%- set alarm_count = states('sensor.rs485_bms1_battery_total_alarms_count')|int %} - {%- set alarm_label = 'ALARMS BMS_01' if alarm_active==0 - else 'ALARMS BMS_01' %} - {{alarm_label}} ({{ alarm_active }}/{{ alarm_count -}})
- - type: grid - square: false - columns: 1 - cards: - - type: markdown - content: >- - {%- set alarm_active = - states('sensor.rs485_bms1_battery_total_alarms_active')|int %} - - {%- set alarm_count = - states('sensor.rs485_bms1_battery_total_alarms_count')|int %} - - {%- set alarm_active = 0 %} - - {%- set alarms_label = '
No alarms found. Working - well
' if (alarm_active==0) - else 'ALARMS FOUND:' %} - {{ alarms_label }} - -
{% for state in states -%} - {% if state.entity_id.startswith('binary_sensor.rs485_bms1_alarm_') and state.state!="off" %} - {% set last_word = state.name.split()[-1] | string %} - {% set last_status = state.state %} - {%- set font_start = '' if last_status=="off" - else '' if last_status=="on" - else '' %} - {%- set font_end = '' if last_status - else '' %} - {{ font_start }} {{ last_word }} (status: {{last_status}}) {{ font_end -}}
- {% endif %} - {% endfor %}
- - path: bms1_settings - title: BMS1 (SETTINGS) - icon: '' - badges: [] - cards: - - type: vertical-stack - cards: - - type: custom:stack-in-card - keep: - margin: false - box_shadow: false - background: false - cards: - - type: grid - square: false - columns: 2 - cards: - - type: markdown - content: >- - {%- set vid = states('sensor.rs485_bms1_info_vendorid') %} - {%- set swv = - states('sensor.rs485_bms1_info_software_version') %} {%- - set hwv = - states('sensor.rs485_bms1_info_hardware_version') %} {%- - set dna = states('sensor.rs485_bms1_info_device_name') %} - {%- set dsn = - states('sensor.rs485_bms1_info_device_serial_number') - %} {%- set pin = - states('sensor.rs485_bms1_info_device_password') %} {%- - set settings_pin = - states('sensor.rs485_bms1_info_device_setup_passcode') %} - {%- set uart1 = - states('sensor.rs485_bms1_uart1_protocol_number') %} {%- - set uart2 = - states('sensor.rs485_bms1_uart2_protocol_number') %} {%- - set cell_number_settings = - states('sensor.rs485_bms1_cell_count_settings') %} {%- set - cell_number_real = - states('sensor.rs485_bms1_cell_count_real') %} - - - - - - -
BMS INFO:
VendorID:{{vid}}
HARD - ver:{{swv}}
SOFT - ver:{{hwv}}
DEV - name:{{dna}}
DEV - S/N{{dsn}}
BT - PASS:{{pin}}
- PASS:{{settings_pin}}
UART1:{{uart1}}
UART2:{{uart2}}
Cells - (sett.):{{cell_number_settings}}
Cells - (real):{{cell_number_real}}

- - type: markdown - content: >- - {%- set min_idx = - states('sensor.rs485_bms1_cell_voltage_min_cell_number') - %} - - {%- set max_idx = - states('sensor.rs485_bms1_cell_voltage_max_cell_number') - %} - - {%- set delta = - (states('sensor.rs485_bms1_cell_delta_voltage')|float) - %} - -
NETWORK - DEVICES:  
{%- set - network_nodes_available = - states('sensor.rs485_bms1_network_nodes_available') %} -
- - {{network_nodes_available}}
   - - type: entities - entities: - - entity: switch.rs485_bms1_charging - name: CHARGE - - entity: switch.rs485_bms1_discharging - name: DISCHARGE - - entity: switch.rs485_bms1_balancing - name: BALANCING - - entity: switch.rs485_bms1_emergency - name: EMERGENCY - - entity: switch.rs485_bms1_heating - name: HEATING - - entity: switch.rs485_bms1_disable_temperature_sensors - name: DISABLE TEMPERATURE SENSORS - - entity: switch.rs485_bms1_display_always_on - name: DISPLAY ALWAYS ON - - entity: switch.rs485_bms1_smart_sleep_on - name: SMART SLEEP ON - - entity: switch.rs485_bms1_disable_pcl_module - name: DISABLE PCL MODULE - - entity: switch.rs485_bms1_timed_stored_data - name: TIMED_STORED_DATA - - entity: switch.rs485_bms1_charging_float_mode - name: CHARGE FLOAT MODE - title: Switch (Read Only) - show_header_toggle: false - - type: vertical-stack - cards: - - type: custom:stack-in-card - keep: - margin: false - box_shadow: false - background: false - cards: - - type: grid - square: false - columns: 1 - cards: - - type: markdown - content: |- -
- {%- set alarm_active = states('sensor.rs485_bms0_battery_total_alarms_active')|int %} - {%- set alarm_active = 0 %} - {%- set alarm_count = states('sensor.rs485_bms0_battery_total_alarms_count')|int %} - {%- set alarm_label = 'ALARMS BMS_00' if alarm_active==0 - else 'ALARMS BMS_00' %} - {{alarm_label}} ({{ alarm_active }}/{{ alarm_count -}})
- - type: grid - square: false - columns: 1 - cards: - - type: markdown - content: >- - {%- set alarm_active = - states('sensor.rs485_bms0_battery_total_alarms_active')|int - %} - - {%- set alarm_count = - states('sensor.rs485_bms0_battery_total_alarms_count')|int - %} - - {%- set alarm_active = 0 %} - - {%- set alarms_label = '
No alarms found. Working - well
' if (alarm_active==0) - else 'ALARMS FOUND:' %} - {{ alarms_label }} - -
{% for state in states -%} - {% if state.entity_id.startswith('binary_sensor.rs485_bms0_alarm_') and state.state!="off" %} - {% set last_word = state.name.split()[-1] | string %} - {% set last_status = state.state %} - {%- set font_start = '' if last_status=="off" - else '' if last_status=="on" - else '' %} - {%- set font_end = '' if last_status - else '' %} - {{ font_start }} {{ last_word }} (status: {{last_status}}) {{ font_end -}}
- {% endif %} - {% endfor %}
- - type: grid - square: false - columns: 1 - cards: - - type: markdown - content: |- -
- {%- set alarm_active = states('sensor.rs485_bms1_battery_total_alarms_active')|int %} - {%- set alarm_active = 0 %} - {%- set alarm_count = states('sensor.rs485_bms1_battery_total_alarms_count')|int %} - {%- set alarm_label = 'ALARMS BMS_01' if alarm_active==0 - else 'ALARMS BMS_01' %} - {{alarm_label}} ({{ alarm_active }}/{{ alarm_count -}})
- - type: grid - square: false - columns: 1 - cards: - - type: markdown - content: >- - {%- set alarm_active = - states('sensor.rs485_bms1_battery_total_alarms_active')|int %} - - {%- set alarm_count = - states('sensor.rs485_bms1_battery_total_alarms_count')|int %} - - {%- set alarm_active = 0 %} - - {%- set alarms_label = '
No alarms found. Working - well
' if (alarm_active==0) - else 'ALARMS FOUND:' %} - {{ alarms_label }} - -
{% for state in states -%} - {% if state.entity_id.startswith('binary_sensor.rs485_bms1_alarm_') and state.state!="off" %} - {% set last_word = state.name.split()[-1] | string %} - {% set last_status = state.state %} - {%- set font_start = '' if last_status=="off" - else '' if last_status=="on" - else '' %} - {%- set font_end = '' if last_status - else '' %} - {{ font_start }} {{ last_word }} (status: {{last_status}}) {{ font_end -}}
- {% endif %} - {% endfor %}
- - title: BMS0 (PROTECTION) - path: protection_bms0 - badges: [] - cards: - - type: entities - entities: - - entity: sensor.rs485_bms0_mos_overtemperature_protection - name: mos_overtemperature_protection - - entity: sensor.rs485_bms0_mos_overtemperature_protection_recovery - name: mos_overtemperature_protection_recovery - - entity: sensor.rs485_bms0_charging_overtemperature_protection - name: charging_overtemperature_protection - - entity: sensor.rs485_bms0_discharging_overtemperature_protection - name: discharging_overtemperature_protection - - entity: sensor.rs485_bms0_charging_overtemperature_protection_recovery - name: charging_overtemperature_protection_recovery - - entity: sensor.rs485_bms0_discharging_overtemperature_protection_recovery - name: discharging_overtemperature_protection_recovery - - entity: sensor.rs485_bms0_charging_lowtemperature_protection_recovery - name: charging_lowtemperature_protection_recovery - - entity: sensor.rs485_bms0_charging_lowtemperature_protection - name: charging_lowtemperature_protection - title: TEMPERATURE - - type: entities - entities: - - entity: sensor.rs485_bms0_max_charging_current - name: max_charging_current - - entity: sensor.rs485_bms0_charging_overcurrent_protection_delay - name: charging_overcurrent_protection_delay - - entity: sensor.rs485_bms0_charging_overcurrent_protection_recovery_delay - name: charging_overcurrent_protection_recovery_delay - - entity: sensor.rs485_bms0_charging_overcurrent_protection_release_time - name: charging_overcurrent_protection_release_time - - entity: sensor.rs485_bms0_charging_short_circuit_protection_release_time - name: charging_short_circuit_protection_release_time - - entity: sensor.rs485_bms0_precharging_time_from_discharge - name: precharging_time_from_discharge - title: CHARGING - - type: entities - entities: - - entity: sensor.rs485_bms0_max_discharging_current - name: max_discharging_current - - entity: sensor.rs485_bms0_discharging_overcurrent_protection_delay - name: discharging_overcurrent_protection_delay - - entity: >- - sensor.rs485_bms0_discharging_overcurrent_protection_recovery_delay - name: discharging_overcurrent_protection_recovery_delay - - entity: sensor.rs485_bms0_discharging_overcurrent_protection_release_time - name: discharging_overcurrent_protection_release_time - - entity: >- - sensor.rs485_bms0_discharging_short_circuit_protection_release_time - name: discharging_short_circuit_protection_release_time - title: DISCHARGING - - type: entities - entities: - - entity: sensor.rs485_bms0_short_circuit_protection_delay - name: short_circuit_protection_delay - - entity: sensor.rs485_bms0_short_circuit_protection_recovery_delay - name: short_circuit_protection_recovery_delay - title: SHORT CIRCUIT - - type: entities - entities: - - entity: sensor.rs485_bms0_max_balancing_current - name: max_balancing_current - title: BALANCING - - title: BMS1 (PROTECTION) - path: protection_bms1 - badges: [] - cards: - - type: entities - entities: - - entity: sensor.rs485_bms1_mos_overtemperature_protection - name: mos_overtemperature_protection - - entity: sensor.rs485_bms1_mos_overtemperature_protection_recovery - name: mos_overtemperature_protection_recovery - - entity: sensor.rs485_bms1_charging_overtemperature_protection - name: charging_overtemperature_protection - - entity: sensor.rs485_bms1_discharging_overtemperature_protection - name: discharging_overtemperature_protection - - entity: sensor.rs485_bms1_charging_overtemperature_protection_recovery - name: charging_overtemperature_protection_recovery - - entity: sensor.rs485_bms1_discharging_overtemperature_protection_recovery - name: discharging_overtemperature_protection_recovery - - entity: sensor.rs485_bms1_charging_lowtemperature_protection_recovery - name: charging_lowtemperature_protection_recovery - - entity: sensor.rs485_bms1_charging_lowtemperature_protection - name: charging_lowtemperature_protection - title: TEMPERATURE - - type: entities - entities: - - entity: sensor.rs485_bms1_max_charging_current - name: max_charging_current - - entity: sensor.rs485_bms1_charging_overcurrent_protection_delay - name: charging_overcurrent_protection_delay - - entity: sensor.rs485_bms1_charging_overcurrent_protection_recovery_delay - name: charging_overcurrent_protection_recovery_delay - - entity: sensor.rs485_bms1_charging_overcurrent_protection_release_time - name: charging_overcurrent_protection_release_time - - entity: sensor.rs485_bms1_charging_short_circuit_protection_release_time - name: charging_short_circuit_protection_release_time - - entity: sensor.rs485_bms1_precharging_time_from_discharge - name: precharging_time_from_discharge - title: CHARGING - - type: entities - entities: - - entity: sensor.rs485_bms1_max_discharging_current - name: max_discharging_current - - entity: sensor.rs485_bms1_discharging_overcurrent_protection_delay - name: discharging_overcurrent_protection_delay - - entity: >- - sensor.rs485_bms1_discharging_overcurrent_protection_recovery_delay - name: discharging_overcurrent_protection_recovery_delay - - entity: sensor.rs485_bms1_discharging_overcurrent_protection_release_time - name: discharging_overcurrent_protection_release_time - - entity: >- - sensor.rs485_bms1_discharging_short_circuit_protection_release_time - name: discharging_short_circuit_protection_release_time - title: DISCHARGING - - type: entities - entities: - - entity: sensor.rs485_bms1_short_circuit_protection_delay - name: short_circuit_protection_delay - - entity: sensor.rs485_bms1_short_circuit_protection_recovery_delay - name: short_circuit_protection_recovery_delay - title: SHORT CIRCUIT - - type: entities - entities: - - entity: sensor.rs485_bms1_max_balancing_current - name: max_balancing_current - title: BALANCING