SunSpec Modbus Register Map: AC Power, Battery SOC and Energy Across Solar Brands
SunSpec defines a standard Modbus register layout for solar inverters, allowing a single KNX Modbus gateway configuration to work across multiple brands. Understanding which registers hold AC power, battery state of charge, and energy totals — and knowing the brand-specific port and unit ID differences — is the foundation of any solar KNX integration.
SunSpec Alliance and the standard register map
The SunSpec Alliance is a consortium of solar industry manufacturers that defines standard Modbus register maps. Any inverter labelled SunSpec-compliant uses the same register addresses for core measurements, regardless of brand. This standardisation dramatically simplifies KNX Modbus gateway configuration when integrating multiple inverter brands on the same site.
The SunSpec Base Model begins at Modbus holding register 40001 (using 1-based Modbus addressing) or register address 40000 (0-based). This block contains the manufacturer name, model string, and firmware version as ASCII text — useful for verifying the correct device is connected during commissioning.
SunSpec Model 103 — three-phase inverter key registers
All registers: Holding Registers (FC3), 1-based addressing
40001-40002: SunSpec ID (0x5375 0x6e53 = "SunS") — verify connectivity
40003: Base model length
40004-40021: Manufacturer name (ASCII, 32 chars)
40022-40037: Model string (ASCII, 32 chars)
SunSpec Model 103 (Three-Phase Inverter):
40083: AC Power (int16, W) — current output power
40085: AC Power Scale Factor (int16, typically -1 or -2)
Apply: actual_W = reg40083 * 10^(reg40085)
40089: AC Frequency (uint16, Hz, scale factor at 40090)
Typical value: 5000 = 50.00 Hz with SF -2
40093-40094: AC Energy (uint32, Wh) — lifetime production
40095: AC Energy Scale Factor (int16)
40101: DC Voltage (uint16, V, scale factor at 40102)
Typical: 3500 with SF -1 = 350.0V
40107: Operating state (uint16):
1=Off, 2=Sleeping, 3=Starting, 4=Running, 5=Throttled
6=ShuttingDown, 7=Fault, 8=StandbyBrand-specific port and unit ID reference
While SunSpec standardises register addresses, the Modbus TCP port and unit ID vary by brand. Using the wrong port or unit ID is the most common cause of failed KNX gateway commissioning. The table below covers the most common brands installed across Germany, the Netherlands, and Benelux.
| Brand / Model | TCP Port | Unit ID | Notes |
|---|---|---|---|
| SolarEdge HD-Wave | 1502 | 1 | Enable in SE app: Communication → Modbus TCP |
| KOSTAL PLENTICORE | 1502 | 71 | Modbus TCP enabled by default |
| Fronius GEN24 Plus | 502 | 1 | Enable: Settings → Modbus → TCP |
| GoodWe ES / ET | 502 | 247 | Default unit ID 247 — some FW versions use 1 |
| SMA Sunny Boy Storage | 502 | 3 | Enable via SMA Sunny Portal → Modbus |
| Sungrow SH series | 502 | 1 | Enable in iSolarCloud app or local web UI |
| Huawei SUN2000 | 6607 | 0 | Requires Smart Dongle — NOT port 502 |
| Enphase IQ8 gateway | 80 (HTTP/JSON) | N/A | Enphase uses Envoy HTTP API, not Modbus |
Huawei SUN2000 critical note: the Huawei SUN2000 uses port 6607 (not the standard 502) and unit ID 0 (not 1). This is the single most common configuration error when integrating Huawei inverters with KNX gateways. Always verify with Modbus Poll before configuring the gateway.
SunSpec Model 802 — battery storage registers
SunSpec Model 802 defines standard registers for battery storage systems. Not all inverter brands implement Model 802 — check the inverter manual or SunSpec model scan (starting at register 40001) to confirm whether the battery model is present. If not, use the proprietary brand registers documented below.
SunSpec Model 802 — battery storage key registers
SunSpec Model 802 (Battery Storage):
40255: Battery SOC (uint16, %) — state of charge 0-100
40258-40259: Battery Power (int32, W)
Positive = charging, Negative = discharging
40261: Battery Voltage (uint16, 0.01V)
40263: Battery Current (int16, 0.01A)
40265: Battery Temperature (int16, 0.1°C)
40267: Battery State (uint16):
1=Disconnected, 2=Initialising, 3=Connected
4=Standby, 5=SOC Protection, 6=Fault, 7=Charging
8=Discharging
Proprietary battery registers (where Model 802 absent):
SolarEdge: reg 0xE140 (battery level %), 0xE18D (battery power W)
Fronius GEN24: reg 40352 (today generation float32 Wh)
reg 40358 (grid power float32 W)
KOSTAL PLENTICORE: register 154 (battery SOC, uint16, 1%)
Configure 2-register reads for int32 values:
In KNX gateway: set data type to 32-bit signed integer
High word first (big-endian) for all SunSpec int32 registersKNX Modbus gateway configuration
Weinzierl 5010 and MDT SCN-MIG.01 are the most commonly used KNX Modbus TCP gateways in European KNX projects. Both support multiple Modbus devices and flexible DPT mapping. Configure each inverter as a separate Modbus device with its brand-specific IP address, port, and unit ID.
Weinzierl 5010 configuration for SolarEdge inverter
Weinzierl KNX Modbus Gateway 5010 — ETS5/6 plug-in config: Device 1 — SolarEdge HD-Wave: IP: 192.168.1.50 Port: 1502 Unit ID: 1 Protocol: Modbus TCP Poll task 1 — AC Power: Register: 40082 (0-based = 40083 - 1) Type: int16, signed Scale: read register 40084 (SF), apply: value * 10^SF KNX GA: 6/0/1 DPT: 9.001 (2-byte float, kW — divide by 1000 in gateway) Poll interval: 10 seconds Poll task 2 — Battery SOC: Register: 0xE140 (SolarEdge proprietary, 0-based) Type: uint16 KNX GA: 6/0/3 DPT: 5.001 (1-byte %, 0-100) Poll interval: 60 seconds Poll task 3 — AC Energy lifetime: Registers: 40092-40093 (2 registers, uint32) Type: 32-bit unsigned integer, big-endian KNX GA: 6/0/4 DPT: 13.013 (4-byte signed, Wh) Poll interval: 300 seconds
Scale factors — the most common integration error
SunSpec defines scale factor registers that must be applied to raw register values. The scale factor is a signed integer representing a power of 10 multiplier. Failing to apply the scale factor causes 10x or 100x errors in power and energy values — a commissioned system will appear to work but report incorrect data.
Scale factor application — AC power example
Register 40083 raw value: 3500 (int16) Register 40085 SF value: -1 (int16) Actual AC power = 3500 * 10^(-1) = 350.0 W Without SF: gateway would report 3500W (10x error) With SF correctly applied: 350W (correct) Weinzierl 5010 auto-SF option: Enable "Read Scale Factor register" in poll task config Gateway reads SF register automatically, applies to value Outputs scaled float to KNX DPT 9.001 MDT SCN-MIG.01: Manually enter the SF value as a fixed divisor If SF is always -1 for your inverter: enter divisor 10 Not suitable if SF value changes dynamically Best practice: verify SF value with Modbus Poll tool first Read register 40085 — confirm it returns -1 or -2 Only then configure gateway with that fixed SF Most residential inverters have fixed SF values
Commissioning verification with Modbus Poll
Before configuring the KNX gateway, verify the inverter Modbus TCP connection and register values using Modbus Poll (free Windows software). This step catches connection, port, unit ID, and register address errors before they propagate into the KNX gateway configuration.
Modbus Poll commissioning verification steps
1. Open Modbus Poll → Connection → Connect Mode: Modbus TCP/IP IP: <inverter IP or Smart Dongle IP> Port: <brand-specific port from table above> Slave ID: <brand-specific unit ID> 2. Setup → Read/Write Definition: Function: 03 (Read Holding Registers) Start address: 40000 (0-based = reg 40001) Quantity: 130 (reads registers 40001-40130) Click OK 3. Verify register 40001-40002 contains SunSpec ID: Should read: 21843 and 28243 (0x5375 and 0x6E53) Confirms SunSpec-compliant device at this address 4. Find register 40083 — AC Power raw value Compare with inverter display ± 5W Read register 40085 for scale factor 5. Apply scale factor: raw * 10^SF = actual watts Verify result matches inverter LCD or app display 6. Only configure KNX gateway after confirming: - Correct IP, port, unit ID connects successfully - AC power register matches inverter display - Battery SOC register (40255 or brand-specific) is correct
uint32 register read tip
For 32-bit registers (AC Energy, Battery Power), read 2 consecutive holding registers. Modbus Poll displays them separately — combine: (reg_n * 65536) + reg_n+1 for big-endian uint32. Most KNX gateways handle this automatically when configured as 32-bit type.
Enabling Modbus on inverters
Most inverters ship with Modbus TCP disabled for security. Enable via the manufacturer app or local web interface before attempting connection. SolarEdge requires the installer login in the SE installer app. Fronius GEN24 enables Modbus in the local web UI under Settings.
Need a solar panel with KNX Modbus integration built to spec?
We design and build low-voltage panels with SunSpec-verified Modbus TCP gateways, KNX DPT mapping for AC power and battery SOC, and full commissioning documentation delivered tested to your site.
Request a quote →