跳转到内容

Daly BMS 传感器

daly_bms 传感器平台允许您在 ESPHome 中使用 Daly Smart BMS(更多信息)。

BMS 通过 UART 通信。

# 示例配置条目
daly_bms:
update_interval: 20s
  • update_interval (可选, 时间): 数据请求之间的延迟。
  • address (可选, 整数): 要使用的地址,默认为 0x80

读取 BMS 数据的传感器平台

sensor:
- platform: daly_bms
voltage:
name: "电池电压"
current:
name: "电池电流"
battery_level:
name: "电池电量"
max_cell_voltage:
name: "最高单体电压"
max_cell_voltage_number:
name: "最高电压单体编号"
min_cell_voltage:
name: "最低单体电压"
min_cell_voltage_number:
name: "最低电压单体编号"
max_temperature:
name: "最高温度"
max_temperature_probe_number:
name: "最高温度探头编号"
min_temperature:
name: "最低温度"
min_temperature_probe_number:
name: "最低温度探头编号"
remaining_capacity:
name: "剩余容量"
cells_number:
name: "单体数量"
temperature_1:
name: "温度 1"
temperature_2:
name: "温度 2"
cell_1_voltage:
name: "单体 1 电压"
cell_2_voltage:
name: "单体 2 电压"
cell_3_voltage:
name: "单体 3 电压"
cell_4_voltage:
name: "单体 4 电压"
  • voltage (可选): 连接到 Daly BMS 的电池组电压。 来自 Sensor 的所有选项。

  • current (可选): 流经 BMS 的电流(电池输入或输出)。 来自 Sensor 的所有选项。

  • battery_level (可选): 电池电量百分比 (SoC)。 来自 Sensor 的所有选项。

  • max_cell_voltage (可选): 电池中电压最高的单体。 来自 Sensor 的所有选项。

  • max_cell_voltage_number (可选): 电池中电压最高单体的编号。 来自 Sensor 的所有选项。

  • min_cell_voltage (可选): 电池中电压最低的单体。 来自 Sensor 的所有选项。

  • min_cell_voltage_number (可选): 电池中电压最低单体的编号。 来自 Sensor 的所有选项。

  • max_temperature (可选): 温度传感器测得的最高温度。 来自 Sensor 的所有选项。

  • max_temperature_probe_number (可选): 测得最高温度的传感器编号。 来自 Sensor 的所有选项。

  • min_temperature (可选): 温度传感器测得的最低温度。 来自 Sensor 的所有选项。

  • min_temperature_probe_number (可选): 测得最低温度的传感器编号。 来自 Sensor 的所有选项。

  • remaining_capacity (可选): 电池剩余容量,单位为 Ah。 来自 Sensor 的所有选项。

  • cells_number (可选): 电池组中串联的单体数量。 来自 Sensor 的所有选项。

  • temperature_1 (可选): 第一个温度传感器。 来自 Sensor 的所有选项。

  • temperature_2 (可选): 第二个温度传感器。 来自 Sensor 的所有选项。

  • cell_1_voltage (可选): 编号为 1 的单体电压。单体编号可以从 1 到 16。 来自 Sensor 的所有选项。

指示 BMS 状态的文本传感器。

text_sensor:
- platform: daly_bms
status:
name: "BMS 状态"
  • status (可选): BMS 状态(充电中、放电中、静止)。 来自 Text Sensor 的所有选项。

指示 MOS 状态的二值传感器。

binary_sensor:
- platform: daly_bms
charging_mos_enabled:
name: "充电 MOS"
discharging_mos_enabled:
name: "放电 MOS"
  • charging_mos_enabled (可选): BMS 充电 MOS 状态,用于启用电池充电。 来自 Binary Sensor 的所有选项。

  • discharging_mos_enabled (可选): BMS 放电 MOS 状态,用于启用负载。 来自 Binary Sensor 的所有选项。

目前 Daly 传感器平台不支持控制您的 BMS,但您可以使用 uart.write 做一些操作

