
SunSpec Model 803 — Lithium-Ion Battery Bank Model
SunSpec Model 803 is the Lithium-Ion Battery Bank Model, an open interoperability standard published by the SunSpec Alliance for monitoring multi-string lithium-ion energy storage systems. The template reads bank-level thermal data (maximum, minimum, and average module temperatures with string and module locators), string voltage and current statistics across all parallel strings, active cell balancing count, and the full set of scale-factor registers required to decode raw Modbus values into engineering units. Via Modbus TCP, the ModbusCloud Gateway collects this data from any SunSpec-certified battery system, giving operators a vendor-neutral view of bank health without proprietary software.
- Protocol
- Modbus TCP
- Connection
- Ethernet, Modbus TCP
- Registers
- 28, read only
- Brand
- SunSpec
- Last updated
Registers (28)
28 read, 0 write
| Name | Unit | Access | Address (Hidden until you enter your email) | Function (hidden) | Type (hidden) |
|---|---|---|---|---|---|
| id | Read | ||||
| l | Read | ||||
| nstr | Read | ||||
| nstrcon | Read | ||||
| modtmpmax | °C | Read | |||
| modtmpmaxstr | Read | ||||
| modtmpmaxmod | Read | ||||
| modtmpmin | °C | Read | |||
| modtmpminstr | Read | ||||
| modtmpminmod | Read | ||||
| modtmpavg | °C | Read | |||
| strvmax | V | Read | |||
| strvmaxstr | Read | ||||
| strvmin | V | Read | |||
| strvminstr | Read | ||||
| strvavg | V | Read | |||
| stramax | A | Read | |||
| stramaxstr | Read | ||||
| stramin | A | Read | |||
| straminstr | Read | ||||
| straavg | A | Read | |||
| ncellbal | Read | ||||
| cellv_sf | Read | ||||
| modtmp_sf | Read | ||||
| a_sf | Read | ||||
| soh_sf | Read | ||||
| soc_sf | Read | ||||
| v_sf | Read |
Loading registers…
Send your device list
If a device is not in the library yet, we build the template for free as soon as we have the register data.
Use cases
- Monitor maximum and minimum module temperatures bank-wide to detect thermal hotspots before they trigger a protection shutdown.
- Track the string index reported by modtmpmaxstr over time to identify a consistently overheating string needing maintenance.
- Compare strvmax and strvmin across all strings to detect voltage imbalance caused by a degraded or mismatched string.
- Alert on stramax or stramin deviating from straavg to spot a string carrying disproportionate current load.
- Record ncellbal counts over charge cycles to verify that active balancing is operating as expected and not increasing over time.
Installation
Enable Modbus TCP on your battery management system or gateway: consult the device web interface or commissioning tool under the communication or Modbus section and note the assigned IP address and unit ID.
Connect the battery system to the same IP network as the ModbusCloud Gateway, and verify that TCP port 502 is reachable from the Gateway using a Modbus test client.
In the ModbusCloud portal, add the Gateway, then import the SunSpec Model 803 template and assign the correct IP address, port, and Modbus unit ID matching your battery system.
Spot-check the connection by reading register address 0 (id): the returned value should be 803, confirming that the correct SunSpec model is being addressed.
Things to watch for
Temperature and voltage values look like large garbage integers. What is wrong?
SunSpec uses signed scale-factor registers (modtmp_sf, v_sf, a_sf, soc_sf, soh_sf, cellv_sf) that must be applied to the raw register value. The actual engineering value equals the raw integer multiplied by 10 raised to the power of the scale factor, which is typically a negative number. Confirm your Modbus client or portal template is applying these scale factors before displaying the value.
All string-locator registers (modtmpmaxstr, strvmaxstr, etc.) read 65535. Is this normal?
A value of 65535 (0xFFFF) is the SunSpec not-implemented sentinel for uint16 registers. It means the battery firmware has not populated that optional locator field. The corresponding measurement register (modtmpmax, strvmax, etc.) may still return a valid scaled value; only the per-string locators are absent.
The gateway connects but nstr reads zero or 65535. What should I check?
The nstr register must be populated by the battery management system. Verify the battery is fully initialized and not in a fault state. Also confirm the Modbus unit ID in the portal matches the slave ID configured in the BMS. Some SunSpec implementations place Model 803 at a unit ID different from the base system unit ID.
Register address 0 returns 802 instead of 803. Am I polling the wrong model?
SunSpec devices chain multiple models sequentially in the register space. Address 0 returning 802 means you are polling the Battery Base Model, not the Lithium-Ion Battery Bank Model. Use the model length register (l) of each model to step forward in the address map until you reach a model identifier of 803, then configure that base address in the portal template.
Knowledge base articles for this device

SunSpec Modbus: one register map for many inverters
SunSpec Modbus is the open register map SMA, Fronius, SolarEdge and Kostal share. The layout, int+SF vs float, the TCP port per brand and reading a mixed fleet.
Fronius Modbus: read a Symo GEN24 over Modbus TCP
Fronius Modbus explained: enable Modbus TCP on the Symo GEN24 on port 502, choose between int+SF and float, read the right SunSpec registers and scale them correctly. Practical guide for solar installers.
SMA Modbus: reading a Sunny Boy over Modbus TCP (installers)
SMA Modbus explained: enable the Modbus TCP server on port 502, choose between the SMA profile (unit ID 3) and SunSpec (unit ID 126), read the right registers, and handle the NaN values at night. Practical guide for installers.
Want to see how it works?








