JK BMS Integration

I Have successfully integrated my JK BMS with Home assistant (Running on Ras pi4) through ESP32. Here is the Yaml File for the Dashboard
Battery 48V100Ah Lithium 16S 3.2V Cells

views:

  • title: Home
    sections:
    • type: grid
      cards:
      • type: heading
        heading: Sukhpal’s JK BMS
        heading_style: title
      • type: vertical-stack
        cards:
        • square: false
          type: grid
          cards:
          • type: vertical-stack
            cards:
            • type: entity
              entity: sensor.jk_bms_total_voltage
              name: Battery voltage
            • type: entity
              entity: sensor.jk_bms_current
              name: Current
          • type: gauge
            entity: sensor.jk_bms_discharging_power
            name: Load power
            needle: true
            max: 5120
            severity:
            green: 0
            yellow: 400
            red: 1600
            columns: 2
        • square: false
          type: grid
          cards:
          • type: entity
            entity: sensor.jk_bms_state_of_charge
            name: SOC
          • type: entity
            entity: sensor.jk_bms_charging_cycles
            name: Cycles
            columns: 2
        • square: false
          type: grid
          cards:
          • type: entity
            entity: sensor.jk_bms_discharging_power
            name: Discharging
            card_mod:
            style: |
            ha-card {
            color: red !important;
            }
            .info, .name {
            color: red !important;
            }
          • type: entity
            entity: sensor.jk_bms_power
            name: Charging
            card_mod:
            style: |
            ha-card {
            color: green !important;
            }
            .info, .name {
            color: green !important;
            }
            columns: 2
        • square: false
          type: grid
          cards:
          • type: entity
            entity: sensor.jk_bms_capacity_remaining
            name: Remaining
          • type: entity
            entity: number.jk_bms_total_battery_capacity
            name: Capacity
            columns: 2
        • square: false
          type: grid
          cards:
          • type: entity
            entity: sensor.jk_bms_average_cell_voltage
            name: Avg. cell volt
          • type: entity
            entity: sensor.jk_bms_delta_cell_voltage
            name: Cell Vol diff.
            columns: 2
        • type: vertical-stack
          cards:
          • type: entities
            style: |
            ha-card {
            color: #18f50c;
            box-shadow: none;
            background: rgba(0,0,0,0);
            border: white solid 1px !important;
            }
            entities:
            • entity: sensor.jk_bms_total_charging_cycle_capacity
              name: Cycle capacity
              card_mod:
              style:
              hui-generic-entity-row:
              $: |
              state-badge {
              display: none;
              }
              .info {
              margin-left:0 !important;
              Color: white;
              }
            • entity: sensor.jk_bms_charging_cycles
              name: Cycle count
              card_mod:
              style:
              hui-generic-entity-row:
              $: |
              state-badge {
              display: none;
              }
              .info {
              margin-left:0 !important;
              Color: white;
              }
            • entity: sensor.jk_bms_balancing_current
              name: Balance current
              card_mod:
              style:
              hui-generic-entity-row:
              $: |
              state-badge {
              display: none;
              }
              .info {
              margin-left:0 !important;
              Color: white;
              }
            • entity: sensor.jk_bms_temperature_sensor_1
              name: Battery T1
              card_mod:
              style:
              hui-generic-entity-row:
              $: |
              state-badge {
              display: none;
              }
              .info {
              margin-left:0 !important;
              Color: white;
              }
            • entity: sensor.jk_bms_temperature_sensor_2
              name: Battery T2
              card_mod:
              style:
              hui-generic-entity-row:
              $: |
              state-badge {
              display: none;
              }
              .info {
              margin-left:0 !important;
              Color: white;
              }
            • entity: sensor.jk_bms_power_tube_temperature
              name: MOS Temp
              card_mod:
              style:
              hui-generic-entity-row:
              $: |
              state-badge {
              display: none;
              }
              .info {
              margin-left:0 !important;
              Color: white;
              }
          • square: false
            type: grid
            columns: 2
            cards:
            • type: markdown
              content: |2-
              01.      {% if
              states(‘sensor.jk_bms_max_voltage_cell’) == ‘1’ %} {{ states(‘sensor.jk_bms_cell_voltage_1’) }}
              V {% elif states(‘sensor.jk_bms_min_voltage_cell’) ==
              ‘1’ %} {{
              states(‘sensor.jk_bms_cell_voltage_1’) }} V {% else %}
              {{ states(‘sensor.jk_bms_cell_voltage_1’) }} V {% endif %}


              02.      {% if
              states(‘sensor.jk_bms_max_voltage_cell’) == ‘2’ %} {{ states(‘sensor.jk_bms_cell_voltage_2’) }}
              V {% elif states(‘sensor.jk_bms_min_voltage_cell’) ==
              ‘2’ %} {{
              states(‘sensor.jk_bms_cell_voltage_2’) }} V {% else %}
              {{ states(‘sensor.jk_bms_cell_voltage_2’) }} V {% endif %}

              03.      {% if
              states(‘sensor.jk_bms_max_voltage_cell’) == ‘3’ %} {{ states(‘sensor.jk_bms_cell_voltage_3’) }}
              V {% elif states(‘sensor.jk_bms_min_voltage_cell’) ==
              ‘3’ %} {{
              states(‘sensor.jk_bms_cell_voltage_3’) }} V {% else %}
              {{ states(‘sensor.jk_bms_cell_voltage_3’) }} V {% endif %}


              04.      {% if
              states(‘sensor.jk_bms_max_voltage_cell’) == ‘4’ %} {{ states(‘sensor.jk_bms_cell_voltage_4’) }}
              V {% elif states(‘sensor.jk_bms_min_voltage_cell’) ==
              ‘4’ %} {{
              states(‘sensor.jk_bms_cell_voltage_4’) }} V {% else %}
              {{ states(‘sensor.jk_bms_cell_voltage_4’) }} V {% endif %}


              05.      {% if
              states(‘sensor.jk_bms_max_voltage_cell’) == ‘5’ %} {{ states(‘sensor.jk_bms_cell_voltage_5’) }}
              V {% elif states(‘sensor.jk_bms_min_voltage_cell’) ==
              ‘5’ %} {{
              states(‘sensor.jk_bms_cell_voltage_5’) }} V {% else %}
              {{ states(‘sensor.jk_bms_cell_voltage_5’) }} V {% endif %}


              06.      {% if
              states(‘sensor.jk_bms_max_voltage_cell’) == ‘6’ %} {{ states(‘sensor.jk_bms_cell_voltage_6’) }}
              V {% elif states(‘sensor.jk_bms_min_voltage_cell’) ==
              ‘6’ %} {{
              states(‘sensor.jk_bms_cell_voltage_6’) }} V {% else %}
              {{ states(‘sensor.jk_bms_cell_voltage_6’) }} V {% endif %}


              07.      {% if
              states(‘sensor.jk_bms_max_voltage_cell’) == ‘7’ %} {{ states(‘sensor.jk_bms_cell_voltage_7’) }}
              V {% elif states(‘sensor.jk_bms_min_voltage_cell’) ==
              ‘7’ %} {{
              states(‘sensor.jk_bms_cell_voltage_7’) }} V {% else %}
              {{ states(‘sensor.jk_bms_cell_voltage_7’) }} V {% endif %}


              08.      {% if
              states(‘sensor.jk_bms_max_voltage_cell’) == ‘8’ %} {{ states(‘sensor.jk_bms_cell_voltage_8’) }}
              V {% elif states(‘sensor.jk_bms_min_voltage_cell’) ==
              ‘8’ %} {{
              states(‘sensor.jk_bms_cell_voltage_8’) }} V {% else %}
              {{ states(‘sensor.jk_bms_cell_voltage_8’) }} V {% endif %}

              card_mod:
              style: |
              ha-card {
              box-shadow: none;
              background: rgba(0,0,0,0);
              border: white solid 1px !important;
              }
            • type: markdown
              content: |2-

              09.      {% if
              states(‘sensor.jk_bms_max_voltage_cell’) == ‘9’ %} {{ states(‘sensor.jk_bms_cell_voltage_9’) }}
              V {% elif states(‘sensor.jk_bms_min_voltage_cell’) ==
              ‘9’ %} {{
              states(‘sensor.jk_bms_cell_voltage_9’) }} V {% else %}
              {{ states(‘sensor.jk_bms_cell_voltage_9’) }} V {% endif %}


              10.      {% if
              states(‘sensor.jk_bms_max_voltage_cell’) == ‘10’ %} {{ states(‘sensor.jk_bms_cell_voltage_10’) }}
              V {% elif states(‘sensor.jk_bms_min_voltage_cell’) ==
              ‘10’ %} {{
              states(‘sensor.jk_bms_cell_voltage_10’) }} V {% else %}
              {{ states(‘sensor.jk_bms_cell_voltage_10’) }} V {% endif %}


              11.      {% if
              states(‘sensor.jk_bms_max_voltage_cell’) == ‘11’ %} {{ states(‘sensor.jk_bms_cell_voltage_11’) }}
              V {% elif states(‘sensor.jk_bms_min_voltage_cell’) ==
              ‘11’ %} {{
              states(‘sensor.jk_bms_cell_voltage_11’) }} V {% else %}
              {{ states(‘sensor.jk_bms_cell_voltage_11’) }} V {% endif %}


              12.      {% if
              states(‘sensor.jk_bms_max_voltage_cell’) == ‘12’ %} {{ states(‘sensor.jk_bms_cell_voltage_12’) }}
              V {% elif states(‘sensor.jk_bms_min_voltage_cell’) ==
              ‘12’ %} {{
              states(‘sensor.jk_bms_cell_voltage_12’) }} V {% else %}
              {{ states(‘sensor.jk_bms_cell_voltage_12’) }} V {% endif %}


              13.      {% if
              states(‘sensor.jk_bms_max_voltage_cell’) == ‘13’ %} {{ states(‘sensor.jk_bms_cell_voltage_13’) }}
              V {% elif states(‘sensor.jk_bms_min_voltage_cell’) ==
              ‘13’ %} {{
              states(‘sensor.jk_bms_cell_voltage_13’) }} V {% else %}
              {{ states(‘sensor.jk_bms_cell_voltage_13’) }} V {% endif %}


              14.      {% if
              states(‘sensor.jk_bms_max_voltage_cell’) == ‘14’ %} {{ states(‘sensor.jk_bms_cell_voltage_14’) }}
              V {% elif states(‘sensor.jk_bms_min_voltage_cell’) ==
              ‘14’ %} {{
              states(‘sensor.jk_bms_cell_voltage_14’) }} V {% else %}
              {{ states(‘sensor.jk_bms_cell_voltage_14’) }} V {% endif %}

              15.      {% if
              states(‘sensor.jk_bms_max_voltage_cell’) == ‘15’ %} {{ states(‘sensor.jk_bms_cell_voltage_15’) }}
              V {% elif states(‘sensor.jk_bms_min_voltage_cell’) ==
              ‘15’ %} {{
              states(‘sensor.jk_bms_cell_voltage_15’) }} V {% else %}
              {{ states(‘sensor.jk_bms_cell_voltage_15’) }} V {% endif %}


              16.      {% if
              states(‘sensor.jk_bms_max_voltage_cell’) == ‘16’ %} {{ states(‘sensor.jk_bms_cell_voltage_16’) }}
              V {% elif states(‘sensor.jk_bms_min_voltage_cell’) ==
              ‘16’ %} {{
              states(‘sensor.jk_bms_cell_voltage_16’) }} V {% else %}
              {{ states(‘sensor.jk_bms_cell_voltage_16’) }} V {% endif %}


              card_mod:
              style: |
              ha-card {
              box-shadow: none;
              background: rgba(0,0,0,0);
              border: white solid 1px !important;
              }
            • type: entities
              style: |
              ha-card {
              color: #18f50c;
              box-shadow: none;
              background: rgba(0,0,0,0);
              border: white solid 1px !important;
              }
              entities:
              • entity: sensor.jk_bms_cell_resistance_1
                name: 1
              • entity: sensor.jk_bms_cell_resistance_2
                name: 2
              • entity: sensor.jk_bms_cell_resistance_3
                name: 3
              • entity: sensor.jk_bms_cell_resistance_4
                name: 4
              • entity: sensor.jk_bms_cell_resistance_5
                name: 5
              • entity: sensor.jk_bms_cell_resistance_6
                name: 6
              • entity: sensor.jk_bms_cell_resistance_7
                name: 7
              • entity: sensor.jk_bms_cell_resistance_8
                name: 8
            • type: entities
              style: |
              ha-card {
              color: #18f50c;
              box-shadow: none;
              background: rgba(0,0,0,0);
              border: white solid 1px !important;
              }
              entities:
              • entity: sensor.jk_bms_cell_resistance_9
                name: 9
              • entity: sensor.jk_bms_cell_resistance_10
                name: 10
              • entity: sensor.jk_bms_cell_resistance_11
                name: 11
              • entity: sensor.jk_bms_cell_resistance_12
                name: 12
              • entity: sensor.jk_bms_cell_resistance_13
                name: 13
              • entity: sensor.jk_bms_cell_resistance_14
                name: 14
              • entity: sensor.jk_bms_cell_resistance_15
                name: 15
              • entity: sensor.jk_bms_cell_resistance_16
                name: 16
        • show_name: true
          show_icon: true
          show_state: true
          type: glance
          entities:
          • entity: switch.jk_bms_charging
            name: Charging
          • entity: switch.jk_bms_discharging
            name: Discharging
          • entity: binary_sensor.jk_bms_balancing
            name: Balancing
            state_color: true
    • type: grid
      cards:
      • type: heading
        heading: New section
      • type: history-graph
        entities:
        • entity: sensor.jk_bms_state_of_charge
          name: Battery SoC
          hours_to_show: 24
          refresh_interval: 0
          title: SOC Chart
