All devices

FranklinWH · Home battery

aPower battery with aGate (SunSpec DER) Modbus register map

Download JSONSupplier documentationSuggest an edit

Default configuration

Protocol
Modbus TCP
Port
502
Unit ID
1
Addressing
0-based
Byte order
Big endian
Word order
High word first

Register map

AddressCountNameTypeUnitScaleAccess
02
SunSpec identifier ("SunS")
0x53756E53. The aGate serves its SunSpec model chain from PDU 0; the M1 header at 2 and the M701 header at 70 only line up when the marker is read here.
UInt32-1R
21
SunSpec model ID (common)
1 = common model.
UInt16-1R
31
SunSpec common model length
66 registers follow.
UInt16-1R
416
Manufacturer
"FranklinWH" on firmware V12R02B60D00 and later, "FranklinWH Technologies Co., Ltd" before.
Ascii-1R
2016
Model
e.g. "aGate X".
Ascii-1R
368
Options
Ascii-1R
448
Firmware version
Model 1 Vr, e.g. "V12R02B60D00".
Ascii-1R
5216
Serial number
Ascii-1R
681
Modbus device address (DA)
1 on the reference unit; the aGate answers on unit ID 1 and 2 alike.
UInt16-1RW
701
SunSpec model ID (DER measurement AC)
701.
UInt16-1R
711
SunSpec model 701 length
153 registers follow.
UInt16-1R
741
Inverter operating state (InvSt)
0 = off, 1 = sleeping, 2 = starting, 3 = running, 4 = throttled, 5 = shutting down, 6 = fault, 7 = standby (the values SunSpec model 701 defines).
UInt16-1R
751
Connection state (ConnSt)
0 = disconnected, 1 = connected (the values SunSpec model 701 defines).
UInt16-1R
782
DER operating mode (DERMode)
Bitfield: bit 0 = grid following, bit 1 = grid forming, bit 2 = PV clipped.
UInt32-1R
801
AC active power at the point of connection (W)
SunSpec M701 W: the power the aGate exchanges with the grid. Scale comes from W_SF (186); 0 on the reference unit, so the raw value is watts.
Int16W1R
861
AC line-to-neutral voltage (LNV)
Scale from V_SF (184), which reads -1 on the reference unit.
UInt16V0.1R
872
AC frequency (Hz)
Scale from Hz_SF (185), which reads -3 on the reference unit.
UInt32Hz0.001R
1841
AC voltage scale factor (V_SF)
Multiply the raw voltage by 10^this. -1 on the reference unit.
Int16-1R
1851
Frequency scale factor (Hz_SF)
Multiply the raw frequency by 10^this. -3 on the reference unit.
Int16-1R
1861
AC active power scale factor (W_SF)
Multiply the raw power by 10^this. 0 on the reference unit.
Int16-1R
2251
SunSpec model ID (DER capacity)
702.
UInt16-1R
2261
SunSpec model 702 length
50 registers follow.
UInt16-1R
2271
Maximum rated active power (WMaxRtg)
Reads 0 on the reference aGate; the charge and discharge ratings below carry the real figures.
UInt16W1R
2351
Maximum charge rate (WChaRteMaxRtg)
5000 W with one aPower battery on the reference site. Scale from W_SF (270).
UInt16W1R
2361
Maximum discharge rate (WDisChaRteMaxRtg)
5000 W with one aPower battery on the reference site. Scale from W_SF (270).
UInt16W1R
2701
Capacity active power scale factor (W_SF)
Multiply the raw capacity values by 10^this. 0 on the reference unit.
Int16-1R
10331
SunSpec model ID (DER storage capacity)
713.
UInt16-1R
10341
SunSpec model 713 length
7 registers follow.
UInt16-1R
10351
Storage energy rating (WHRtg)
13600 Wh on the reference site. Scale from WH_SF (1040).
UInt16Wh1R
10361
Storage energy available (WHAvail)
SunSpec defines it as WHRtg * SoC * SoH. Scale from WH_SF (1040).
UInt16Wh1R
10371
Battery state of charge (SoC)
Scale from Pct_SF (1041), which reads -1 on the reference unit.
UInt16%0.1R
10381
Battery state of health (SoH)
Scale from Pct_SF (1041).
UInt16%0.1R
10391
Storage status (Sta)
SunSpec storage status, not a charge/discharge state: 0 = OK, 1 = warning, 2 = error.
UInt16-1R
10401
Energy scale factor (WH_SF)
Multiply the raw energy values by 10^this. 0 on the reference unit.
Int16-1R
10411
Percentage scale factor (Pct_SF)
Multiply the raw percentage values by 10^this. -1 on the reference unit.
Int16-1R
10421
SunSpec model ID (DER measurement DC)
714.
UInt16-1R
10431
SunSpec model 714 length
43 registers follow.
UInt16-1R
10442
DC port alarms (PrtAlrms)
Bitfield of the SunSpec DC port alarm flags.
UInt32-1R
10461
Number of DC ports (NPrt)
UInt16-1R
10481
Battery DC power (DCW)
Positive while discharging, negative while charging (-100 W was a charging battery on the reference site). Scale from DCW_SF (1059), 0 there.
Int16W1R
10591
DC power scale factor (DCW_SF)
Multiply the raw DC power by 10^this. 0 on the reference unit.
Int16-1R
10871
SunSpec model ID (DER control)
715.
UInt16-1R
10881
SunSpec model 715 length
7 registers follow.
UInt16-1R
10891
Local / remote control (LocRemCtl)
1 = local control on the reference unit; the aGate must be in remote control before a client can dispatch the battery through model 704.
UInt16-1R
10961
SunSpec model ID (solar module)
502.
UInt16-1R
10971
SunSpec model 502 length
28 registers follow.
UInt16-1R
11001
PV DC power scale factor (W_SF)
Multiply the raw PV power values by 10^this. 0 on the reference unit.
Int16-1R
11011
PV energy scale factor (Wh_SF)
Multiply the raw PV energy by 10^this. 0 on the reference unit.
Int16-1R
11172
PV lifetime energy (OutWh)
Scale from Wh_SF (1101). Matches the vendor extension register 15510.
UInt32Wh1R
11191
PV output power (OutPw)
Total PV output the aGate reports. Scale from W_SF (1100).
Int16W1R
155021
Total PV power (FranklinWH extension)
FranklinWH extension register outside the SunSpec chain: all PV sources combined.
UInt16W1R
155061
Home load, quantised (FranklinWH extension)
FranklinWH extension register: house consumption in steps of about 100 W. Use 16000 for the fine value.
UInt16W1R
155071
Operating mode (FranklinWH extension)
1 = emergency backup, 2 = self-consumption, 3 = time-of-use. Those three are measured; no other value has been observed. Writes are not documented and did not take effect on the reference firmware.
UInt16-1R
155081
Self-consumption reserve (FranklinWH extension)
SoC reserve used in self-consumption mode.
UInt16%1R
155091
Time-of-use reserve (FranklinWH extension)
SoC reserve used in time-of-use mode. Firmware V10R01B04D00 repeated 15508 here; V12R02B60D00 reports the TOU reserve.
UInt16%1R
155102
PV lifetime energy (FranklinWH extension)
FranklinWH extension copy of the solar module lifetime energy (M502 OutWh).
UInt32Wh1R
160001
Home load, high resolution (FranklinWH extension)
Undocumented FranklinWH register, measured: house consumption in about 1 W steps.
UInt16W1R
160011
Reserve of the active mode (FranklinWH extension)
Undocumented FranklinWH register, measured on V12R02B60D00: 100 in emergency backup, 15508's value in self-consumption, 15509's in time-of-use.
UInt16%1R

