Solis Energy storage (hybrid) inverters Modbus register map
Hybrid and energy storage inverters with RS485 Modbus RTU and Modbus TCP
- Official
- 807 registers
- Modbus TCP and RTU
- Revision 1 · 2026-11-11
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
- ABCD · bytes big-endian, words high first
- Addresses
- 0-based
Connection values are defaults: the device may be configured differently.
Map
- Registers
- 455 holding registers, 352 input registers
- Groups
- 3
- Revision
- 1 · 2026-11-11
- Added
- ()
- File
- maps/solis/energy-storage.mbmap.json · 209 KB · history
- SHA-256
- 7e32536c9b13200d3cb8cc5549f0928d0fbc0b09f0361d72cb517772ce2dfc59
- Manufacturer
- solisinverters.com
Sources and notes
- Communication Protocol for Energy Storage Inverters (RS485_MODBUS ESINV-33000ID Hybrid Inverter) · version 3.5 Sections 5.1 (function 0x04, registers 25000 to 36999) and 5.2 (functions 0x03, 0x06, 0x10, registers 43000 to 44999)
Source: Solis, Communication Protocol for Energy Storage Inverters, version 3.5
- Covers Solis hybrid and energy storage inverters (the S5-EH1P and later generations; some registers apply only to the S6 generation or to models with a backup port, as the descriptions say). Grid-connected string inverters have a separate document and map.
- Addresses are the decimal numbers of the manual and are sent as they are (address_base 0). Input registers (25000 to 36999) are read with function 0x04; setting registers (43000 to 44999) with 0x03, 0x06 and 0x10. Registers a model does not implement read 0.
- 32-bit values (U32, S32) use two registers with the high word first (big word order). Slave address 1, 9600 baud, no parity, 8 data bits, 1 stop bit by default; Modbus TCP on port 502 (one connection) on models with a LAN port.
- The query interval must be above 300 ms and the control interval above 700 ms; only one write per frame (use function 0x06).
- These tables were read from the manual's table layout; scale and unit come from the unit column (for example 0.1 V). The appendices (device type codes, national standard codes, alarm codes, status bits, battery model numbers, control switch states) and the application chapters (frequency control ancillary service, EMS) are not mapped, so values that refer to them are raw codes.
- Some registers have remarks spanning several rows in the manual; the description is attached to the first row it covers.
| Area | Address | Name | Type | Access | Unit | Scale | Description |
|---|---|---|---|---|---|---|---|
| IR | 35000 | uint16 | R | Unit | Refer to Appendix 1 for specific details (M35000) | ||
| IR | 33000 | uint16 | R | Byte: Reserved, any value other the Sub-DSP | |||
| IR | 33001 | uint16 | R | Version (displayed High-order default 0x00; than 0x00 indicates Major Version. Low-order Byte: The Main DSP Major in hexadecimal). the Descr | |||
| IR | 33002 | uint16 | R | High-order byte: Reserved, default 0x00 Low-order byte: Major version number (displayed in hexadecimal) Description: Together with the low-o | |||
| IR | 33004 | uint16 | R | then Inverter (Hexadecimal Display) Serial Number | |||
| IR | 33005 | uint16 | R | Example: If the value uploaded from register 33004 is ‘01’, and the value from register 33005 is ‘23’, then the corresponding display is ‘01 | |||
| IR | 33006 | uint16 | R | ||||
| IR | 33007 | uint16 | R | ||||
| IR | 33008 | uint16 | R | ||||
| IR | 33009 | uint16 | R | ||||
| IR | 33010 | uint16 | R | ||||
| IR | 33011 | uint16 | R | ||||
| IR | 33012 | uint16 | R | ||||
| IR | 33013 | uint16 | R | ||||
| IR | 33014 | uint16 | R | ||||
| IR | 33015 | uint16 | R | ||||
| IR | 33016 | uint16 | R | ||||
| IR | 33017 | uint16 | R | ||||
| IR | 33018 | uint16 | R | ||||
| IR | 33019 | uint16 | R | ||||
| IR | 33021 | uint16 | R | (displayed High-order byte: Reserved, default 0x00; Low-order byte: Main DSP Sub version number in hexadecimal) the Description: Together wi | |||
| IR | 33029 | uint32 ABCD | R | kWh | For Hybrid Energy Storage Inverter models: Indicates the PV energy generation data of this unit itself. For S6 Single-Phase Low-Voltage AC-C | ||
| IR | 33035 | uint16 | R | kWh | ×0.1 | ||
| IR | 33041 | uint16 | R | A | ×0.1 | ||
| IR | 33042 | uint16 | R | A | ×0.1 | ||
| IR | 33043 | int16 | R | °C | ×0.1 | Description: From Battery 1 BMS | |
| IR | 33046 | int16 | R | °C | ×0.1 | Description: Supported by S6 Generation Energy Storage Models | |
| IR | 33048 | uint16 | R | 0: Indicates 1 input 1: Indicates 2 inputs 2: Indicates 3 inputs 3: Indicates 4 inputs …… | |||
| IR | 33049 | uint16 | R | V | ×0.1 | ||
| IR | 33050 | uint16 | R | A | ×0.1 | ||
| IR | 33051 | uint16 | R | V | ×0.1 | ||
| IR | 33052 | uint16 | R | A | ×0.1 | ||
| IR | 33053 | uint16 | R | V | ×0.1 | ||
| IR | 33054 | uint16 | R | A | ×0.1 | ||
| IR | 33055 | uint16 | R | V | ×0.1 | ||
| IR | 33056 | uint16 | R | A | ×0.1 | ||
| IR | 33057 | uint32 ABCD | R | W | Represents the real-time total PV power of this unit | ||
| IR | 33059 | uint16 | R | V | ×0.1 | ||
| IR | 33060 | uint16 | R | A | ×0.1 | ||
| IR | 33061 | uint16 | R | V | ×0.1 | ||
| IR | 33062 | uint16 | R | A | ×0.1 | ||
| IR | 33063 | uint16 | R | V | ×0.1 | ||
| IR | 33064 | uint16 | R | A | ×0.1 | ||
| IR | 33065 | uint16 | R | V | ×0.1 | ||
| IR | 33066 | uint16 | R | A | ×0.1 | ||
| IR | 33067 | uint16 | R | VA | ×10 | ||
| IR | 33068 | uint16 | R | version byte: Sub | |||
| IR | 33069 | uint16 | R | High-order byte: Reserved, default 0x00 Low-order number (displayed in hexadecimal) Description: Together with the low-order byte of registe | |||
| IR | 33070 | uint16 | R | 5G/S5 generation Refer to Appendix 3 (M33095) for details. Description: Used in conjunction to with register address 33095 subdivide and dis | |||
| IR | 33073 | uint16 | R | V | ×0.1 | ||
| IR | 33074 | uint16 | R | V | ×0.1 | S6 Single-Phase High-Voltage US Version Energy Storage Inverter: L2-N voltage. | |
| IR | 33075 | uint16 | R | V | ×0.1 | S6 Single-Phase High-Voltage US Version Energy Storage Inverter: L1-L2 voltage. | |
| IR | 33076 | uint16 | R | A | ×0.1 | 5G/S5 generation For energy storage units: represents the internal inverter-side AC current. For S6 generation energy storage units: represe | |
| IR | 33077 | uint16 | R | A | ×0.1 | S6 Single-Phase High-Voltage US Version Energy Storage Inverter: L2-N current. | |
| IR | 33078 | uint16 | R | A | ×0.1 | S6 Single-Phase High-Voltage US Version Energy Storage Inverter: This register is invalid when N (Neutral) is connected; when N is register | |
| IR | 33079 | int32 ABCD | R | W | Active inverter/rectifier. power of the | ||
| IR | 33081 | int32 ABCD | R | var | Reactive inverter/rectifier. power of the | ||
| IR | 33083 | int32 ABCD | R | VA | Apparent inverter/rectifier. power of the | ||
| IR | 33092 | uint16 | R | Refer to Appendix 2 (M33092) for details. | |||
| IR | 33093 | int16 | R | °C | ×0.1 | ||
| IR | 33094 | uint16 | R | Hz | ×0.01 | ||
| IR | 33095 | uint16 | R | Refer to Appendix 3 (M33095) for details. Description: Used in conjunction with register address 33070 to subdivide and display detailed inf | |||
| IR | 33096 | int16 | R | °C | ×0.1 | ||
| IR | 33098 | uint16 | R | ||||
| IR | 33121 | uint16 | R | Refer to Appendix 4: Status Bit Definitions for details. | |||
| IR | 33123 | uint16 | R | Each bit indicates the startup status of an operating mode: 0 = not started, 1 = started. BIT00: Volt-watt Active Power). BIT01: Volt-var (V | |||
| IR | 33133 | uint16 | R | V | ×0.1 | Description: Battery 1 real-time voltage value. | |
| IR | 33134 | int16 | R | A | ×0.1 | Description: (1) Charge/discharge direction is determined by register 33135; (2) The absolute value of represents register current of Batter | |
| IR | 33135 | uint16 | R | 0: Charging; 1: Discharging. | |||
| IR | 33137 | uint16 | R | V | ×0.1 | For Description: (1) Backup port information for single-phase systems; (2) systems, split-phase represents L1-N voltage when connected to Ne | |
| IR | 33138 | uint16 | R | A | ×0.1 | Description: (1) Backup port information for single-phase systems; (2) represents current on L1 line; (3) represents current on L1 line. thr | |
| IR | 33139 | uint16 | R | % | |||
| IR | 33140 | uint16 | R | % | 100<-->100% grid only | ||
| IR | 33147 | uint16 | R | W | load; load, Represents for excluding Backup three-phase systems, represents the total active power sum of all grid phase loads. Description: | ||
| IR | 33148 | int16 | R | W | A positive value indicates power flowing out of the energy storage inverter Backup port, and a negative value indicates power flowing into t | ||
| IR | 33149 | int32 ABCD | R | W | 2. Power = -1,000 W; -1,000 (Dec) = 0xFFFCFC18 (Hex); thus, register 34344 data is 0xFFF, and register 33148 data is 0xFC18. Description: (1 | ||
| IR | 33151 | int32 ABCD | R | W | Positive value: Power flowing out of the AC Grid port; Negative value: Power flowing into the AC Grid port 10<-->1V,Description: (1) For sin | ||
| IR | 33153 | uint16 | R | V | ×0.1 | systems, | |
| IR | 33154 | uint16 | R | A | ×0.1 | For split-phase three-phase systems, systems, For | |
| IR | 33155 | uint16 | R | V | ×0.1 | systems, For | |
| IR | 33156 | uint16 | R | A | ×0.1 | three-phase systems, For | |
| IR | 33161 | uint32 ABCD | R | kWh | Description: For models with dual battery ports, this value represents the cumulative charging energy of both batteries. | ||
| IR | 33163 | uint16 | R | kWh | ×0.1 | Description: For models with dual battery ports, this value represents the cumulative charging energy of both batteries. | |
| IR | 33165 | uint32 ABCD | R | kWh | Description: For models with dual battery ports, this value represents the cumulative charging energy of both batteries. | ||
| IR | 33167 | uint16 | R | kWh | ×0.1 | Description: For models with dual battery ports, this value represents the cumulative charging energy of both batteries. | |
| IR | 33169 | uint32 ABCD | R | kWh | Represents Description: the cumulative energy consumed from the public grid | ||
| IR | 33171 | uint16 | R | kWh | ×0.1 | Represents Description: the cumulative energy consumed from the public grid | |
| IR | 33173 | uint32 ABCD | R | kWh | Represents Description: the cumulative energy feed in to the public grid | ||
| IR | 33175 | uint16 | R | kWh | ×0.1 | Represents Description: the cumulative energy feed in to the public grid | |
| IR | 33177 | uint32 ABCD | R | kWh | Represents Description: the cumulative energy consumption of the Grid Load AND the Backup Load. | ||
| IR | 33179 | uint16 | R | kWh | ×0.1 | Represents Description: the cumulative energy consumption of the Grid Load AND the Backup Load. | |
| IR | 33186 | uint32 ABCD | R | kWh | |||
| IR | 33188 | uint32 ABCD | R | kWh | |||
| IR | 33221 | uint16 | R | 0---Null 01---59.S1(253.0V 3000ms) 02---59.S2(264.5V 200ms) 03---27.S1(195.5V 1500ms) 04---27.S2( 34.5V 200ms) 05---81>.S1(50.2Hz 100ms) 06- | |||
| IR | 33222 | uint16 | R | Value: Start Complete Self Test 1—In single-item self-check state. 2—In one-key full-test state. | |||
| IR | 33223 | uint16 | R | V | ×0.1 | ||
| IR | 33224 | uint16 | R | ms | |||
| IR | 33225 | uint16 | R | V | ×0.1 | ||
| IR | 33226 | uint16 | R | ms | |||
| IR | 33227 | uint16 | R | V | ×0.1 |
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).