Chia sẻ với các bạn code yaml nạp vào ESP32 đọc đồng thời 2 mạch JK cùng một lúc với giãn cách mỗi lần đọc là 3s kèm theo khá đầy đủ setting cho các BMS JK mới sau này.

Dưới đây là đoạn mã YAML để nạp vào ESP32
YAML
substitutions:
name: bms
bms0: P1
bms1: P2
device_description: Monitor and control 2x JK-BMS via Bluetooth
external_components_source: github://syssi/esphome-jk-bms@main
bms0_mac_address: C8:47:80:38:7F:87
bms1_mac_address: A4:C1:38:00:4B:FD
bms0_protocol_version: JK02_32S
bms1_protocol_version: JK02_32S
esphome:
name: ${name}
comment: ${device_description}
min_version: 2024.6.0
project:
name: syssi.esphome-jk-bms
version: 2.1.0
esp32:
board: wemos_d1_mini32
framework:
type: esp-idf
external_components:
- source: ${external_components_source}
refresh: 0s
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
#manual_ip:
# static_ip: 192.168.3.14
# gateway: 192.168.3.1
# subnet: 255.255.255.0
ap:
ssid: BMS Controller AP
password: password123
ota:
platform: esphome
password: "462ed2339a3d7aeb69dd7d2aa546648d"
on_begin:
then:
- switch.turn_off: ble_client_switch0
- switch.turn_off: ble_client_switch1
- logger.log: BLE connection suspended for OTA update
logger:
level: DEBUG
logs:
esp32_ble_tracker: INFO
esp32_ble_client: INFO
api:
encryption:
key: "TlIponmGa1N1YO/1g3kRGF2SZePLBK9/RgEziZ5w4yU="
esp32_ble_tracker:
scan_parameters:
active: true
interval: 1600ms
window: 1200ms
ble_client:
- mac_address: ${bms0_mac_address}
id: client0
- mac_address: ${bms1_mac_address}
id: client1
jk_bms_ble:
- ble_client_id: client0
protocol_version: ${bms0_protocol_version}
throttle: 3s
id: bms0
- ble_client_id: client1
protocol_version: ${bms1_protocol_version}
throttle: 3s
id: bms1
binary_sensor:
- platform: status
name: ESP Device Status
- platform: jk_bms_ble
jk_bms_ble_id: bms0
balancing:
name: ${bms0} Balancing
charging:
name: ${bms0} Charging
discharging:
name: ${bms0} Discharging
online_status:
name: ${bms0} Online Status
heating:
name: ${bms0} Heating
- platform: jk_bms_ble
jk_bms_ble_id: bms1
balancing:
name: ${bms1} Balancing
charging:
name: ${bms1} Charging
discharging:
name: ${bms1} Discharging
online_status:
name: ${bms1} Online Status
heating:
name: ${bms1} Heating
button:
- platform: jk_bms_ble
jk_bms_ble_id: bms0
retrieve_settings:
name: ${bms0} Retrieve Settings
retrieve_device_info:
name: ${bms0} Retrieve Device Info
- platform: jk_bms_ble
jk_bms_ble_id: bms1
retrieve_settings:
name: ${bms1} Retrieve Settings
retrieve_device_info:
name: ${bms1} Retrieve Device Info
- platform: restart
name: ${name} restart
number:
- platform: jk_bms_ble
jk_bms_ble_id: bms0
balance_trigger_voltage:
name: ${bms0} Balance Trigger Voltage
cell_count:
name: ${bms0} cell count"
total_battery_capacity:
name: ${bms0} total battery capacity"
cell_voltage_overvoltage_protection:
name: ${bms0} cell voltage overvoltage protection"
cell_voltage_overvoltage_recovery:
name: ${bms0} cell voltage overvoltage recovery"
cell_voltage_undervoltage_protection:
name: ${bms0} cell voltage undervoltage protection"
cell_voltage_undervoltage_recovery:
name: ${bms0} cell voltage undervoltage recovery"
balance_starting_voltage:
name: ${bms0} balance starting voltage"
voltage_calibration:
name: ${bms0} voltage calibration"
current_calibration:
name: ${bms0} current calibration"
power_off_voltage:
name: ${bms0} power off voltage"
max_balance_current:
name: ${bms0} max balance current"
max_charge_current:
name: ${bms0} max charge current"
max_discharge_current:
name: ${bms0} max discharge current"
smart_sleep_voltage:
name: ${bms0} smart sleep voltage"
cell_soc100_voltage:
name: ${bms0} cell soc100 voltage"
cell_soc0_voltage:
name: ${bms0} cell soc0 voltage"
cell_request_charge_voltage:
name: ${bms0} cell request charge voltage"
cell_request_float_voltage:
name: ${bms0} cell request float voltage"
cell_request_charge_voltage_time:
name: ${bms0} cell request charge voltage time"
cell_request_float_voltage_time:
name: ${bms0} cell request float voltage time"
charge_overcurrent_protection_delay:
name: ${bms0} charge overcurrent protection delay"
charge_overcurrent_protection_recovery_time:
name: ${bms0} charge overcurrent protection recovery time"
discharge_overcurrent_protection_delay:
name: ${bms0} discharge overcurrent protection delay"
discharge_overcurrent_protection_recovery_time:
name: ${bms0} discharge overcurrent protection recovery time"
short_circuit_protection_delay:
name: ${bms0} short circuit protection delay"
short_circuit_protection_recovery_time:
name: ${bms0} short circuit protection recovery time"
charge_overtemperature_protection:
name: ${bms0} charge overtemperature protection"
charge_overtemperature_protection_recovery:
name: ${bms0} charge overtemperature protection recovery"
discharge_overtemperature_protection:
name: ${bms0} discharge overtemperature protection"
discharge_overtemperature_protection_recovery:
name: ${bms0} discharge overtemperature protection recovery"
charge_undertemperature_protection:
name: ${bms0} charge undertemperature protection"
charge_undertemperature_protection_recovery:
name: ${bms0} charge undertemperature protection recovery"
power_tube_overtemperature_protection:
name: ${bms0} power tube overtemperature protection"
power_tube_overtemperature_protection_recovery:
name: ${bms0} power tube overtemperature protection recovery"
discharge_precharge_time:
name: ${bms0} discharge precharge time"
- platform: jk_bms_ble
jk_bms_ble_id: bms1
balance_trigger_voltage:
name: ${bms1} Balance Trigger Voltage
cell_count:
name: ${bms1} cell count"
total_battery_capacity:
name: ${bms1} total battery capacity"
cell_voltage_overvoltage_protection:
name: ${bms1} cell voltage overvoltage protection"
cell_voltage_overvoltage_recovery:
name: ${bms1} cell voltage overvoltage recovery"
cell_voltage_undervoltage_protection:
name: ${bms1} cell voltage undervoltage protection"
cell_voltage_undervoltage_recovery:
name: ${bms1} cell voltage undervoltage recovery"
balance_starting_voltage:
name: ${bms1} balance starting voltage"
voltage_calibration:
name: ${bms1} voltage calibration"
current_calibration:
name: ${bms1} current calibration"
power_off_voltage:
name: ${bms1} power off voltage"
max_balance_current:
name: ${bms1} max balance current"
max_charge_current:
name: ${bms1} max charge current"
max_discharge_current:
name: ${bms1} max discharge current"
smart_sleep_voltage:
name: ${bms1} smart sleep voltage"
cell_soc100_voltage:
name: ${bms1} cell soc100 voltage"
cell_soc0_voltage:
name: ${bms1} cell soc0 voltage"
cell_request_charge_voltage:
name: ${bms1} cell request charge voltage"
cell_request_float_voltage:
name: ${bms1} cell request float voltage"
cell_request_charge_voltage_time:
name: ${bms1} cell request charge voltage time"
cell_request_float_voltage_time:
name: ${bms1} cell request float voltage time"
charge_overcurrent_protection_delay:
name: ${bms1} charge overcurrent protection delay"
charge_overcurrent_protection_recovery_time:
name: ${bms1} charge overcurrent protection recovery time"
discharge_overcurrent_protection_delay:
name: ${bms1} discharge overcurrent protection delay"
discharge_overcurrent_protection_recovery_time:
name: ${bms1} discharge overcurrent protection recovery time"
short_circuit_protection_delay:
name: ${bms1} short circuit protection delay"
short_circuit_protection_recovery_time:
name: ${bms1} short circuit protection recovery time"
charge_overtemperature_protection:
name: ${bms1} charge overtemperature protection"
charge_overtemperature_protection_recovery:
name: ${bms1} charge overtemperature protection recovery"
discharge_overtemperature_protection:
name: ${bms1} discharge overtemperature protection"
discharge_overtemperature_protection_recovery:
name: ${bms1} discharge overtemperature protection recovery"
charge_undertemperature_protection:
name: ${bms1} charge undertemperature protection"
charge_undertemperature_protection_recovery:
name: ${bms1} charge undertemperature protection recovery"
power_tube_overtemperature_protection:
name: ${bms1} power tube overtemperature protection"
power_tube_overtemperature_protection_recovery:
name: ${bms1} power tube overtemperature protection recovery"
discharge_precharge_time:
name: ${bms1} discharge precharge time"
sensor:
- platform: jk_bms_ble
jk_bms_ble_id: bms0
min_cell_voltage:
name: ${bms0} Min Cell Voltage
max_cell_voltage:
name: ${bms0} Max Cell Voltage
min_voltage_cell:
name: ${bms0} Min Voltage Cell
max_voltage_cell:
name: ${bms0} Max Voltage Cell
delta_cell_voltage:
name: ${bms0} Delta Cell Voltage
average_cell_voltage:
name: ${bms0} Average Cell Voltage
total_voltage:
name: ${bms0} Total Voltage
id: device0_voltage
current:
name: ${bms0} Current
id: device0_current
power:
name: ${bms0} Power
id: device0_power
charging_power:
name: ${bms0} Charging Power
discharging_power:
name: ${bms0} Discharging Power
heating_current:
name: ${bms0} Heating Current
power_tube_temperature:
name: ${bms0} Power Tube Temperature
temperature_sensor_1:
name: ${bms0} Temperature Sensor 1
temperature_sensor_2:
name: ${bms0} Temperature Sensor 2
temperature_sensor_3:
name: ${bms0} Temperature Sensor 3
temperature_sensor_4:
name: ${bms0} Temperature Sensor 4
state_of_charge:
name: ${bms0} State of Charge
id: device0_soc
capacity_remaining:
name: ${bms0} Capacity Remaining
total_battery_capacity_setting:
name: ${bms0} Total Battery Capacity Setting
charging_cycles:
name: ${bms0} Charging Cycles
total_charging_cycle_capacity:
name: ${bms0} Total Charging Cycle Capacity
total_runtime:
name: ${bms0} Total Runtime
balancing_current:
name: ${bms0} Balancing Current
errors_bitmask:
name: ${bms0} Errors Bitmask
cell_voltage_1:
name: ${bms0} Cell Voltage 1
cell_voltage_2:
name: ${bms0} Cell Voltage 2
cell_voltage_3:
name: ${bms0} Cell Voltage 3
cell_voltage_4:
name: ${bms0} Cell Voltage 4
cell_voltage_5:
name: ${bms0} Cell Voltage 5
cell_voltage_6:
name: ${bms0} Cell Voltage 6
cell_voltage_7:
name: ${bms0} Cell Voltage 7
cell_voltage_8:
name: ${bms0} Cell Voltage 8
cell_voltage_9:
name: ${bms0} Cell Voltage 9
cell_voltage_10:
name: ${bms0} Cell Voltage 10
cell_voltage_11:
name: ${bms0} Cell Voltage 11
cell_voltage_12:
name: ${bms0} Cell Voltage 12
cell_voltage_13:
name: ${bms0} Cell Voltage 13
cell_voltage_14:
name: ${bms0} Cell Voltage 14
cell_voltage_15:
name: ${bms0} Cell Voltage 15
cell_voltage_16:
name: ${bms0} Cell Voltage 16
cell_resistance_1:
name: ${bms0} Cell Resistance 1
cell_resistance_2:
name: ${bms0} Cell Resistance 2
cell_resistance_3:
name: ${bms0} Cell Resistance 3
cell_resistance_4:
name: ${bms0} Cell Resistance 4
cell_resistance_5:
name: ${bms0} Cell Resistance 5
cell_resistance_6:
name: ${bms0} Cell Resistance 6
cell_resistance_7:
name: ${bms0} Cell Resistance 7
cell_resistance_8:
name: ${bms0} Cell Resistance 8
cell_resistance_9:
name: ${bms0} Cell Resistance 9
cell_resistance_10:
name: ${bms0} Cell Resistance 10
cell_resistance_11:
name: ${bms0} Cell Resistance 11
cell_resistance_12:
name: ${bms0} Cell Resistance 12
cell_resistance_13:
name: ${bms0} Cell Resistance 13
cell_resistance_14:
name: ${bms0} Cell Resistance 14
cell_resistance_15:
name: ${bms0} Cell Resistance 15
cell_resistance_16:
name: ${bms0} Cell Resistance 16
- platform: jk_bms_ble
jk_bms_ble_id: bms1
min_cell_voltage:
name: ${bms1} Min Cell Voltage
max_cell_voltage:
name: ${bms1} Max Cell Voltage
min_voltage_cell:
name: ${bms1} Min Voltage Cell
max_voltage_cell:
name: ${bms1} Max Voltage Cell
delta_cell_voltage:
name: ${bms1} Delta Cell Voltage
average_cell_voltage:
name: ${bms1} Average Cell Voltage
total_voltage:
name: ${bms1} Total Voltage
id: device1_voltage
current:
name: ${bms1} Current
id: device1_current
power:
name: ${bms1} Power
id: device1_power
charging_power:
name: ${bms1} Charging Power
discharging_power:
name: ${bms1} Discharging Power
heating_current:
name: ${bms1} Heating Current
power_tube_temperature:
name: ${bms1} Power Tube Temperature
temperature_sensor_1:
name: ${bms1} Temperature Sensor 1
temperature_sensor_2:
name: ${bms1} Temperature Sensor 2
temperature_sensor_3:
name: ${bms1} Temperature Sensor 3
temperature_sensor_4:
name: ${bms1} Temperature Sensor 4
state_of_charge:
name: ${bms1} State of Charge
id: device1_soc
capacity_remaining:
name: ${bms1} Capacity Remaining
total_battery_capacity_setting:
name: ${bms1} Total Battery Capacity Setting
charging_cycles:
name: ${bms1} Charging Cycles
total_charging_cycle_capacity:
name: ${bms1} Total Charging Cycle Capacity
total_runtime:
name: ${bms1} Total Runtime
balancing_current:
name: ${bms1} Balancing Current
errors_bitmask:
name: ${bms1} Errors Bitmask
cell_voltage_1:
name: ${bms1} Cell Voltage 1
cell_voltage_2:
name: ${bms1} Cell Voltage 2
cell_voltage_3:
name: ${bms1} Cell Voltage 3
cell_voltage_4:
name: ${bms1} Cell Voltage 4
cell_voltage_5:
name: ${bms1} Cell Voltage 5
cell_voltage_6:
name: ${bms1} Cell Voltage 6
cell_voltage_7:
name: ${bms1} Cell Voltage 7
cell_voltage_8:
name: ${bms1} Cell Voltage 8
cell_voltage_9:
name: ${bms1} Cell Voltage 9
cell_voltage_10:
name: ${bms1} Cell Voltage 10
cell_voltage_11:
name: ${bms1} Cell Voltage 11
cell_voltage_12:
name: ${bms1} Cell Voltage 12
cell_voltage_13:
name: ${bms1} Cell Voltage 13
cell_voltage_14:
name: ${bms1} Cell Voltage 14
cell_voltage_15:
name: ${bms1} Cell Voltage 15
cell_voltage_16:
name: ${bms1} Cell Voltage 16
cell_resistance_1:
name: ${bms1} Cell Resistance 1
cell_resistance_2:
name: ${bms1} Cell Resistance 2
cell_resistance_3:
name: ${bms1} Cell Resistance 3
cell_resistance_4:
name: ${bms1} Cell Resistance 4
cell_resistance_5:
name: ${bms1} Cell Resistance 5
cell_resistance_6:
name: ${bms1} Cell Resistance 6
cell_resistance_7:
name: ${bms1} Cell Resistance 7
cell_resistance_8:
name: ${bms1} Cell Resistance 8
cell_resistance_9:
name: ${bms1} Cell Resistance 9
cell_resistance_10:
name: ${bms1} Cell Resistance 10
cell_resistance_11:
name: ${bms1} Cell Resistance 11
cell_resistance_12:
name: ${bms1} Cell Resistance 12
cell_resistance_13:
name: ${bms1} Cell Resistance 13
cell_resistance_14:
name: ${bms1} Cell Resistance 14
cell_resistance_15:
name: ${bms1} Cell Resistance 15
cell_resistance_16:
name: ${bms1} Cell Resistance 16
- platform: template
name: Total Power
id: total_power
unit_of_measurement: W
device_class: power
state_class: measurement
accuracy_decimals: 2
lambda: |-
if (id(device0_power).has_state() && id(device1_power).has_state()) {
return id(device0_power).state + id(device1_power).state;
} else {
return NAN;
}
update_interval: 3s
- platform: template
name: Total Current
id: total_current
unit_of_measurement: A
device_class: current
state_class: measurement
accuracy_decimals: 2
lambda: |-
if (id(device0_current).has_state() && id(device1_current).has_state()) {
return id(device0_current).state + id(device1_current).state;
} else {
return NAN;
}
update_interval: 3s
- platform: wifi_signal
name: WiFi Signal Strength
update_interval: 60s
- platform: uptime
name: ESP Uptime
- platform: internal_temperature
name: ESP Internal Temperature
switch:
- platform: jk_bms_ble
jk_bms_ble_id: bms0
charging:
name: ${bms0} Charging
discharging:
name: ${bms0} Discharging
balancer:
name: ${bms0} Balancer
heating:
name: ${bms0} Heating
emergency:
name: ${bms0} Emergency
- platform: jk_bms_ble
jk_bms_ble_id: bms1
charging:
name: ${bms1} Charging
discharging:
name: ${bms1} Discharging
balancer:
name: ${bms1} Balancer
heating:
name: ${bms1} Heating
emergency:
name: ${bms1} Emergency
- platform: ble_client
ble_client_id: client0
id: ble_client_switch0
name: ${bms0} Bluetooth Connection
- platform: ble_client
ble_client_id: client1
id: ble_client_switch1
name: ${bms1} Bluetooth Connection
text_sensor:
- platform: jk_bms_ble
jk_bms_ble_id: bms0
errors:
name: ${bms0} Errors
total_runtime_formatted:
name: ${bms0} Total Runtime Formatted
- platform: jk_bms_ble
jk_bms_ble_id: bms1
errors:
name: ${bms1} Errors
total_runtime_formatted:
name: ${bms1} Total Runtime Formatted
- platform: wifi_info
ip_address:
name: ESP IP Address
ssid:
name: Connected WiFi SSIDDashboard chứa setting và hiển thị gộp 2 khối pin đã được Việt hóa. Lưu ý, đây không phải là 1 card đơn mà là một màn hình nhé, hãy tạo màn hình hiển thị mới và edit yaml để dán code bên dưới vào.
Ngoài ra mình có chia sẻ giao diện pin tại bài viết bên dưới
Nếu bạn thấy hữu ích đừng quên ủng hộ cho tôi tại đây để giúp thêm động lực phát triển những món khác. Cám ơn !

