ESPHome 2026.6.0-dev
Loading...
Searching...
No Matches
growatt_solar.h
Go to the documentation of this file.
1#pragma once
2
6
7#include <vector>
8
10
11static const float TWO_DEC_UNIT = 0.01;
12static const float ONE_DEC_UNIT = 0.1;
13
18
19// Register addresses for the RTU protocol.
20constexpr size_t RTU_INVERTER_STATUS = 0; // length = 1
21constexpr size_t RTU_PV_ACTIVE_POWER = 1; // length = 2
22constexpr size_t RTU_PV1_VOLTAGE = 3; // length = 1
23constexpr size_t RTU_PV1_CURRENT = 4; // length = 1
24constexpr size_t RTU_PV1_ACTIVE_POWER = 5; // length = 2
25constexpr size_t RTU_PV2_VOLTAGE = 7; // length = 1
26constexpr size_t RTU_PV2_CURRENT = 8; // length = 1
27constexpr size_t RTU_PV2_ACTIVE_POWER = 9; // length = 2
28constexpr size_t RTU_GRID_ACTIVE_POWER = 11; // length = 2
29constexpr size_t RTU_GRID_FREQUENCY = 13; // length = 1
30constexpr size_t RTU_PHASE1_VOLTAGE = 14; // length = 1
31constexpr size_t RTU_PHASE1_CURRENT = 15; // length = 1
32constexpr size_t RTU_PHASE1_ACTIVE_POWER = 16; // length = 2
33constexpr size_t RTU_PHASE2_VOLTAGE = 18; // length = 1
34constexpr size_t RTU_PHASE2_CURRENT = 19; // length = 1
35constexpr size_t RTU_PHASE2_ACTIVE_POWER = 20; // length = 2
36constexpr size_t RTU_PHASE3_VOLTAGE = 22; // length = 1
37constexpr size_t RTU_PHASE3_CURRENT = 23; // length = 1
38constexpr size_t RTU_PHASE3_ACTIVE_POWER = 24; // length = 2
39constexpr size_t RTU_TODAY_PRODUCTION = 26; // length = 2
40constexpr size_t RTU_TOTAL_ENERGY_PRODUCTION = 28; // length = 2
41constexpr size_t RTU_INVERTER_MODULE_TEMP = 32; // length = 1
42
43// Input register addresses for the RTU2 protocol as described
44// in the "GROWATT INVERTER MODBUS PROTOCOL_II V1.39" document.
45constexpr size_t RTU2_INVERTER_STATUS = 0; // length = 1
46constexpr size_t RTU2_PV_ACTIVE_POWER = 1; // length = 2
47constexpr size_t RTU2_PV1_VOLTAGE = 3; // length = 1
48constexpr size_t RTU2_PV1_CURRENT = 4; // length = 1
49constexpr size_t RTU2_PV1_ACTIVE_POWER = 5; // length = 2
50constexpr size_t RTU2_PV2_VOLTAGE = 7; // length = 1
51constexpr size_t RTU2_PV2_CURRENT = 8; // length = 1
52constexpr size_t RTU2_PV2_ACTIVE_POWER = 9; // length = 2
53constexpr size_t RTU2_GRID_ACTIVE_POWER = 35; // length = 2
54constexpr size_t RTU2_GRID_FREQUENCY = 37; // length = 1
55constexpr size_t RTU2_PHASE1_VOLTAGE = 38; // length = 1
56constexpr size_t RTU2_PHASE1_CURRENT = 39; // length = 1
57constexpr size_t RTU2_PHASE1_ACTIVE_POWER = 40; // length = 2
58constexpr size_t RTU2_PHASE2_VOLTAGE = 42; // length = 1
59constexpr size_t RTU2_PHASE2_CURRENT = 43; // length = 1
60constexpr size_t RTU2_PHASE2_ACTIVE_POWER = 44; // length = 2
61constexpr size_t RTU2_PHASE3_VOLTAGE = 46; // length = 1
62constexpr size_t RTU2_PHASE3_CURRENT = 47; // length = 1
63constexpr size_t RTU2_PHASE3_ACTIVE_POWER = 48; // length = 2
64constexpr size_t RTU2_TODAY_PRODUCTION = 53; // length = 2
65constexpr size_t RTU2_TOTAL_ENERGY_PRODUCTION = 55; // length = 2
66constexpr size_t RTU2_INVERTER_MODULE_TEMP = 93; // length = 1
67
69 public:
70 void loop() override;
71 void update() override;
72 void on_modbus_data(const std::vector<uint8_t> &data) override;
73 void dump_config() override;
74
75 void set_protocol_version(GrowattProtocolVersion protocol_version) { this->protocol_version_ = protocol_version; }
76
78
82
86
87 void set_voltage_sensor(uint8_t phase, sensor::Sensor *voltage_sensor) {
88 this->phases_[phase].voltage_sensor_ = voltage_sensor;
89 }
90 void set_current_sensor(uint8_t phase, sensor::Sensor *current_sensor) {
91 this->phases_[phase].current_sensor_ = current_sensor;
92 }
93 void set_active_power_sensor(uint8_t phase, sensor::Sensor *active_power_sensor) {
94 this->phases_[phase].active_power_sensor_ = active_power_sensor;
95 }
96 void set_voltage_sensor_pv(uint8_t pv, sensor::Sensor *voltage_sensor) {
97 this->pvs_[pv].voltage_sensor_ = voltage_sensor;
98 }
99 void set_current_sensor_pv(uint8_t pv, sensor::Sensor *current_sensor) {
100 this->pvs_[pv].current_sensor_ = current_sensor;
101 }
102 void set_active_power_sensor_pv(uint8_t pv, sensor::Sensor *active_power_sensor) {
103 this->pvs_[pv].active_power_sensor_ = active_power_sensor;
104 }
105
106 protected:
109
120
122
125
127
132};
133
134} // namespace esphome::growatt_solar
This class simplifies creating components that periodically check a state.
Definition component.h:585
void set_current_sensor_pv(uint8_t pv, sensor::Sensor *current_sensor)
void set_grid_frequency_sensor(sensor::Sensor *sensor)
void on_modbus_data(const std::vector< uint8_t > &data) override
struct esphome::growatt_solar::GrowattSolar::GrowattPhase phases_[3]
void set_today_production_sensor(sensor::Sensor *sensor)
void set_voltage_sensor_pv(uint8_t pv, sensor::Sensor *voltage_sensor)
void set_protocol_version(GrowattProtocolVersion protocol_version)
GrowattProtocolVersion protocol_version_
struct esphome::growatt_solar::GrowattSolar::GrowattPV pvs_[2]
void set_inverter_status_sensor(sensor::Sensor *sensor)
void set_voltage_sensor(uint8_t phase, sensor::Sensor *voltage_sensor)
void set_current_sensor(uint8_t phase, sensor::Sensor *current_sensor)
void set_inverter_module_temp_sensor(sensor::Sensor *sensor)
void set_active_power_sensor(uint8_t phase, sensor::Sensor *active_power_sensor)
void set_grid_active_power_sensor(sensor::Sensor *sensor)
void set_active_power_sensor_pv(uint8_t pv, sensor::Sensor *active_power_sensor)
void set_pv_active_power_sensor(sensor::Sensor *sensor)
void set_total_energy_production_sensor(sensor::Sensor *sensor)
Base-class for all sensors.
Definition sensor.h:47
constexpr size_t RTU_PV1_CURRENT
constexpr size_t RTU2_PV1_CURRENT
constexpr size_t RTU2_GRID_FREQUENCY
constexpr size_t RTU_INVERTER_STATUS
constexpr size_t RTU_PHASE3_VOLTAGE
constexpr size_t RTU_PV2_CURRENT
constexpr size_t RTU2_PV_ACTIVE_POWER
constexpr size_t RTU2_PHASE3_ACTIVE_POWER
constexpr size_t RTU_PV2_ACTIVE_POWER
constexpr size_t RTU2_PHASE2_ACTIVE_POWER
constexpr size_t RTU_PHASE2_ACTIVE_POWER
constexpr size_t RTU_PHASE2_VOLTAGE
constexpr size_t RTU2_PV1_ACTIVE_POWER
constexpr size_t RTU2_PV2_VOLTAGE
constexpr size_t RTU_TOTAL_ENERGY_PRODUCTION
constexpr size_t RTU_GRID_ACTIVE_POWER
constexpr size_t RTU_PHASE3_CURRENT
constexpr size_t RTU2_PV1_VOLTAGE
constexpr size_t RTU2_PHASE1_ACTIVE_POWER
constexpr size_t RTU2_PHASE3_VOLTAGE
constexpr size_t RTU_PHASE1_CURRENT
constexpr size_t RTU2_PHASE1_CURRENT
constexpr size_t RTU2_TODAY_PRODUCTION
constexpr size_t RTU_PV2_VOLTAGE
constexpr size_t RTU_PV_ACTIVE_POWER
constexpr size_t RTU2_INVERTER_MODULE_TEMP
constexpr size_t RTU_PV1_VOLTAGE
constexpr size_t RTU2_PHASE2_CURRENT
constexpr size_t RTU2_TOTAL_ENERGY_PRODUCTION
constexpr size_t RTU2_GRID_ACTIVE_POWER
constexpr size_t RTU2_PHASE1_VOLTAGE
constexpr size_t RTU_PV1_ACTIVE_POWER
constexpr size_t RTU2_PHASE2_VOLTAGE
constexpr size_t RTU2_PHASE3_CURRENT
constexpr size_t RTU_PHASE1_VOLTAGE
constexpr size_t RTU2_PV2_CURRENT
constexpr size_t RTU_GRID_FREQUENCY
constexpr size_t RTU_PHASE1_ACTIVE_POWER
constexpr size_t RTU_PHASE2_CURRENT
constexpr size_t RTU2_PV2_ACTIVE_POWER
constexpr size_t RTU2_INVERTER_STATUS
constexpr size_t RTU_TODAY_PRODUCTION
constexpr size_t RTU_PHASE3_ACTIVE_POWER
constexpr size_t RTU_INVERTER_MODULE_TEMP
static void uint32_t