Mạch ESP32 kết nối BLE giám sát BMS JK

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

substitutions:
  name: jk-bms
  device_description: "Giam sat BMS JK qua BLE -bachtrannet"
  external_components_source: github://syssi/esphome-jk-bms@main
  mac_address: C8:47:80:0D:0A:DA #thay thế bằng MAC Address của thiết bị bạn đang dùng
  # 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)
  protocol_version: JK02_32S  #Xem thông số mạch BMS so sánh với dòng trên sau đó điền vào dữ liệu phù hợp

esphome:
  name: bms-jk
  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

ota:
  platform: esphome
  password: "c717640ea7d277aa25558a86f2e6bf57"
  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: "lFC5laOAwjcbihrZmiOTlTGZp2s5kyqwSZ/g5Tl5lhg="

# 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: ${mac_address}
    id: client0

jk_bms_ble:
  - ble_client_id: client0
    protocol_version: ${protocol_version}
    throttle: 1s
    id: bms0

binary_sensor:
  - platform: jk_bms_ble
    balancing:
      name: "${name} balancing"
    charging:
      name: "${name} charging"
    discharging:
      name: "${name} discharging"
    heating:
      name: "${name} heating"
    online_status:
      name: "${name} online status"

button:
  - platform: jk_bms_ble
    retrieve_settings:
      name: "${name} retrieve settings"
    retrieve_device_info:
      name: "${name} retrieve device info"

number:
  - platform: jk_bms_ble
    jk_bms_ble_id: bms0
    balance_trigger_voltage:
      name: "${name} balance trigger voltage"
    cell_count:
      name: "${name} cell count"
    total_battery_capacity:
      name: "${name} total battery capacity"
    cell_voltage_overvoltage_protection:
      name: "${name} cell voltage overvoltage protection"
    cell_voltage_overvoltage_recovery:
      name: "${name} cell voltage overvoltage recovery"
    cell_voltage_undervoltage_protection:
      name: "${name} cell voltage undervoltage protection"
    cell_voltage_undervoltage_recovery:
      name: "${name} cell voltage undervoltage recovery"
    balance_starting_voltage:
      name: "${name} balance starting voltage"
    voltage_calibration:
      name: "${name} voltage calibration"
    current_calibration:
      name: "${name} current calibration"
    power_off_voltage:
      name: "${name} power off voltage"
    max_balance_current:
      name: "${name} max balance current"
    max_charge_current:
      name: "${name} max charge current"
    max_discharge_current:
      name: "${name} max discharge current"
    charge_overcurrent_protection_delay:
      name: "${name} charge overcurrent protection delay"
    charge_overcurrent_protection_recovery_time:
      name: "${name} charge overcurrent protection recovery time"
    discharge_overcurrent_protection_delay:
      name: "${name} discharge overcurrent protection delay"
    discharge_overcurrent_protection_recovery_time:
      name: "${name} discharge overcurrent protection recovery time"
    short_circuit_protection_delay:
      name: "${name} short circuit protection delay"
    short_circuit_protection_recovery_time:
      name: "${name} short circuit protection recovery time"
    charge_overtemperature_protection:
      name: "${name} charge overtemperature protection"
    charge_overtemperature_protection_recovery:
      name: "${name} charge overtemperature protection recovery"
    discharge_overtemperature_protection:
      name: "${name} discharge overtemperature protection"
    discharge_overtemperature_protection_recovery:
      name: "${name} discharge overtemperature protection recovery"
    charge_undertemperature_protection:
      name: "${name} charge undertemperature protection"
    charge_undertemperature_protection_recovery:
      name: "${name} charge undertemperature protection recovery"
    power_tube_overtemperature_protection:
      name: "${name} power tube overtemperature protection"
    power_tube_overtemperature_protection_recovery:
      name: "${name} power tube overtemperature protection recovery"

