diy solar

diy solar

Bluetooth extender for JK BMS

I remember it quite a challenge to get it all working. I bought the M5Stack ESP32S3 device. I am doing all my development on the mac but if you install esphome using python and get this version:
Code:
Downloads$ esphome version
Version: 2023.4.1

This is my yml config file

Code:
# Modified by octal-ip to support MQTT and an external active balancer.
# Based on the excellent work of Sebastian Muszynski: https://github.com/syssi/esphome-jk-bms
substitutions:
  name: jk-bms
  device_description: "Monitor and control a JK-BMS via bluetooth"
  mac_address: C8:47:8C:EC:xx:xx
  protocol_version: JK02_32S

esphome:
  name: ${name}
  comment: ${device_description}
  project:
    name: "syssi.esphome-jk-bms"
    version: 1.4.0

esp32:
  board: esp32-s3-devkitc-1
  variant: esp32s3
  framework:
    type: arduino
    #version: 2.0.3
    #platform_version: 5.1.1
    #type: esp-idf
    #platform_version: 4.4.0
    #sdkconfig_options:
        #CONFIG_BT_BLE_42_FEATURES_SUPPORTED: y

external_components:
  - source: github://syssi/esphome-jk-bms@main

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

ota:
logger:
  level: DEBUG
api:

mqtt:
  discovery: false
  will_message:
  birth_message:
  broker: !secret mqtt_host
  username: !secret mqtt_username
  password: !secret mqtt_password
  topic_prefix: !secret mqtt_topic
  id: jk_bms
  log_topic:
    topic: !secret mqtt_topic
    level: WARN

esp32_ble_tracker:

ble_client:
  - mac_address: ${mac_address}
    id: client0

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

#binary_sensor:
#  - platform: jk_bms_ble
#    balancing:
#      name: "balancing"
      
binary_sensor:
  - platform: jk_bms_ble
    balancing:
      name: "${name} balancing"
    charging:
      name: "${name} charging"
    discharging:
      name: "${name} discharging"
    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"
      
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"
    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"
    power_tube_temperature:
      name: "${name} power tube temperature"
    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"

text_sensor:
  - platform: jk_bms_ble
    errors:
      name: "${name} errors"
    total_runtime_formatted:
      name: "${name} total runtime formatted"
      

#text_sensor:
#  - platform: ble_scanner
#    name: "BLE Devices Scanner"
      
switch:
  - platform: jk_bms_ble
    charging:
      name: "${name} charging"
    discharging:
      name: "${name} discharging"
    balancer:
      name: "${name} balancer"
    emergency:
      name: "${name} emergency"
    disable_temperature_sensors:
      name: "${name} disable temperature sensors"
    display_always_on:
      name: "${name} display always on"

  - platform: ble_client
    ble_client_id: client0
    name: "${name} enable bluetooth connection"
    
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"

The major issue was playing around with the following config to get it to compile and run.

Code:
esp32:
  board: esp32-s3-devkitc-1
  variant: esp32s3
  framework:
    type: arduino
    #version: 2.0.3
    #platform_version: 5.1.1
    #type: esp-idf
    #platform_version: 4.4.0
    #sdkconfig_options:
        #CONFIG_BT_BLE_42_FEATURES_SUPPORTED: y
 
I had the need, extend Bluetooth of JK BMS to be available in HomeAssisntant easy, cheap!

HA has connected USB Bluetooth with antenna using USB extender. https://www.aliexpress.com/item/100...817955!sea!HU!0!AB&curPageLogUid=nHKQA5B59bTy

I installed Batmon https://github.com/fl4p/batmon-ha on HA.

How to JK BMS
Open the JK BMs and you will see the BT. there gently clean the surface and solder ~22cm long thin cable (size does not matter ) to the end where is end of antenna, basically extend antenna to exterior. BMS case is metalic..so ..
You will notice that the BMS case has next to BT 5 small holes, so not need to drill the case, this is why you should use thin cable. For me it made the trick 3 walls.. stable BT signal, long distance.
1699720799845.png

1699721036857.png

I am building now dashboards ( I have 3 BMS 2 are Daly BMS )

1699720837248.png

you can see all details same as in JK mobile app..

1699720898920.png


You can build all kind of automation. I se it for safety smoke detector ( in HA ) is detecting smoke the I switch off BMS charge and discharge port among many other ..

Hope it helps
 

Attachments

  • JKBMS BT antenna1.jpg
    JKBMS BT antenna1.jpg
    571.3 KB · Views: 11
Back
Top