1 Like

An efficient and elegant way to apply color to the max/min voltage cells is by using css selectors with the help of the card-mod.

type: entities
entities:
  - entity: sensor.jk_bms0_cell_voltage_1
    name: C1
  - entity: sensor.jk_bms0_cell_voltage_2
    name: C2
  - entity: sensor.jk_bms0_cell_voltage_3
    name: C3
  - entity: sensor.jk_bms0_cell_voltage_4
    name: C4
  - entity: sensor.jk_bms0_cell_voltage_5
    name: C5
  - entity: sensor.jk_bms0_cell_voltage_6
    name: C6
  - entity: sensor.jk_bms0_cell_voltage_7
    name: C7
  - entity: sensor.jk_bms0_cell_voltage_8
    name: C8
  - entity: sensor.jk_bms0_cell_voltage_9
    name: C9
  - entity: sensor.jk_bms0_cell_voltage_10
    name: C10
  - entity: sensor.jk_bms0_cell_voltage_11
    name: C11
  - entity: sensor.jk_bms0_cell_voltage_12
    name: C12
  - entity: sensor.jk_bms0_cell_voltage_13
    name: C13
  - entity: sensor.jk_bms0_cell_voltage_14
    name: C14
  - entity: sensor.jk_bms0_cell_voltage_15
    name: C15
  - entity: sensor.jk_bms0_cell_voltage_16
    name: C16
card_mod:
  style:
    "#states": |
      div > div:nth-child({{- states('sensor.jk_bms0_min_voltage_cell') -}}) {
        color: red;
      }  
      div > div:nth-child({{- states('sensor.jk_bms0_max_voltage_cell') -}}) {
        color: deepskyblue;
      }
    hui-sensor-entity-row:
      $ hui-generic-entity-row:
        $: |
          state-badge {
            display: none;
          }
          .info {
            padding-left: 0px !important;
          }

1 Like