sensor:
  - platform: jk_bms_ble
    jk_bms_ble_id: bms0
    min_cell_voltage:
      name: "${name} min cell voltage"
    max_cell_voltage:
      name: "${name} max cell voltage"
    min_voltage_cell:
      name: "${name} min voltage cell"
    max_voltage_cell:
      name: "${name} max voltage cell"
    delta_cell_voltage:
      name: "${name} delta cell voltage"
    average_cell_voltage:
      name: "${name} average cell voltage"
    cell_voltage_1:
      name: "${name} cell voltage 1"
    cell_voltage_2:
      name: "${name} cell voltage 2"
    cell_voltage_3:
      name: "${name} cell voltage 3"
    cell_voltage_4:
      name: "${name} cell voltage 4"
    cell_voltage_5:
      name: "${name} cell voltage 5"
    cell_voltage_6:
      name: "${name} cell voltage 6"
    cell_voltage_7:
      name: "${name} cell voltage 7"
    cell_voltage_8:
      name: "${name} cell voltage 8"
    cell_voltage_9:
      name: "${name} cell voltage 9"
    cell_voltage_10:
      name: "${name} cell voltage 10"
    cell_voltage_11:
      name: "${name} cell voltage 11"
    cell_voltage_12:
      name: "${name} cell voltage 12"
    cell_voltage_13:
      name: "${name} cell voltage 13"
    cell_voltage_14:
      name: "${name} cell voltage 14"
    cell_voltage_15:
      name: "${name} cell voltage 15"
    cell_voltage_16:
      name: "${name} cell voltage 16"
    cell_voltage_17:
      name: "${name} cell voltage 17"
    cell_voltage_18:
      name: "${name} cell voltage 18"
    cell_voltage_19:
      name: "${name} cell voltage 19"
    cell_voltage_20:
      name: "${name} cell voltage 20"
    cell_voltage_21:
      name: "${name} cell voltage 21"
    cell_voltage_22:
      name: "${name} cell voltage 22"
    cell_voltage_23:
      name: "${name} cell voltage 23"
    cell_voltage_24:
      name: "${name} cell voltage 24"
    cell_resistance_1:
      name: "${name} cell resistance 1"
    cell_resistance_2:
      name: "${name} cell resistance 2"
    cell_resistance_3:
      name: "${name} cell resistance 3"
    cell_resistance_4:
      name: "${name} cell resistance 4"
    cell_resistance_5:
      name: "${name} cell resistance 5"
    cell_resistance_6:
      name: "${name} cell resistance 6"
    cell_resistance_7:
      name: "${name} cell resistance 7"
    cell_resistance_8:
      name: "${name} cell resistance 8"
    cell_resistance_9:
      name: "${name} cell resistance 9"
    cell_resistance_10:
      name: "${name} cell resistance 10"
    cell_resistance_11:
      name: "${name} cell resistance 11"
    cell_resistance_12:
      name: "${name} cell resistance 12"
    cell_resistance_13:
      name: "${name} cell resistance 13"
    cell_resistance_14:
      name: "${name} cell resistance 14"
    cell_resistance_15:
      name: "${name} cell resistance 15"
    cell_resistance_16:
      name: "${name} cell resistance 16"
    cell_resistance_17:
      name: "${name} cell resistance 17"
    cell_resistance_18:
      name: "${name} cell resistance 18"
    cell_resistance_19:
      name: "${name} cell resistance 19"
    cell_resistance_20:
      name: "${name} cell resistance 20"
    cell_resistance_21:
      name: "${name} cell resistance 21"
    cell_resistance_22:
      name: "${name} cell resistance 22"
    cell_resistance_23:
      name: "${name} cell resistance 23"
    cell_resistance_24:
      name: "${name} cell resistance 24"
    total_voltage:
      name: "${name} total voltage"
    current:
      name: "${name} current"
    heating_current:
      name: "${name} heating current"
    power:
      name: "${name} power"
    charging_power:
      name: "${name} charging power"
    discharging_power:
      name: "${name} discharging power"
    temperature_sensor_1:
      name: "${name} temperature sensor 1"
    temperature_sensor_2:
      name: "${name} temperature sensor 2"
    temperature_sensor_3:
      name: "${name} temperature sensor 3"
    temperature_sensor_4:
      name: "${name} temperature sensor 4"
    power_tube_temperature:
      name: "${name} power tube temperature"
    balancing:
      name: "${name} balancing"
    state_of_charge:
      name: "${name} state of charge"
    capacity_remaining:
      name: "${name} capacity remaining"
    total_battery_capacity_setting:
      name: "${name} total battery capacity setting"
    charging_cycles:
      name: "${name} charging cycles"
    total_charging_cycle_capacity:
      name: "${name} total charging cycle capacity"
    total_runtime:
      name: "${name} total runtime"
    balancing_current:
      name: "${name} balancing current"
    errors_bitmask:
      name: "${name} errors bitmask"

switch:
  - platform: jk_bms_ble
    charging:
      name: "${name} charging"
    discharging:
      name: "${name} discharging"
    balancer:
      name: "${name} balancer"

  - platform: ble_client
    ble_client_id: client0
    id: ble_client_switch0
    name: "${name} enable bluetooth connection"

