Sol-Ark · Solar inverter
Sol-Ark 5K / 8K / 12K / 15K hybrid inverter Modbus register map
Default configuration
- Protocol
- RS485
- Port
- 502
- Unit ID
- 1
- Addressing
- 0-based
- Byte order
- Big endian
- Word order
- Low word first
- Baud rate
- 9600
- Parity
- None
- Data bits
- 8
- Stop bits
- 1
This device has an RS-485 interface. Reach it through a Modbus RTU-to-TCP gateway, configured with the factory serial settings above.
Register map
| Address | Count | Name | Type | Unit | Scale | Access |
|---|---|---|---|---|---|---|
| 60 | 1 | Day active power (grid port energy) Inverter grid-port energy for the current day; signed. | Int16 | kWh | 0.1 | R |
| 63 | 2 | Total active power (grid port energy) Low word at 63, high word at 64. | Int32 | kWh | 0.1 | R |
| 70 | 1 | Day battery charge power | UInt16 | kWh | 0.1 | R |
| 71 | 1 | Day battery discharge power | UInt16 | kWh | 0.1 | R |
| 72 | 2 | Total battery charge power Low word at 72, high word at 73. | UInt32 | kWh | 0.1 | R |
| 74 | 2 | Total battery discharge power Low word at 74, high word at 75. | UInt32 | kWh | 0.1 | R |
| 76 | 1 | Day grid buy power | UInt16 | kWh | 0.1 | R |
| 77 | 1 | Day grid sell power | UInt16 | kWh | 0.1 | R |
| 81 | 2 | Total grid sell power Low word at 81, high word at 82. | UInt32 | kWh | 0.1 | R |
| 84 | 1 | Day load power Document labels this row "SG: Day Load Power (Wh)". | UInt16 | kWh | 0.1 | R |
| 85 | 2 | Total load power Low word at 85, high word at 86. | UInt32 | kWh | 0.1 | R |
| 90 | 1 | DC/DC transformer temperature Same offset as register 91; not used on the 15K. | UInt16 | °C | 0.1 | R |
| 91 | 1 | IGBT heat sink temperature Offset -56.2 degC reads 438, 0 degC reads 1000, 50.5 degC reads 1505. | UInt16 | °C | 0.1 | R |
| 96 | 2 | Total PV power over all time Low word at 96, high word at 97. | UInt32 | kWh | 0.1 | R |
| 103 | 1 | Fault information word 1 Bit field; see the fault table at the end of the vendor document. | Binary | - | 1 | R |
| 104 | 1 | Fault information word 2 | Binary | - | 1 | R |
| 105 | 1 | Fault information word 3 | Binary | - | 1 | R |
| 106 | 1 | Fault information word 4 Four 16-bit words, 64 fault bits in total, one bit per fault. | Binary | - | 1 | R |
| 107 | 1 | Corrected battery capacity Value 100 means 100 Ah. | UInt16 | Ah | 1 | R |
| 108 | 1 | Daily PV power Total PV energy produced today. | UInt16 | kWh | 0.1 | R |
| 109 | 1 | DC (PV) voltage input 1 | UInt16 | V | 0.1 | R |
| 110 | 1 | DC (PV) current input 1 | UInt16 | A | 0.1 | R |
| 111 | 1 | DC (PV) voltage input 2 | UInt16 | V | 0.1 | R |
| 112 | 1 | DC (PV) current input 2 | UInt16 | A | 0.1 | R |
| 113 | 1 | DC (PV) voltage input 3 Applies to the 15K only. | UInt16 | V | 0.1 | R |
| 114 | 1 | DC (PV) current input 3 Applies to the 15K only. | UInt16 | A | 0.1 | R |
| 150 | 1 | Grid side voltage L1-N | UInt16 | V | 0.1 | R |
| 151 | 1 | Grid side voltage L2-N | UInt16 | V | 0.1 | R |
| 152 | 1 | Grid side voltage L1-L2 | UInt16 | V | 0.1 | R |
| 157 | 1 | Load voltage L1 | UInt16 | V | 0.1 | R |
| 158 | 1 | Load voltage L2 | UInt16 | V | 0.1 | R |
| 160 | 1 | Grid side current L1 | Int16 | A | 0.01 | R |
| 161 | 1 | Grid side current L2 | Int16 | A | 0.01 | R |
| 164 | 1 | Inverter output current L1 | Int16 | A | 0.01 | R |
| 165 | 1 | Inverter output current L2 | Int16 | A | 0.01 | R |
| 167 | 1 | Grid side L1 power | Int16 | W | 1 | R |
| 168 | 1 | Grid side L2 power | Int16 | W | 1 | R |
| 169 | 1 | Total power of grid side L1-L2 > 0 = buying, < 0 = selling. | Int16 | W | 1 | R |
| 172 | 1 | Grid external total power Sum of the external CT readings (registers 170 and 171). | Int16 | W | 1 | R |
| 173 | 1 | Inverter output L1 power | Int16 | W | 1 | R |
| 174 | 1 | Inverter output L2 power | Int16 | W | 1 | R |
| 175 | 1 | Inverter output total power | Int16 | W | 1 | R |
| 178 | 1 | Load side total power | Int16 | W | 1 | R |
| 181 | 1 | Generator port voltage L1-L2 | UInt16 | V | 0.1 | R |
| 182 | 1 | Battery temperature Real value of offset + 1000: raw 1200 = 20.0 degC. | UInt16 | °C | 0.1 | R |
| 183 | 1 | Battery voltage Raw 4100 = 41.0 V. | UInt16 | V | 0.01 | R |
| 184 | 1 | Battery state of charge | UInt16 | % | 1 | R |
| 186 | 1 | PV1 input power | Int16 | W | 1 | R |
| 187 | 1 | PV2 input power | Int16 | W | 1 | R |
| 188 | 1 | PV3 input power Applies to the 15K only. | Int16 | W | 1 | R |
| 189 | 1 | PV4 input power | Int16 | W | 1 | R |
| 190 | 1 | Battery output power Signed; positive = discharging. | Int16 | W | 1 | R |
| 191 | 1 | Battery output current | Int16 | A | 0.01 | R |
| 192 | 1 | Load frequency | UInt16 | Hz | 0.01 | R |
| 193 | 1 | Inverter output frequency | UInt16 | Hz | 0.01 | R |
| 194 | 1 | Grid side relay status 1 = open (disconnected), 2 = closed. | UInt16 | - | 1 | R |
| 195 | 1 | Generator side relay status Low 4 bits: 0 open, 1 closed, 2 no connection, 3 closed when the generator is on. | UInt16 | - | 1 | R |
| 196 | 1 | Generator relay frequency | UInt16 | Hz | 0.01 | R |
Read this device live with Modbus Connect, free for Windows, macOS and Linux
Related guides
Notes
Source: Sol-Ark "Modbus RTU Protocol, Sol-Ark Hybrid Inverters: 5k, 8k, 12k, 15k", V1.4 (2023-10-13, added the 15K and the total-energy registers). The vendor document is public, but sol-ark.com did not list it in the rendered or indexed document library, so it was read from the public mirror https://github.com/chuyskywalker/solark-esphome/blob/main/Modbus%20Sol-Ark%20V1.4%20(Public%20Release).pdf. Fixed interface settings from the document: RS-485, 9600 bps, no parity, 8 data bits, 1 stop bit, and "The inverter's Slave ID is 0x01. This cannot be changed." The map is read-only (function code 0x03 only); the vendor states it does not support third-party Modbus, that the inverter must have "BMS Lithium Batt" set to 00, and that it cannot be used at the same time as RS-485 battery communication. Addresses are the decimal wire addresses: the document's own example reads address 107 as PDU 0x006B. 32-bit values carry the low word at the lower address (63/64, 72/73, 74/75, 81/82, 85/86, 96/97), so the seed declares word order LowFirst. Deliberate omissions: the total grid buy power pair at 78 (low word) and 80 (high word) - register 79 (grid frequency) sits between the two halves, so it cannot be expressed as one 32-bit row without overlapping a register; the serial-number block at 3-7, whose ten ASCII bytes are documented across addresses whose byte-to-register mapping the document leaves open; registers 153/155/156/162/163/170/171/176/177/179/180, whose labels wrap across two PDF rows and could not be paired with their address without guessing; and the fault-code tables, which are descriptions and not registers.