Hướng dẫn làm mạch ESP32 kết nối BLE theo dõi BMS JK
Code nạp ESP32:
Yêu cầu:
– Xác định được MAC Address của BLE khối pin để sửa code
– Xác định được phân loại mạch
MẠCH JK 1 khối Pin update 1s
substitutions:
name: battech
bms1: P2
device_description: Battech BMS monitor
external_components_source: github://syssi/esphome-jk-bms@main
bms1_mac_address: A4:C1:38:00:4B:FD
bms1_protocol_version: JK02_32S
esphome:
name: battech
comment: ${device_description}
min_version: 2024.6.0
project:
name: syssi.esphome-jk-bms
version: 2.2.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
ota:
platform: esphome
password: "462ed2339a3d7aeb69dd7d2aa546648d"
on_begin:
then:
- switch.turn_off: ble_client_switch0
- 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: false
ble_client:
- mac_address: ${bms1_mac_address}
id: client0
jk_bms_ble:
- ble_client_id: client0
protocol_version: ${bms1_protocol_version}
throttle: 1s # Đã trả về giá trị gốc
id: bms1
binary_sensor:
- platform: status
name: ESP Device Status
- 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
dry_contact_1:
name: ${bms1} Dry Contact 1
dry_contact_2:
name: ${bms1} Dry Contact 2
button:
- 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: ${bms1} Restart
number:
- 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: 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: device0_voltage
current:
name: ${bms1} Current
id: device0_current
power:
name: ${bms1} Power
id: device0_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: device0_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
emergency_time_countdown:
name: ${bms1} Emergency Time Countdown
charge_status_id:
name: ${bms1} Charge Status ID
charge_status_time_elapsed:
name: ${bms1} Charge Status Time Elapsed
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: 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: bms1
charging:
name: ${bms1} Charging
discharging:
name: ${bms1} Discharging
balancer:
name: ${bms1} Balancer
heating:
name: ${bms1} Heating
emergency:
name: ${bms1} Emergency
disable_temperature_sensors:
name: ${bms1} Disable Temperature Sensors
display_always_on:
name: ${bms1} Display Always On
smart_sleep:
name: ${bms1} Smart Sleep
disable_pcl_module:
name: ${bms1} Disable PCL Module
timed_stored_data:
name: ${bms1} Timed Stored Data
charging_float_mode:
name: ${bms1} Charging Float Mode
- platform: ble_client
ble_client_id: client0
id: ble_client_switch0
name: ${bms1} Bluetooth Connection
text_sensor:
- platform: jk_bms_ble
jk_bms_ble_id: bms1
errors:
name: ${bms1} Errors
total_runtime_formatted:
name: ${bms1} Total Runtime Formatted
charge_status:
name: ${bms1} Charge Status
- platform: wifi_info
ip_address:
name: ESP IP Address
ssid:
name: Connected WiFi SSIDMạch JK 2BMS update 3s
YAML
substitutions:
name: jk-bms
bms0: "${name} bms0"
bms1: "${name} bms1"
device_description: "Monitor and control a JK-BMS via bluetooth"
external_components_source: github://syssi/esphome-jk-bms@main
bms0_mac_address: C8:47:80:16:A3:2D
bms1_mac_address: 98:DA:20:09:E8:2D
# Please use "JK02_24S" if you own a old JK-BMS < hardware version 11.0 (hardware version >= 6.0 and < 11.0)
# Please use "JK02_32S" if you own a new JK-BMS >= hardware version 11.0 (f.e. JK-B2A8S20P hw 11.XW, sw 11.26)
# Please use "JK04" if you have some old JK-BMS <= hardware version 3.0 (f.e. JK-B2A16S hw 3.0, sw. 3.3.0)
bms0_protocol_version: JK02_32S
bms1_protocol_version: JK02_32S
esphome:
name: bms-jk1
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: "CTTNHH_HAICUONGMOBILE_5G"
password: "05092015"
ap:
ssid: "Tran Bach JK1"
password: "11112222"
ota:
platform: esphome
password: "2d53512aa3a35981db259b86651d53c7"
on_begin:
then:
- switch.turn_off: ble_client_switch0
- logger.log: "BLE connection suspended for OTA update"
logger:
level: DEBUG
logs:
esp32_ble_tracker: INFO
esp32_ble_client: INFO
# If you don't use Home Assistant please remove this `api` section and uncomment the `mqtt` component!
api:
encryption:
key: "1yvqT88hvMu/RGhmlV7wc35paPqtSBZMCrGRZjxlje4="
# mqtt:
# broker: !secret mqtt_host
# username: !secret mqtt_username
# password: !secret mqtt_password
# id: mqtt_client
esp32_ble_tracker:
scan_parameters:
active: false
on_ble_advertise:
then:
- lambda: |-
if (x.get_name().rfind("JK-", 0) == 0 || x.get_name().rfind("JK_", 0) == 0) {
ESP_LOGI("ble_adv", "Tim thay JK-BMS moi");
ESP_LOGI("ble_adv", " Name: %s", x.get_name().c_str());
ESP_LOGI("ble_adv", " MAC address: %s", x.address_str().c_str());
ESP_LOGD("ble_adv", " Advertised service UUIDs:");
for (auto uuid : x.get_service_uuids()) {
ESP_LOGD("ble_adv", " - %s", uuid.to_string().c_str());
}
}
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: 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"
- 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"
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"
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"
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"
- 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"
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"
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"
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_voltage_17:
name: "${bms0} cell voltage 17"
cell_voltage_18:
name: "${bms0} cell voltage 18"
cell_voltage_19:
name: "${bms0} cell voltage 19"
cell_voltage_20:
name: "${bms0} cell voltage 20"
cell_voltage_21:
name: "${bms0} cell voltage 21"
cell_voltage_22:
name: "${bms0} cell voltage 22"
cell_voltage_23:
name: "${bms0} cell voltage 23"
cell_voltage_24:
name: "${bms0} cell voltage 24"
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"
cell_resistance_17:
name: "${bms0} cell resistance 17"
cell_resistance_18:
name: "${bms0} cell resistance 18"
cell_resistance_19:
name: "${bms0} cell resistance 19"
cell_resistance_20:
name: "${bms0} cell resistance 20"
cell_resistance_21:
name: "${bms0} cell resistance 21"
cell_resistance_22:
name: "${bms0} cell resistance 22"
cell_resistance_23:
name: "${bms0} cell resistance 23"
cell_resistance_24:
name: "${bms0} cell resistance 24"
total_voltage:
name: "${bms0} total voltage"
current:
name: "${bms0} current"
heating_current:
name: "${bms0} heating current"
power:
name: "${bms0} power"
charging_power:
name: "${bms0} charging power"
discharging_power:
name: "${bms0} discharging power"
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"
power_tube_temperature:
name: "${bms0} power tube temperature"
balancing:
name: "${bms0} balancing"
state_of_charge:
name: "${bms0} state of charge"
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"
- 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"
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_voltage_17:
name: "${bms1} cell voltage 17"
cell_voltage_18:
name: "${bms1} cell voltage 18"
cell_voltage_19:
name: "${bms1} cell voltage 19"
cell_voltage_20:
name: "${bms1} cell voltage 20"
cell_voltage_21:
name: "${bms1} cell voltage 21"
cell_voltage_22:
name: "${bms1} cell voltage 22"
cell_voltage_23:
name: "${bms1} cell voltage 23"
cell_voltage_24:
name: "${bms1} cell voltage 24"
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"
cell_resistance_17:
name: "${bms1} cell resistance 17"
cell_resistance_18:
name: "${bms1} cell resistance 18"
cell_resistance_19:
name: "${bms1} cell resistance 19"
cell_resistance_20:
name: "${bms1} cell resistance 20"
cell_resistance_21:
name: "${bms1} cell resistance 21"
cell_resistance_22:
name: "${bms1} cell resistance 22"
cell_resistance_23:
name: "${bms1} cell resistance 23"
cell_resistance_24:
name: "${bms1} cell resistance 24"
total_voltage:
name: "${bms1} total voltage"
current:
name: "${bms1} current"
heating_current:
name: "${bms1} heating current"
power:
name: "${bms1} power"
charging_power:
name: "${bms1} charging power"
discharging_power:
name: "${bms1} discharging power"
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"
power_tube_temperature:
name: "${bms1} power tube temperature"
balancing:
name: "${bms1} balancing"
state_of_charge:
name: "${bms1} state of charge"
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"
switch:
- platform: jk_bms_ble
jk_bms_ble_id: bms0
charging:
name: "${bms0} charging"
discharging:
name: "${bms0} discharging"
balancer:
name: "${bms0} balancer"
- platform: jk_bms_ble
jk_bms_ble_id: bms1
charging:
name: "${bms1} charging"
discharging:
name: "${bms1} discharging"
balancer:
name: "${bms1} balancer"
- platform: ble_client
ble_client_id: client0
id: ble_client_switch0
name: "${bms0} enable bluetooth connection"
- platform: ble_client
ble_client_id: client1
id: ble_client_switch1
name: "${bms1} enable 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"
Demo giao diện mình đang dùng trên Dashboard


