Huawei SUN2000 inverter
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 confirmed at the hardware-verified rung and at no rung below it.
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 |
| model_id | 30070 | U16 | 1 | |
| pv_string_count | 30071 | U16 | 1 | |
| mppt_count | 30072 | U16 | 1 | |
| rated_power | 30073 | U32BE | 0.001 | kW |
| max_active_power | 30075 | U32BE | 0.001 | kW |
| max_apparent_power | 30077 | U32BE | 0.001 | kVA |
| pv1_voltage | 32016 | I16 | 0.1 | |
| pv1_current | 32017 | I16 | 0.01 | |
| pv2_voltage | 32018 | I16 | 0.1 | |
| pv2_current | 32019 | I16 | 0.01 | |
| pv3_voltage | 32020 | I16 | 0.1 | |
| pv3_current | 32021 | I16 | 0.01 | |
| pv4_voltage | 32022 | I16 | 0.1 | |
| pv4_current | 32023 | I16 | 0.01 | |
| input_power | 32064 | U32BE | 0.001 | |
| grid_voltage_ab | 32066 | U16 | 0.1 | |
| grid_voltage_bc | 32067 | U16 | 0.1 | |
| grid_voltage_ca | 32068 | U16 | 0.1 | |
| phase_a_voltage | 32069 | U16 | 0.1 | |
| phase_b_voltage | 32070 | U16 | 0.1 | |
| phase_c_voltage | 32071 | U16 | 0.1 | |
| phase_a_current | 32072 | U32BE | 0.001 | |
| phase_b_current | 32074 | U32BE | 0.001 | |
| phase_c_current | 32076 | U32BE | 0.001 | |
| active_power | 32080 | U32BE | 0.001 | |
| reactive_power | 32082 | U32BE | 0.001 | |
| power_factor | 32084 | I16 | 0.001 | |
| grid_frequency | 32085 | U16 | 0.01 | Hz |
| efficiency | 32086 | U16 | 0.01 | % |
| internal_temperature | 32087 | I16 | 0.1 | °C |
| insulation_resistance | 32088 | U16 | 0.001 | MΩ |
| device_status | 32089 | U16 | 1 | |
| accumulated_energy_yield | 32106 | U32BE | 0.01 | kWh |
| daily_energy_yield | 32114 | U32BE | 0.01 | kWh |
link settings as documented (unverified): RTU/TCP; unit ID 0; FC 03,06,16,43,65; Modbus-TCP uses port 6607 by default. Slave address range is 1-247 for RTU, and 0 is used by default for TCP to access the directly connected slave node.
bench facts as documented (unverified)
| wiring notes | Supports physical media such as MBUS, RS485, WLAN, FE, and 4G. |
| max registers/read | 125 |
| broadcast | supported |
| protocol notes | If the exception code is 0x06, resend the request after 10 seconds. A request can be resent for no more than six times. |
| model register | 30000 |
| serial register | 30015 |
| firmware register | 31025 |
| identification notes | Manufacturer name: HUAWEI, Product code: SUN2000 |
| FC 43 device ID | supported |
| doc revision | Issue 08, Date 2024-11-07 |
| firmware applicability | SUN2000MA V100R001C00SPC166 |
field reports — community-sourced, unverified (checked 2026-06-11)
- Modbus TCP communication via the Smart Dongle (SDongleA-05) is highly unstable if polled too frequently; developers recommend a polling interval of at least 5 seconds and a timeout of at least 2-3 seconds to avoid timeout errors. [source]
- When using the Smart Dongle (SDongleA-05) for Modbus TCP, the default Slave ID is 1, whereas connecting directly to the inverter's built-in Wi-Fi AP uses Slave ID 0 on port 6607. [source]
- Modbus RTU communication over RS-485 can become unstable or fail with CRC errors if the WLAN Smart Dongle is simultaneously communicating with cloud servers; Huawei recommends disconnecting the dongle when using Modbus RTU. [source]
- Modbus TCP connection on port 502 via the Smart Dongle can fail to establish or drop immediately during initial register reads (such as register 30000) if another active Modbus client session is open or if the connection is not properly unrestricted in the FusionSolar settings. [source]
- confirmed: doc_revision: Issue 08, Date 2024-11-07 — confirmed by ioBroker-Forum thread for SUN2000MA V100R001C00SPC166 Modbus Interface Definitions [2.1.1]
- confirmed: firmware_applicability: SUN2000MA V100R001C00SPC166 — confirmed by the document title and ioBroker-Forum thread
- confirmed: comms defaults: Modbus-TCP uses port 6607 by default, slave address range is 1-247 for RTU, and 0 is used by default for TCP to access the directly connected slave node — confirmed by the 'Overview of the Communications Protocol' section in the Modbus Interface Definitions
- confirmed: function_codes: [3, 6, 16, 43, 65] — confirmed by the 'Function Code List' (0x03, 0x06, 0x10) and sections for 'Read Device Identification (0x2B / 43)' and 'Querying a Device List / Uploading Data (0x41 / 65)'
- confirmed: identification registers: model_register 30000, serial_register 30015, firmware_register 31025 — confirmed by the 'Register Definitions' table
- confirmed: physical media: MBUS, RS485, WLAN, FE, and 4G — confirmed by the 'Physical Layer' section of the Modbus Interface Definitions
- confirmed: quirks: broadcast_supported is true, max_read_registers is 125, and exception code 0x06 retry logic (resend after 10 seconds, max 6 times) — confirmed by the 'Overview of the Communications Protocol' and 'Reading Registers (0x03)' sections
- confirmed: register map: model_id @ 30070, pv_string_count @ 30071, mppt_count @ 30072, rated_power @ 30073, max_active_power @ 30075, max_apparent_power @ 30077, pv1_voltage @ 32016, pv1_current @ 32017, pv2_voltage @ 32018, pv2_current @ 32019, pv3_voltage @ 32020, pv3_current @ 32021, pv4_voltage @ 32022, pv4_current @ 32023, input_power @ 32064, grid_voltage_ab @ 32066, grid_voltage_bc @ 32067, grid_voltage_ca @ 32068, phase_a_voltage @ 32069, phase_b_voltage @ 32070, phase_c_voltage @ 32071, phase_a_current @ 32072, phase_b_current @ 32074, phase_c_current @ 32076, active_power @ 32080, reactive_power @ 32082, power_factor @ 32084, grid_frequency @ 32085, efficiency @ 32086, internal_temperature @ 32087, insulation_resistance @ 32088, device_status @ 32089, accumulated_energy_yield @ 32106, daily_energy_yield @ 32114 — confirmed by the 'Register Definitions' table
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.