How to Read Growatt Inverter Data Locally (RS485 to MQTT)
No 5-minute cloud delays like the official ShineWiFi dongle. Here is the full engineering guide on how to poll Growatt Modbus RTU data locally for real-time SCADA or home automation dashboards.
1. The Challenge with Growatt Inverters
Growatt solar inverters are super popular and reliable in hardware. But their default data logging is entirely dependent on external cloud servers. If you’re looking at industrial SCADA systems or more sophisticated-energy dashboards, you want real-time, local, subsecond access to the inverter’s metrics without opening your OT network to the internet.
By understanding the native Growatt RS485 protocol, engineers can establish a stable, local data pipeline and bypass the cloud completely.
Fortunately, almost all Growatt models have a standard RS485 physical layer that talks Modbus RTU on the ShineWiFi dongle port.
Growatt RS485 Pinout & Register Map
Part A: Universal RS485 Pinout
Depending on your inverter model (MIN, MAC or MAX series) the COM port is either a standard RJ45 jack or a multi-pin circular connector. You only need three wires to connect your RS485 Master (USB adapter, PLC or Edge Gateway) to create a serial link. For stable industrial deployment, always use shielded twisted pair (STP) cables and install a 120Ω termination resistor at the last inverter on the bus.
| Growatt COM Port (RJ45 / SYS) | RS485 Master Terminal | Signal Function |
|---|---|---|
| Pin 3 (or labeled RS485A) | A+ (Data+) | Positive Data Line |
| Pin 4 (or labeled RS485B) | B- (Data-) | Negative Data Line |
| Pin 5 (GND) | GND | Signal Ground (Crucial for preventing CRC noise) |
🔌 Quick Wiring Reference (Growatt -> Valtoris)
Pin 4
Pin 5
——- Data- ——->
——- GND ——->
T- (RS485 B)
GND
Part B: Modbus Register Map (Key Metrics)
To successfully extract telemetry, you must query the correct Growatt Modbus registers.
Configure your serial polling device as follows: Baud Rate: 9600, Data Bits: 8, Stop Bits: 1, Parity: None. The default Slave ID for Growatt is usually 1. Your solar metrics can be extracted with the following Input Registers (Function Code 0x04):
| Register (Dec) | Data Type | Description | Multiplier / Unit |
|---|---|---|---|
| 30001 | U16 | Inverter Status (0=Wait, 1=Normal, 3=Fault) | N/A |
| 30002 | U32 | Input Power (PV Power) | 0.1 W |
| 30004 | U16 | PV1 Voltage | 0.1 V |
| 30036 | U32 | Current Active Power (Grid Output) | 0.1 W |
| 30054 | U32 | Total Energy Generated (Lifetime) | 0.1 kWh |
The 32-Bit Integer (U32) Trap
Notice that Power and Energy are 32-bit integer values (U32). Modbus RTU is inherently a 16-bit protocol. This means a single metric spans across two consecutive registers. If you just read them sequentially without decoding, you will get garbage numbers. You must parse them using proper byte swapping (usually CDAB order) to reconstruct the correct value.
Pro Tip: Dealing with custom Python scripts or PLC byte-swapping logic can take hours of debugging. If you want to skip the coding, the Valtoris Edge Gateway automatically parses U32 registers into clean MQTT JSON out-of-the-box.
Part C: Control Commands & Advanced Setup
For advanced SCADA control (e.g., curtailment, battery scheduling), you must write to Holding Registers (Function Code 0x06 for Single Write, 0x10 for Multiple). Note: The exact holding registers vary by model. Below is a generic example for Grid-Tied models.
| Register (Dec) | Data Type | Description | Write Value Example |
|---|---|---|---|
| 00000 | U16 | Inverter Switch (ON/OFF) | 0 = Turn Off, 1 = Turn On |
| 00003 | U16 | Active Power Rate Limit (%) | 0-100 (e.g., 50 = Limit output to 50%) |
Field Deployment Notes: Cascading & Compatibility
- RS485 Daisy-Chaining: To connect multiple inverters to a single Valtoris Gateway, wire them in parallel (A+ to A+, B- to B-). You must manually assign a unique Slave ID (1, 2, 3…) to each inverter via its built-in LCD menu.
- Protocol Compatibility (SPF/SPH vs MIN/MAX): The Input Registers listed in Part B apply primarily to Grid-Tied series (MIN/MAC/MAX). Hybrid/Off-Grid series (like SPF and SPH) use a completely different register map to accommodate Battery SOC, Charge/Discharge times, and Off-grid loads. Always consult the exact Modbus protocol PDF for your specific series.
4. Integration Architecture: Two Paths to Home Assistant
To get raw hex frames out of a multi-register layout, you can choose between our native MQTT JSON engine or leveraging community-built HACS integrations via Modbus TCP.
🏢 Path A: Native MQTT JSON (Valtoris Recommended)
Commercial ScaleStop wasting hours debugging PyModbus scripts or YAML byte-swapping errors. For maximum stability, let a dedicated hardware gateway handle the polling natively. Paste the JSON mapping into the Valtoris Web UI, and the gateway automatically handles the U32 byte math, pushing clean JSON payloads directly to your local or cloud MQTT broker.
- Zero Scripting: Select U32 in the Web UI. The gateway recombines the bytes automatically and applies the 0.1 scaling factor.
- Cloud Ready JSON: Converts Modbus raw hex into clean JSON payloads pushed directly to your MQTT broker via Ethernet or 4G LTE.
- Industrial Reliability: Hardware watchdogs and DIN-rail mounting ensure continuous 24/7 telemetry streams.
⚙️ Path B: Modbus TCP via HACS Plugin
Community DrivenIf you prefer using existing Home Assistant Custom Components (HACS), you can set the Valtoris Gateway to Modbus TCP Server mode (Port 502). The gateway acts as a transparent bridge, allowing HA plugins to poll the inverter over your local network.
📺 Community Tutorial: Growatt SPF5000ES Setup
Watch how to wire the RJ45 port and configure the Modbus TCP integration in Home Assistant.
💻 Code Snippet: configuration.yaml
Copy this block into your Home Assistant config to read the U32 Active Power correctly using the Valtoris Gateway.
modbus:
- name: "valtoris_growatt_hub"
type: tcp
host: 192.168.1.200
port: 502
sensors:
- name: "Growatt PV Power"
address: 30002
input_type: input
count: 2
data_type: int32
swap: word
scale: 0.1
precision: 1
unit_of_measurement: "W"
device_class: power
state_class: measurement5. Frequently Asked Questions (Field Troubleshooting)
Common issues encountered during field deployment and how to resolve them.
Can I use a generic USB-to-RS485 adapter instead of an industrial gateway?
I am getting Modbus CRC errors or timeout dropping frames. What is wrong?
- Polling rate is too aggressive: Growatt’s internal Modbus processor is relatively slow. Do not poll faster than once every 1 to 2 seconds.
- Missing Ground: You only connected Pins 3 and 4. You must connect Pin 5 (GND) to equalize the potential between the inverter and your master device.
- No Termination Resistor: If your cable run exceeds 50 meters, or if you are daisy-chaining multiple inverters, you need to install a 120-ohm termination resistor at the far end of the RS485 bus.
Can I keep the official Growatt ShineWiFi dongle plugged in while polling locally via RS485?
Does this Modbus register map apply to Growatt SPF (Off-Grid) models?
Heading to the inverter site? Take the Cheat Sheet.
Save the official Application Note (PDF) to your tablet for offline access to the wiring diagrams and U32 Hex payload analysis.
Deploying multiple solar sites?
End flaky usb connections and custom python scripts. Securely tunnel Modbus data from your Growatt inverters to your cloud MQTT broker with a Valtoris Edge Gateway over Ethernet or 4G LTE.
