I have implemented a new setting to allow you to configure the Modbus Unit ID (Slave ID) for the inverter.
By default, GoodWe inverters use ID 247 (0xF7), but some configurations (especially those using a LAN module instead of Wi-Fi) use ID 1.
How to fix it:
Update the app to the latest version (where these changes are included).
Go to the Device Settings of your inverter in the Homey app.
You will find a new field called Modbus Unit ID.
Change the value from 247 to 1.
Save the settings.
The app should now be able to communicate with your inverter using the correct ID, resolving the “Modbus Error FC 0x3” timeout.
I am sorry if you provide it already, but what is your device, what driver you are using and what exactly did you do to test if it is working (like modbus test, etc.)?
I have a gw10K-et-20 with a Wi-Fi / LAN 2.0 dongle and three battery racks, all running the latest firmware. The dongle is connected via the LAN port. The cloud connection works perfectly.
I have enabled Modbus TCP in the Solar-Go app, but I cannot configure any further settings there;
I have checked via the terminal whether port 502 is open
Thank you for the very detailed information and the connection test. It helps to identify the issue.
The problem is a protocol mismatch:
• The Inverter: Your Test-NetConnection confirms that port 502 is open and listening for TCP connections.
• The Homey App: This app currently uses UDP (specifically designed for the default GoodWe port 8899).
Even if the IP and port are correct in the settings, a UDP request sent to a TCP port will always result in a Timeout because the inverter is “listening” for a different type of handshake. This is why it works for others; most Wi-Fi dongles use port 8899 which operates over UDP.
What you can try now:
Check Port 8899: In your Homey device settings, change the port from 502 to 8899.
◦ Many GoodWe dongles support both protocols simultaneously. If your dongle still has the UDP service active, it should start working immediately.
Verify Unit ID: If you use port 8899, keep the Modbus Unit ID at 247 (or 1 if that fails).
Please let me know if switching to port 8899 in the Homey settings solves it for you!
Is there anywhere I can check whether the UDP service on my dongle is still active? To be sure, I disconnected the WiFi/Lan 2.0 dongle from the power supply for 10 seconds.
Just to be clear, I’m using the Modbus ET, not the EX-30 version in your app.
Hi, I think I may have found the reason why your solution doesn’t work with my setup.
My WiFi/LAN Kit 2.0 is communicating via Modbus TCP on port 502, while your app uses the UDP protocol on port 8899. I tested a GoodWe UDP/8899 request directly against my inverter, but got no response, while Modbus TCP on port 502 works perfectly.
So I suspect the difference is simply the communication protocol supported by my particular WiFi/LAN Kit. Your approach may work perfectly with other GoodWe dongles, but apparently not with mine.
At least now I think we understand why I could never get your app to connect.
If you’ve been hitting “You have wrong login data (Username, Password, UID) or the Goodwe cloud is down” on the existing GoodWe app — that message is wrong on all three counts. The SEMS Portal login response stopped including the api field that app relied on to find its server, so it fails for everyone, not just you.
I built a new app from scratch against the current SEMS Portal API, with proper Homey Energy integration — GoodWe wasn’t being counted as generation before, and now it is.
What it does:
Reads your inverter through SEMS Portal (same API GoodWe’s own app uses) and shows live power, today’s yield, total yield, inverter temperature and status
Correctly declared as solar generation in Homey Energy, not consumption
Polls every 60s by default (configurable, min 30s), and only pushes updates when your inverter actually reports new data — no fake precision
Automatically re-logs in when the session expires, retries with backoff on failures, and stays available (0 W) overnight instead of flagging errors
Two SEMS server endpoints with automatic fallback, so a regional outage doesn’t take you down
Flow cards:
Inverter goes offline / comes back online (with minutes-offline token)
Today’s yield reaches X kWh
Total yield reaches X kWh
Condition: is currently producing power
Action: refresh now
Setup: just your SEMS Portal email/password and station ID (found in the SEMS Portal URL) — no API keys, no partnership requirements.
Compatibility: built on GoodWe’s shared SEMS Portal API, not hardcoded to one inverter — should work for any grid-tied GoodWe inverter on SEMS Portal. Tested on a GW3600D-NS (single-phase, no battery). Hybrid/battery models (ET/BT/EH series) will connect and show power/yield fine, but battery data isn’t exposed as capabilities yet — I don’t have one to test against, so if you’ve got one and want to help, I’d love a hand.
Status: submitted to the Homey App Store, currently in certification (up to 2 weeks). Test link works right now: GoodWe SEMS | Homey
Hi @Michal_Stranik, could you help with a local Modbus transport issue in GoodWe Inverter v1.13.19?
My existing GoodWe Modbus (ET) device on Homey Pro times out with port 502. With a temporary listener accepting both TCP and UDP at exactly port 502, I captured three requests from Homey. All were UDP, with the same payload:
f7 03 88 b8 00 21 3a c1
This is unit 247, FC03, register 35000, count 33, with a valid RTU CRC. The app was restarted after saving the listener address.
Separately, with the Homey GoodWe app stopped, standard MBAP-framed Modbus TCP reads directly from the inverter succeeded with unit 247 for all four blocks:
35000 / 33 registers (identification)
35100 / 125 registers (runtime)
36000 / 45 registers (meter)
37000 / 24 registers (battery)
The inverter refused the same read-only identification request over UDP on both ports 502 and 8899. After restoring the direct inverter address, port 502 and 60-second polling, and restarting the app, Homey still reports an FC03 timeout after three attempts.
Is there a supported way for this existing driver to select MBAP-framed TCP? If a correction is needed, could you share the relevant v1.13.19 transport/response-decoder source or point me to a fixed release?
For a possible read-only compatibility bridge, does the driver expect bare Modbus RTU replies or an AA55-prefixed envelope, and exactly which bytes are covered by its CRC check? I do not want to assume the separate Python goodwe library uses the same response format as this app.
No device was deleted or re-paired, and no battery-control writes were made. The temporary listener is stopped and the direct inverter address restored. Thanks!
I have a GoodWe GW3600D-NS and I would be happy to help test local support for the DNS/D-NS series in your Homey app.
Initially local communication did not work. SolarGo detected the inverter but returned “Connection failed”, and the inverter did not respond on UDP port 8899.
GoodWe support has now upgraded the ARM firmware of my inverter.
After this upgrade:
• SolarGo connects locally successfully
• SolarGo shows live inverter data
• The inverter responds locally on UDP port 8899
• A GoodWe UDP request returns a 153-byte response
Inverter: GW3600D-NS
Serial: 93600DSN193W0081
Local IP: 192.168.68.66
UDP port: 8899
Homey: Homey Pro 2026
If you are interested in adding local D-NS support, I’m happy to test a development/test version and provide diagnostics or raw responses from the inverter.
Since this morning, no data is coming through from the Goodwe inverter in Homey. Is this a known issue, and is there a solution for it? Thanks in advance for your help!
Kind regards,
Same here,… I guess it’s because the Sems Portal (phone)app isn’t working anymore. The homey app used this to log in….. I don’t found a way to get it working again. I tried solar accu op maat, but then I need an api?
Hope there will be a solution fast… loved to use it
Hier hetzelfde probleem sinds vandaag. @TheWiZZz Binnen jouw app ervaar ik hetzelfde trouwens, gisteravond zag ik de eerste melding die iets vermoedde.
Ik heb bij Goodwe Support ook even een ticket aangemaakt met het verzoek om hier naar te kijken, omdat het iets te toevalig is dat het bij talloze mensen tegelijkertijd niet meer werkt op hetzelfde moment.