GoodWe Hybrid Inverter (EMS protocol) Modbus register map
GoodWe hybrid inverters expose a Modbus map for third-party energy management systems. Read-only registers give PV, grid, battery, meter and BMS values; writable registers set the battery power mode, export limit and battery protection limits.
- Protocol
- Modbus RTU and Modbus TCP
- Defaults
- RTU at 9600 bps. Device address 1 to 247, 247 by default. Modbus TCP uses port 502, must be enabled through SEMS+, and uses the same slave ID (PDF p. 8, 24-25).
- Addresses in the manual
- 0-based protocol addresses, as sent on the wire
- 32 and 64-bit values
- High word first (AB CD)
- Registers listed
- 85
- Checked against
- Third-Party EMS Protocol MODBUS_V1.1.1
Address base. The manual does not state an address offset. Its request frame has a "first register" field described as the address of the first register, and the table address is the value to place there (PDF p. 5-6, 10). The only frame examples use small raw values such as 0000H. Address 33001 in the manual is address 33001 on the wire.
Word order. The manual says long integer data is sent as two registers from the most significant part to the least significant part (PDF p. 4).
Modbus Poll and the Modbus protocol itself count from 0. The "Wire address" column is the number to type into Modbus Poll.
Downloads
The register table has every column on this page. The blocks file imports into Modbus Poll. The template JSON holds the same blocks plus unit, scale and access for scripts.
Registers
| Manual | Wire | Register | Type | Regs | Unit | Scale | Access | Area |
|---|---|---|---|---|---|---|---|---|
| 33001 | 33001 | Maximum charge powerMax_Charge_Power · Read once only. |
uint32 | 2 | W | 1 | R | Holding (FC03) |
| 33004 | 33004 | Maximum discharge powerMax_Discharge_Power · Read once only. |
uint32 | 2 | W | 1 | R | Holding (FC03) |
| 33006 | 33006 | Maximum PV powerMax_PV_Power · Read once only. |
uint32 | 2 | W | 1 | R | Holding (FC03) |
| 35001 | 35001 | Inverter rated powerRated_Power · Read once only. No unit is printed in the manual. |
uint16 | 1 | 1 | R | Holding (FC03) | |
| 35003 | 35003 | Inverter serial numberInverter_SN · ASCII, 16 bytes; read all registers together. |
string | 8 | 1 | R | Holding (FC03) | |
| 35011 | 35011 | Model nameModel_Name · ASCII, 10 bytes; only for EH and ET PLUS models. |
string | 5 | 1 | R | Holding (FC03) | |
| 35060 | 35060 | External model nameExternal_Model_Name |
string | 16 | 1 | R | Holding (FC03) | |
| 35103 | 35103 | PV1 voltagePV1_Voltage |
uint16 | 1 | V | 0.1 | R | Holding (FC03) |
| 35104 | 35104 | PV1 currentPV1_Current |
uint16 | 1 | A | 0.1 | R | Holding (FC03) |
| 35107 | 35107 | PV2 voltagePV2_Voltage |
uint16 | 1 | V | 0.1 | R | Holding (FC03) |
| 35108 | 35108 | PV2 currentPV2_Current |
uint16 | 1 | A | 0.1 | R | Holding (FC03) |
| 35111 | 35111 | PV3 voltagePV3_Voltage |
uint16 | 1 | V | 0.1 | R | Holding (FC03) |
| 35112 | 35112 | PV3 currentPV3_Current |
uint16 | 1 | A | 0.1 | R | Holding (FC03) |
| 35115 | 35115 | PV4 voltagePV4_Voltage |
uint16 | 1 | V | 0.1 | R | Holding (FC03) |
| 35116 | 35116 | PV4 currentPV4_Current |
uint16 | 1 | A | 0.1 | R | Holding (FC03) |
| 35105 | 35105 | MPPT 1 powerMPPT1_Power · 200 ms average. |
uint32 | 2 | W | 1 | R | Holding (FC03) |
| 35345 | 35345 | MPPT 1 currentMPPT1_Current |
uint16 | 1 | A | 0.1 | R | Holding (FC03) |
| 35109 | 35109 | MPPT 2 powerMPPT2_Power · 200 ms average. |
uint32 | 2 | W | 1 | R | Holding (FC03) |
| 35346 | 35346 | MPPT 2 currentMPPT2_Current |
uint16 | 1 | A | 0.1 | R | Holding (FC03) |
| 35113 | 35113 | MPPT 3 powerMPPT3_Power · 200 ms average. |
uint32 | 2 | W | 1 | R | Holding (FC03) |
| 35347 | 35347 | MPPT 3 currentMPPT3_Current |
uint16 | 1 | A | 0.1 | R | Holding (FC03) |
| 35117 | 35117 | MPPT 4 powerMPPT4_Power · 200 ms average. |
uint32 | 2 | W | 1 | R | Holding (FC03) |
| 35348 | 35348 | MPPT 4 currentMPPT4_Current |
uint16 | 1 | A | 0.1 | R | Holding (FC03) |
| 35121 | 35121 | R phase inverter voltageR_Phase_Voltage |
uint16 | 1 | V | 0.1 | R | Holding (FC03) |
| 35122 | 35122 | R phase inverter currentR_Phase_Current |
uint16 | 1 | A | 0.1 | R | Holding (FC03) |
| 35123 | 35123 | R phase inverter frequencyR_Phase_Frequency |
uint16 | 1 | Hz | 0.01 | R | Holding (FC03) |
| 35124 | 35124 | R phase inverter powerR_Phase_Power |
int32 | 2 | W | 1 | R | Holding (FC03) |
| 35126 | 35126 | S phase inverter voltageS_Phase_Voltage |
uint16 | 1 | V | 0.1 | R | Holding (FC03) |
| 35127 | 35127 | S phase inverter currentS_Phase_Current |
uint16 | 1 | A | 0.1 | R | Holding (FC03) |
| 35128 | 35128 | S phase inverter frequencyS_Phase_Frequency |
uint16 | 1 | Hz | 0.01 | R | Holding (FC03) |
| 35129 | 35129 | S phase inverter powerS_Phase_Power |
int32 | 2 | W | 1 | R | Holding (FC03) |
| 35131 | 35131 | T phase inverter voltageT_Phase_Voltage |
uint16 | 1 | V | 0.1 | R | Holding (FC03) |
| 35132 | 35132 | T phase inverter currentT_Phase_Current |
uint16 | 1 | A | 0.1 | R | Holding (FC03) |
| 35133 | 35133 | T phase inverter frequencyT_Phase_Frequency |
uint16 | 1 | Hz | 0.01 | R | Holding (FC03) |
| 35134 | 35134 | T phase inverter powerT_Phase_Power |
int32 | 2 | W | 1 | R | Holding (FC03) |
| 35137 | 35137 | Total inverter active powerTotal_Inverter_Power |
int32 | 2 | W | 1 | R | Holding (FC03) |
| 35139 | 35139 | Total on-grid active powerAC_Active_Power · Equals meter power when the meter connection is good, otherwise the inverter on-grid port power. |
int32 | 2 | W | 1 | R | Holding (FC03) |
| 35141 | 35141 | Total reactive powerAC_Reactive_Power |
int32 | 2 | var | 1 | R | Holding (FC03) |
| 35143 | 35143 | Total apparent powerAC_Apparent_Power |
int32 | 2 | VA | 1 | R | Holding (FC03) |
| 35169 | 35169 | Total back-up load powerBackup_Load_Power |
int32 | 2 | W | 1 | R | Holding (FC03) |
| 35171 | 35171 | Total on-grid load powerTotal_Load_Power · Back-up load is not included. |
int32 | 2 | W | 1 | R | Holding (FC03) |
| 35181 | 35181 | Battery 1 currentBattery1_Current |
int16 | 1 | A | 0.1 | R | Holding (FC03) |
| 35182 | 35182 | Battery 1 powerBattery1_Power · 200 ms average. |
int32 | 2 | W | 1 | R | Holding (FC03) |
| 35184 | 35184 | Battery 1 modeBattery1_Mode · 0 no battery or disconnected, 1 standby, 2 discharging, 3 charging. |
uint16 | 1 | 1 | R | Holding (FC03) | |
| 35186 | 35186 | Safety country codeSafety_Country · Values are in the manual appendix table 1-1. |
uint16 | 1 | 1 | R | Holding (FC03) | |
| 35187 | 35187 | Inverter work modeWork_Mode · 0 wait, 1 on-grid, 2 off-grid, 3 fault, 4 flash (upgrade), 5 power-on self-check. |
uint16 | 1 | 1 | R | Holding (FC03) | |
| 35301 | 35301 | Total PV powerPV_Total_Power |
uint32 | 2 | W | 1 | R | Holding (FC03) |
| 36015 | 36015 | Total energy fed to gridEnergy_Total_Sell · Read from the meter. No unit is printed in the manual. |
float32 | 2 | 1 | R | Holding (FC03) | |
| 36017 | 36017 | Total energy bought from gridEnergy_Total_Buy · Read from the meter. No unit is printed in the manual. |
float32 | 2 | 1 | R | Holding (FC03) | |
| 36019 | 36019 | Meter active power R phaseMeter_Active_Power_R |
int32 | 2 | W | 1 | R | Holding (FC03) |
| 36021 | 36021 | Meter active power S phaseMeter_Active_Power_S |
int32 | 2 | W | 1 | R | Holding (FC03) |
| 36023 | 36023 | Meter active power T phaseMeter_Active_Power_T |
int32 | 2 | W | 1 | R | Holding (FC03) |
| 36025 | 36025 | Meter total active powerMeter_Total_Active_Power |
int32 | 2 | W | 1 | R | Holding (FC03) |
| 36033 | 36033 | Meter total reactive powerMeter_Total_Reactive_Power · The manual prints W as the unit for this reactive power register. |
int32 | 2 | W | 1 | R | Holding (FC03) |
| 36041 | 36041 | Meter total apparent powerMeter_Total_Apparent_Power · The manual prints W as the unit for this apparent power register. |
int32 | 2 | W | 1 | R | Holding (FC03) |
| 36052 | 36052 | Meter voltage RMeter_Voltage_R |
uint16 | 1 | V | 0.1 | R | Holding (FC03) |
| 36053 | 36053 | Meter voltage SMeter_Voltage_S |
uint16 | 1 | V | 0.1 | R | Holding (FC03) |
| 36054 | 36054 | Meter voltage TMeter_Voltage_T |
uint16 | 1 | V | 0.1 | R | Holding (FC03) |
| 36055 | 36055 | Meter current RMeter_Current_R |
uint16 | 1 | A | 0.1 | R | Holding (FC03) |
| 36056 | 36056 | Meter current SMeter_Current_S |
uint16 | 1 | A | 0.1 | R | Holding (FC03) |
| 36057 | 36057 | Meter current TMeter_Current_T |
uint16 | 1 | A | 0.1 | R | Holding (FC03) |
| 36133 | 36133 | Meter total active power (second listing)Meter_Total_Active_Power_2 |
int32 | 2 | W | 1 | R | Holding (FC03) |
| 37004 | 37004 | Maximum BMS charge currentMax_BMS_Charge_Current |
uint16 | 1 | A | 1 | R | Holding (FC03) |
| 37005 | 37005 | Maximum BMS discharge currentMax_BMS_Discharge_Current |
uint16 | 1 | A | 1 | R | Holding (FC03) |
| 37007 | 37007 | BMS 1 state of chargeBMS1_SOC |
uint16 | 1 | % | 1 | R | Holding (FC03) |
| 37008 | 37008 | BMS 1 state of healthBMS1_SOH |
uint16 | 1 | % | 1 | R | Holding (FC03) |
| 37076 | 37076 | BMS 1 rated capacityBMS1_Rated_Capacity · GoodWe batteries only. |
uint16 | 1 | kWh | 0.1 | R | Holding (FC03) |
| 37080 | 37080 | BMS 1 battery powerBMS1_Battery_Power · GoodWe batteries only. |
uint32 | 2 | W | 1 | R | Holding (FC03) |
| 42000 | 42000 | EMS power modeEMS_Power_Mode_A · Values come from the EMS mode table, for example 0x0001 self-use, 0x0002 charge from PV, 0x0003 discharge, 0x0004 import, 0x0005 export, 0x0008 battery standby, 0x000B charge to set power, 0x000C discharge to set power, 0x00FF stopped. Only some models support this register; the manual lists them. Write cycle 1 s. |
uint16 | 1 | 1 | RW | Holding (FC03) | |
| 42001 | 42001 | EMS power set valueEMS_Power_Set_A · Power value used by the EMS power mode in 42000. Only some models support this register. |
uint32 | 2 | W | 1 | RW | Holding (FC03) |
| 42003 | 42003 | Export power limit enableExport_Limit_Enable_A · 0 disable, 1 enable. Only some models support this register. |
uint16 | 1 | 1 | RW | Holding (FC03) | |
| 42004 | 42004 | Export power limit valueExport_Limit_Parameter_A · Used when the export limit switch is on. The manual says it is the setting to use for single units above 30 kW AC or in parallel operation. |
int32 | 2 | W | 1 | RW | Holding (FC03) |
| 45350 | 45350 | Battery 1 capacityBattery1_Capacity · Range 25 to 2000. Written once only (flash save). |
uint16 | 1 | Ah | 1 | RW | Holding (FC03) |
| 45352 | 45352 | Battery 1 maximum charge voltageBattery1_Charge_Voltage_Max · Range 400 to 7200 (raw). Inverter-side protection; the BMS limits still apply. |
uint16 | 1 | V | 0.1 | RW | Holding (FC03) |
| 45353 | 45353 | Battery 1 maximum charge currentBattery1_Charge_Current_Max · Range 0 to 3000 (raw). Inverter-side protection; the BMS limits still apply. |
uint16 | 1 | A | 0.1 | RW | Holding (FC03) |
| 45355 | 45355 | Battery 1 maximum discharge currentBattery1_Discharge_Current_Max · Range 0 to 3000 (raw). Inverter-side protection; the BMS limits still apply. |
uint16 | 1 | A | 0.1 | RW | Holding (FC03) |
| 45356 | 45356 | Battery 1 minimum SOCBattery1_SOC_Under_Min · Range 0 to 100. |
uint16 | 1 | % | 1 | RW | Holding (FC03) |
| 47505 | 47505 | EMS fallback modeEMS_Fallback_Mode · Behaviour when no EMS instruction arrives within 30 seconds: 2 shut down, 3 self-use mode (only some models), 10 keep the last mode (default). |
uint16 | 1 | 1 | RW | Holding (FC03) | |
| 47509 | 47509 | Export power limit enable (second block)Export_Limit_Enable_B · 1 turns on total power anti-counter-current. Pair with 47510 for the limit value. |
uint16 | 1 | 1 | RW | Holding (FC03) | |
| 47510 | 47510 | Export power limit value (second block)Export_Limit_Parameter_B · Range -30000 to 30000. |
int16 | 1 | W | 1 | RW | Holding (FC03) |
| 47511 | 47511 | EMS power mode (second block)EMS_Power_Mode_B · Same mode codes as register 42000. Write cycle 1 s. |
uint16 | 1 | 1 | RW | Holding (FC03) | |
| 47512 | 47512 | EMS power set value (second block)EMS_Power_Set_B · Power value used with the mode in 47511. |
uint16 | 1 | W | 1 | RW | Holding (FC03) |
| 47531 | 47531 | Forced charge start SOCStart_Charge_SOC · Inverter-side protection. Default is 5 percent to start and 10 percent to stop. |
uint16 | 1 | % | 0.1 | RW | Holding (FC03) |
| 47532 | 47532 | Forced charge stop SOCStop_Charge_SOC |
uint16 | 1 | % | 0.1 | RW | Holding (FC03) |
| 47603 | 47603 | Grid charge power percentFast_Charge_Power_Percent · Allowed grid charge power, default 100. Range 0 to 100. |
uint16 | 1 | % | 1 | RW | Holding (FC03) |
Scale is the number to multiply the raw value by to get the unit. Types with more than one register (32 and 64-bit) follow the word order above.
Open in Modbus Poll
- Download the Modbus Poll blocks file.
- Open Modbus Poll, connect to the device and set its unit ID. In Modbus Poll set Word order to AB CD.
- In the blocks panel on the right, click Import CSV and pick the file. CSV import is a Pro feature. Without Pro, Modbus Poll polls the first 20 values of your blocks.
- The wire addresses are already in the file, so there is no 0-based or 1-based conversion to do.
Once the values look right, export the tag list to Ignition, Kepware, Node-RED, Home Assistant or Voltrus SCADA.
Source and accuracy
Manufacturer document: Third-Party EMS Protocol MODBUS (simplified version) (tr.goodwe.com)
Third-Party EMS Protocol MODBUS_V1.1.1, PDF p. 4-27. Read on 2026-10-24.
Addresses, types, units and scale are taken from the document above. Names and descriptions are written by Voltrus. Firmware versions can differ, so confirm a value on your own device before you rely on it.
Found a mistake? Report it by email with the register address and the manual page.