1
0
mirror of https://github.com/esphome/esphome.git synced 2025-03-20 09:38:18 +00:00

94 lines
2.3 KiB
C++

#pragma once
#include "esphome/core/component.h"
#include "esphome/core/defines.h"
#ifdef USE_SENSOR
#include "esphome/components/sensor/sensor.h"
#endif
#ifdef USE_TEXT_SENSOR
#include "esphome/components/text_sensor/text_sensor.h"
#endif
#ifdef USE_BINARY_SENSOR
#include "esphome/components/binary_sensor/binary_sensor.h"
#endif
#include "esphome/components/uart/uart.h"
#include <vector>
namespace esphome {
namespace daly_bms {
class DalyBmsComponent : public PollingComponent, public uart::UARTDevice {
public:
DalyBmsComponent() = default;
#ifdef USE_SENSOR
SUB_SENSOR(voltage)
SUB_SENSOR(current)
SUB_SENSOR(battery_level)
SUB_SENSOR(max_cell_voltage)
SUB_SENSOR(max_cell_voltage_number)
SUB_SENSOR(min_cell_voltage)
SUB_SENSOR(min_cell_voltage_number)
SUB_SENSOR(max_temperature)
SUB_SENSOR(max_temperature_probe_number)
SUB_SENSOR(min_temperature)
SUB_SENSOR(min_temperature_probe_number)
SUB_SENSOR(remaining_capacity)
SUB_SENSOR(cells_number)
SUB_SENSOR(temperature_1)
SUB_SENSOR(temperature_2)
SUB_SENSOR(cell_1_voltage)
SUB_SENSOR(cell_2_voltage)
SUB_SENSOR(cell_3_voltage)
SUB_SENSOR(cell_4_voltage)
SUB_SENSOR(cell_5_voltage)
SUB_SENSOR(cell_6_voltage)
SUB_SENSOR(cell_7_voltage)
SUB_SENSOR(cell_8_voltage)
SUB_SENSOR(cell_9_voltage)
SUB_SENSOR(cell_10_voltage)
SUB_SENSOR(cell_11_voltage)
SUB_SENSOR(cell_12_voltage)
SUB_SENSOR(cell_13_voltage)
SUB_SENSOR(cell_14_voltage)
SUB_SENSOR(cell_15_voltage)
SUB_SENSOR(cell_16_voltage)
SUB_SENSOR(cell_17_voltage)
SUB_SENSOR(cell_18_voltage)
#endif
#ifdef USE_TEXT_SENSOR
SUB_TEXT_SENSOR(status)
#endif
#ifdef USE_BINARY_SENSOR
SUB_BINARY_SENSOR(charging_mos_enabled)
SUB_BINARY_SENSOR(discharging_mos_enabled)
#endif
void setup() override;
void dump_config() override;
void update() override;
void loop() override;
float get_setup_priority() const override;
void set_address(uint8_t address) { this->addr_ = address; }
protected:
void request_data_(uint8_t data_id);
void decode_data_(std::vector<uint8_t> data);
uint8_t addr_;
std::vector<uint8_t> data_;
bool receiving_{false};
uint8_t data_count_;
uint32_t last_transmission_{0};
bool trigger_next_;
uint8_t next_request_;
};
} // namespace daly_bms
} // namespace esphome