---
title: "Huawei SUN2000 (Modbus RTU)"
description: "Huawei SUN2000 3-10KTL solar inverter connected to TapHome via Modbus RTU over RS-485."
url: "https://taphome.com/en/compatibility/huawei-sun2000-rtu/"
language: en
lastmod: 2026-10-08
generator: hugo
ai:
  topics: ["modbus-rtu","inverter","solar","rs485","pv-monitoring","battery-storage","grid-power-meter"]
  questions: ["How to connect Huawei SUN2000 via RS-485 Modbus RTU to TapHome?","What does the Huawei SUN2000 RTU TapHome template measure and control?","Which COM port pins to use for Modbus RTU on Huawei SUN2000?","Can I use Modbus RTU and the WLAN Smart Dongle at the same time on SUN2000?","How to monitor battery SOC and grid power on SUN2000 via TapHome?","What is the difference between the TCP and RTU templates for Huawei SUN2000?"]
---

# Huawei SUN2000 (Modbus RTU)

Communication: Modbus RTU

- [Huawei FusionSolar](https://solar.huawei.com/en/products/residential/inverters)

## Integration guide

The Huawei SUN2000 3-10KTL series are three-phase string inverters for residential PV systems, with rated power from 3 kW to 10 kW. This template connects to the inverter via **Modbus RTU over RS-485**, using the COM port on the bottom of the inverter. Unlike the TCP variant (which uses a Smart Dongle for network connectivity), the RTU variant communicates directly over a serial RS-485 bus.

The template provides active power monitoring with power control actions, DC input power with grid-side measurements, PV string current and voltage readings, grid power meter (via Smart Power Sensor), battery state of charge, daily and cumulative energy counters, and detailed inverter status with alarm decoding.

> [!WARNING]
> Huawei warns that Modbus RTU communication may become unstable when the inverter communicates with cloud servers via the WLAN Smart Dongle. **Disconnect the WLAN Smart Dongle** before using Modbus RTU to avoid CRC errors and communication failures on the RS-485 bus.

## Hardware connection

The SUN2000 inverter has a 16-pin COM port (#8) on the bottom panel. The COM port provides two separate RS-485 buses:

| Bus | Pins | Purpose |
|-----|------|---------|
| **Bus 1** | Pin 1 (485A1-1), Pin 3 (485B1-1) | Cascading inverters, SmartLogger, **TapHome connection** |
| **Bus 2** | Pin 7 (485A2), Pin 9 (485B2) | Smart Power Sensor, energy storage |

For TapHome Modbus RTU connection, use **Bus 1**:

- **Pin 1 (485A1-1)** -- connect to RS-485 **A+** on TapHome controller
- **Pin 3 (485B1-1)** -- connect to RS-485 **B-** on TapHome controller
- **Pin 5 (PE)** -- shield ground (optional but recommended)

### Inverter port locations

![SUN2000 inverter bottom panel showing COM port (#8) and Smart Dongle port (#9)](https://taphome.com/images/compatibility/huawei-sun2000-rtu/inverter-ports_hu_5491645494580c3c.jpg)

The COM port (#8) is located on the bottom panel, next to the AC output port (#7) and the Smart Dongle port (#9).

### COM port pinout

![SUN2000 COM port 16-pin connector with pin numbering](https://taphome.com/images/compatibility/huawei-sun2000-rtu/com-port-pinout_hu_38f30b1cd140d65d.jpg)

| Pin | Definition | Function |
|-----|------------|----------|
| 1 | 485A1-1 | RS-485 A+ (Bus 1) -- **connect to TapHome A+** |
| 2 | 485A1-2 | RS-485 A+ (Bus 1) -- for cascading to next inverter |
| 3 | 485B1-1 | RS-485 B- (Bus 1) -- **connect to TapHome B-** |
| 4 | 485B1-2 | RS-485 B- (Bus 1) -- for cascading to next inverter |
| 5 | PE | Shield layer grounding |
| 7 | 485A2 | RS-485 A+ (Bus 2) -- Smart Power Sensor |
| 9 | 485B2 | RS-485 B- (Bus 2) -- Smart Power Sensor |

### RS-485 cable installation

![RS-485 signal cable installation into COM port connector showing pin positions 485A1-1, 485B1-1, and PE](https://taphome.com/images/compatibility/huawei-sun2000-rtu/wiring-rs485-cable_hu_5288d173273787db.jpg)

Use an outdoor shielded twisted pair cable. Strip the outer jacket approximately 55 mm and the inner insulation 12-14 mm. Insert wires into the correct pin positions on the signal cable connector, then insert the connector into the COM port and turn clockwise to lock. Secure with the M3 screw (torque: 0.55 N.m).

> [!TIP]
> Route the RS-485 signal cable separately from power cables to prevent electromagnetic interference.

## Configuration

### Communication parameters

| Parameter | Value |
|-----------|-------|
| Protocol | Modbus RTU |
| Baud rate | 9600 bps |
| Data bits | 8 |
| Parity | None |
| Stop bits | 1 |
| Slave ID | 1 (default, configurable via FusionSolar app) |

### Setting the Slave ID

The default Modbus slave address is **1**. To change it:

1. Connect to the inverter via the FusionSolar app (initial WiFi password: **Changeme**)
2. Log in as installer (initial password: **00000a**)
3. Navigate to communication settings and change the RS-485 address
4. Change the default password immediately after first login

> [!NOTE]
> The WLAN Smart Dongle must be disconnected for stable Modbus RTU communication. If the dongle is installed for FusionSolar cloud monitoring, remove it after configuration and before connecting TapHome via RS-485.

## Device capabilities

The template exposes the following devices:

### Active Power

An electricity meter device that reads the inverter's current AC output power in kW (register H:32080, Int32, divided by 1000). This is the primary power monitoring device and provides both read and write capabilities.

Service attributes include peak active power of the day (H:32078), reactive power in kVar (H:32082), rated power, maximum active power, maximum apparent power, and maximum reactive power ratings (feed to grid and absorbed from grid).

Three service actions allow power control:

- **Reactive Power Compensation (PF)** -- set power factor from -1.0 to 1.0 (writes to H:40122)
- **Reactive Power Compensation (Q/S)** -- set reactive power ratio from -1.0 to 1.0 (writes to H:40123)
- **Active Power Derating Percent (%)** -- limit output power as percentage 0-100% (writes to H:40125)

### Battery

Displays battery state of charge as a percentage (register H:37760, UInt16, divided by 1000). A service attribute shows the battery running status (H:37762) with values: Offline, Standby, Running, Fault, or Sleep Mode.

> [!NOTE]
> The Battery device only appears functional when a LUNA2000 battery is connected to the inverter. Without a battery, the running status will show "Offline" and SOC will read zero.

### Grid Power Meter

Reads active grid power from the Smart Power Sensor in kW (register H:37113, Int32, divided by 1000) and grid exported energy in kWh (register H:37119, Int32, divided by 100). Positive values indicate power exported to the grid, negative values indicate power imported from the grid.

Service attributes show the meter status (Normal/Offline) and meter type (3-phase/1-phase).

> [!NOTE]
> The Grid Power Meter device requires a Huawei Smart Power Sensor (DTSU666-H) connected to the inverter via RS-485 Bus 2 (pins 7 and 9 on the COM port). This device is not present in the TCP variant.

### DC Input Power

Read-only sensor showing total DC power from all PV strings combined in kW (register H:32064, Int32, divided by 1000).

Service attributes provide grid-side measurements: grid frequency (H:32085), phase voltages A/B/C (H:32069-32071), phase currents A/B/C (H:32072-32076), and line-to-line voltages AB/BC/CA (H:32066-32068).

### Daily Energy and Total Energy

Two read-only energy counters:

- **Daily Energy** -- energy generated today in kWh (register H:32114, divided by 100), resets daily
- **Total Energy** -- cumulative energy since commissioning in kWh (register H:32106, divided by 100)

### PV string currents (PV1-PV2)

Two separate sensor devices, one per PV string, reading DC current in amps (registers H:32017 and H:32019, Int16, divided by 100). Each device includes a service attribute for the corresponding string voltage (H:32016 and H:32018, divided by 10).

> [!NOTE]
> The RTU template includes 2 PV string devices (PV1-PV2) compared to 4 in the TCP variant. The register map supports up to 24 strings -- additional PV string devices can be added manually if needed.

### Inverter Status

A multi-value switch (read-only) showing the inverter's current operating state from register H:32089:

| Value | State | Description |
|-------|-------|-------------|
| 0 | Inverter State | Initial / unknown |
| 1 | Idle | Detecting ISO, irradiation, or grid |
| 2 | Starting | Inverter starting up |
| 3 | On Grid | Normal power generation |
| 4 | Shutdown | Fault, command, OVGR, or DC switch off |
| 5 | Grid Dispatch | cos(Phi)-P or Q-U curve active |
| 6 | IV Scanning | PV string I-V curve scanning |
| 7 | Spot-Check | Grid spot-check in progress |
| 8 | Inspecting | Inspection mode |
| 9 | DC Input Detection | Detecting DC input |

Service attributes provide detailed state information: Full State (expanded status with sub-states), Grid Connection status, Teleindication (IEC104 telesignaling), Locking Status, PV Connection Status, and Startup/Shutdown timestamps.

### Alarm monitoring

The module-level read script monitors alarm registers H:32008 and H:32009 (Bitfield16). Each bit maps to a specific fault or warning:

| Register | Bit | Alarm |
|----------|-----|-------|
| H:32008 | 0 | High String Voltage |
| H:32008 | 1 | DC Arc Fault |
| H:32008 | 2 | String Reversed |
| H:32008 | 3 | Abnormal String (warning) |
| H:32008 | 7 | Power Grid Failure |
| H:32008 | 8-9 | Grid Under/Overvoltage |
| H:32008 | 11-13 | Grid Frequency Faults |
| H:32008 | 14-15 | Output Overcurrent / DC Component |
| H:32009 | 0 | Abnormal Leakage Current |
| H:32009 | 1-2 | Ground / Insulation Faults |
| H:32009 | 3-4 | High Temperature / Equipment Fault |
| H:32009 | 9 | Abnormal Energy Storage Device |
| H:32009 | 10-11 | Active/Passive Islanding |

### Module-level diagnostics

The module exposes service attributes for device identification and diagnostics:

| Attribute | Register | Description |
|-----------|----------|-------------|
| Model Name | H:30000 | Inverter nameplate model |
| SN | H:30015 | Serial number |
| PN | H:30025 | Product code |
| Model ID | H:30070 | Numeric model identifier |
| Number of Strings | H:30071 | Connected PV strings |
| MPPT Number | H:30072 | MPP tracker count |
| Time Zone | H:43006 | UTC offset |
| Inverter Efficiency | H:32086 | Conversion efficiency (%) |
| Cabinet Temperature | H:32087 | Internal temperature |
| Insulation Resistance | H:32088 | PV array insulation |
| DSP Data Collection | H:32002 | Data collection status |

A **Time Zone** service action allows setting the inverter's UTC offset (writes to H:43006).

### Additional capabilities

The SUN2000 inverter exposes additional registers not yet implemented in the template. These include firmware version, fault code register, a faster-updating active power reading, total DC input energy counter, monthly and yearly energy counters, battery charge/discharge power, unsigned grid exported energy, grid accumulated energy, and remote power on/shutdown commands. These can be added in a future template update.

### Differences from the TCP variant

The RTU template includes two devices not present in the TCP variant: the **Grid Power Meter** (Smart Power Sensor readings) and **Battery** with SOC readout. However, the RTU template only includes 2 PV string devices (PV1-PV2) compared to 4 in the TCP variant. The register map is identical -- only the transport layer differs (RS-485 serial vs TCP/IP via Smart Dongle).

## Troubleshooting

### No Modbus communication

1. Verify the RS-485 cable is connected to the correct COM port pins: Pin 1 (485A1-1) = A+, Pin 3 (485B1-1) = B-
2. Ensure the WLAN Smart Dongle is **disconnected** from the inverter
3. Check that the baud rate is set to 9600 and parity to None (8N1) in TapHome
4. Confirm the correct Slave ID (default: 1)
5. Verify the signal cable connector is fully inserted and locked into the COM port

### Intermittent communication failures

The most common cause is the WLAN Smart Dongle interfering with the RS-485 bus. The dongle's internal communication with Huawei cloud servers causes CRC errors on the serial bus. Remove the dongle for stable RTU operation.

### PV string values read zero

Unused PV string inputs will always read 0 A / 0 V. This is normal if the inverter model has fewer MPPT inputs than the template provides (e.g., a 3KTL model may only use PV1 and PV2).

### Battery device shows "Offline"

The LUNA2000 battery registers are only populated when a compatible battery is physically connected to the inverter. Without a battery, Running Status will read "Offline" and SOC will be zero.

### Inverter status stuck on "Idle"

During nighttime or low-irradiation conditions, the inverter enters idle mode. This is normal -- it will transition to "On Grid" once sufficient solar irradiation is detected. The inverter may also have reduced data availability during standby.

### Grid Power Meter reads zero

The Grid Power Meter device requires a Huawei Smart Power Sensor (DTSU666-H) connected via RS-485 Bus 2 (pins 7 and 9). If no meter is installed, the values will read zero and the meter status will show "Offline".

## Available devices 9

These devices appear in TapHome after import.

SUN2000 Module

Service Attributes

|                       |                                                                        |
|-----------------------|------------------------------------------------------------------------|
| Model Name            |                                                                        |
| SN                    |                                                                        |
| PN                    |                                                                        |
| Model ID              |                                                                        |
| Number of Strings     |                                                                        |
| MPPT Number           |                                                                        |
| Time Zone             | Inverter UTC offset — reads and displays the configured time zone      |
| Inverter Efficiency   | DC-to-AC conversion efficiency as percentage                           |
| Cabinet Temperature   | Internal inverter enclosure temperature                                |
| Insulation Resistance | PV array insulation resistance in megaohms — monitors isolation safety |
| DSP Data Collection   | Data collection status — Yes (active) or No (inactive)                 |

Service Actions

|           |                                                                       |
|-----------|-----------------------------------------------------------------------|
| Time Zone | Set the inverter UTC offset — select from UTC-12:00 through UTC+14:00 |

Read (module)

```taphome
var a1 := MODBUSR(H, 32008, Uint16);
var a2 := MODBUSR(H, 32009, Uint16);
IF(GETBIT(a1,0) = 1, ADDERROR("High String Voltage", 2001));
IF(GETBIT(a1,1) = 1, ADDERROR("DC Arc Fault", 2002));
IF(GETBIT(a1,2) = 1, ADDERROR("String Reversed", 2011));
IF(GETBIT(a1,3) = 1, ADDWARNING("PV String Backfeed ", 2012));
IF(GETBIT(a1,4) = 1, ADDWARNING("Abnormal String", 2013));
IF(GETBIT(a1,5) = 1, ADDERROR("AFCI Self-test Fault", 2021));
IF(GETBIT(a1,6)= 1, ADDERROR("Short circuit between phase to PE ", 2021));
IF(GETBIT(a1,7) = 1, ADDERROR("Power Grid Failure ", 2032));
IF(GETBIT(a1,8) = 1, ADDERROR("Grid Undervoltage ", 2033));
IF(GETBIT(a1,9) = 1, ADDERROR("Grid Overvoltage", 2034));
IF(GETBIT(a1,10) = 1, ADDERROR("Unbalanced Grid Voltage", 2035));
IF(GETBIT(a1,11) = 1, ADDERROR("Grid Overfrequency", 2036));
IF(GETBIT(a1,12) = 1, ADDERROR("Grid Underfrequency", 2037));
IF(GETBIT(a1,13) = 1, ADDERROR("Grid Frequency Instability", 2038));
IF(GETBIT(a1,14) = 1, ADDERROR("Output Overcurrent ", 2039));
IF(GETBIT(a1,15) = 1, ADDERROR("Large DC of Output current ", 2040));
IF(GETBIT(a2,0) = 1, ADDERROR("Abnormal Leakage Current ", 2051));
IF(GETBIT(a2,1) = 1, ADDERROR("Abnormal Ground.", 2061));
IF(GETBIT(a2,2) = 1, ADDERROR("Low Insulation Res. ", 2062));
IF(GETBIT(a2,3) = 1, ADDERROR("High Temperature", 2063));
IF(GETBIT(a2,4) = 1, ADDERROR("Abnormal Equipment", 2064));
IF(GETBIT(a2,5) = 1, ADDERROR("Upgrade Failed", 2065));
IF(GETBIT(a2,6) = 1, ADDWARNING("License Expired", 2066));
IF(GETBIT(a2,7) = 1, ADDERROR("Abnormal Monitor Unit", 61440));
IF(GETBIT(a2,8) = 1, ADDERROR("Power collector fault ", 2067));
IF(GETBIT(a2,9) = 1, ADDERROR("Abnormal energy storage device", 2068));
IF(GETBIT(a2,10) = 1, ADDERROR("Active islanding", 2070));
IF(GETBIT(a2,11) = 1, ADDERROR("Passive islanding", 2071));
IF(GETBIT(a2,12) = 1, ADDERROR("Transient AC overvoltage", 2072));
IF(GETBIT(a2,15) = 1, ADDERROR("Abnormal PV module configuration", 2080));
```

Service Attributes

Model Name

```taphome
MODBUSR(H, 30000, String, 15)
```

SN

```taphome
MODBUSR(H, 30015, String, 10)
```

PN

```taphome
MODBUSR(H, 30025, String, 10)
```

Model ID

```taphome
MODBUSR(H, 30070, Uint16)
```

Number of Strings

```taphome
MODBUSR(H, 30071, Uint16)
```

MPPT Number

```taphome
MODBUSR(H, 30072, Uint16)
```

Time Zone

```taphome
IF(MODBUSR(H, 43006, Int16) = 0, "UTC±00:00");
var time := MODBUSR(H, 43006, Int16)/0.6;
var zone := IF(MOD(time,100) = 0, time/100 + ":00", ROUND(time/100) + ":" + MOD(time,100));
RETURN (IF(time > 0, "UTC+" + zone, "UTC-" + zone ));
```

Inverter Efficiency

```taphome
 MODBUSR(H, 32086, Uint16)/100 + "%"
```

Cabinet Temperature

```taphome
MODBUSR(H, 32087, Int16) / 10 + " ℃ "
```

Insulation Resistance

```taphome
MODBUSR(H, 32088, Uint16)/1000 + "MΩ "
```

DSP data collection

```taphome
IF(GETBIT(MODBUSR(H, 32002, Uint16),0) = 1, "Yes", "No")
```

Service Actions

Time Zone

Parameters: Time Zone

```taphome
MODBUSWNE(H, 43006, Int16, timz*60)
```

Active Power Electricity Meter Read and write

Electricity meter with active power (kW), reactive power, power factor, and power control actions for derating and compensation

Register: H:32080 Int32 Unit: kW numeric

Service Attributes

|                                             |
|---------------------------------------------|
| Active Power Peak of This Day               |
| Reactive Power                              |
| Rated Power                                 |
| Reactive Power Compensation (PF)            |
| Reactive Power Compensation (Q/S)           |
| Active Power Derating Percent (0.1%)        |
| Active Power Derating (Fixed Value W)       |
| Maximum Active Power                        |
| Maximum Apparent Power                      |
| Maximum Reactive Power (Fed to Grid)        |
| Maximum Reactive Power (Absorbed from Grid) |

Service Actions

|                                   |                                                                   |
|-----------------------------------|-------------------------------------------------------------------|
| Reactive Power Compensation (PF)  | Set power factor from -1.0 to 1.0 for reactive power compensation |
| Reactive Power Compensation (Q/S) | Set reactive power ratio from -1.0 to 1.0                         |
| Active Power Derating Percent (%) | Limit inverter output power as percentage 0-100%                  |

Read demand

```taphome
MODBUSR(H, 32080, Int32,2)/1000;
```

Service Attributes

Active Power peak of this day

```taphome
MODBUSR(H, 32078, Int32, 2) + " kW"
```

Reactive Power

```taphome
MODBUSR(H, 32082, Int32, 2)/1000 + " kVar"
```

Rated Power

```taphome
MODBUSR(H, 30073, Uint32, 2)/1000 + " kW"
```

Reactive Power Compensation (PF)

```taphome
MODBUSR(H, 40122, Int16)/1000
```

Reactive Power Compensation (Q/S)

```taphome
MODBUSR(H, 40123, Int16)/1000
```

Active Power Derating percent (0.1%)

```taphome
MODBUSR(H, 40122, Int16)/10 + "%"
```

Active Power Derating (fixed value W)

```taphome
MODBUSR(H, 40126, Uint32, 2) + " W"
```

Maximum Active Power

```taphome
MODBUSR(H, 30075, Uint32, 2)/1000 + " kW"
```

Maximum Apparent Power

```taphome
MODBUSR(H, 30077, Uint32, 2)/1000 + " kVA"
```

Maximum reactive power (fed to grid)

```taphome
MODBUSR(H, 30079, Uint32, 2)/1000 + " kVar"
```

Maximum reactive power (absorbed from grid)

```taphome
MODBUSR(H, 30081, Uint32, 2)/1000 + " kVar"
```

Service Actions

Reactive Power Compensation (PF)

Parameters: Reactive power compensation

```taphome
MODBUSWNE(H, 40122, Int16, pf*1000);
```

Reactive Power Compensation (Q/S)

Parameters: Reactive power compensation (-1, 1] (-1–1 rpc)

```taphome
MODBUSW(H, 40123, Int16, rpc*1000);
```

Active Power Derating Percent(%)

Parameters: Active Power Derating Percent(%) (0–100 apdp)

```taphome
MODBUSW(H, 40125, Uint16, apdp*10)
```

Battery Dimmer Read-only

Battery state of charge (SOC) as percentage — shows available energy in LUNA2000 storage

Register: H:37760 UInt16 Unit: % numeric

Service Attributes

|        |                                                                          |
|--------|--------------------------------------------------------------------------|
| Status | Battery running status — Offline, Standby, Running, Fault, or Sleep Mode |

Read level

```taphome
MODBUSR(H, 37760, Uint16) / 1000
```

Service Attributes

Status

```taphome
SWITCH(MODBUSR(H, 37762, Uint16), 0, "offline", 1, "standby", 2, "running", 3, "fault", 4, "sleep mode", "error");
```

Grid Power Meter Electricity Meter Read-only

Active grid power (kW) and exported energy (kWh) from Smart Power Sensor — positive is export, negative is import

Register: H:37113 Int32 Unit: kW numeric

Service Attributes

|        |                                        |
|--------|----------------------------------------|
| Status | Power meter status — Normal or Offline |
| Type   | Power meter type — 3-phase or 1-phase  |

Read total consumption

```taphome
MODBUSR(H, 37119, Int32) / 100
```

Read demand

```taphome
MODBUSR(H, 37113, Int32) / 1000
```

Service Attributes

Status

```taphome
IF(MODBUSR(H, 37100, Uint16) = 1, "Normal", "Offline");
```

Type

```taphome
IF(MODBUSR(H, 37125, Uint16) = 1, "3 phase", "1 phase");
```

Daily Energy Variable Read-only

Energy generated today in kWh — resets at midnight

Register: H:32114 Int32 Unit: kWh numeric

Read

```taphome
MODBUSR(H, 32114, Int32, 2)/100
```

Total Energy Variable Read-only

Cumulative total energy generated since commissioning

Register: H:32106 Int32 Unit: kWh numeric

Read

```taphome
MODBUSR(H, 32106, Int32, 2)/100
```

DC Input Power Electricity Meter Read-only

Total DC power from all PV strings combined (kW) with grid-side measurements — phase voltages, currents, line-to-line voltages, and frequency

Register: H:32064 Int32 Unit: kW numeric

Service Attributes

|            |
|------------|
| A Voltage  |
| B Voltage  |
| C Voltage  |
| A Current  |
| B Current  |
| C Current  |
| AB Voltage |
| BC Voltage |
| CA Voltage |
| Frequency  |

Read demand

```taphome
MODBUSR(H, 32064, Int32, 2)/1000
```

Service Attributes

A Voltage

```taphome
MODBUSR(H, 32069, Int16)/10 + " V"
```

B Voltage

```taphome
MODBUSR(H, 32070, Int16)/10 + " V"
```

C Voltage

```taphome
MODBUSR(H, 32071, Int16)/10 + " V"
```

A Current

```taphome
MODBUSR(H, 32072, Int32, 2)/1000 + " A"
```

B Current

```taphome
MODBUSR(H, 32074, Int32, 2)/1000 + " A"
```

C Current

```taphome
MODBUSR(H, 32076, Int32, 2)/1000 + " A"
```

AB Voltage

```taphome
MODBUSR(H, 32066, Int16)/10 + " V"
```

BC Voltage

```taphome
MODBUSR(H, 32067, Int16)/10 + " V"
```

CA Voltage

```taphome
MODBUSR(H, 32068, Int16)/10 + " V"
```

Frequency

```taphome
MODBUSR(H, 32085, Uint16)/100 + " Hz"
```

Inverter Status Multi-value Switch Read-only

Inverter operating state — Idle, Starting, On-Grid, Shutdown, Grid Dispatch, IV Scanning, Spot-Check, Inspecting, DC Input Detection

Register: H:32089 UInt16 numeric

Values / States: Initializing · Idle · Starting · On-Grid · Shutdown · Grid Dispatch · IV scanning · Spot-Check · Inspecting · DC input detection

Read switch state

```taphome
var reg := MODBUSR(H, 32089, Uint16);
IF(reg = 0, 0,
IF(reg < 4 OR reg = 40960,1,
IF(reg = 256, 2, 
IF(reg < 515, 3, 
IF(reg < 775, 4,
IF(reg = 1025 OR reg = 1026, 5, 
IF(reg = 1280 OR reg = 1281, 7,
IF(reg = 1536, 8, 
IF(reg = 2048, 6,
IF(reg = 2304, 9
))))))))))
```

Service Attributes

Full State

```taphome
var state := MODBUSR(H, 32089, Uint16);
SWITCH(state, 0, "Idle: Initializing",
 1,"Idle: Detecting ISO", 
 2,"Idle: Detecting irradiation", 
 3, "Idle: Grid Detecting", 
 256, "Starting", 
 512, "On-Grid", 
 513, "On-Grid: Power Limit", 
 514, "On-Grid: self-derating", 
 768, "Shutdown: Fault", 
 769, "Shutdown: Command", 
 770, "Shutdown: OVGR", 
 771,"Shutdown: Communication disconnected", 
 772, "Shutdown: Power Limit", 
 773, "Shutdown: Start manually", 
 774, "Shutdown: DC Switch OFF",
 1025, "Grid dispatch:cos(Phi)-P curve",
 1026, "Grid dispatch:Q-U curve",
40960, "Idle: No irradiation",
1280, "Spot-check",
1281, "Spot-checking",
1536, "Inspecting",
1792, "SFCI self-check",
2048, "IV scanning",
2304, "DC input detection",
"Unknown"
 );
```

Grid Connection

```taphome
var reg := MODBUSR(H, 32000,Uint16);
IF(GETBIT(reg,0) = 1, "Standby",
IF(GETBIT(reg,2) = 1 , "Normal Grid Connection",
IF(GETBIT(reg,3) = 1, "Grid connection with derating due to power rationing",
IF(GETBIT(reg,4) = 1, "Grid connection with derating due to inverter internal causes", "Not Connected"
)
)
)
)
```

Teleindication

```taphome
var reg := MODBUSR(H, 32000,Uint16);
IF(GETBIT(reg,0) = 1, "Standby",
IF(GETBIT(reg,5) = 1 , "Normal Stop",
IF(GETBIT(reg,6) = 1, "Stop due to faults",
IF(GETBIT(reg,7) = 1, "Stop due to power rationing",
IF(GETBIT(reg,8) = 1, "Shutdown",
IF(GETBIT(reg,9) = 1, "Spot check",
IF(GETBIT(reg,1) = 1, "Grid Connected",
"Unknown State")
)
)
)
)
)
)
```

Locking Status

```taphome
IF(GETBIT(MODBUSR(H, 32002, Uint16),0) = 1, "Unlocked", "Locked");
```

PV Connection Status

```taphome
IF(GETBIT(MODBUSR(H, 32002, Uint16),0) = 1, "Connected", "Disconnected");
```

Startup time

```taphome
var reg := MODBUSR(H, 32091, Uint32, 2);
var min := FLOOR(MOD(reg, 3600)/60);
var ho := FLOOR(MOD(reg,86400)/3600);
var minutes := IF(min<10, "0" + min, min);
var hours := IF(ho<10, "0" + ho, ho);
hours + ":" + minutes;
```

Shutdown time

```taphome
var reg := MODBUSR(H, 32093, Uint32, 2);
var min := FLOOR(MOD(reg, 3600)/60);
var ho := FLOOR(MOD(reg,86400)/3600);
var minutes := IF(min<10, "0" + min, min);
var hours := IF(ho<10, "0" + ho, ho);
hours + ":" + FLOOR(minutes);
```

PV1 Current Variable Read-only

Register: H:32017 Int16 Unit: A numeric

Service Attributes

|             |
|-------------|
| PV1 Voltage |

Read

```taphome
MODBUSR(H, 32017, Int16)/100
```

Service Attributes

PV1 Voltage

```taphome
MODBUSR(H, 32016, Int16)/10 + "V"
```

PV2 Current Variable Read-only

Register: H:32019 Int16 Unit: A numeric

Service Attributes

|             |
|-------------|
| PV2 Voltage |

Read

```taphome
MODBUSR(H, 32019, Int16)/100
```

Service Attributes

PV2 Voltage

```taphome
MODBUSR(H, 32018, Int16)/10
```

**Connection:** Modbus RTU • 9600 baud• 8N1 • Slave ID: $\[SlaveId]

Possible improvements (13)

- H:30035 Firmware Version — STR, 15 regs, read-only — useful for diagnostics
- H:32010 Alarm 3 — Bitfield16, additional alarm bits not decoded in template readscript
- H:32090 Fault Code — U16, specific fault code when device is in fault state
- H:32095 Active Power (fast) — I32, kW, /1000, faster-updating active power reading
- H:32108 Total DC Input Energy — U32, kWh, /100, cumulative DC energy input
- H:32116 Monthly Energy — U32, kWh, /100, electricity generated this month
- H:32118 Yearly Energy — U32, kWh, /100, electricity generated this year
- H:37765 Battery Charge/Discharge Power — I32, W, positive=charging negative=discharging — would complement existing Battery SOC device
- H:37121 Grid Exported Energy (unsigned) — U32, kWh, /100, unsigned variant of grid exported energy — complements the signed I32 already in template at H:37119
- H:37123 Grid Accumulated Energy — U32, kWh, /100, total energy consumed from grid
- H:40200 Power On — WO, E16, remote inverter power-on command
- H:40201 Shutdown — WO, E16, remote inverter shutdown command
- RTU Variant Notes — Modbus RTU over RS-485. Default: 9600 baud, 8N1. COM port Bus 1: Pin 1 (485A1-1) = A+, Pin 3 (485B1-1) = B-. Do NOT use Modbus RTU with WLAN Smart Dongle connected — causes CRC errors. RTU template has 2 PV strings (vs TCP's 4) and includes Grid Power Meter (H:37113, H:37119) + Battery SOC (H:37760). Huawei warns against Modbus RTU due to internal server communication conflicts.

## Import parameters

Enter these values when you import the XML.

| Asked in the app | Default       |
|------------------|---------------|
| Slave ID         | `1`           |
| IP address       | `192.168.1.0` |

## Sources

- Solar Inverter Modbus Interface Definitions (V3.0)
  
  2026-03-28
  
  [PDF](https://taphome.com/compatibility/devices/huawei-sun2000-rtu/manufacturer/modbus-interface-definitions-v3.pdf)
- SUN2000-(5KTL, 6KTL)-M0 User Manual
  
  [solar.huawei.com](https://solar.huawei.com/-/media/Solar/attachment/pdf/au/service/residential/SUN2000-5-6KTL-M0-User_Manual.pdf) 2026-03-28
  
  [PDF](https://taphome.com/compatibility/devices/huawei-sun2000-rtu/manufacturer/user-manual-m0.pdf)
- huawei-solar-lib — Python Modbus Library
  
  [github.com](https://github.com/wlcrs/huawei-solar-lib) 2026-03-28

Manufacturer documents are © their respective owners. They are provided as published by the manufacturer, for reference only.

## Related Documentation

- [Modbus Integration](https://taphome.com/en/compatibility/modbus-guide/)
- [Modbus](https://taphome.com/en/docs/integration/modbus/)
- [Simple configuration using templates](https://taphome.com/en/docs/integration/modbus/templates/)
- [Modbus scripts and prefetch](https://taphome.com/en/docs/script/modbus-scripts/)
- [Modbus functions](https://taphome.com/en/docs/script/modbus/)
- [Modbus data types](https://taphome.com/en/docs/script/modbus-data-types/)