YAML
type: sections
max_columns: 3
title: Setting BMS
path: setting-bms
icon: mdi:cog-outline
sections:
- type: grid
cards:
- type: heading
heading: THÔNG SỐ CHUNG 2 Pack
heading_style: title
icon: mdi:battery-80-bluetooth
- type: vertical-stack
cards:
- type: horizontal-stack
cards:
- type: custom:button-card
name: Lệch cell
size: 25%
entity: sensor.bms_p1_delta_cell_voltage
show_icon: true
show_name: true
show_state: false
show_label: true
label: |
[[[
return 'eve: ' +
(states['sensor.bms_p1_delta_cell_voltage'] ? Number.parseFloat(states['sensor.bms_p1_delta_cell_voltage'].state).toFixed(3) + ' V' : 'N/A') +
'<br>' + // Sử dụng <br> để xuống dòng
'battech: ' +
(states['sensor.bms_p2_delta_cell_voltage'] ? Number.parseFloat(states['sensor.bms_p2_delta_cell_voltage'].state).toFixed(3) + ' V' : 'N/A');
]]]
icon: mdi:delta
styles:
icon:
- color: |
[[[
if (entity.state < 0.010) return 'darkgreen';
if (entity.state < 0.020) return 'darkorange';
else return 'red';
]]]
card:
- font-size: 12px
- height: 100px
- padding: 10px
- white-space: normal;
- text-align: left;
- type: custom:button-card
name: Pack Voltage
size: 25%
entity: sensor.bms_p1_total_voltage
show_icon: true
show_name: true
show_state: false
show_label: true
label: |
[[[
return 'eve: ' +
(states['sensor.bms_p1_total_voltage'] ? Number.parseFloat(states['sensor.bms_p1_total_voltage'].state).toFixed(2) + ' V' : 'N/A') +
'<br>' + // Sử dụng <br> để xuống dòng
'battech: ' +
(states['sensor.bms_p2_total_voltage'] ? Number.parseFloat(states['sensor.bms_p2_total_voltage'].state).toFixed(2) + ' V' : 'N/A');
]]]
icon: mdi:server
styles:
icon:
- color: |
[[[
if (entity.state > 48) return 'darkgreen';
if (entity.state > 52) return 'darkorange';
else return 'red';
]]]
card:
- font-size: 12px
- height: 100px
- padding: 10px
- white-space: normal;
- text-align: left;
- type: custom:button-card
name: |
[[[
if (entity.state < 0) return "Discharging";
else
return "Charging";
]]]
size: 25%
entity: sensor.bms_p1_power
show_icon: true
show_name: true
show_state: false
show_label: true
label: |
[[[
return 'eve: ' +
(states['sensor.bms_p1_power'] ? Number.parseFloat(states['sensor.bms_p1_power'].state).toFixed(1) + ' W' : 'N/A') +
'<br>' + // Sử dụng <br> để xuống dòng
'battech: ' +
(states['sensor.bms_p2_power'] ? Number.parseFloat(states['sensor.bms_p2_power'].state).toFixed(1) + ' W' : 'N/A');
]]]
icon: |
[[[
if (entity.state < 0) return "mdi:battery-arrow-down-outline";
else
return "mdi:battery-arrow-up-outline";
]]]
styles:
icon:
- color: |
[[[
if (entity.state > 5000) return 'darkred';
if (entity.state > 1000) return 'darkorange';
if (entity.state < -5000) return 'darkred';
if (entity.state < -1000) return 'darkorange';
else return 'darkgreen';
]]]
card:
- font-size: 12px
- height: 100px
- padding: 10px
- white-space: normal;
- text-align: left;
- type: horizontal-stack
cards:
- type: custom:button-card
name: SOC
size: 25%
entity: sensor.bms_p1_state_of_charge
show_icon: true
show_name: true
show_state: false
show_label: true
label: |
[[[
return 'eve: ' +
(states['sensor.bms_p1_state_of_charge'] ? Number.parseFloat(states['sensor.bms_p1_state_of_charge'].state).toFixed(1) + ' %' : 'N/A') +
'<br>' + // Sử dụng <br> để xuống dòng
'battech: ' +
(states['sensor.bms_p2_state_of_charge'] ? Number.parseFloat(states['sensor.bms_p2_state_of_charge'].state).toFixed(1) + ' %' : 'N/A');
]]]
icon: |
[[[
if (entity.state > 90) return "mdi:battery";
if (entity.state > 80) return "mdi:battery-90";
if (entity.state > 70) return "mdi:battery-80";
if (entity.state > 60) return "mdi:battery-70";
if (entity.state > 50) return "mdi:battery-60";
if (entity.state > 40) return "mdi:battery-50";
if (entity.state > 30) return "mdi:battery-40";
if (entity.state > 20) return "mdi:battery-30";
if (entity.state > 10) return "mdi:battery-20";
else return "mdi:battery-alert-variant-outline";
]]]
styles:
icon:
- color: |
[[[
if (entity.state > 30 ) return 'darkgreen';
if (entity.state > 15 ) return 'yellow';
else return 'red';
]]]
card:
- font-size: 12px
- height: 100px
- padding: 10px
- white-space: normal;
- text-align: left;
- type: custom:button-card
name: Dung Lượng
size: 25Ah
entity: sensor.bms_p1_capacity_remaining
show_icon: true
show_name: true
show_state: false
show_label: true
label: |
[[[
return 'eve: ' +
(states['sensor.bms_p1_capacity_remaining'] ? Number.parseFloat(states['sensor.bms_p1_capacity_remaining'].state).toFixed(0) + ' Ah' : 'N/A') +
'<br>' + // Sử dụng <br> để xuống dòng
'battech: ' +
(states['sensor.bms_p2_capacity_remaining'] ? Number.parseFloat(states['sensor.bms_p2_capacity_remaining'].state).toFixed(0) + ' Ah' : 'N/A');
]]]
icon: |
[[[
if (entity.state > 99) return "mdi:check-circle";
if (entity.state > 95) return "mdi:alert-circle";
else return "mdi:cancel";
]]]
styles:
icon:
- color: |
[[[
if (entity.state > 99) return 'darkgreen';
if (entity.state > 95) return 'darkorange';
else return 'red';
]]]
card:
- font-size: 12px
- height: 100px
- padding: 10px
- white-space: normal;
- text-align: left;
- type: custom:button-card
name: |
[[[
if (entity.state < 0) return "Discharging";
else
return "Charging";
]]]
size: 25%
entity: sensor.bms_p1_current
show_icon: true
show_name: true
show_state: false
show_label: true
label: |
[[[
return 'eve: ' +
(states['sensor.bms_p1_current'] ? Number.parseFloat(states['sensor.bms_p1_current'].state).toFixed(1) + ' A' : 'N/A') +
'<br>' + // Sử dụng <br> để xuống dòng
'battech: ' +
(states['sensor.bms_p2_current'] ? Number.parseFloat(states['sensor.bms_p2_current'].state).toFixed(1) + ' A' : 'N/A');
]]]
icon: |
[[[
if (entity.state < 0) return "mdi:battery-arrow-down-outline";
else
return "mdi:battery-arrow-up-outline";
]]]
styles:
icon:
- color: |
[[[
if (entity.state > 5000) return 'darkred';
if (entity.state > 1000) return 'darkorange';
if (entity.state < -5000) return 'darkred';
if (entity.state < -1000) return 'darkorange';
else return 'darkgreen';
]]]
card:
- font-size: 12px
- height: 100px
- padding: 10px
- white-space: normal;
- text-align: left;
- type: custom:bar-card
direction: up
columns: 8
decimal: 3
max: 3.45
min: 3
height: 80px
severity:
- color: darkred
from: 3.45
to: 4
- color: darkorange
from: 3.4
to: 3.45
- color: rgb(189, 164, 66)
from: 3.1
to: 3.4
- color: darkred
from: 2.5
to: 3.1
positions:
icon: "off"
indicator: inside
name: outside
card_mod:
style: |-
bar-card-value {
margin-right: auto;
margin-left: auto;
margin-bottom: 35px;
font-size: 10px;
font-weight: normal;
text-shadow: 1px 1px #0005;
}
bar-card-name {
margin-right: auto;
margin-left: auto;
margin-bottom: 0px;
font-size: 10px;
font-weight: normal;
text-shadow: 1px 1px #0005;
}
entities:
- entity: sensor.bms_p1_cell_voltage_1
name: Cell 01
- entity: sensor.bms_p1_cell_voltage_2
name: Cell 02
- entity: sensor.bms_p1_cell_voltage_3
name: Cell 03
- entity: sensor.bms_p1_cell_voltage_4
name: Cell 04
- entity: sensor.bms_p1_cell_voltage_5
name: Cell 05
- entity: sensor.bms_p1_cell_voltage_6
name: Cell 06
- entity: sensor.bms_p1_cell_voltage_7
name: Cell 07
- entity: sensor.bms_p1_cell_voltage_8
name: Cell 08
- entity: sensor.bms_p1_cell_voltage_9
name: Cell 09
- entity: sensor.bms_p1_cell_voltage_10
name: Cell 10
- entity: sensor.bms_p1_cell_voltage_11
name: Cell 11
- entity: sensor.bms_p1_cell_voltage_12
name: Cell 12
- entity: sensor.bms_p1_cell_voltage_13
name: Cell 13
- entity: sensor.bms_p1_cell_voltage_14
name: Cell 14
- entity: sensor.bms_p1_cell_voltage_15
name: Cell 15
- entity: sensor.bms_p1_cell_voltage_16
name: Cell 16
- type: custom:bar-card
direction: up
columns: 8
decimal: 3
max: 3.45
min: 3
height: 80px
severity:
- color: darkred
from: 3.45
to: 4
- color: darkorange
from: 3.4
to: 3.45
- color: rgb(9, 122, 214)
from: 3.1
to: 3.4
- color: darkred
from: 2.5
to: 3.1
positions:
icon: "off"
indicator: inside
name: outside
card_mod:
style: |-
bar-card-value {
margin-right: auto;
margin-left: auto;
margin-bottom: 35px;
font-size: 10px;
font-weight: normal;
text-shadow: 1px 1px #0005;
}
bar-card-name {
margin-right: auto;
margin-left: auto;
margin-bottom: 0px;
font-size: 10px;
font-weight: normal;
text-shadow: 1px 1px #0005;
}
entities:
- entity: sensor.bms_p2_cell_voltage_1
name: Cell 01
- entity: sensor.bms_p2_cell_voltage_2
name: Cell 02
- entity: sensor.bms_p2_cell_voltage_3
name: Cell 03
- entity: sensor.bms_p2_cell_voltage_4
name: Cell 04
- entity: sensor.bms_p2_cell_voltage_5
name: Cell 05
- entity: sensor.bms_p2_cell_voltage_6
name: Cell 06
- entity: sensor.bms_p2_cell_voltage_7
name: Cell 07
- entity: sensor.bms_p2_cell_voltage_8
name: Cell 08
- entity: sensor.bms_p2_cell_voltage_9
name: Cell 09
- entity: sensor.bms_p2_cell_voltage_10
name: Cell 10
- entity: sensor.bms_p2_cell_voltage_11
name: Cell 11
- entity: sensor.bms_p2_cell_voltage_12
name: Cell 12
- entity: sensor.bms_p2_cell_voltage_13
name: Cell 13
- entity: sensor.bms_p2_cell_voltage_14
name: Cell 14
- entity: sensor.bms_p2_cell_voltage_15
name: Cell 15
- entity: sensor.bms_p2_cell_voltage_16
name: Cell 16
- type: grid
cards:
- type: heading
heading: SETTING BATTECH 🔋
heading_style: title
icon: mdi:battery-80-bluetooth
- type: entities
title: Cài đặt chi tiết BMS P2
state_color: true
entities:
- type: section
label: Cài đặt chung & Dung lượng
- entity: number.bms_p2_cell_count
name: Số lượng cell
- entity: number.bms_p2_total_battery_capacity
name: Tổng dung lượng pin (Ah)
- entity: number.bms_p2_power_off_voltage
name: Điện áp tắt nguồn (V)
- entity: number.bms_p2_smart_sleep_voltage
name: Điện áp ngủ thông minh (V)
- type: section
label: Bảo vệ Điện áp Cell
- entity: number.bms_p2_cell_voltage_overvoltage_protection
name: "Cell: Bảo vệ quá áp (V)"
- entity: number.bms_p2_cell_voltage_overvoltage_recovery
name: "Cell: Phục hồi quá áp (V)"
- entity: number.bms_p2_cell_voltage_undervoltage_protection
name: "Cell: Bảo vệ dưới áp (V)"
- entity: number.bms_p2_cell_voltage_undervoltage_recovery
name: "Cell: Phục hồi dưới áp (V)"
- type: section
label: Cân bằng Cell
- entity: number.bms_p2_balance_starting_voltage
name: "Cân bằng: Điện áp bắt đầu (V)"
- entity: number.bms_p2_balance_trigger_voltage
name: "Cân bằng: Chênh lệch kích hoạt (V)"
- entity: number.bms_p2_max_balance_current
name: "Cân bằng: Dòng tối đa (A)"
- type: section
label: Cài đặt Sạc
- entity: number.bms_p2_max_charge_current
name: "Sạc: Dòng tối đa (A)"
- entity: number.bms_p2_charge_overcurrent_protection_delay
name: "Sạc - Quá dòng: Độ trễ (s)"
- entity: number.bms_p2_charge_overcurrent_protection_recovery_time
name: "Sạc - Quá dòng: Phục hồi (s)"
- entity: number.bms_p2_charge_overtemperature_protection
name: "Sạc - Quá nhiệt: Ngưỡng (°C)"
- entity: number.bms_p2_charge_overtemperature_protection_recovery
name: "Sạc - Quá nhiệt: Phục hồi (°C)"
- entity: number.bms_p2_charge_undertemperature_protection
name: "Sạc - Dưới nhiệt: Ngưỡng (°C)"
- entity: number.bms_p2_charge_undertemperature_protection_recovery
name: "Sạc - Dưới nhiệt: Phục hồi (°C)"
- type: section
label: Cài đặt Xả
- entity: number.bms_p2_max_discharge_current
name: "Xả: Dòng tối đa (A)"
- entity: number.bms_p2_discharge_precharge_time
name: "Xả: Thời gian sạc mồi (ms)"
- entity: number.bms_p2_discharge_overcurrent_protection_delay
name: "Xả - Quá dòng: Độ trễ (s)"
- entity: number.bms_p2_discharge_overcurrent_protection_recovery_time
name: "Xả - Quá dòng: Phục hồi (s)"
- entity: number.bms_p2_discharge_overtemperature_protection
name: "Xả - Quá nhiệt: Ngưỡng (°C)"
- entity: number.bms_p2_discharge_overtemperature_protection_recovery
name: "Xả - Quá nhiệt: Phục hồi (°C)"
- type: section
label: Bảo vệ Khác
- entity: number.bms_p2_power_tube_overtemperature_protection
name: Bảo vệ quá nhiệt Mosfet (°C)
- entity: number.bms_p2_power_tube_overtemperature_protection_recovery
name: Phục hồi quá nhiệt Mosfet (°C)
- entity: number.bms_p2_short_circuit_protection_delay
name: "Ngắn mạch: Độ trễ (µs)"
- entity: number.bms_p2_short_circuit_protection_recovery_time
name: "Ngắn mạch: Thời gian phục hồi (s)"
- type: section
label: Hiệu chỉnh & Nâng cao
- entity: number.bms_p2_voltage_calibration
name: "Hiệu chỉnh: Điện áp"
- entity: number.bms_p2_current_calibration
name: "Hiệu chỉnh: Dòng điện"
- entity: number.bms_p2_cell_soc0_voltage
name: "Hiệu chỉnh: Điện áp SOC 0% (V)"
- entity: number.bms_p2_cell_soc100_voltage
name: "Hiệu chỉnh: Điện áp SOC 100% (V)"
- entity: number.bms_p2_cell_request_charge_voltage
name: "Yêu cầu: Điện áp sạc (V)"
- entity: number.bms_p2_cell_request_charge_voltage_time
name: "Yêu cầu: Thời gian giữ áp sạc (s)"
- entity: number.bms_p2_cell_request_float_voltage
name: "Yêu cầu: Điện áp thả nổi (V)"
- entity: number.bms_p2_cell_request_float_voltage_time
name: "Yêu cầu: Thời gian giữ áp thả nổi (s)"
- type: grid
cards:
- type: heading
heading: SETTING EVE
heading_style: title
icon: mdi:battery-80-bluetooth
- type: entities
title: Cài đặt chi tiết BMS P1
state_color: true
entities:
- type: section
label: Cài đặt chung & Dung lượng
- entity: number.bms_p1_cell_count
name: Số lượng cell
- entity: number.bms_p1_total_battery_capacity
name: Tổng dung lượng pin (Ah)
- entity: number.bms_p1_power_off_voltage
name: Điện áp tắt nguồn (V)
- entity: number.bms_p1_smart_sleep_voltage
name: Điện áp ngủ thông minh (V)
- type: section
label: Bảo vệ Điện áp Cell
- entity: number.bms_p1_cell_voltage_overvoltage_protection
name: "Cell: Bảo vệ quá áp (V)"
- entity: number.bms_p1_cell_voltage_overvoltage_recovery
name: "Cell: Phục hồi quá áp (V)"
- entity: number.bms_p1_cell_voltage_undervoltage_protection
name: "Cell: Bảo vệ dưới áp (V)"
- entity: number.bms_p1_cell_voltage_undervoltage_recovery
name: "Cell: Phục hồi dưới áp (V)"
- type: section
label: Cân bằng Cell
- entity: number.bms_p1_balance_starting_voltage
name: "Cân bằng: Điện áp bắt đầu (V)"
- entity: number.bms_p1_balance_trigger_voltage
name: "Cân bằng: Chênh lệch kích hoạt (V)"
- entity: number.bms_p1_max_balance_current
name: "Cân bằng: Dòng tối đa (A)"
- type: section
label: Cài đặt Sạc
- entity: number.bms_p1_max_charge_current
name: "Sạc: Dòng tối đa (A)"
- entity: number.bms_p1_charge_overcurrent_protection_delay
name: "Sạc - Quá dòng: Độ trễ (s)"
- entity: number.bms_p1_charge_overcurrent_protection_recovery_time
name: "Sạc - Quá dòng: Phục hồi (s)"
- entity: number.bms_p1_charge_overtemperature_protection
name: "Sạc - Quá nhiệt: Ngưỡng (°C)"
- entity: number.bms_p1_charge_overtemperature_protection_recovery
name: "Sạc - Quá nhiệt: Phục hồi (°C)"
- entity: number.bms_p1_charge_undertemperature_protection
name: "Sạc - Dưới nhiệt: Ngưỡng (°C)"
- entity: number.bms_p1_charge_undertemperature_protection_recovery
name: "Sạc - Dưới nhiệt: Phục hồi (°C)"
- type: section
label: Cài đặt Xả
- entity: number.bms_p1_max_discharge_current
name: "Xả: Dòng tối đa (A)"
- entity: number.bms_p1_discharge_precharge_time
name: "Xả: Thời gian sạc mồi (ms)"
- entity: number.bms_p1_discharge_overcurrent_protection_delay
name: "Xả - Quá dòng: Độ trễ (s)"
- entity: number.bms_p1_discharge_overcurrent_protection_recovery_time
name: "Xả - Quá dòng: Phục hồi (s)"
- entity: number.bms_p1_discharge_overtemperature_protection
name: "Xả - Quá nhiệt: Ngưỡng (°C)"
- entity: number.bms_p1_discharge_overtemperature_protection_recovery
name: "Xả - Quá nhiệt: Phục hồi (°C)"
- type: section
label: Bảo vệ Khác
- entity: number.bms_p1_power_tube_overtemperature_protection
name: Bảo vệ quá nhiệt Mosfet (°C)
- entity: number.bms_p1_power_tube_overtemperature_protection_recovery
name: Phục hồi quá nhiệt Mosfet (°C)
- entity: number.bms_p1_short_circuit_protection_delay
name: "Ngắn mạch: Độ trễ (µs)"
- entity: number.bms_p1_short_circuit_protection_recovery_time
name: "Ngắn mạch: Thời gian phục hồi (s)"
- type: section
label: Hiệu chỉnh & Nâng cao
- entity: number.bms_p1_voltage_calibration
name: "Hiệu chỉnh: Điện áp"
- entity: number.bms_p1_current_calibration
name: "Hiệu chỉnh: Dòng điện"
- entity: number.bms_p1_cell_soc0_voltage
name: "Hiệu chỉnh: Điện áp SOC 0% (V)"
- entity: number.bms_p1_cell_soc100_voltage
name: "Hiệu chỉnh: Điện áp SOC 100% (V)"
- entity: number.bms_p1_cell_request_charge_voltage
name: "Yêu cầu: Điện áp sạc (V)"
- entity: number.bms_p1_cell_request_charge_voltage_time
name: "Yêu cầu: Thời gian giữ áp sạc (s)"
- entity: number.bms_p1_cell_request_float_voltage
name: "Yêu cầu: Điện áp thả nổi (V)"
- entity: number.bms_p1_cell_request_float_voltage_time
name: "Yêu cầu: Thời gian giữ áp thả nổi (s)"
cards: []
badges:
- type: custom:mushroom-template-badge
icon: mdi:restart
entity: button.bms_bms_restart
content: Restart
color: green
tap_action:
action: toggle