首先,您需要为充电和放电 MOS 设置二值传感器

binary_sensor:
- platform: daly_bms
charging_mos_enabled:
name: "Daly 充电 MOS"
id: bin_daly_chg_mos # 二值 MOS 传感器必须有 ID 才能与开关一起使用
internal: True # 但您可以将其设为内部以避免重复
discharging_mos_enabled:
name: "Daly 放电 MOS"
id: bin_daly_dischg_mos # 二值 MOS 传感器必须有 ID 才能与开关一起使用
internal: True # 但您可以将其设为内部以避免重复

然后您可以添加开关

switch:
- platform: template
name: "Daly 充电 MOS"
lambda: |-
if (id(bin_daly_chg_mos).state) {
return true;
} else {
return false;
}
turn_on_action:
- uart.write:
data: [0xA5, 0x40, 0xDA, 0x08, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC8]
- logger.log:
format: "发送命令到 Daly: 设置充电 MOS 开启"
turn_off_action:
- uart.write:
data: [0xA5, 0x40, 0xDA, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC7]
- logger.log:
format: "发送命令到 Daly: 设置充电 MOS 关闭"
- platform: template
name: "Daly 放电 MOS"
lambda: |-
if (id(bin_daly_dischg_mos).state) {
return true;
} else {
return false;
}
turn_on_action:
- uart.write:
data: [0xA5, 0x40, 0xD9, 0x08, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC7]
- logger.log:
format: "发送命令到 Daly: 设置放电 MOS 开启"
turn_off_action:
- uart.write:
data: [0xA5, 0x40, 0xD9, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC6]
- logger.log:
format: "发送命令到 Daly: 设置放电 MOS 关闭"

您还可以添加选择器来更改电池电量

select:
- platform: template
name: "Daly 电池电量设置"
optimistic: True
options:
- 100%
- 75%
- 50%
- 25%
- 0%
initial_option: 100%
set_action:
then:
- if:
condition:
lambda: 'return x == "100%";'
then:
- uart.write:
data: [0xA5, 0x40, 0x21, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xE8, 0xF9]
- logger.log:
format: "发送命令到 Daly: 设置 SOC 为 100%"
else:
- if:
condition:
lambda: 'return x == "75%";'
then:
- uart.write:
data: [0xA5, 0x40, 0x21, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xEE, 0xFE]
- logger.log:
format: "发送命令到 Daly: 设置 SOC 为 75%"
else:
- if:
condition:
lambda: 'return x == "50%";'
then:
- uart.write:
data: [0xA5, 0x40, 0x21, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xF4, 0x03]
- logger.log:
format: "发送命令到 Daly: 设置 SOC 为 50%"
else:
- if:
condition:
lambda: 'return x == "25%";'
then:
- uart.write:
data: [0xA5, 0x40, 0x21, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFA, 0x08]
- logger.log:
format: "发送命令到 Daly: 设置 SOC 为 25%"
else:
- if:
condition:
lambda: 'return x == "0%";'
then:
- uart.write:
data: [0xA5, 0x40, 0x21, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0E]
- logger.log:
format: "发送命令到 Daly: 设置 SOC 为 0%"

将 BMS 的 RX 连接到 ESP 开发板的 TX,将 BMS 的 TX 连接到 ESP 开发板的 RX

UART 引脚排列。

3.3v 警告: 某些 BMS 的 3.3v 无法提供大电流,可能无法正常为 ESP 供电。如果您遇到 WIFI 连接问题或类似情况,请尝试使用其他电源。Daly 连接器上有 12-15v 可用,通过合适的降压转换器可以正常为 ESP 供电。

在 ESP32 上(未在 ESP8266 上测试),如果您遇到数据丢失(如温度 1/2),可能是由于 UART 缓冲区大小造成的。将以下内容添加到您的配置中,将缓冲区从默认的 256 增加到 512。

uart:
...
rx_buffer_size: 512