Daly BMS 传感器
daly_bms 传感器平台允许您在 ESPHome 中使用 Daly Smart BMS(更多信息)。
BMS 通过 UART 通信。
组件/集线器
Section titled “组件/集线器”# 示例配置条目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 的所有选项。
控制 BMS
Section titled “控制 BMS”目前 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%"UART 连接
Section titled “UART 连接”将 BMS 的 RX 连接到 ESP 开发板的 TX,将 BMS 的 TX 连接到 ESP 开发板的 RX
3.3v 警告: 某些 BMS 的 3.3v 无法提供大电流,可能无法正常为 ESP 供电。如果您遇到 WIFI 连接问题或类似情况,请尝试使用其他电源。Daly 连接器上有 12-15v 可用,通过合适的降压转换器可以正常为 ESP 供电。
在 ESP32 上(未在 ESP8266 上测试),如果您遇到数据丢失(如温度 1/2),可能是由于 UART 缓冲区大小造成的。将以下内容添加到您的配置中,将缓冲区从默认的 256 增加到 512。
uart: ... rx_buffer_size: 512