I have a problem with the Energy tab of my Homey and the Goodwe Modus Battery. In this/your app you used “meter_kwh_charging” and “meter_kwh_discharging”. The result is that the Energy tab gives no result in the battery part. I have contact Homey for that problem. The answer they given is to use these names:
“The capabilities should be: “meterPowerImportedCapability”: “meter_power.charged”,
“meterPowerExportedCapability”: “meter_power.discharged”.
I get with both App Versions an error after installation:
Gerät nicht verfügbar
Modbus Error FC 0x3 at 192.168.2.26 after 3 attempts: Timeout (Attempt 3/3).
But “nc -zuv YOUR_INVERTER_IP 8899” and “nc -zuv YOUR_INVERTER_IP 502” both give succeeded.
Inverter GoodWe GW29.9K-ET.
I checked it with a test Home Assistant installation and this is working probably.
Any idea whats the reason for the issue for the error “FC 0x3”?
I’m using the GoodWe Modbus (ET) device to monitor my GW 6.5 KN‑ET inverter, and overall it works very well. The only issue I’ve found is that the inverter status is incorrect or not updating. When the inverter is on‑grid, the status still reports wait. In the cloud device the status is shown correctly.
Hi, I’m having trouble connecting the GoodWe Modbus (ET). I’ve connected the Wi-Fi/LAN Kit-20 via LAN. My inverter is the GS2500-XS-30, and both units are running the latest firmware. I can read Modbus data using SModMaster and successfully retrieved my serial number from address 30005/8. Unfortunately, I keep getting the error: “MODBUS Error FC 0x3 timeout attempt 3/3.” I’ve made sure that both programs aren’t trying to access the Modbus simultaneously. Do you have any idea what might be wrong, or is my device perhaps unsupported? Also, do you happen to have a list of addresses for reading the correct values?
Hi,
The current modbus driver is not compatible with the GS2500-XS-30.
Why?
•
Protocol Difference: The current Modbus driver is designed for Hybrid (ET Series) inverters. It uses the “ARM 745” protocol with register addresses starting at 35000 (e.g., 35105 for PV power).
•
XS Series Mapping: Grid-tied inverters like the XS series use a completely different Modbus register map. They typically use addresses in the 512–1024 range (e.g., 512 for Vpv, 768 for Energy).
•
Hardware Constraint: Many smaller XS models require a specific Wi-Fi/LAN kit (like the GA1008107) to support Modbus UDP polling on port 8899, which the driver uses.
Okay, yes, that makes sense. I’ve been looking into it a bit more myself, and it turns out this version is different again; I’m reading my pas on adress 30129. I already have a test version running locally that successfully reads the daily yield and total output via Modbus TCP. And indeed, I had to buy a different Wi-Fi/LAN kit to get it working. Would you be interested in collaborating to add support for this version to your project, or would you prefer to keep it generic?
Total DC input power from the solar panels (equals solar_dc_1 on this single-MPPT inverter)
measure_load
measure_feed_in
measure_battery_power
measure_battery_soc
measure_battery_soh
measure_solar_dc_1
30138–30139
U32, W
Same register as measure_solar_power (single-MPPT inverter, only one PV string)
measure_solar_dc_2
status_inverter
30130
U16, enum
Work mode (0=waiting, 1=normal, 2=fault)
measure_contributing_rate
measure_generation_today
30145
U16, ÷10 = kWh
Today’s yield
measure_generation_total
30146–30147
U32, ÷10 = kWh
Total yield since installation
measure_power
30128–30129
U32, W
AC output power (Pac)
meter_power
30146–30147
U32, ÷10 = kWh
Same register as measure_generation_total
measure_battery
measure_temperature
30142
I16, ÷10 = °C
Inverter internal temperature
target_battery_soc
goodwe_work_mode
30130
U16, enum
Same register as status_inverter
Notes:
All registers use Modbus function code 03 (Read Holding Registers).
These addresses are confirmed working on a GoodWe GW2500-XS-30 with WiFi/LAN Kit 2.0 — a single-MPPT, non-hybrid inverter (no battery). That’s why all battery-related fields (measure_battery*, target_battery_soc) are blank: this inverter simply doesn’t have those.
measure_load and measure_feed_in are also blank because they require an external smart meter reading (grid import/export), which this specific setup doesn’t have connected — only the inverter itself is being read.
measure_contributing_rate isn’t a register we’ve encountered anywhere; it may be a derived/calculated metric rather than something read directly from the inverter.
Additional confirmed registers not in the original list, in case they’re useful: grid voltage (30119), grid current (30122), grid frequency (30125), apparent power (30134–30135), power factor (30140), fault code (30131–30132), derating mode (30166–30167), operating hours (30148–30149), WiFi RSSI (30173), serial number (30005–30012), firmware version (30035–30037).
@Michal_Stranik I’ve recently got a Goodwe inverter with batteries and am trying to connect it to Homey via Modbus using your app. Thanks for developing this – I’m really pleased with it. I’ve used the test network connection to check whether port 502 is open, but it isn’t. In Solar-Go, I’ve enabled Modbus TCP via Settings > Path B. However, I’m not seeing the option to check the parameters Device ID: 1, Port: 502, and Baud rate: 9600.
I seem to have the same problem. GW10KN-ET with Lynx F batteries, Modbus open, new WIFI/LAN stick 2.0 wired with LAN cable. Tested the openess of static inverter IP with port, succes on 502. Tried Device ID: 247 and 1 both in the “COM setting”.
The cloud app does work, but is slow. I cannot get the modbus going. Very strange.
The test with the terminal was successful and port 502 is open, so that’s fine. I’ve also installed the experimental version (v1.13.22). Unfortunately, it’s still not working. Perhaps you have any suggestions; I’ve run out of options.
Hi @Eckhard-Doering,
The “Modbus Error FC 0x3 … Timeout” means that Homey is sending a “Read” request (Function Code 3), but the inverter is not responding. Since your nc tests show that the ports are reachable, the network path is open, but the inverter’s communication module is ignoring the request.
For the GW29.9K-ET, this is usually caused by one of the following:
Concurrent Connections (Most Likely)
Most GoodWe Wi-Fi and LAN modules support only one concurrent connection.
• The Issue: Since you have it working in Home Assistant, HA is likely “holding” the connection open. The inverter will then ignore any requests from Homey.
• Test: Disable the GoodWe integration in Home Assistant temporarily, then restart the GoodWe app on Homey to see if it connects.
Slave ID (Unit ID) Mismatch
The Homey ET driver uses Slave ID 247 (0xF7) by default. However, depending on your firmware version or if you are using a LAN kit (GA1008), your inverter might be expecting Slave ID 1 (0x01) or 17 (0x11).
• Check: Look at your working Home Assistant configuration. What “Unit ID” or “Slave ID” is specified there?
UDP (8899) vs. TCP (502)
The Homey driver communicates via UDP on port 8899. While your test shows port 502 is open, that port is typically for Modbus TCP. Some newer LAN modules prefer TCP, while the driver is expecting a response via UDP.
Communication Module “Hanging”
Sometimes the GoodWe Wi-Fi/LAN dongle becomes unresponsive to Modbus requests if it has been polled by multiple sources or had too many failed attempts.
• Fix: Try unplugging the Wi-Fi/LAN dongle from the bottom of the inverter, wait 10 seconds, and plug it back in.
Suggested Troubleshooting:
1. Shut down the Home Assistant integration completely.
2. Power cycle the GoodWe communication dongle.
3. Restart the GoodWe app in Homey.
4. If it still fails, please check which Slave ID is used in your HA settings—this is often the “hidden” culprit!
Hi, I’ve tested it, but unfortunately I’m getting the following error: "Modbus Error FC 0x3 at ". I already know that my device isn’t set to the default ID, but to 1. However, I don’t think I can configure that setting.