ESPHome 2026.10.0-dev
Loading...
Searching...
No Matches
growatt_solar.h
Go to the documentation of this file.
1#pragma once
2
6
7#include <span>
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 uint16_t RTU_INVERTER_STATUS = 0; // length = 1
21constexpr uint16_t RTU_PV_ACTIVE_POWER = 1; // length = 2
22constexpr uint16_t RTU_PV1_VOLTAGE = 3; // length = 1
23constexpr uint16_t RTU_PV1_CURRENT = 4; // length = 1
24constexpr uint16_t RTU_PV1_ACTIVE_POWER = 5; // length = 2
25constexpr uint16_t RTU_PV2_VOLTAGE = 7; // length = 1
26constexpr uint16_t RTU_PV2_CURRENT = 8; // length = 1
27constexpr uint16_t RTU_PV2_ACTIVE_POWER = 9; // length = 2
28constexpr uint16_t RTU_GRID_ACTIVE_POWER = 11; // length = 2
29constexpr uint16_t RTU_GRID_FREQUENCY = 13; // length = 1
30constexpr uint16_t RTU_PHASE1_VOLTAGE = 14; // length = 1
31constexpr uint16_t RTU_PHASE1_CURRENT = 15; // length = 1
32constexpr uint16_t RTU_PHASE1_ACTIVE_POWER = 16; // length = 2
33constexpr uint16_t RTU_PHASE2_VOLTAGE = 18; // length = 1
34constexpr uint16_t RTU_PHASE2_CURRENT = 19; // length = 1
35constexpr uint16_t RTU_PHASE2_ACTIVE_POWER = 20; // length = 2
36constexpr uint16_t RTU_PHASE3_VOLTAGE = 22; // length = 1
37constexpr uint16_t RTU_PHASE3_CURRENT = 23; // length = 1
38constexpr uint16_t RTU_PHASE3_ACTIVE_POWER = 24; // length = 2
39constexpr uint16_t RTU_TODAY_PRODUCTION = 26; // length = 2
40constexpr uint16_t RTU_TOTAL_ENERGY_PRODUCTION = 28; // length = 2
41constexpr uint16_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 uint16_t RTU2_INVERTER_STATUS = 0; // length = 1
46constexpr uint16_t RTU2_PV_ACTIVE_POWER = 1; // length = 2
47constexpr uint16_t RTU2_PV1_VOLTAGE = 3; // length = 1
48constexpr uint16_t RTU2_PV1_CURRENT = 4; // length = 1
49constexpr uint16_t RTU2_PV1_ACTIVE_POWER = 5; // length = 2
50constexpr uint16_t RTU2_PV2_VOLTAGE = 7; // length = 1
51constexpr uint16_t RTU2_PV2_CURRENT = 8; // length = 1
52constexpr uint16_t RTU2_PV2_ACTIVE_POWER = 9; // length = 2
53constexpr uint16_t RTU2_GRID_ACTIVE_POWER = 35; // length = 2
54constexpr uint16_t RTU2_GRID_FREQUENCY = 37; // length = 1
55constexpr uint16_t RTU2_PHASE1_VOLTAGE = 38; // length = 1
56constexpr uint16_t RTU2_PHASE1_CURRENT = 39; // length = 1
57constexpr uint16_t RTU2_PHASE1_ACTIVE_POWER = 40; // length = 2
58constexpr uint16_t RTU2_PHASE2_VOLTAGE = 42; // length = 1
59constexpr uint16_t RTU2_PHASE2_CURRENT = 43; // length = 1
60constexpr uint16_t RTU2_PHASE2_ACTIVE_POWER = 44; // length = 2
61constexpr uint16_t RTU2_PHASE3_VOLTAGE = 46; // length = 1
62constexpr uint16_t RTU2_PHASE3_CURRENT = 47; // length = 1
63constexpr uint16_t RTU2_PHASE3_ACTIVE_POWER = 48; // length = 2
64constexpr uint16_t RTU2_TODAY_PRODUCTION = 53; // length = 2
65constexpr uint16_t RTU2_TOTAL_ENERGY_PRODUCTION = 55; // length = 2
66constexpr uint16_t RTU2_INVERTER_MODULE_TEMP = 93; // length = 1
67
69 public:
70 void update() override;
71 void on_read_input_registers(uint16_t start_address, std::span<const uint16_t> registers,
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:
117
119
122
124
129};
130
131} // namespace esphome::growatt_solar
uint8_t status
Definition bl0942.h:8
This class simplifies creating components that periodically check a state.
Definition component.h:510
void set_current_sensor_pv(uint8_t pv, sensor::Sensor *current_sensor)
void set_grid_frequency_sensor(sensor::Sensor *sensor)
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 on_read_input_registers(uint16_t start_address, std::span< const uint16_t > registers, modbus::ResponseStatus status) override
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 uint16_t RTU2_INVERTER_STATUS
constexpr uint16_t RTU_PV1_ACTIVE_POWER
constexpr uint16_t RTU_GRID_ACTIVE_POWER
constexpr uint16_t RTU_PHASE2_VOLTAGE
constexpr uint16_t RTU_PHASE3_VOLTAGE
constexpr uint16_t RTU_TODAY_PRODUCTION
constexpr uint16_t RTU2_INVERTER_MODULE_TEMP
constexpr uint16_t RTU_INVERTER_MODULE_TEMP
constexpr uint16_t RTU2_TODAY_PRODUCTION
constexpr uint16_t RTU2_PHASE2_CURRENT
constexpr uint16_t RTU2_PHASE3_VOLTAGE
constexpr uint16_t RTU_PV2_VOLTAGE
constexpr uint16_t RTU2_GRID_ACTIVE_POWER
constexpr uint16_t RTU_INVERTER_STATUS
constexpr uint16_t RTU2_PV2_CURRENT
constexpr uint16_t RTU_PV1_VOLTAGE
constexpr uint16_t RTU2_PV1_CURRENT
constexpr uint16_t RTU_PV_ACTIVE_POWER
constexpr uint16_t RTU2_PV2_ACTIVE_POWER
constexpr uint16_t RTU2_PV2_VOLTAGE
constexpr uint16_t RTU_PHASE3_CURRENT
constexpr uint16_t RTU_TOTAL_ENERGY_PRODUCTION
constexpr uint16_t RTU2_PHASE1_ACTIVE_POWER
constexpr uint16_t RTU_GRID_FREQUENCY
constexpr uint16_t RTU2_PHASE1_VOLTAGE
constexpr uint16_t RTU2_PHASE2_ACTIVE_POWER
constexpr uint16_t RTU2_GRID_FREQUENCY
constexpr uint16_t RTU_PHASE1_ACTIVE_POWER
constexpr uint16_t RTU_PHASE1_CURRENT
constexpr uint16_t RTU2_PHASE1_CURRENT
constexpr uint16_t RTU2_PHASE3_ACTIVE_POWER
constexpr uint16_t RTU_PV2_ACTIVE_POWER
constexpr uint16_t RTU2_PHASE3_CURRENT
constexpr uint16_t RTU2_TOTAL_ENERGY_PRODUCTION
constexpr uint16_t RTU2_PV1_VOLTAGE
constexpr uint16_t RTU_PV2_CURRENT
constexpr uint16_t RTU2_PV1_ACTIVE_POWER
constexpr uint16_t RTU_PHASE2_CURRENT
constexpr uint16_t RTU_PHASE2_ACTIVE_POWER
constexpr uint16_t RTU_PHASE1_VOLTAGE
constexpr uint16_t RTU_PV1_CURRENT
constexpr uint16_t RTU2_PV_ACTIVE_POWER
constexpr uint16_t RTU_PHASE3_ACTIVE_POWER
constexpr uint16_t RTU2_PHASE2_VOLTAGE
std::optional< ExceptionCode > ResponseStatus
Definition modbus.h:306