SMA, Fronius and SolarEdge inverters all speak SunSpec: one register layout, published by the SunSpec Alliance, in which every value travels with a scale factor and the data is organised in numbered models you find by walking a chain. Learn SunSpec once and you can read all three — provided you get each brand's own switch, unit ID and port right. This page covers the standard, the inverter model every one of them implements, and the brand-specific settings. Deye, Sunsynk or Growatt hybrid? See the hybrid inverter register map.
0x5375 0x6E53 — the ASCII text "SunS". The preferred location is protocol address 40000, which is register number 40001 in 1-based notation. SMA, Fronius and SolarEdge all say the same: request address 40000. The standard also allows 0 and 50000; a client tries 40000 first.address + 2 + L. The chain ends with ID 0xFFFF.A SunSpec value is an integer with a scale factor (type sunssf, a signed 16-bit power of ten) beside it:
value = raw × 10SF // raw 2071, SF -2 → 20.71
Read the value and its scale factor in the same request, and read the scale factor every time. Fronius states that its scale factors are not static: they can change with a firmware update and at runtime (auto-scaling). A program that caches the scale factor will one day be off by a factor of ten.
| Type | "Not implemented" value |
|---|---|
| int16, sunssf | 0x8000 |
| uint16, enum16, bitfield16 | 0xFFFF |
| int32 | 0x80000000 |
| uint32, enum32, bitfield32 | 0xFFFFFFFF |
| acc16 / acc32 / acc64 | 0 |
| float32 | NaN (0x7FC00000) |
A point a device does not implement reads one of these — on a single-phase device, for example, phase B and C. Treat them as "no data", not as a reading.
Models 101, 102 and 103 are the single-, split- and three-phase inverter models with integer values and scale factors; all three have length 50 and the same point layout. Offsets count from the model's ID register. The absolute column is SolarEdge's layout, confirmed in SolarEdge's technical note, with the model ID at 40069.
| Offset | Point | Type | Units | SolarEdge address |
|---|---|---|---|---|
| 0 / 1 | Model ID (101/102/103) / length (50) | uint16 | — | 40069 / 40070 |
| 2 | A — total AC current | uint16 | A | 40071 |
| 3 / 4 / 5 | AphA / AphB / AphC | uint16 | A | 40072–40074 |
| 6 | A_SF | sunssf | — | 40075 |
| 7 / 8 / 9 | PPVphAB / BC / CA — line voltages | uint16 | V | 40076–40078 |
| 10 / 11 / 12 | PhVphA / B / C — phase voltages | uint16 | V | 40079–40081 |
| 13 | V_SF | sunssf | — | 40082 |
| 14 | W — AC power | int16 | W | 40083 |
| 15 | W_SF | sunssf | — | 40084 |
| 16 / 17 | Hz / Hz_SF | uint16 / sunssf | Hz | 40085 / 40086 |
| 18 / 19 | VA / VA_SF | int16 / sunssf | VA | 40087 / 40088 |
| 20 / 21 | VAr / VAr_SF | int16 / sunssf | var | 40089 / 40090 |
| 22 / 23 | PF / PF_SF | int16 / sunssf | % | 40091 / 40092 |
| 24–25 | WH — lifetime energy | acc32 | Wh | 40093–40094 |
| 26 | WH_SF | sunssf | — | 40095 |
| 27 / 28 | DCA / DCA_SF | uint16 / sunssf | A | 40096 / 40097 |
| 29 / 30 | DCV / DCV_SF | uint16 / sunssf | V | 40098 / 40099 |
| 31 / 32 | DCW / DCW_SF | int16 / sunssf | W | 40100 / 40101 |
| 33 / 34 / 35 / 36 | TmpCab / TmpSnk / TmpTrns / TmpOt | int16 | °C | 40102–40105 |
| 37 | Tmp_SF | sunssf | — | 40106 |
| 38 | St — operating state | enum16 | — | 40107 |
| 39 | StVnd — vendor state | enum16 | — | 40108 |
| 40–41 | Evt1 — event flags | bitfield32 | — | 40109–40110 |
| Value | State | Value | State |
|---|---|---|---|
| 1 | OFF | 5 | THROTTLED |
| 2 | SLEEPING (night) | 6 | SHUTTING_DOWN |
| 3 | STARTING | 7 | FAULT |
| 4 | MPPT (producing) | 8 | STANDBY |
Evt1 sets one bit per event: bit 0 ground fault, 1 DC over-voltage, 2 AC disconnect, 3 DC disconnect, 4 grid disconnect, 5 cabinet open, 6 manual shutdown, 7 over-temperature, 8 over-frequency, 9 under-frequency, 10 AC over-voltage, 11 AC under-voltage, 12 blown string fuse, 13 under-temperature, 14 memory loss, 15 hardware test failure.
Models 111, 112 and 113 carry the same quantities as float32 values with no scale factors (length 60). Fronius lets you choose between "float" and "int + SF"; switching it changes which model is present and shifts every model after it. In model 113, W is at offset 22 and WH at offset 32.
3 by default; the SunSpec profile on unit ID + 123, i.e. 126. Asking SunSpec questions on unit 3 is the most common SMA mistake.30775 AC active power (S32, W) and 30529 total yield (U32, Wh). A missing value reads 0x80000000, typically at night.1; smart meters start at an address offset of 200.1 on Ethernet.Model 123 (immediate controls) carries WMaxLimPct (offset 5, a percentage of rated power), WMaxLim_Ena (offset 9) and OutPFSet (offset 10), with WMaxLimPct_SF at offset 23. Each brand gates writes differently (SMA without a Grid Guard code in the current profiles, Fronius only with "inverter control via Modbus" enabled).
1 Connect — Modbus TCP with the brand's port and unit ID above.
2 Find the inverter model — an FC03 window at 40000 shows the "SunS" marker and model 1's length; the inverter model starts at 40002 + 2 + L.
3 Poll the model in one request — e.g. 40069, quantity 52, so every value arrives together with its scale factor.
4 Apply the scale factors (Pro) — tag the raw value and its SF, and let a Structured Text line compute the result every cycle: AC_Power := W_raw * Math.pow(10, W_SF) / 1000;. Because the SF is read each time, the value stays right when the inverter changes it. A fixed Scale on a register tag is fine for devices with constant gains, but not for SunSpec.
SunSpec three-phase inverter workspace with scale factors applied by script. Open via Workspace › Open in ModbusManager Pro.
Tags, Structured Text, dashboard and historian for your inverter. Free 14-day trial. No credit card. Windows 10/11.
Both describe the same register: 40001 is the 1-based register number, 40000 the protocol address you put in the request. SMA, Fronius and SolarEdge all say to request 40000.
The scale factor was not applied, or was read once and cached. Every value is raw × 10SF, and the scale factor can change — read it in the same request as the value, every time.
126 by default: SMA's own profile is on unit ID 3 and SunSpec on that ID plus 123.
1502 by default on SetApp inverters, 502 on older inverters with an LCD menu. Modbus TCP is off until enabled, and only one connection is accepted at a time.
Walk the chain: read the ID and length at 40002, jump 2 + length, and repeat until you reach ID 101, 102, 103 (integer) or 111–113 (float). The offsets inside the model are the same on every brand.
SunSpec Alliance model definitions (models 1, 101–103, 111–113, 123, 201–203), github.com/sunspec/models; SMA, SunSpec Modbus technical information (SunSpecModbus-TI-en-11) and SMA and SunSpec Modbus Interface (SMA-Modbus-general-TI-en-10); Fronius, Fronius GEN24 Modbus TCP & RTU (42,0410,2649) and Fronius Datamanager Modbus TCP & RTU (42,0410,2049); SolarEdge, Technical Note – SunSpec Logging, versions 3.2 (June 2025) and 3.3 (October 2026). Model positions vary by brand, firmware and settings; the offsets within a model do not.
SolarEdge accepts one Modbus client and SMA and Fronius ask you to poll gently. ModbusManager Pro can be that one client — reading the inverters, the meters and any other RS-485 device on site — and republish the values as one Modbus map for the building management system, the EMS or a PLC.
Modbus gateway software →We use Google Analytics cookies to see how the site is used. You can accept or decline — declining keeps analytics off. See our Privacy Policy.