substitutions: name: esphome-web-39b3f0 device_description: "Monitor and control a Xiaoxiang Battery Management System (JBD-BMS) via BLE" external_components_source: github://syssi/esphome-jbd-bms@main mac_address: A4:C1:37:00:86:5A esphome: name: ${name} comment: ${device_description} min_version: 2024.6.0 project: name: "syssi.esphome-jbd-bms" version: 2.1.0 esp32: board: esp32dev framework: type: esp-idf external_components: - source: ${external_components_source} refresh: 0s wifi: ssid: !secret wifi_ssid password: !secret wifi_password ota: platform: esphome logger: level: DEBUG # If you use Home Assistant please remove this `mqtt` section and uncomment the `api` component! # The native API has many advantages over MQTT: https://esphome.io/components/api.html#advantages-over-mqtt #mqtt: # broker: !secret mqtt_host # username: !secret mqtt_username # password: !secret mqtt_password # id: mqtt_client # api: esp32_ble_tracker: scan_parameters: active: false ble_client: - id: client0 mac_address: ${mac_address} jbd_bms_ble: - id: bms0 ble_client_id: client0 # Some Liontron BMS models require an update interval of less than 8s update_interval: 2s button: - platform: jbd_bms_ble jbd_bms_ble_id: bms0 retrieve_hardware_version: name: "${name} retrieve hardware version" force_soc_reset: name: "${name} force soc reset" binary_sensor: - platform: jbd_bms_ble jbd_bms_ble_id: bms0 balancing: name: "${name} balancing" charging: name: "${name} charging" discharging: name: "${name} discharging" online_status: name: "${name} online status" sensor: - platform: jbd_bms_ble jbd_bms_ble_id: bms0 battery_strings: name: "${name} battery strings" current: name: "${name} current" power: name: "${name} power" charging_power: name: "${name} charging power" discharging_power: name: "${name} discharging power" state_of_charge: name: "${name} state of charge" nominal_capacity: name: "${name} nominal capacity" charging_cycles: name: "${name} charging cycles" capacity_remaining: name: "${name} capacity remaining" battery_cycle_capacity: name: "${name} battery cycle capacity" total_voltage: name: "${name} total voltage" average_cell_voltage: name: "${name} average cell voltage" delta_cell_voltage: name: "${name} delta cell voltage" 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" temperature_1: name: "${name} temperature 1" temperature_2: name: "${name} temperature 2" temperature_3: name: "${name} temperature 3" temperature_4: name: "${name} temperature 4" temperature_5: name: "${name} temperature 5" temperature_6: name: "${name} temperature 6" 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_voltage_25: name: "${name} cell voltage 25" cell_voltage_26: name: "${name} cell voltage 26" cell_voltage_27: name: "${name} cell voltage 27" cell_voltage_28: name: "${name} cell voltage 28" cell_voltage_29: name: "${name} cell voltage 29" cell_voltage_30: name: "${name} cell voltage 30" cell_voltage_31: name: "${name} cell voltage 31" cell_voltage_32: name: "${name} cell voltage 32" operation_status_bitmask: name: "${name} operation status bitmask" errors_bitmask: name: "${name} errors bitmask" balancer_status_bitmask: name: "${name} balancer status bitmask" software_version: name: "${name} software version" short_circuit_error_count: name: "${name} short circuit error count" charge_overcurrent_error_count: name: "${name} charge overcurrent error count" discharge_overcurrent_error_count: name: "${name} discharge overcurrent error count" cell_overvoltage_error_count: name: "${name} cell overvoltage error count" cell_undervoltage_error_count: name: "${name} cell undervoltage error count" charge_overtemperature_error_count: name: "${name} charge overtemperature error count" charge_undertemperature_error_count: name: "${name} charge undertemperature error count" discharge_overtemperature_error_count: name: "${name} discharge overtemperature error count" discharge_undertemperature_error_count: name: "${name} discharge undertemperature error count" battery_overvoltage_error_count: name: "${name} battery overvoltage error count" battery_undervoltage_error_count: name: "${name} battery undervoltage error count" text_sensor: - platform: jbd_bms_ble jbd_bms_ble_id: bms0 errors: name: "${name} errors" operation_status: name: "${name} operation status" device_model: name: "${name} device model" select: - platform: jbd_bms_ble jbd_bms_ble_id: bms0 read_eeprom_register: name: "${name} read eeprom register" id: read_eeprom_register0 optionsmap: 0xAA: "Error Counts" switch: - platform: ble_client ble_client_id: client0 name: "${name} enable bluetooth connection" - platform: jbd_bms_ble jbd_bms_ble_id: bms0 charging: name: "${name} charging" discharging: name: "${name} discharging" # Uncomment this section if you want to update the error count sensors periodically # # interval: # - interval: 30min # then: # - select.set: # id: read_eeprom_register0 # option: "Error Counts"