Code YAML Dashboad
cards:
- type: vertical-stack
cards:
- type: horizontal-stack
cards:
- type: horizontal-stack
cards:
- type: custom:bubble-card
card_type: button
entity: switch.jk_bms_charging
name: Sạc
show_state: false
force_icon: false
show_attribute: false
show_last_changed: false
sub_button:
- entity: switch.jk_bms_charging
show_name: false
name: Đang sạc
show_state: true
show_attribute: false
show_last_changed: false
styles: ""
button_type: state
icon: mdi:battery-positive
- type: horizontal-stack
cards:
- type: custom:bubble-card
card_type: button
entity: switch.jk_bms_discharging
name: Xả
show_state: false
force_icon: false
show_attribute: false
show_last_changed: false
sub_button:
- entity: switch.jk_bms_charging
show_name: false
name: Đang xả
show_state: true
show_attribute: false
show_last_changed: false
button_type: state
icon: mdi:battery-negative
- type: horizontal-stack
cards:
- type: custom:bubble-card
card_type: button
entity: switch.jk_bms_balancer
name: Cân bằng
show_state: false
force_icon: false
show_attribute: false
show_last_changed: false
sub_button:
- entity: switch.jk_bms_charging
show_name: false
name: Đang sạc
show_state: true
show_attribute: false
show_last_changed: false
button_type: state
- type: custom:stack-in-card
keep:
margin: false
box_shadow: false
background: false
cards:
- type: grid
square: false
columns: 1
cards:
- type: markdown
content: >-
<center><b><font color=#41CD52 size=6>{{
states('sensor.jk_bms_total_voltage') }} V</font></b><br> Công
Suất: <font color=#41CD52>{{
states('sensor.jk_bms_power') }} W</font><br> Dung
Lượng: <font color=#41CD52>{{
states('sensor.jk_bms_total_battery_capacity_setting') }}
Ah</font><br> Tổng Cycle: <font color=#41CD52>{{
states('sensor.jk_bms_total_charging_cycle_capacity') }}
Ah</font><br> Áp Trung Bình.: <font color=#41CD52>{{
states('sensor.jk_bms_average_cell_voltage') }} V</font><br> Dòng
cân bằng: <font color=#41CD52>{{
states('sensor.jk_bms_balancing_current') }} A</font><br> Nhiệt
T1: <font color=#41CD52>{{
states('sensor.jk_bms_temperature_sensor_1') }} °C</font>
- type: markdown
content: >-
<center><b><font color=#41CD52 size=6>{{
states('sensor.jk_bms_current') }} A</font></b><br>
SOC: <font color=#41CD52>{{
states('sensor.jk_bms_state_of_charge') }} %</font><br>
Còn: <font color=#41CD52>{{
states('sensor.jk_bms_capacity_remaining') }} Ah</font><br> Chu
kỳ: <font color=#41CD52>{{
states('sensor.jk_bms_charging_cycles') }}</font><br> Lệch
Cell.: <font color=#41CD52>{{
states('sensor.jk_bms_delta_cell_voltage') }} V</font><br> Nhiệt
MOS.: <font color=#41CD52>{{
states('sensor.jk_bms_power_tube_temperature') }} °C</font><br>
Nhiệt T2: <font color=#41CD52>{{
states('sensor.jk_bms_temperature_sensor_2') }} °C</font>
- type: custom:stack-in-card
keep:
margin: false
box_shadow: false
background: false
cards:
- type: grid
square: false
columns: 1
cards:
- type: markdown
content: <center><b>Cells
- type: grid
square: false
columns: 2
cards:
- type: markdown
content: >-
<center>01. {% if
states('sensor.jk_bms_max_voltage_cell') == '1' %} <font
color="#3090C7">{{ states('sensor.jk_bms_cell_voltage_1') }}
V</font> {% elif states('sensor.jk_bms_min_voltage_cell') == '1'
%} <font color="red">{{ states('sensor.jk_bms_cell_voltage_1') }}
V</font> {% else %} {{ states('sensor.jk_bms_cell_voltage_1') }} V
{% endif %} / {{
states('sensor.jk_bms_cell_resistance_1') }} Ω <br>
02. {% if
states('sensor.jk_bms_max_voltage_cell') == '2' %} <font
color="#3090C7">{{ states('sensor.jk_bms_cell_voltage_2') }}
V</font> {% elif states('sensor.jk_bms_min_voltage_cell') == '2'
%} <font color="red">{{ states('sensor.jk_bms_cell_voltage_2') }}
V</font> {% else %} {{ states('sensor.jk_bms_cell_voltage_2') }} V
{% endif %} / {{
states('sensor.jk_bms_cell_resistance_2') }} Ω <br>
03. {% if
states('sensor.jk_bms_max_voltage_cell') == '3' %} <font
color="#3090C7">{{ states('sensor.jk_bms_cell_voltage_3') }}
V</font> {% elif states('sensor.jk_bms_min_voltage_cell') == '3'
%} <font color="red">{{ states('sensor.jk_bms_cell_voltage_3') }}
V</font> {% else %} {{ states('sensor.jk_bms_cell_voltage_3') }} V
{% endif %} / {{
states('sensor.jk_bms_cell_resistance_3') }} Ω <br>
04. {% if
states('sensor.jk_bms_max_voltage_cell') == '4' %} <font
color="#3090C7">{{ states('sensor.jk_bms_cell_voltage_4') }}
V</font> {% elif states('sensor.jk_bms_min_voltage_cell') == '4'
%} <font color="red">{{ states('sensor.jk_bms_cell_voltage_4') }}
V</font> {% else %} {{ states('sensor.jk_bms_cell_voltage_4') }} V
{% endif %} / {{
states('sensor.jk_bms_cell_resistance_4') }} Ω <br>
05. {% if
states('sensor.jk_bms_max_voltage_cell') == '5' %} <font
color="#3090C7">{{ states('sensor.jk_bms_cell_voltage_5') }}
V</font> {% elif states('sensor.jk_bms_min_voltage_cell') == '5'
%} <font color="red">{{ states('sensor.jk_bms_cell_voltage_5') }}
V</font> {% else %} {{ states('sensor.jk_bms_cell_voltage_5') }} V
{% endif %} / {{
states('sensor.jk_bms_cell_resistance_5') }} Ω <br>
06. {% if
states('sensor.jk_bms_max_voltage_cell') == '6' %} <font
color="#3090C7">{{ states('sensor.jk_bms_cell_voltage_6') }}
V</font> {% elif states('sensor.jk_bms_min_voltage_cell') == '6'
%} <font color="red">{{ states('sensor.jk_bms_cell_voltage_6') }}
V</font> {% else %} {{ states('sensor.jk_bms_cell_voltage_6') }} V
{% endif %} / {{
states('sensor.jk_bms_cell_resistance_6') }} Ω <br>
07. {% if
states('sensor.jk_bms_max_voltage_cell') == '7' %} <font
color="#3090C7">{{ states('sensor.jk_bms_cell_voltage_7') }}
V</font> {% elif states('sensor.jk_bms_min_voltage_cell') == '7'
%} <font color="red">{{ states('sensor.jk_bms_cell_voltage_7') }}
V</font> {% else %} {{ states('sensor.jk_bms_cell_voltage_7') }} V
{% endif %} / {{
states('sensor.jk_bms_cell_resistance_7') }} Ω <br>
08. {% if
states('sensor.jk_bms_max_voltage_cell') == '8' %} <font
color="#3090C7">{{ states('sensor.jk_bms_cell_voltage_8') }}
V</font> {% elif states('sensor.jk_bms_min_voltage_cell') == '8'
%} <font color="red">{{ states('sensor.jk_bms_cell_voltage_8') }}
V</font> {% else %} {{ states('sensor.jk_bms_cell_voltage_8') }} V
{% endif %} / {{
states('sensor.jk_bms_cell_resistance_8') }} Ω <br></center>
- type: markdown
content: >-
<center>09. {% if
states('sensor.jk_bms_max_voltage_cell') == '9' %} <font
color="#3090C7">{{ states('sensor.jk_bms_cell_voltage_9') }}
V</font> {% elif states('sensor.jk_bms_min_voltage_cell') == '9'
%} <font color="red">{{ states('sensor.jk_bms_cell_voltage_9') }}
V</font> {% else %} {{ states('sensor.jk_bms_cell_voltage_9') }} V
{% endif %} / {{
states('sensor.jk_bms_cell_resistance_9') }} Ω <br>
10. {% if
states('sensor.jk_bms_max_voltage_cell') == '10' %} <font
color="#3090C7">{{ states('sensor.jk_bms_cell_voltage_10') }}
V</font> {% elif states('sensor.jk_bms_min_voltage_cell') == '10'
%} <font color="red">{{ states('sensor.jk_bms_cell_voltage_10') }}
V</font> {% else %} {{ states('sensor.jk_bms_cell_voltage_10') }}
V {% endif %} / {{
states('sensor.jk_bms_cell_resistance_10') }} Ω <br>
11. {% if
states('sensor.jk_bms_max_voltage_cell') == '11' %} <font
color="#3090C7">{{ states('sensor.jk_bms_cell_voltage_11') }}
V</font> {% elif states('sensor.jk_bms_min_voltage_cell') == '11'
%} <font color="red">{{ states('sensor.jk_bms_cell_voltage_11') }}
V</font> {% else %} {{ states('sensor.jk_bms_cell_voltage_11') }}
V {% endif %} / {{
states('sensor.jk_bms_cell_resistance_11') }} Ω <br>
12. {% if
states('sensor.jk_bms_max_voltage_cell') == '12' %} <font
color="#3090C7">{{ states('sensor.jk_bms_cell_voltage_12') }}
V</font> {% elif states('sensor.jk_bms_min_voltage_cell') == '12'
%} <font color="red">{{ states('sensor.jk_bms_cell_voltage_12') }}
V</font> {% else %} {{ states('sensor.jk_bms_cell_voltage_12') }}
V {% endif %} / {{
states('sensor.jk_bms_cell_resistance_12') }} Ω <br>
13. {% if
states('sensor.jk_bms_max_voltage_cell') == '13' %} <font
color="#3090C7">{{ states('sensor.jk_bms_cell_voltage_13') }}
V</font> {% elif states('sensor.jk_bms_min_voltage_cell') == '13'
%} <font color="red">{{ states('sensor.jk_bms_cell_voltage_13') }}
V</font> {% else %} {{ states('sensor.jk_bms_cell_voltage_13') }}
V {% endif %} / {{
states('sensor.jk_bms_cell_resistance_13') }} Ω <br>
14. {% if
states('sensor.jk_bms_max_voltage_cell') == '14' %} <font
color="#3090C7">{{ states('sensor.jk_bms_cell_voltage_14') }}
V</font> {% elif states('sensor.jk_bms_min_voltage_cell') == '14'
%} <font color="red">{{ states('sensor.jk_bms_cell_voltage_14') }}
V</font> {% else %} {{ states('sensor.jk_bms_cell_voltage_14') }}
V {% endif %} / {{
states('sensor.jk_bms_cell_resistance_14') }} Ω <br>
15. {% if
states('sensor.jk_bms_max_voltage_cell') == '15' %} <font
color="#3090C7">{{ states('sensor.jk_bms_cell_voltage_15') }}
V</font> {% elif states('sensor.jk_bms_min_voltage_cell') == '15'
%} <font color="red">{{ states('sensor.jk_bms_cell_voltage_15') }}
V</font> {% else %} {{ states('sensor.jk_bms_cell_voltage_15') }}
V {% endif %} / {{
states('sensor.jk_bms_cell_resistance_15') }} Ω <br>
16. {% if
states('sensor.jk_bms_max_voltage_cell') == '16' %} <font
color="#3090C7">{{ states('sensor.jk_bms_cell_voltage_16') }}
V</font> {% elif states('sensor.jk_bms_min_voltage_cell') == '16'
%} <font color="red">{{ states('sensor.jk_bms_cell_voltage_16') }}
V</font> {% else %} {{ states('sensor.jk_bms_cell_voltage_16') }}
V {% endif %} / {{
states('sensor.jk_bms_cell_resistance_16') }} Ω <br></center>
- type: horizontal-stack
cards:
- type: custom:battery-state-card
icon: mdi:battery
colors:
steps:
- value: 3.2
color: red
- value: 3.25
color: yellow
- value: 3.3
color: blue
- value: 3.4
color: green
tap_action:
action: more-info
collapse: 8
sort:
by: state
desc: true
unit: V
entities:
- entity: sensor.jk_bms_cell_voltage_1
decimals: 3
name: Cell 1
- entity: sensor.jk_bms_cell_voltage_2
decimals: 3
name: Cell 2
- entity: sensor.jk_bms_cell_voltage_3
decimals: 3
name: Cell 3
- entity: sensor.jk_bms_cell_voltage_4
decimals: 3
name: Cell 4
- entity: sensor.jk_bms_cell_voltage_5
decimals: 3
name: Cell 5
- entity: sensor.jk_bms_cell_voltage_6
decimals: 3
name: Cell 6
- entity: sensor.jk_bms_cell_voltage_7
decimals: 3
name: Cell 7
- entity: sensor.jk_bms_cell_voltage_8
decimals: 3
name: Cell 8
- type: custom:battery-state-card
icon: mdi:battery
colors:
steps:
- value: 3.2
color: red
- value: 3.25
color: yellow
- value: 3.3
color: blue
- value: 3.4
color: green
tap_action:
action: more-info
collapse: 8
sort:
by: state
desc: true
unit: V
entities:
- entity: sensor.jk_bms_cell_voltage_9
decimals: 3
name: Cell 9
- entity: sensor.jk_bms_cell_voltage_10
decimals: 3
name: Cell 10
- entity: sensor.jk_bms_cell_voltage_11
decimals: 3
name: Cell 11
- entity: sensor.jk_bms_cell_voltage_12
decimals: 3
name: Cell 12
- entity: sensor.jk_bms_cell_voltage_13
decimals: 3
name: Cell 13
- entity: sensor.jk_bms_cell_voltage_14
decimals: 3
name: Cell 14
- entity: sensor.jk_bms_cell_voltage_15
decimals: 3
name: Cell 15
- entity: sensor.jk_bms_cell_voltage_16
decimals: 3
name: Cell 16
title: JK BMS
theme: ios-dark-mode-dark-green
type: custom:vertical-layout
Nếu anh em muốn giao diện giống JK thì tự tìm trên mạng có nhé

