ESPHome component to monitor a DALY Battery Management System via BLE
- Daly Smart BMS K Series 100A advertised via BLE as
DL-xxxxxxxxxxxx
(e.g.DL-40D63C3223A2
) orDL-Fxxxxxxxxxxxx
(e.g.DL-F28BBED000824
) where the MAC address is thexxxxxxxxxxxx
- Probably all models of the Daly Smart BMS H/K/M/S series (start of frame:
0xD2
, Modbus frames)
- Daly Smart BMS J/T/A/U/W/ND series (start of frame:
0xA5
)
If you prefer a wired connection (UART/RS485) over Bluetooth, consider using the alternative project by @patagonaa: https://github.com/patagonaa/esphome-daly-hkms-bms
- ESPHome 2024.6.0 or higher
- Generic ESP32 board
You can install this component with ESPHome external components feature like this:
external_components:
- source: github://syssi/esphome-daly-bms@main
or just use the esp32-ble-example.yaml
as proof of concept:
# Install esphome
pip3 install esphome
# Clone this external component
git clone https://github.com/syssi/esphome-daly-bms.git
cd esphome-daly-bms
# Create a secrets.yaml containing some setup specific secrets
cat > secrets.yaml <<EOF
bms0_mac_address: MY_BMS_MAC_ADDRESS
wifi_ssid: MY_WIFI_SSID
wifi_password: MY_WIFI_PASSWORD
mqtt_host: MY_MQTT_HOST
mqtt_username: MY_MQTT_USERNAME
mqtt_password: MY_MQTT_PASSWORD
EOF
# Validate the configuration, create a binary, upload it, and start logs
esphome run esp32-ble-example.yaml
[D][sensor:094]: 'daly-bms-ble cell voltage 1': Sending state 3.43800 V with 3 decimals of accuracy
[D][sensor:094]: 'daly-bms-ble cell voltage 2': Sending state 3.43300 V with 3 decimals of accuracy
[D][sensor:094]: 'daly-bms-ble cell voltage 3': Sending state 3.41700 V with 3 decimals of accuracy
[D][sensor:094]: 'daly-bms-ble cell voltage 4': Sending state 3.54300 V with 3 decimals of accuracy
[D][sensor:094]: 'daly-bms-ble cell voltage 5': Sending state 3.33900 V with 3 decimals of accuracy
[D][sensor:094]: 'daly-bms-ble cell voltage 6': Sending state 3.33900 V with 3 decimals of accuracy
[D][sensor:094]: 'daly-bms-ble cell voltage 7': Sending state 3.34000 V with 3 decimals of accuracy
[D][sensor:094]: 'daly-bms-ble cell voltage 8': Sending state 3.33900 V with 3 decimals of accuracy
[D][sensor:094]: 'daly-bms-ble min cell voltage': Sending state 3.33900 V with 3 decimals of accuracy
[D][sensor:094]: 'daly-bms-ble max cell voltage': Sending state 3.54300 V with 3 decimals of accuracy
[D][sensor:094]: 'daly-bms-ble max voltage cell': Sending state 4.00000 with 0 decimals of accuracy
[D][sensor:094]: 'daly-bms-ble min voltage cell': Sending state 5.00000 with 0 decimals of accuracy
[D][sensor:094]: 'daly-bms-ble average cell voltage': Sending state 3.39850 V with 4 decimals of accuracy
[D][sensor:094]: 'daly-bms-ble temperature sensors': Sending state 1.00000 with 0 decimals of accuracy
[D][sensor:094]: 'daly-bms-ble temperature 1': Sending state 21.00000 °C with 1 decimals of accuracy
[D][sensor:094]: 'daly-bms-ble total voltage': Sending state 27.10000 V with 2 decimals of accuracy
[D][sensor:094]: 'daly-bms-ble current': Sending state 0.00000 A with 2 decimals of accuracy
[D][sensor:094]: 'daly-bms-ble state of charge': Sending state 100.00000 % with 0 decimals of accuracy
[I][daly_bms_ble:257]: Status: Idle
[D][sensor:094]: 'daly-bms-ble capacity remaining': Sending state 25.00000 Ah with 1 decimals of accuracy
[D][sensor:094]: 'daly-bms-ble cell count': Sending state 8.00000 with 0 decimals of accuracy
[D][sensor:094]: 'daly-bms-ble temperature sensors': Sending state 1.00000 with 0 decimals of accuracy
[D][sensor:094]: 'daly-bms-ble charging cycles': Sending state 0.00000 with 0 decimals of accuracy
[11:50:17][D][binary_sensor:036]: 'daly-bms-ble balancing': Sending state ON
[11:50:17][D][binary_sensor:036]: 'daly-bms-ble charging': Sending state OFF
[11:50:17][D][binary_sensor:036]: 'daly-bms-ble discharging': Sending state ON
[D][sensor:094]: 'daly-bms-ble delta cell voltage': Sending state 0.204 V with 3 decimals of accuracy
[D][sensor:094]: 'daly-bms-ble power': Sending state 0.00000 W with 0 decimals of accuracy
[D][sensor:094]: 'daly-bms-ble charging power': Sending state 0.00000 W with 0 decimals of accuracy
[D][sensor:094]: 'daly-bms-ble discharging power': Sending state 0.00000 W with 0 decimals of accuracy
[W][component:237]: Component interval took a long time for an operation (298 ms).
[W][component:238]: Components should block for at most 30 ms.
Issue: Enabling WiFi/Cloud support on Daly BMS modules completely disables Bluetooth functionality, preventing communication with this ESPHome component.
Important: Once cloud connectivity is enabled on your Daly BMS, the Bluetooth interface becomes unavailable. To use this component, you must reset the BMS module to disconnect it from the cloud and re-enable Bluetooth functionality.
Solution: Reset the BLE module to disable cloud support and restore Bluetooth connectivity (see troubleshooting section below).
If you have previously enabled WiFi/Cloud support on your Daly BMS and need to restore Bluetooth functionality:
- Open the official Daly mobile app in cloud mode
- Make a long press on your device in the device list
- Select "Delete" from the menu options
- Confirm the deletion to remove the device from cloud connectivity
- After deletion, Bluetooth connectivity will be restored and you can connect anytime with BT
If this component doesn't work out of the box for your device please update your configuration to increase the log level to see details about the BLE communication and incoming traffic:
logger:
level: VERY_VERBOSE
logs:
esp32_ble: DEBUG
esp32_ble_tracker: VERY_VERBOSE
daly_bms_ble: VERY_VERBOSE
scheduler: DEBUG
component: DEBUG
sensor: DEBUG
mqtt: INFO
mqtt.idf: INFO
mqtt.component: INFO
mqtt.sensor: INFO
mqtt.switch: INFO
api.service: INFO
api: INFO
api: INFO
- https://github.com/roccotsi2/esp32-smart-bms-simulation
- https://github.com/fl4p/batmon-ha/blob/master/bmslib/models/daly2.py
- https://github.com/patman15/BMS_BLE-HA/blob/main/custom_components/bms_ble/plugins/daly_bms.py
- https://github.com/patman15/BMS_BLE-HA/blob/main/tests/test_daly_bms.py
- https://esphome.io/components/sensor/daly_bms.html
- https://diysolarforum.com/threads/a-new-uart-protocol-for-a-daly-smart-150a-bms.86306/