Growatt inverter (Modbus RTU Protocol II)
Register map(s) for this device, each at the trust rung it earned. Addresses are 0-based
as on the wire; word order and scaling are only confirmed at the hardware-verified rung.
interop-verified
Read + decoded cleanly over a real network vs an independent third-party Modbus test server (transport and framing; reads are remapped into the server's register window, so the map's own addresses are NOT exercised). Does NOT prove word order/scaling against the actual device.
| point | address (0-based) | type | scale | unit |
| inverter_status | 0 | U16 | 1 | |
| ppv | 1 | U32BE | 0.1 | W |
| vpv1 | 3 | U16 | 0.1 | % |
| ipv1 | 4 | U16 | 0.1 | % |
| ppv1 | 5 | U32BE | 0.1 | |
| vpv2 | 7 | U16 | 0.1 | VA |
| ipv2 | 8 | U16 | 0.1 | V |
| ppv2 | 9 | U32BE | 0.1 | |
| pac | 35 | U32BE | 0.1 | W |
| fac | 37 | U16 | 0.01 | Hz |
| vac1 | 38 | U16 | 0.1 | V |
| iac1 | 39 | U16 | 0.1 | A |
| pac1 | 40 | U32BE | 0.1 | VA |
| vac2 | 42 | U16 | 0.1 | |
| iac2 | 43 | U16 | 0.1 | |
| pac2 | 44 | U32BE | 0.1 | |
| vac3 | 46 | U16 | 0.1 | |
| iac3 | 47 | U16 | 0.1 | |
| pac3 | 48 | U32BE | 0.1 | |
| eac_today | 53 | U32BE | 0.1 | V |
| eac_total | 55 | U32BE | 0.1 | Hz |
| time_total | 57 | U32BE | 0.5 | s |
| temp_inverter | 93 | I16 | 0.1 | °C |
| temp_ipm | 94 | I16 | 0.1 | °C |
| temp_boost | 95 | I16 | 0.1 | °C |
| p_bus_voltage | 98 | U16 | 0.1 | V |
| n_bus_voltage | 99 | U16 | 0.1 | V |
| vbat | 1013 | U16 | 0.1 | V |
| soc | 1014 | U16 | 1 | % |
| battery_temperature | 1040 | I16 | 0.1 | °C |
link settings as documented (unverified): RTU; default 9600 8N1; unit ID 1; FC 03,04,06,16; Valid slave device addresses are in the range of 0 - 254 decimal. 0 is the broadcast address.
bench facts as documented (unverified)
| wiring notes | RS485 interface |
| max registers/read | 125 |
| response timeout | 850 ms |
| inter-frame delay | 850 ms |
| broadcast | supported |
| protocol notes | Minimum CMD period (RS485 Time out) is 850ms. Suggestion is 1s. |
| model register | Holding 28-29 |
| serial register | Holding 23-27 |
| firmware register | Holding 9-11 |
| identification notes | New serial number registers are also available at Holding 209-223. |
| doc revision | V1.24 |
field reports — community-sourced, unverified (checked 2026-06-11)
- Grid Export Power and Grid Import Power values were swapped in previous integration versions, requiring manual correction or disabling of auto-detected 'Invert Grid Power' settings. [source]
- VPP battery charge/discharge daily values (registers 31202 and 31206) were swapped on SPH V2.01 profiles (sph_3000_6000_v201 and sph_7000_10000_v201). [source]
- Reusing SPH/SPF Modbus assumptions on Growatt WIT series hybrid inverters causes broken AC charging control, missing VPP entities, and conflicts with external controllers due to different register behaviors (e.g., signed values on register 30409). [source]
- On some Growatt SPH models, register 1044 is read-only, preventing users from writing to it to enforce priority settings. [source]
- confirmed: Baud rates [9600, 38400] with default 9600, parity N, stop bits 1, and slave addresses 0-254 (0 as broadcast) — confirmed by Growatt Inverter Modbus RTU Protocol II V1.24 and community documentation
- confirmed: Identification registers (Firmware at Holding 9-11, Model at Holding 28-29, Serial at Holding 23-27, and new serial registers at Holding 209-223) — confirmed by Growatt Inverter Modbus RTU Protocol II V1.24 and GitHub integrations
- confirmed: Inter-frame delay and response timeout of 850ms (with 1s suggested) — confirmed by Growatt Inverter Modbus RTU Protocol II V1.24 and ESPHome community threads
- confirmed: Register map addresses (inverter_status @ 0, ppv @ 1, vpv1 @ 3, ipv1 @ 4, ppv1 @ 5, vpv2 @ 7, ipv2 @ 8, ppv2 @ 9, pac @ 35, fac @ 37, vac1 @ 38, iac1 @ 39, pac1 @ 40, vac2 @ 42, iac2 @ 43, pac2 @ 44, vac3 @ 46, iac3 @ 47, pac3 @ 48, eac_today @ 53, eac_total @ 55, time_total @ 57, temp_inverter @ 93, temp_ipm @ 94, temp_boost @ 95, p_bus_voltage @ 98, n_bus_voltage @ 99, vbat @ 1013, soc @ 1014, battery_temperature @ 1040) — confirmed by Growatt Inverter Modbus RTU Protocol II V1.24 and evcc/ESPHome configurations
generated by gemini:gemini-3.5-flash · harvested from https://raw.githubusercontent.com/johanmeijer/grott/master/documentatie/Growatt-Inverter-Modbus-RTU-Protocol-II-V1-24-English-new.pdf (Growatt); manual-faithful — the document's claims, panel risk: LOW — panel concurs, no field disagreements; proved interop-verified on 2026-06-10 · recorded 2026-06-10
The trust ladder
Each rung states what it proved and what it did not. Gray until proven; green is earned by hardware only.
- generated — A prompt produced it. Unproven — anyone can regenerate this.
- structure-verified — Decode path is structurally sound (addresses, widths, finite values). Does NOT prove word order or scaling.
- interop-verified — Read + decoded cleanly over a real network vs an independent third-party Modbus test server (transport and framing; reads are remapped into the server's register window, so the map's own addresses are NOT exercised). Does NOT prove word order/scaling against the actual device.
- simulator-verified — Decoded correctly against a protocol emulator seeded with known-true values — catches word-order/scaling errors vs the emulator, not the physical device.
- hardware-verified x1 — Matched a real device with operator-attested readings as ground truth — the only rung that confirms word order + scaling on the wire.