-
-
Notifications
You must be signed in to change notification settings - Fork 53
Expand file tree
/
Copy pathseplos_bms_v3_ble.h
More file actions
406 lines (384 loc) · 20.4 KB
/
Copy pathseplos_bms_v3_ble.h
File metadata and controls
406 lines (384 loc) · 20.4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
#pragma once
#include "esphome/core/component.h"
#include "esphome/components/binary_sensor/binary_sensor.h"
#include "esphome/components/sensor/sensor.h"
#include "esphome/components/text_sensor/text_sensor.h"
#ifdef USE_ESP32
#include "esphome/components/ble_client/ble_client.h"
#include "esphome/components/esp32_ble_tracker/esp32_ble_tracker.h"
#include <esp_gattc_api.h>
#endif
namespace esphome::seplos_bms_v3_ble {
#ifdef USE_ESP32
namespace espbt = esphome::esp32_ble_tracker;
#endif
class SeplosBmsV3Ble;
class SeplosBmsV3BlePack {
public:
void set_parent(SeplosBmsV3Ble *parent) { parent_ = parent; }
void set_address(uint8_t address) { address_ = address; }
virtual void on_frame_data(const std::vector<uint8_t> &frame) = 0;
uint8_t get_address() const { return address_; }
protected:
friend SeplosBmsV3Ble;
SeplosBmsV3Ble *parent_;
uint8_t address_;
};
struct SeplosV3Command {
uint8_t device;
uint8_t function;
uint16_t reg_start;
uint16_t reg_count;
};
class SeplosBmsV3Ble :
#ifdef USE_ESP32
public esphome::ble_client::BLEClientNode,
#endif
public PollingComponent {
public:
#ifdef USE_ESP32
void gattc_event_handler(esp_gattc_cb_event_t event, esp_gatt_if_t gattc_if,
esp_ble_gattc_cb_param_t *param) override;
#endif
void dump_config() override;
void update() override;
float get_setup_priority() const override { return setup_priority::DATA; }
void set_charging_binary_sensor(binary_sensor::BinarySensor *charging_binary_sensor) {
charging_binary_sensor_ = charging_binary_sensor;
}
void set_discharging_binary_sensor(binary_sensor::BinarySensor *discharging_binary_sensor) {
discharging_binary_sensor_ = discharging_binary_sensor;
}
void set_online_status_binary_sensor(binary_sensor::BinarySensor *online_status_binary_sensor) {
online_status_binary_sensor_ = online_status_binary_sensor;
}
void set_voltage_protection_binary_sensor(binary_sensor::BinarySensor *voltage_protection_binary_sensor) {
voltage_protection_binary_sensor_ = voltage_protection_binary_sensor;
}
void set_temperature_protection_binary_sensor(binary_sensor::BinarySensor *temperature_protection_binary_sensor) {
temperature_protection_binary_sensor_ = temperature_protection_binary_sensor;
}
void set_current_protection_binary_sensor(binary_sensor::BinarySensor *current_protection_binary_sensor) {
current_protection_binary_sensor_ = current_protection_binary_sensor;
}
void set_system_fault_binary_sensor(binary_sensor::BinarySensor *system_fault_binary_sensor) {
system_fault_binary_sensor_ = system_fault_binary_sensor;
}
void set_total_voltage_sensor(sensor::Sensor *total_voltage_sensor) { total_voltage_sensor_ = total_voltage_sensor; }
void set_current_sensor(sensor::Sensor *current_sensor) { current_sensor_ = current_sensor; }
void set_power_sensor(sensor::Sensor *power_sensor) { power_sensor_ = power_sensor; }
void set_charging_power_sensor(sensor::Sensor *charging_power_sensor) {
charging_power_sensor_ = charging_power_sensor;
}
void set_discharging_power_sensor(sensor::Sensor *discharging_power_sensor) {
discharging_power_sensor_ = discharging_power_sensor;
}
void set_state_of_charge_sensor(sensor::Sensor *state_of_charge_sensor) {
state_of_charge_sensor_ = state_of_charge_sensor;
}
void set_charging_cycles_sensor(sensor::Sensor *charging_cycles_sensor) {
charging_cycles_sensor_ = charging_cycles_sensor;
}
void set_average_cell_temperature_sensor(sensor::Sensor *average_cell_temperature_sensor) {
average_cell_temperature_sensor_ = average_cell_temperature_sensor;
}
void set_pack_count_sensor(sensor::Sensor *pack_count_sensor) { pack_count_sensor_ = pack_count_sensor; }
void set_delta_voltage_sensor(sensor::Sensor *delta_voltage_sensor) { delta_voltage_sensor_ = delta_voltage_sensor; }
void set_problem_code_sensor(sensor::Sensor *problem_code_sensor) { problem_code_sensor_ = problem_code_sensor; }
void set_cycle_charge_sensor(sensor::Sensor *cycle_charge_sensor) { cycle_charge_sensor_ = cycle_charge_sensor; }
void set_cycle_capacity_sensor(sensor::Sensor *cycle_capacity_sensor) {
cycle_capacity_sensor_ = cycle_capacity_sensor;
}
void set_runtime_sensor(sensor::Sensor *runtime_sensor) { runtime_sensor_ = runtime_sensor; }
void set_state_of_health_sensor(sensor::Sensor *state_of_health_sensor) {
state_of_health_sensor_ = state_of_health_sensor;
}
void set_capacity_remaining_sensor(sensor::Sensor *capacity_remaining_sensor) {
capacity_remaining_sensor_ = capacity_remaining_sensor;
}
void set_total_capacity_sensor(sensor::Sensor *total_capacity_sensor) {
total_capacity_sensor_ = total_capacity_sensor;
}
void set_rated_capacity_sensor(sensor::Sensor *rated_capacity_sensor) {
rated_capacity_sensor_ = rated_capacity_sensor;
}
void set_ambient_temperature_sensor(sensor::Sensor *ambient_temperature_sensor) {
ambient_temperature_sensor_ = ambient_temperature_sensor;
}
void set_mosfet_temperature_sensor(sensor::Sensor *mosfet_temperature_sensor) {
mosfet_temperature_sensor_ = mosfet_temperature_sensor;
}
void set_min_cell_temperature_sensor(sensor::Sensor *min_cell_temperature_sensor) {
min_cell_temperature_sensor_ = min_cell_temperature_sensor;
}
void set_max_cell_temperature_sensor(sensor::Sensor *max_cell_temperature_sensor) {
max_cell_temperature_sensor_ = max_cell_temperature_sensor;
}
void set_min_temperature_cell_sensor(sensor::Sensor *min_temperature_cell_sensor) {
min_temperature_cell_sensor_ = min_temperature_cell_sensor;
}
void set_max_temperature_cell_sensor(sensor::Sensor *max_temperature_cell_sensor) {
max_temperature_cell_sensor_ = max_temperature_cell_sensor;
}
void set_min_pack_voltage_sensor(sensor::Sensor *min_pack_voltage_sensor) {
min_pack_voltage_sensor_ = min_pack_voltage_sensor;
}
void set_max_pack_voltage_sensor(sensor::Sensor *max_pack_voltage_sensor) {
max_pack_voltage_sensor_ = max_pack_voltage_sensor;
}
void set_min_pack_voltage_id_sensor(sensor::Sensor *min_pack_voltage_id_sensor) {
min_pack_voltage_id_sensor_ = min_pack_voltage_id_sensor;
}
void set_max_pack_voltage_id_sensor(sensor::Sensor *max_pack_voltage_id_sensor) {
max_pack_voltage_id_sensor_ = max_pack_voltage_id_sensor;
}
void set_system_state_code_sensor(sensor::Sensor *system_state_code_sensor) {
system_state_code_sensor_ = system_state_code_sensor;
}
void set_voltage_event_code_sensor(sensor::Sensor *voltage_event_code_sensor) {
voltage_event_code_sensor_ = voltage_event_code_sensor;
}
void set_temperature_event_code_sensor(sensor::Sensor *temperature_event_code_sensor) {
temperature_event_code_sensor_ = temperature_event_code_sensor;
}
void set_current_event_code_sensor(sensor::Sensor *current_event_code_sensor) {
current_event_code_sensor_ = current_event_code_sensor;
}
void set_max_discharge_current_sensor(sensor::Sensor *max_discharge_current_sensor) {
max_discharge_current_sensor_ = max_discharge_current_sensor;
}
void set_max_charge_current_sensor(sensor::Sensor *max_charge_current_sensor) {
max_charge_current_sensor_ = max_charge_current_sensor;
}
void set_inverter_protocol_sensor(sensor::Sensor *inverter_protocol_sensor) {
inverter_protocol_sensor_ = inverter_protocol_sensor;
}
void set_inverter_baud_rate_sensor(sensor::Sensor *inverter_baud_rate_sensor) {
inverter_baud_rate_sensor_ = inverter_baud_rate_sensor;
}
void set_inverter_protocol_pre_switch_sensor(sensor::Sensor *inverter_protocol_pre_switch_sensor) {
inverter_protocol_pre_switch_sensor_ = inverter_protocol_pre_switch_sensor;
}
void set_temperature_sensor_count_sensor(sensor::Sensor *temperature_sensor_count_sensor) {
temperature_sensor_count_sensor_ = temperature_sensor_count_sensor;
}
void set_cell_count_sensor(sensor::Sensor *cell_count_sensor) { cell_count_sensor_ = cell_count_sensor; }
void set_pack_overvoltage_recovery_voltage_sensor(sensor::Sensor *pack_overvoltage_recovery_voltage_sensor) {
pack_overvoltage_recovery_voltage_sensor_ = pack_overvoltage_recovery_voltage_sensor;
}
void set_pack_overvoltage_protection_voltage_sensor(sensor::Sensor *pack_overvoltage_protection_voltage_sensor) {
pack_overvoltage_protection_voltage_sensor_ = pack_overvoltage_protection_voltage_sensor;
}
void set_pack_undervoltage_recovery_voltage_sensor(sensor::Sensor *pack_undervoltage_recovery_voltage_sensor) {
pack_undervoltage_recovery_voltage_sensor_ = pack_undervoltage_recovery_voltage_sensor;
}
void set_pack_undervoltage_protection_voltage_sensor(sensor::Sensor *pack_undervoltage_protection_voltage_sensor) {
pack_undervoltage_protection_voltage_sensor_ = pack_undervoltage_protection_voltage_sensor;
}
void set_cell_overvoltage_recovery_voltage_sensor(sensor::Sensor *cell_overvoltage_recovery_voltage_sensor) {
cell_overvoltage_recovery_voltage_sensor_ = cell_overvoltage_recovery_voltage_sensor;
}
void set_cell_overvoltage_protection_voltage_sensor(sensor::Sensor *cell_overvoltage_protection_voltage_sensor) {
cell_overvoltage_protection_voltage_sensor_ = cell_overvoltage_protection_voltage_sensor;
}
void set_cell_undervoltage_recovery_voltage_sensor(sensor::Sensor *cell_undervoltage_recovery_voltage_sensor) {
cell_undervoltage_recovery_voltage_sensor_ = cell_undervoltage_recovery_voltage_sensor;
}
void set_cell_undervoltage_protection_voltage_sensor(sensor::Sensor *cell_undervoltage_protection_voltage_sensor) {
cell_undervoltage_protection_voltage_sensor_ = cell_undervoltage_protection_voltage_sensor;
}
void set_cell_voltage_difference_protection_sensor(sensor::Sensor *cell_voltage_difference_protection_sensor) {
cell_voltage_difference_protection_sensor_ = cell_voltage_difference_protection_sensor;
}
void set_charge_overcurrent_protection_sensor(sensor::Sensor *charge_overcurrent_protection_sensor) {
charge_overcurrent_protection_sensor_ = charge_overcurrent_protection_sensor;
}
void set_discharge_overcurrent_protection_sensor(sensor::Sensor *discharge_overcurrent_protection_sensor) {
discharge_overcurrent_protection_sensor_ = discharge_overcurrent_protection_sensor;
}
void set_charge_overtemperature_protection_sensor(sensor::Sensor *charge_overtemperature_protection_sensor) {
charge_overtemperature_protection_sensor_ = charge_overtemperature_protection_sensor;
}
void set_charge_low_temperature_alarm_sensor(sensor::Sensor *charge_low_temperature_alarm_sensor) {
charge_low_temperature_alarm_sensor_ = charge_low_temperature_alarm_sensor;
}
void set_discharge_overtemperature_protection_sensor(sensor::Sensor *discharge_overtemperature_protection_sensor) {
discharge_overtemperature_protection_sensor_ = discharge_overtemperature_protection_sensor;
}
void set_environment_undertemperature_protection_sensor(
sensor::Sensor *environment_undertemperature_protection_sensor) {
environment_undertemperature_protection_sensor_ = environment_undertemperature_protection_sensor;
}
void set_mosfet_overtemperature_protection_sensor(sensor::Sensor *mosfet_overtemperature_protection_sensor) {
mosfet_overtemperature_protection_sensor_ = mosfet_overtemperature_protection_sensor;
}
void set_balancing_start_voltage_sensor(sensor::Sensor *balancing_start_voltage_sensor) {
balancing_start_voltage_sensor_ = balancing_start_voltage_sensor;
}
void set_balancing_start_difference_sensor(sensor::Sensor *balancing_start_difference_sensor) {
balancing_start_difference_sensor_ = balancing_start_difference_sensor;
}
void set_low_state_of_charge_alarm_sensor(sensor::Sensor *low_state_of_charge_alarm_sensor) {
low_state_of_charge_alarm_sensor_ = low_state_of_charge_alarm_sensor;
}
void set_inverter_charge_current_limit_sensor(sensor::Sensor *inverter_charge_current_limit_sensor) {
inverter_charge_current_limit_sensor_ = inverter_charge_current_limit_sensor;
}
void set_inverter_discharge_current_limit_sensor(sensor::Sensor *inverter_discharge_current_limit_sensor) {
inverter_discharge_current_limit_sensor_ = inverter_discharge_current_limit_sensor;
}
void set_min_cell_voltage_sensor(sensor::Sensor *min_cell_voltage_sensor) {
min_cell_voltage_sensor_ = min_cell_voltage_sensor;
}
void set_max_cell_voltage_sensor(sensor::Sensor *max_cell_voltage_sensor) {
max_cell_voltage_sensor_ = max_cell_voltage_sensor;
}
void set_min_voltage_cell_sensor(sensor::Sensor *min_voltage_cell_sensor) {
min_voltage_cell_sensor_ = min_voltage_cell_sensor;
}
void set_max_voltage_cell_sensor(sensor::Sensor *max_voltage_cell_sensor) {
max_voltage_cell_sensor_ = max_voltage_cell_sensor;
}
void set_problem_text_sensor(text_sensor::TextSensor *problem_text_sensor) {
problem_text_sensor_ = problem_text_sensor;
}
void set_factory_name_text_sensor(text_sensor::TextSensor *factory_name_text_sensor) {
factory_name_text_sensor_ = factory_name_text_sensor;
}
void set_device_name_text_sensor(text_sensor::TextSensor *device_name_text_sensor) {
device_name_text_sensor_ = device_name_text_sensor;
}
void set_firmware_version_text_sensor(text_sensor::TextSensor *firmware_version_text_sensor) {
firmware_version_text_sensor_ = firmware_version_text_sensor;
}
void set_bms_serial_number_text_sensor(text_sensor::TextSensor *bms_serial_number_text_sensor) {
bms_serial_number_text_sensor_ = bms_serial_number_text_sensor;
}
void set_pack_serial_number_text_sensor(text_sensor::TextSensor *pack_serial_number_text_sensor) {
pack_serial_number_text_sensor_ = pack_serial_number_text_sensor;
}
void set_inverter_name_text_sensor(text_sensor::TextSensor *inverter_name_text_sensor) {
inverter_name_text_sensor_ = inverter_name_text_sensor;
}
void set_inverter_protocol_name_text_sensor(text_sensor::TextSensor *inverter_protocol_name_text_sensor) {
inverter_protocol_name_text_sensor_ = inverter_protocol_name_text_sensor;
}
void set_inverter_protocol_version_text_sensor(text_sensor::TextSensor *inverter_protocol_version_text_sensor) {
inverter_protocol_version_text_sensor_ = inverter_protocol_version_text_sensor;
}
void register_pack_component(SeplosBmsV3BlePack *pack_device) {
pack_devices_.push_back(pack_device);
// Note: Command queue will be built during setup/connection to include commands for registered packs
}
void assemble(const uint8_t *data, uint16_t length);
void decode(const std::vector<uint8_t> &data);
protected:
binary_sensor::BinarySensor *charging_binary_sensor_{nullptr};
binary_sensor::BinarySensor *discharging_binary_sensor_{nullptr};
binary_sensor::BinarySensor *online_status_binary_sensor_{nullptr};
binary_sensor::BinarySensor *voltage_protection_binary_sensor_{nullptr};
binary_sensor::BinarySensor *temperature_protection_binary_sensor_{nullptr};
binary_sensor::BinarySensor *current_protection_binary_sensor_{nullptr};
binary_sensor::BinarySensor *system_fault_binary_sensor_{nullptr};
sensor::Sensor *total_voltage_sensor_{nullptr};
sensor::Sensor *current_sensor_{nullptr};
sensor::Sensor *power_sensor_{nullptr};
sensor::Sensor *charging_power_sensor_{nullptr};
sensor::Sensor *discharging_power_sensor_{nullptr};
sensor::Sensor *state_of_charge_sensor_{nullptr};
sensor::Sensor *charging_cycles_sensor_{nullptr};
sensor::Sensor *average_cell_temperature_sensor_{nullptr};
sensor::Sensor *pack_count_sensor_{nullptr};
sensor::Sensor *delta_voltage_sensor_{nullptr};
sensor::Sensor *problem_code_sensor_{nullptr};
sensor::Sensor *cycle_charge_sensor_{nullptr};
sensor::Sensor *cycle_capacity_sensor_{nullptr};
sensor::Sensor *runtime_sensor_{nullptr};
sensor::Sensor *state_of_health_sensor_{nullptr};
sensor::Sensor *capacity_remaining_sensor_{nullptr};
sensor::Sensor *total_capacity_sensor_{nullptr};
sensor::Sensor *rated_capacity_sensor_{nullptr};
sensor::Sensor *ambient_temperature_sensor_{nullptr};
sensor::Sensor *mosfet_temperature_sensor_{nullptr};
sensor::Sensor *min_cell_temperature_sensor_{nullptr};
sensor::Sensor *max_cell_temperature_sensor_{nullptr};
sensor::Sensor *min_temperature_cell_sensor_{nullptr};
sensor::Sensor *max_temperature_cell_sensor_{nullptr};
sensor::Sensor *min_pack_voltage_sensor_{nullptr};
sensor::Sensor *max_pack_voltage_sensor_{nullptr};
sensor::Sensor *min_pack_voltage_id_sensor_{nullptr};
sensor::Sensor *max_pack_voltage_id_sensor_{nullptr};
sensor::Sensor *system_state_code_sensor_{nullptr};
sensor::Sensor *voltage_event_code_sensor_{nullptr};
sensor::Sensor *temperature_event_code_sensor_{nullptr};
sensor::Sensor *current_event_code_sensor_{nullptr};
sensor::Sensor *max_discharge_current_sensor_{nullptr};
sensor::Sensor *max_charge_current_sensor_{nullptr};
sensor::Sensor *inverter_protocol_sensor_{nullptr};
sensor::Sensor *inverter_baud_rate_sensor_{nullptr};
sensor::Sensor *inverter_protocol_pre_switch_sensor_{nullptr};
sensor::Sensor *temperature_sensor_count_sensor_{nullptr};
sensor::Sensor *cell_count_sensor_{nullptr};
sensor::Sensor *pack_overvoltage_recovery_voltage_sensor_{nullptr};
sensor::Sensor *pack_overvoltage_protection_voltage_sensor_{nullptr};
sensor::Sensor *pack_undervoltage_recovery_voltage_sensor_{nullptr};
sensor::Sensor *pack_undervoltage_protection_voltage_sensor_{nullptr};
sensor::Sensor *cell_overvoltage_recovery_voltage_sensor_{nullptr};
sensor::Sensor *cell_overvoltage_protection_voltage_sensor_{nullptr};
sensor::Sensor *cell_undervoltage_recovery_voltage_sensor_{nullptr};
sensor::Sensor *cell_undervoltage_protection_voltage_sensor_{nullptr};
sensor::Sensor *cell_voltage_difference_protection_sensor_{nullptr};
sensor::Sensor *charge_overcurrent_protection_sensor_{nullptr};
sensor::Sensor *discharge_overcurrent_protection_sensor_{nullptr};
sensor::Sensor *charge_overtemperature_protection_sensor_{nullptr};
sensor::Sensor *charge_low_temperature_alarm_sensor_{nullptr};
sensor::Sensor *discharge_overtemperature_protection_sensor_{nullptr};
sensor::Sensor *environment_undertemperature_protection_sensor_{nullptr};
sensor::Sensor *mosfet_overtemperature_protection_sensor_{nullptr};
sensor::Sensor *balancing_start_voltage_sensor_{nullptr};
sensor::Sensor *balancing_start_difference_sensor_{nullptr};
sensor::Sensor *low_state_of_charge_alarm_sensor_{nullptr};
sensor::Sensor *inverter_charge_current_limit_sensor_{nullptr};
sensor::Sensor *inverter_discharge_current_limit_sensor_{nullptr};
sensor::Sensor *min_cell_voltage_sensor_{nullptr};
sensor::Sensor *max_cell_voltage_sensor_{nullptr};
sensor::Sensor *min_voltage_cell_sensor_{nullptr};
sensor::Sensor *max_voltage_cell_sensor_{nullptr};
text_sensor::TextSensor *problem_text_sensor_{nullptr};
text_sensor::TextSensor *factory_name_text_sensor_{nullptr};
text_sensor::TextSensor *device_name_text_sensor_{nullptr};
text_sensor::TextSensor *firmware_version_text_sensor_{nullptr};
text_sensor::TextSensor *bms_serial_number_text_sensor_{nullptr};
text_sensor::TextSensor *pack_serial_number_text_sensor_{nullptr};
text_sensor::TextSensor *inverter_name_text_sensor_{nullptr};
text_sensor::TextSensor *inverter_protocol_name_text_sensor_{nullptr};
text_sensor::TextSensor *inverter_protocol_version_text_sensor_{nullptr};
std::vector<uint8_t> frame_buffer_;
#ifdef USE_ESP32
uint16_t char_notify_handle_{0};
uint16_t char_command_handle_{0};
#endif
uint8_t next_command_{0};
uint16_t pending_reg_start_{0};
uint8_t pack_count_{0};
std::vector<SeplosBmsV3BlePack *> pack_devices_;
std::vector<SeplosV3Command> dynamic_command_queue_;
std::vector<uint8_t> build_modbus_payload_(const SeplosV3Command &cmd);
uint16_t crc16_(const uint8_t *data, uint16_t length);
void publish_state_(binary_sensor::BinarySensor *binary_sensor, const bool &state);
void publish_state_(sensor::Sensor *sensor, float value);
void publish_state_(text_sensor::TextSensor *text_sensor, const std::string &state);
#ifdef USE_ESP32
bool send_command_(uint8_t function, const std::vector<uint8_t> &payload);
#endif
void decode_eia_data_(const std::vector<uint8_t> &data);
void decode_eib_data_(const std::vector<uint8_t> &data);
void decode_eic_data_(const std::vector<uint8_t> &data);
void decode_via_data_(const std::vector<uint8_t> &data);
void decode_pct_data_(const std::vector<uint8_t> &data);
void decode_sfa_data_(const std::vector<uint8_t> &data);
void decode_spa1_data_(const std::vector<uint8_t> &data);
void decode_spa2_data_(const std::vector<uint8_t> &data);
void build_dynamic_command_queue_();
};
} // namespace esphome::seplos_bms_v3_ble