Notes

FranklinWH aPower batteries are read through the aGate gateway's Modbus TCP server (port 502; the aGate ignores the unit identifier - every UID tried (1, 2, 3, 126, 247) returned the same 17 models - so the unit_id of 1 in this file is arbitrary (the community project's default is 2); DA = 1). FranklinWH publishes no register map, so this file follows the SunSpec 700-series (IEEE 1547) model definitions (github.com/sunspec/models, models 1, 502, 701, 702, 713, 714, 715) with the absolute PDU addresses and scale-factor values recorded in the community project david2069/franklinwh-modbus (docs v0.10.1, snapshot of firmware V12R02B60D00, 2026-10-20). Addresses are 0-based PDU addresses: SunS at 0-1, model headers at 2 (M1), 70 (M701), 225 (M702), 1033 (M713), 1042 (M714), 1087 (M715), 1096 (M502), each block starting two registers after its header; the guide's 4xxxx numbers are the same PDU + 40000, and the firmware also mirrors the chain at 40000. SunSpec scale factors are themselves registers (184 V_SF, 185 Hz_SF, 186 W_SF, 270 and 1100 W_SF, 1040 WH_SF, 1041 Pct_SF, 1059 DCW_SF); the fixed factors here are the values those registers held on the reference unit, so re-read them if numbers look wrong. Omitted on purpose: the 64-bit accumulators (M701 TotWhInj/TotWhAbs, M714 DCWhInj/DCWhAbs) because the app has no 64-bit integer type (extension 15510 carries the PV total in 32 bits); M714 DCA because the aGate leaves it at 0; and the model 704 dispatch registers (WSetEna at PDU 318, WSetMod 319, WSet 320) because the write path is only partly understood and the charge/discharge sign convention differs between the vendor's app and the hardware. FranklinWH extension registers 15500-16002 are vendor-specific and undocumented; their meanings were measured on real hardware, writes did not take effect, and they can change with firmware. Only one Modbus client can poll an aGate at a time.