text_sensor:
  - platform: jk_bms_ble
    errors:
      name: "${name} errors"
    total_runtime_formatted:
      name: "${name} 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:&nbsp;&nbsp;<font color=#41CD52>{{
              states('sensor.jk_bms_power') }} W</font><br> Dung
              Lượng:&nbsp;&nbsp;<font color=#41CD52>{{
              states('sensor.jk_bms_total_battery_capacity_setting') }}
              Ah</font><br> Tổng Cycle:&nbsp;&nbsp;<font color=#41CD52>{{
              states('sensor.jk_bms_total_charging_cycle_capacity') }}
              Ah</font><br> Áp Trung Bình.:&nbsp;&nbsp;<font color=#41CD52>{{
              states('sensor.jk_bms_average_cell_voltage') }} V</font><br> Dòng
              cân bằng:&nbsp;&nbsp;<font color=#41CD52>{{
              states('sensor.jk_bms_balancing_current') }} A</font><br> Nhiệt
              T1:&nbsp;&nbsp;<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:&nbsp;&nbsp;<font color=#41CD52>{{
              states('sensor.jk_bms_state_of_charge') }} %</font><br> 
              Còn:&nbsp;&nbsp;<font color=#41CD52>{{
              states('sensor.jk_bms_capacity_remaining') }} Ah</font><br> Chu
              kỳ:&nbsp;&nbsp;<font color=#41CD52>{{
              states('sensor.jk_bms_charging_cycles') }}</font><br> Lệch
              Cell.:&nbsp;&nbsp;<font color=#41CD52>{{
              states('sensor.jk_bms_delta_cell_voltage') }} V</font><br> Nhiệt
              MOS.:&nbsp;&nbsp;<font color=#41CD52>{{
              states('sensor.jk_bms_power_tube_temperature') }} °C</font><br>
              Nhiệt T2:&nbsp;&nbsp;<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.&nbsp;&nbsp;&nbsp; {% 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 %} &nbsp;&nbsp;&nbsp;/&nbsp;&nbsp;&nbsp; {{
              states('sensor.jk_bms_cell_resistance_1') }} Ω <br>
              02.&nbsp;&nbsp;&nbsp; {% 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 %} &nbsp;&nbsp;&nbsp;/&nbsp;&nbsp;&nbsp; {{
              states('sensor.jk_bms_cell_resistance_2') }} Ω <br>
              03.&nbsp;&nbsp;&nbsp; {% 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 %} &nbsp;&nbsp;&nbsp;/&nbsp;&nbsp;&nbsp; {{
              states('sensor.jk_bms_cell_resistance_3') }} Ω <br>
              04.&nbsp;&nbsp;&nbsp; {% 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 %} &nbsp;&nbsp;&nbsp;/&nbsp;&nbsp;&nbsp; {{
              states('sensor.jk_bms_cell_resistance_4') }} Ω <br>
              05.&nbsp;&nbsp;&nbsp; {% 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 %} &nbsp;&nbsp;&nbsp;/&nbsp;&nbsp;&nbsp; {{
              states('sensor.jk_bms_cell_resistance_5') }} Ω <br>
              06.&nbsp;&nbsp;&nbsp; {% 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 %} &nbsp;&nbsp;&nbsp;/&nbsp;&nbsp;&nbsp; {{
              states('sensor.jk_bms_cell_resistance_6') }} Ω <br>
              07.&nbsp;&nbsp;&nbsp; {% 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 %} &nbsp;&nbsp;&nbsp;/&nbsp;&nbsp;&nbsp; {{
              states('sensor.jk_bms_cell_resistance_7') }} Ω <br>
              08.&nbsp;&nbsp;&nbsp; {% 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 %} &nbsp;&nbsp;&nbsp;/&nbsp;&nbsp;&nbsp; {{
              states('sensor.jk_bms_cell_resistance_8') }} Ω <br></center>
          - type: markdown
            content: >-
              <center>09.&nbsp;&nbsp;&nbsp; {% 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 %} &nbsp;&nbsp;&nbsp;/&nbsp;&nbsp;&nbsp; {{
              states('sensor.jk_bms_cell_resistance_9') }} Ω <br>
              10.&nbsp;&nbsp;&nbsp; {% 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 %} &nbsp;&nbsp;&nbsp;/&nbsp;&nbsp;&nbsp; {{
              states('sensor.jk_bms_cell_resistance_10') }} Ω <br>
              11.&nbsp;&nbsp;&nbsp; {% 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 %} &nbsp;&nbsp;&nbsp;/&nbsp;&nbsp;&nbsp; {{
              states('sensor.jk_bms_cell_resistance_11') }} Ω <br>
              12.&nbsp;&nbsp;&nbsp; {% 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 %} &nbsp;&nbsp;&nbsp;/&nbsp;&nbsp;&nbsp; {{
              states('sensor.jk_bms_cell_resistance_12') }} Ω <br>
              13.&nbsp;&nbsp;&nbsp; {% 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 %} &nbsp;&nbsp;&nbsp;/&nbsp;&nbsp;&nbsp; {{
              states('sensor.jk_bms_cell_resistance_13') }} Ω <br>
              14.&nbsp;&nbsp;&nbsp; {% 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 %} &nbsp;&nbsp;&nbsp;/&nbsp;&nbsp;&nbsp; {{
              states('sensor.jk_bms_cell_resistance_14') }} Ω <br>
              15.&nbsp;&nbsp;&nbsp; {% 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 %} &nbsp;&nbsp;&nbsp;/&nbsp;&nbsp;&nbsp; {{
              states('sensor.jk_bms_cell_resistance_15') }} Ω <br>
              16.&nbsp;&nbsp;&nbsp; {% 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 %} &nbsp;&nbsp;&nbsp;/&nbsp;&nbsp;&nbsp; {{
              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é

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *