1
0
mirror of https://github.com/esphome/esphome.git synced 2025-03-26 04:28:17 +00:00
functionpointer 4b6fbd5db0
Pylontech integration (solar battery bank) (#4688)
Co-authored-by: Jesse Hills <3060199+jesserockz@users.noreply.github.com>
2023-11-28 11:43:03 +13:00

54 lines
1.3 KiB
C++

#pragma once
#include "esphome/core/component.h"
#include "esphome/core/defines.h"
#include "esphome/components/uart/uart.h"
namespace esphome {
namespace pylontech {
static const uint8_t NUM_BUFFERS = 20;
static const uint8_t TEXT_SENSOR_MAX_LEN = 8;
class PylontechListener {
public:
struct LineContents {
int bat_num = 0, volt, curr, tempr, tlow, thigh, vlow, vhigh, coulomb, mostempr;
char base_st[TEXT_SENSOR_MAX_LEN], volt_st[TEXT_SENSOR_MAX_LEN], curr_st[TEXT_SENSOR_MAX_LEN],
temp_st[TEXT_SENSOR_MAX_LEN];
};
virtual void on_line_read(LineContents *line);
virtual void dump_config();
};
class PylontechComponent : public PollingComponent, public uart::UARTDevice {
public:
PylontechComponent();
/// Schedule data readings.
void update() override;
/// Read data once available
void loop() override;
/// Setup the sensor and test for a connection.
void setup() override;
void dump_config() override;
float get_setup_priority() const override;
void register_listener(PylontechListener *listener) { this->listeners_.push_back(listener); }
protected:
void process_line_(std::string &buffer);
// ring buffer
std::string buffer_[NUM_BUFFERS];
int buffer_index_write_ = 0;
int buffer_index_read_ = 0;
std::vector<PylontechListener *> listeners_{};
};
} // namespace pylontech
} // namespace esphome