8 static const char *
const TAG =
"daly_bms";
10 static const uint8_t DALY_FRAME_SIZE = 13;
11 static const uint8_t DALY_TEMPERATURE_OFFSET = 40;
12 static const uint16_t DALY_CURRENT_OFFSET = 30000;
14 static const uint8_t DALY_REQUEST_BATTERY_LEVEL = 0x90;
15 static const uint8_t DALY_REQUEST_MIN_MAX_VOLTAGE = 0x91;
16 static const uint8_t DALY_REQUEST_MIN_MAX_TEMPERATURE = 0x92;
17 static const uint8_t DALY_REQUEST_MOS = 0x93;
18 static const uint8_t DALY_REQUEST_STATUS = 0x94;
19 static const uint8_t DALY_REQUEST_CELL_VOLTAGE = 0x95;
20 static const uint8_t DALY_REQUEST_TEMPERATURE = 0x96;
25 ESP_LOGCONFIG(TAG,
"Daly BMS:");
38 std::vector<uint8_t> get_battery_level_data;
40 if (available_data >= DALY_FRAME_SIZE) {
41 get_battery_level_data.resize(available_data);
42 this->
read_array(get_battery_level_data.data(), available_data);
50 uint8_t request_message[DALY_FRAME_SIZE];
52 request_message[0] = 0xA5;
53 request_message[1] =
addr_;
54 request_message[2] = data_id;
55 request_message[3] = 0x08;
56 request_message[4] = 0x00;
57 request_message[5] = 0x00;
58 request_message[6] = 0x00;
59 request_message[7] = 0x00;
60 request_message[8] = 0x00;
61 request_message[9] = 0x00;
62 request_message[10] = 0x00;
63 request_message[11] = 0x00;
64 request_message[12] = (uint8_t) (request_message[0] + request_message[1] + request_message[2] +
67 this->
write_array(request_message,
sizeof(request_message));
72 auto it = data.begin();
74 while ((it = std::find(it, data.end(), 0xA5)) != data.end()) {
75 if (data.end() - it >= DALY_FRAME_SIZE && it[1] == 0x01) {
78 for (
int i = 0; i < 12; i++) {
83 if (checksum == it[12]) {
85 case DALY_REQUEST_BATTERY_LEVEL:
97 case DALY_REQUEST_MIN_MAX_VOLTAGE:
112 case DALY_REQUEST_MIN_MAX_TEMPERATURE:
127 case DALY_REQUEST_MOS:
154 case DALY_REQUEST_STATUS:
160 case DALY_REQUEST_TEMPERATURE:
171 case DALY_REQUEST_CELL_VOLTAGE:
240 std::advance(it, DALY_FRAME_SIZE);
sensor::Sensor * cell_15_voltage_
sensor::Sensor * min_temperature_probe_number_
const float DATA
For components that import data from directly connected sensors like DHT.
sensor::Sensor * max_cell_voltage_number_
optional< std::array< uint8_t, N > > read_array()
void write_array(const uint8_t *data, size_t len)
sensor::Sensor * remaining_capacity_
sensor::Sensor * temperature_2_sensor_
sensor::Sensor * temperature_1_sensor_
sensor::Sensor * current_sensor_
constexpr uint32_t encode_uint32(uint8_t byte1, uint8_t byte2, uint8_t byte3, uint8_t byte4)
Encode a 32-bit value given four bytes in most to least significant byte order.
sensor::Sensor * min_cell_voltage_
void dump_config() override
void publish_state(const std::string &state)
binary_sensor::BinarySensor * discharging_mos_enabled_
sensor::Sensor * cell_5_voltage_
sensor::Sensor * min_cell_voltage_number_
sensor::Sensor * cell_6_voltage_
sensor::Sensor * cell_8_voltage_
sensor::Sensor * cell_11_voltage_
void request_data_(uint8_t data_id)
sensor::Sensor * cell_10_voltage_
sensor::Sensor * cell_16_voltage_
void check_uart_settings(uint32_t baud_rate, uint8_t stop_bits=1, UARTParityOptions parity=UART_CONFIG_PARITY_NONE, uint8_t data_bits=8)
Check that the configuration of the UART bus matches the provided values and otherwise print a warnin...
text_sensor::TextSensor * status_text_sensor_
sensor::Sensor * voltage_sensor_
void decode_data_(std::vector< uint8_t > data)
sensor::Sensor * cell_4_voltage_
sensor::Sensor * min_temperature_
void publish_state(float state)
Publish a new state to the front-end.
sensor::Sensor * max_temperature_probe_number_
sensor::Sensor * cell_3_voltage_
sensor::Sensor * max_cell_voltage_
sensor::Sensor * battery_level_sensor_
binary_sensor::BinarySensor * charging_mos_enabled_
constexpr uint16_t encode_uint16(uint8_t msb, uint8_t lsb)
Encode a 16-bit value given the most and least significant byte.
void publish_state(bool state)
Publish a new state to the front-end.
sensor::Sensor * cell_9_voltage_
sensor::Sensor * cell_2_voltage_
sensor::Sensor * cell_13_voltage_
sensor::Sensor * cell_14_voltage_
sensor::Sensor * cells_number_
float get_setup_priority() const override
sensor::Sensor * cell_12_voltage_
sensor::Sensor * max_temperature_
sensor::Sensor * cell_7_voltage_
sensor::Sensor * cell_1_voltage_