Sungrow SH series hybrid inverters Modbus register map
Also covers SH3K6, SH4K6, SH5K-20, SH5K-V13, SH3K6-30, SH4K6-30, SH5K-30, SH3.0RS, SH3.6RS, SH4.0RS, SH5.0RS, SH6.0RS, SH5.0RT, SH6.0RT, SH8.0RT, SH10RT
Residential hybrid inverters (SH-K, SH-RS, SH-RT)
- Official
- 155 registers
- Modbus TCP and RTU
- Revision 1 · 2026-10-14
- Identity: model, firmware, serial number
Official: Written from the manufacturer's documentation, but not tested on a device yet. Check the map against the manufacturer's documentation before you write to a live device. Tested it? Report a test.
Communication
- Protocol
- Modbus TCP and RTU
- Unit ID
- 1
- TCP port
- 502
- Serial
- 9600 8N1 · 9600 baud, 8 data bits, none parity, 1 stop bit
- Byte / word order
- CDAB · bytes big-endian, words low first (word swap)
- Addresses
- 1-based · wire address = address − 1
Connection values are defaults: the device may be configured differently.
Map
- Registers
- 53 holding registers, 102 input registers
- Groups
- 16
- Revision
- 1 · 2026-10-14
- Added
- ()
- File
- maps/sungrow/sh-hybrid.mbmap.json · 31 KB · history
- SHA-256
- 8c7430f240707c7da1c9d7189da95eb7f1f1f9392b35cd64a2595f98e5da4f9a
- Manufacturer
- sungrowpower.com
Device identity
What a tool can read to check that this map fits the connected device (SPEC.md section 4.7). Registers with a role are read like any other register.
| Role | Register | Address | Type | Values |
|---|---|---|---|---|
| Firmware | ARM software version | input 4954 | string[15] | |
| Serial number | Serial number | input 4990 | string[10] | |
| Model | Device type code | input 5000 | uint16 | 0x0D03 = SH5K-V13, 0x0D06 = SH3K6, 0x0D07 = SH4K6, +13 more |
Sources and notes
- Communication Protocol of Residential Hybrid Inverter · version V1.0.23, 2021-12-31 sections 3.1, 3.2 and appendix 1.1-1.3; document marked Public
Source: Sungrow, Communication Protocol of Residential Hybrid Inverter V1.0.23 (TI_20211231)
- Addresses are the protocol addresses of the manual; the wire address is one less (address_base 1).
- Read-only data are input registers (FC04); settings are holding registers (FC03/06/16). Input 5000 and holding 5000 are different registers.
- 32-bit values are sent low word first.
- The 15-minute and daily/monthly/yearly history tables (6100-6826) are not listed here.
- Newer firmware and models (SH-RT V2, SH-T) have more registers that this document does not cover.
| Area | Address | Name | Type | Access | Unit | Scale | Description |
|---|---|---|---|---|---|---|---|
| IR | 4950 | uint32 CDAB | R | ||||
| IR | 4952 | uint32 CDAB | R | ||||
| IR | 4954 | string[15] | R | ||||
| IR | 4969 | string[15] | R | ||||
| IR | 4990 | string[10] | R | ||||
| IR | 5000 | uint16 | R | ||||
| IR | 5001 | uint16 | R | kW | ×0.1 | ||
| IR | 5002 | uint16 | R | ||||
| IR | 5003 | uint16 | R | kWh | ×0.1 | PV generation plus battery discharge | |
| IR | 5004 | uint32 CDAB | R | kWh | ×0.1 | PV generation plus battery discharge | |
| IR | 5008 | int16 | R | °C | ×0.1 | ||
| IR | 5011 | uint16 | R | V | ×0.1 | ||
| IR | 5012 | uint16 | R | A | ×0.1 | ||
| IR | 5013 | uint16 | R | V | ×0.1 | ||
| IR | 5014 | uint16 | R | A | ×0.1 | ||
| IR | 5017 | uint32 CDAB | R | W | PV power | ||
| IR | 5019 | uint16 | R | V | ×0.1 | Phase or line voltage, depending on the output type | |
| IR | 5020 | uint16 | R | V | ×0.1 | Phase or line voltage, depending on the output type | |
| IR | 5021 | uint16 | R | V | ×0.1 | Phase or line voltage, depending on the output type | |
| IR | 5033 | int32 CDAB | R | var | |||
| IR | 5035 | int16 | R | ×0.001 | Positive = leading, negative = lagging | ||
| IR | 5036 | uint16 | R | Hz | ×0.1 | ||
| IR | 5622 | uint16 | R | W | ×10 | Only on SH5.0RT/SH6.0RT/SH8.0RT/SH10RT and SH3.0RS-SH6.0RS | |
| IR | 5623 | uint16 | R | W | ×10 | Only on SH5.0RT/SH6.0RT/SH8.0RT/SH10RT and SH3.0RS-SH6.0RS | |
| IR | 5628 | uint16 | R | W | ×100 | Only on SH5.0RT/SH6.0RT/SH8.0RT/SH10RT and SH3.0RS-SH6.0RS | |
| IR | 5635 | uint16 | R | A | Only on SH5.0RT/SH6.0RT/SH8.0RT/SH10RT and SH3.0RS-SH6.0RS | ||
| IR | 5636 | uint16 | R | A | Only on SH5.0RT/SH6.0RT/SH8.0RT/SH10RT and SH3.0RS-SH6.0RS | ||
| IR | 13000 | uint16 | R | ||||
| IR | 13001 | bool bit 0 | R | Running state, bit 0 | |||
| IR | 13001 | bool bit 1 | R | Running state, bit 1 | |||
| IR | 13001 | bool bit 2 | R | Running state, bit 2 | |||
| IR | 13001 | bool bit 3 | R | Running state, bit 3 | |||
| IR | 13001 | bool bit 4 | R | Running state, bit 4 | |||
| IR | 13001 | bool bit 5 | R | Running state, bit 5 | |||
| IR | 13001 | bool bit 7 | R | Running state, bit 7: negative load power (retrofitted system) | |||
| IR | 13002 | uint16 | R | kWh | ×0.1 | ||
| IR | 13003 | uint32 CDAB | R | kWh | ×0.1 | ||
| IR | 13005 | uint16 | R | kWh | ×0.1 | The manual gives the unit as 0.1 kW | |
| IR | 13006 | uint32 CDAB | R | kWh | ×0.1 | ||
| IR | 13008 | int32 CDAB | R | W | |||
| IR | 13010 | int32 CDAB | R | W | Negative when importing | ||
| IR | 13012 | uint16 | R | kWh | ×0.1 | ||
| IR | 13013 | uint32 CDAB | R | kWh | ×0.1 | ||
| IR | 13015 | uint32 CDAB | R | kg | ×0.1 | ||
| IR | 13017 | uint16 | R | kWh | ×0.1 | ||
| IR | 13018 | uint32 CDAB | R | kWh | ×0.1 | ||
| IR | 13020 | uint16 | R | V | ×0.1 | ||
| IR | 13021 | uint16 | R | A | ×0.1 | ||
| IR | 13022 | uint16 | R | W | |||
| IR | 13023 | uint16 | R | % | ×0.1 | ||
| IR | 13024 | uint16 | R | % | ×0.1 | ||
| IR | 13025 | int16 | R | °C | ×0.1 | ||
| IR | 13026 | uint16 | R | kWh | ×0.1 | ||
| IR | 13027 | uint32 CDAB | R | kWh | ×0.1 | ||
| IR | 13029 | uint16 | R | % | ×0.1 | ||
| IR | 13030 | uint16 | R | ||||
| IR | 13031 | int16 | R | A | ×0.1 | ||
| IR | 13032 | int16 | R | A | ×0.1 | ||
| IR | 13033 | int16 | R | A | ×0.1 | ||
| IR | 13034 | int32 CDAB | R | W | |||
| IR | 13036 | uint16 | R | kWh | ×0.1 | ||
| IR | 13037 | uint32 CDAB | R | kWh | ×0.1 | ||
| IR | 13039 | uint16 | R | ×0.1 | kWh for Li-ion, Ah for lead-acid; Only on SH5K-20, SH3K6, SH4K6, SH5K-V13, SH5K-30, SH3K6-30 and SH4K6-30 | ||
| IR | 13040 | uint16 | R | kWh | ×0.1 | ||
| IR | 13041 | uint32 CDAB | R | kWh | ×0.1 | ||
| IR | 13043 | uint16 | R | ||||
| IR | 13045 | uint16 | R | kWh | ×0.1 | ||
| IR | 13046 | uint32 CDAB | R | kWh | ×0.1 | ||
| IR | 13050 | uint32 CDAB | R | Bit field; see appendix 1.3 of the protocol for the fault codes | |||
| IR | 13052 | uint32 CDAB | R | Bit field; see appendix 1.3 of the protocol for the fault codes | |||
| IR | 13054 | uint32 CDAB | R | Bit field; see appendix 1.3 of the protocol for the fault codes | |||
| IR | 13056 | uint32 CDAB | R | Bit field; see appendix 1.3 of the protocol for the fault codes | |||
| IR | 13058 | uint32 CDAB | R | Bit field; see appendix 1.3 of the protocol for the fault codes | |||
| IR | 13060 | uint32 CDAB | R | Bit field; see appendix 1.3 of the protocol for the fault codes | |||
| IR | 13062 | uint32 CDAB | R | Bit field; see appendix 1.3 of the protocol for the fault codes | |||
| IR | 13064 | uint32 CDAB | R | Bit field; see appendix 1.3 of the protocol for the fault codes | |||
| IR | 13066 | uint32 CDAB | R | Bit field; see appendix 1.3 of the protocol for the fault codes | |||
| IR | 13068 | uint32 CDAB | R | Bit field; see appendix 1.3 of the protocol for the fault codes | |||
| IR | 13070 | uint32 CDAB | R | Bit field; see appendix 1.3 of the protocol for the fault codes | |||
| IR | 13072 | uint32 CDAB | R | Bit field; see appendix 1.3 of the protocol for the fault codes | |||
| IR | 13074 | uint32 CDAB | R | Bit field; see appendix 1.3 of the protocol for the fault codes | |||
| IR | 13076 | uint32 CDAB | R | Bit field; see appendix 1.3 of the protocol for the fault codes | |||
| IR | 13078 | uint32 CDAB | R | Bit field; see appendix 1.3 of the protocol for the fault codes | |||
| IR | 13100 | uint16 | R | Only on SH5K-20, SH3K6, SH4K6, SH5K-V13, SH5K-30, SH3K6-30 and SH4K6-30 | |||
| IR | 13101 | uint16 | R | A | Only on SH5K-20, SH3K6, SH4K6, SH5K-V13, SH5K-30, SH3K6-30 and SH4K6-30 | ||
| IR | 13102 | uint16 | R | A | Only on SH5K-20, SH3K6, SH4K6, SH5K-V13, SH5K-30, SH3K6-30 and SH4K6-30 | ||
| IR | 13103 | uint16 | R | Only on SH5K-20, SH3K6, SH4K6, SH5K-V13, SH5K-30, SH3K6-30 and SH4K6-30 | |||
| IR | 13104 | uint16 | R | Only on SH5K-20, SH3K6, SH4K6, SH5K-V13, SH5K-30, SH3K6-30 and SH4K6-30 | |||
| IR | 13105 | uint16 | R | Only on SH5K-20, SH3K6, SH4K6, SH5K-V13, SH5K-30, SH3K6-30 and SH4K6-30 | |||
| IR | 13106 | uint16 | R | Only on SH5K-20, SH3K6, SH4K6, SH5K-V13, SH5K-30, SH3K6-30 and SH4K6-30 | |||
| IR | 13107 | uint16 | R | % | Only on SH5K-20, SH3K6, SH4K6, SH5K-V13, SH5K-30, SH3K6-30 and SH4K6-30 | ||
| IR | 13108 | uint16 | R | % | Only on SH5K-20, SH3K6, SH4K6, SH5K-V13, SH5K-30, SH3K6-30 and SH4K6-30 | ||
| IR | 13109 | uint16 | R | A | ×0.1 | Only on SH5K-20, SH3K6, SH4K6, SH5K-V13, SH5K-30, SH3K6-30 and SH4K6-30 | |
| IR | 13110 | uint16 | R | V | ×0.01 | Only on SH5K-20, SH3K6, SH4K6, SH5K-V13, SH5K-30, SH3K6-30 and SH4K6-30 | |
| IR | 13111 | uint16 | R | Only on SH5K-20, SH3K6, SH4K6, SH5K-V13, SH5K-30, SH3K6-30 and SH4K6-30 | |||
| IR | 13112 | uint16 | R | Only on SH5K-20, SH3K6, SH4K6, SH5K-V13, SH5K-30, SH3K6-30 and SH4K6-30; unit not given in the manual | |||
| IR | 13113 | uint16 | R | Only on SH5K-20, SH3K6, SH4K6, SH5K-V13, SH5K-30, SH3K6-30 and SH4K6-30; unit not given in the manual | |||
| IR | 13114 | uint16 | R | Only on SH5K-20, SH3K6, SH4K6, SH5K-V13, SH5K-30, SH3K6-30 and SH4K6-30; unit not given in the manual | |||
| IR | 13115 | uint16 | R | Only on SH5K-20, SH3K6, SH4K6, SH5K-V13, SH5K-30, SH3K6-30 and SH4K6-30; unit not given in the manual | |||
| IR | 13116 | int16 | R | Only on SH5K-20, SH3K6, SH4K6, SH5K-V13, SH5K-30, SH3K6-30 and SH4K6-30; unit not given in the manual |
No registers match
Try part of the name, an address (decimal or 0x hex) or clear the filters.
Help improve this map
- I tested it on a deviceReport whether it worked, even if you did not write the map.
- Suggest a correctionEdit the file on GitHub; it opens a pull request.
- Report a problemA wrong address, type, scale or byte order.
- Read the formatWhat each key of the file means (SPEC.md).