
SunSpec Model 64111 — Basic Charge Controller
SunSpec Model 64111 is a vendor-specific Modbus TCP model defining the Basic Charge Controller data block, used in off-grid and hybrid solar installations where a MPPT charge controller manages power flow between a PV array and a battery bank. The template reads real-time measurements including battery voltage, array voltage, output power, charge current, and charger state, alongside daily totals for kilowatt-hours and amp-hours output. Lifetime peak records for power, battery voltage, and PV open-circuit voltage are also accessible. Each physical measurement is scaled by a corresponding scale-factor register per the SunSpec standard. Connecting this template in ModbusCloud gives installers continuous visibility into charge controller performance without manual polling.
- Protocol
- Modbus TCP
- Connection
- Ethernet, Modbus TCP
- Registers
- 25, read only
- Brand
- SunSpec
- Last updated
Registers (25)
25 read, 0 write
| Name | Unit | Access | Address (Hidden until you enter your email) | Function (hidden) | Type (hidden) |
|---|---|---|---|---|---|
| id | Read | ||||
| l | Read | ||||
| port | Read | ||||
| v_sf | Read | ||||
| a_sf | Read | ||||
| p_sf | Read | ||||
| ah_sf | Read | ||||
| kwh_sf | Read | ||||
| battv | V | Read | |||
| arrayv | V | Read | |||
| outputa | A | Read | |||
| inputa | A | Read | |||
| chargerst | Read | ||||
| outputw | W | Read | |||
| todayminbatv | V | Read | |||
| todaymaxbatv | V | Read | |||
| vocv | V | Read | |||
| todaymaxvoc | V | Read | |||
| todaykwhoutput | kWh | Read | |||
| todayahoutput | AH | Read | |||
| lifetimekwhout | kWh | Read | |||
| lifetimeahout | kAH | Read | |||
| lifetimemaxout | W | Read | |||
| lifetimemaxbatt | V | Read | |||
| lifetimemaxvoc | V | 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 daily kilowatt-hour and amp-hour output to verify that the PV array is delivering expected energy to the battery bank.
- Track the charger state register to confirm the controller progresses correctly through bulk, absorption, and float charge stages.
- Alert on unusually low today-minimum battery voltage to detect overnight loads that are discharging the bank too deeply.
- Compare lifetime maximum PV open-circuit voltage against array specifications to identify wiring or over-voltage events.
- Report daily amp-hour totals across multiple sites to benchmark charge controller performance over seasonal periods.
Installation
Enable Modbus TCP on the charge controller or its communication gateway: navigate to the communication or Modbus section of the device web interface and confirm TCP is active on port 502.
Connect the charge controller or gateway to the same LAN segment as the ModbusCloud Gateway, and note the device IP address for later use.
In your ModbusCloud portal, add the ModbusCloud Gateway, then import the SunSpec Model 64111 template and enter the device IP address, port 502, and the correct Modbus unit ID.
Read back the battv and outputw registers in the portal's live view and confirm the values match the figures shown on the controller's local display or web interface.
Things to watch for
All voltage and power values look wrong or too small. Why?
SunSpec Model 64111 uses signed scale-factor registers (v_sf, a_sf, p_sf, ah_sf, kwh_sf). Raw register values must be multiplied by 10 raised to the power of the corresponding scale factor. If your client ignores these registers, all measurements will be off by a fixed power of ten. Ensure your integration reads and applies each scale factor before displaying values.
The gateway connects but all registers return zero or NaN. What now?
Verify the Modbus unit ID configured in the portal matches the device or gateway unit ID exactly. SunSpec devices may use a non-default unit ID such as 1 or a vendor-assigned value. Also confirm the controller's Modbus TCP service is running and reachable on port 502 from the Gateway's network segment.
The chargerst register shows a number. How do I interpret it?
The chargerst field is an enumerated state code. Typical values represent charging stages such as off, bulk, absorption, float, or equalize. Consult the specific controller's Modbus documentation for the exact enumeration table, as values vary by manufacturer implementing this vendor-specific model.
Lifetime counters like lifetimekwhout seem stuck at zero. Is something broken?
Lifetime accumulation registers are uint16 and may have rolled over or may only be updated at defined intervals by the controller firmware. Cross-check with the kwh_sf scale factor to ensure the value is not being misread as zero due to scaling. If the controller has been in service for a long time, the uint16 range may also have overflowed.
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?








