FoundryNet / Compare / SunSpec vs Modbus TCP
Protocol comparison

SunSpec vs Modbus TCP

The solar and storage question. SunSpec is not an alternative to Modbus — it runs on top of it — but the choice of whether to implement it is real.

Get an API key All 14 adapters

Side by side

The comparison

SunSpecModbus TCP
SpecificationSunSpec Alliance information models, carried on ModbusModicon Modbus, TCP encapsulation (Modbus-TCP)
First published20091979 (serial), 1999 (TCP)
TransportModbus TCP or Modbus RTUTCP, port 502
Data modelStandard register blocks by model number — 101/103 inverter, 201-204 meter, 124 storage, 802 battery — with an explicit scale-factor register per quantity.Flat 16-bit registers and single-bit coils. No types, no names, no metadata — a register is a number at an address.
DiscoveryYes, within Modbus: read the model chain from the well-known base address.None. You need the vendor's register map, usually a PDF.
SecurityInherits Modbus, which is to say none.None in the base specification. Whatever the network gives you.
Polling or subscriptionPolling, inherited from Modbus.Polling only. The client asks; the device answers.
Implementation complexityLow on top of Modbus, with one sharp edge: scale factors.Lowest of any protocol here. A working client is ~200 lines.
Typical industriesSolar inverters, revenue meters, battery storage.Everything. Drives, meters, inverters, sensors, PLCs, BESS.
Forge supportSupported. Scale-factor handling and SunSpec model packs ship in the kernel.Adapter shipped. 14 OEM families mapped.

Where each one wins

SunSpec

Strength. The only widely adopted attempt to put a standard information model on top of Modbus.

What it costs you. The scale factor is a separate register. Read the value and forget the factor and you are wrong by a power of ten, silently.

SunSpec adapter →

Modbus TCP

Strength. Universal, trivial to implement, works on hardware from 1985.

What it costs you. Carries no semantics whatsoever. Scaling, byte order and register meaning all live outside the protocol.

Modbus TCP adapter →

Plain Modbus on an inverter means a vendor PDF and a register map per model. SunSpec means a standard model chain you can discover. The catch is the scale factor: SunSpec stores the exponent in its own register, and code that reads the value without applying it is wrong by a power of ten in a way that looks like a plausible reading.


The Forge angle

Whichever one you pick, the output is the same

Forge is not an argument for a protocol. It is the layer that makes the choice stop mattering downstream: 16,908 curated mappings across 14 protocol adapters, resolving to 366 canonical fields with enforced units and physics bounds.

Two devices, two protocols, two vendors, two entirely different tag names — and one canonical field out. Both of these are real mappings from the corpus, not illustrations.

SunSpec — SolarEdge (meter)

# raw tag on the wire
{"M_AC_Power": 1450}
# normalized
{"active_power_kw": 1450}

Modbus TCP — Sungrow

# raw tag on the wire
{"Total active power": 1450}
# normalized
{"active_power_kw": 1450}

Same field: active_power_kw. Same unit contract, same physics bounds, same shape. Your query does not need to know which protocol the reading arrived on.

# Try it against both, with no key and no account
docker run -p 8000:8000 ghcr.io/foundrynet/forge-sandbox

Keep reading

The protocol you pick matters less than the schema underneath. The Machine Agent, weekly. Read it →
Get the thesis behind this infrastructure — The Machine Agent, weekly.