[APP][Pro] Solis Hybrid Inverter - Local RS485 (v0.1.81 - Test)

Solis Local Hybrid Inverter — local monitoring & control for Homey

Hi all :waving_hand:

I’ve been building a Homey app that talks directly to a Solis hybrid inverter over your local network — no cloud, no SolisCloud account, no internet dependency. It reads everything in real time over Modbus TCP, and lets Homey control charging, discharging, work mode and grid export.

What it does

Monitoring

  • Solar production, battery power & state of charge, grid power, home load, voltages, temperature and work mode
  • Three separate devices — Inverter, Battery and Grid — so the Homey Energy dashboard gets the right roles (production / home battery / grid import-export)
  • A grid-limiting indicator that tells you when the inverter is throttling production (e.g. volt-watt overvoltage curtailment), instead of leaving you guessing why output dropped

Control

  • Force charge / discharge the battery, set work mode and reserve SOC
  • Cover the house from the battery — a closed-loop discharge that supplies exactly what the house is drawing and holds your grid at zero, instead of a fixed power that dumps the surplus onto the grid
  • Battery discharge blocked / allowed — hold the pack during cheap and mid-price hours so the grid carries the house, then release it into the expensive peak. Solar still charges it while blocked, and it needs no optimiser: any Homey price app that knows cheap from expensive drives it
  • A “Limit solar output” switch for any Flow — e.g. throttle production when prices go negative — plus a separate set/clear grid-export limit and a soft inverter on/off
  • Feed the app your whole-home data: Report grid power (a P1 reading, + import / − export), Report house load, Report EV charge power, and Report external solar production for panels on a second inverter
  • Follow-the-sun triggers that recommend an EV charging current to soak up surplus solar
  • 34 Flow cards in total (8 triggers, 5 conditions, 21 actions)

Works with AC-coupled setups too. If your battery is on the Solis but your pannd entirely, feed the other inverter’s AC power in with Report external solarproduction and the app gets the full picture — home consumption, the grid guard and the optimizer all use it.

How it connects

The app needs one thing: a Modbus TCP endpoint on your LAN at a fixed IP. You give it an IP, a port and a unit ID, and it doesn’t care what’s behind them.

I run a small wired RS485-to-Ethernet gateway on the inverter’s data-logger (COM) port, and the manual has a full step-by-step wiring guide with photos and a pinout. But that’s my setup, not
a requirement — if your existing data logger exposes Modbus TCP and holds a connect instead. I explain below why I ended up wiring a gateway.

Only one Modbus master can talk to the inverter at a time, so don’t run a secondparallel.

Requirements & hardware

  • A Solis hybrid inverter and a reliable Modbus TCP endpoint on your LAN at a fixeRS485-to-Ethernet gateway (e.g. Waveshare RS485 TO ETH) on the COM port, or yourexisting data logger if it exposes Modbus TCP and holds a session
  • Homey Pro
  • Developed and tested on an S6-EH3P10K2-H with a Pylontech battery. Reports from other Solis hybrids very welcome

A few recipes in the manual

  • Negative-price “don’t feed in” — absorb the surplus into the battery, then stop exporting - Save the battery for expensive hours — hold its charge while power is cheap, thento the price peak, driven by any Homey price app (Tibber, Frank, EPEX…), nooptimiser needed - True home consumption by combining a P1 meter with the inverter’s AC power
    ## Status
    In beta on the Test track. Reading is solid, and grid-charge, discharge and load-fin daily use. The export-limit writes are verified against Solis’s officialregister map but still being field-tested — so keep an eye on your inverter after the first commands, and report anything odd.
    :open_book: Manual: Solis Local Hybrid Inverter for Homey — User Manual :backhand_index_pointing_right: Install (beta): https://homey.app/en-us/app/nl.ora-Hybrid-Inverter/test/
    Unofficial community app — not affiliated with or endorsed by Solis / Ginlong. Feer reports from other models are hugely appreciated :folded_hands:
    —
    ## :bell: What’s new — v0.1.81
    - New: a Flow action to switch the charge trim on or off, so your own energy mthe way for a deliberate grid charge.
  • Fixed: charging the battery from the grid no longer cancels itself. The trim used to read the charge as unwanted grid use and shut it down. - Fixed: the grid protection now counts solar from a separate inverter, so it than your connection can carry.
  • Improved: the grid power on the device and in the Energy tab now follows the meter you feed in, instead of the inverter’s own reading. - Clearer Flow cards: every card now explains what it does, including the differen charging and actually starting a charge.
    Recent highlights
    - Cover the house from the battery — closed-loop discharge, no more exporting the
  • Report external solar production — full support for AC-coupled systems - Battery + EV grid-charge together inside one cheap hour, with the connection gual household load so a passing cloud can’t push you over the main fuse
  • Battery discharge blocked / allowed, straight from a Flow

Design notes: why local Modbus, and why I wired a gateway

Decision 1 — Local Modbus, not the cloud. Solis offers a cloud API (SolisCloud). It’s the easy path: no wiring, works from anywhere. But for real-time battery control it’s the wrong tool

  • Latency and rate limits. Cloud round-trips are seconds, and the API is throttled. A price optimiser that re-evaluates the battery setpoint every few seconds simply can’t live on a clouAPI.
  • Reliability. If your internet, Solis’s servers, or the API has a bad day, your battery control goes with it. I didn’t want my home energy strategy depending on someone else’s uptime. - Keeping it at home. The stock WiFi stick continuously reports to SolisCloud,er’s servers overseas. That’s not a knock on Solis — it’s just not what we want for a home setup: our energy data and the control loop should stay on our own network.
    So the app speaks Modbus TCP locally, on the LAN, with no cloud in the loop — reads and writes.
    Decision 2 — why I moved off the Solis WiFi stick. The stick plugs into the COM port, pushes data to SolisCloud, and can also expose Modbus locally — so the tempting option was to talkModbus to the stick and leave everything as-is. That’s what I did first, and the at it at the stick’s IP and it works. For monitoring it was fine. For sustainedcontrol on my unit it wasn’t:
  • It’s a single Modbus “slot.” It’s really there to serve SolisCloud and only lets one client talk at a time, so you’re constantly contending with its own cloud traffic. - It reverts to the cloud. In practice it periodically flipped back to its Sold local writes after ~13 minutes. Invisible for monitoring; fatal for a controlloop — the inverter would silently drift back to self-use mid-dispatch. - No persistent session. The inverter’s real-time dispatch is guarded by a wat the control socket closes. The stick’s behaviour made a stable, held-open sessionimpossible.
    What I did instead. I pulled the stick and wired a small Waveshare RS485-TO-ETH adapter straight onto the inverter’s COM port as a transparent Modbus TCP↔RTU gateway. Now there’s no clouclient competing for the bus, the ~13-minute ceiling is gone (proven with 25 minut, and in daily use since), a persistent socket keeps the dispatch watchdog happy,and nothing leaves the LAN — the inverter no longer phones home at all.
    To be clear: that’s what I measured on my stick and its firmware, not a universal verdict. Others report running Modbus TCP through the data logger successfully, including for control — if yours holds a session under load, you don’t need a gateway at all. I went wired beause I wanted the inverter off the internet entirely.
    The trade-offs I accepted, to be upfront:
    - You give up SolisCloud unless you re-add a logger elsewhere. For me Homey isl surface now — a feature, not a loss.
  • It’s a hardware change. You’re wiring an adapter into the inverter’s COM port — a bit of DIY, and something to weigh re: warranty with your installer. - Single-master discipline. Only one thing can be Modbus master, whichever rourialises every request onto one connection. You can’t also run a separate HomeAssistant Modbus poller against the same inverter — pick one master.
    A couple of Solis-specific quirks had to be handled in code (reads must be small contiguous blocks; the “enable dispatch” register has to be the very last write, or a companion write resets it). Nothing exotic, but it’s why direct Modbus is more than "just point at the po

Why it was worth it. The payoff is a fully local, cloud-independent control loe battery — charging on cheap or surplus power, discharging into the evening peak — and keeps driving it without timing out or fighting the cloud. That reliability is the foundation everything else is built on.

Hi Remco,

Nice initiative!

Might be very obvious, but I assume it doesn’t work with a cheap-ass datalogger like the S3-WIFI-ST ?

An S2-WL-ST model is most probably the one and only suitable datalogger for use with Modbus TCP connections?

I think it should work as well. The fundamental part is that the Modbus to TCP can only work with one client, so if you disable that client (your EMS probably) Homey can take over. There is a safety switch in the settings of the app currently to prevent writing, but in the end you would need that, as Homey will be the only possible client when activated. And I guess control would be needed.
I started this little project as have received an EMS from NZU (Nederlandse zonnepanelen unie) and I would like more control. So developing against a physical setup, but can be used with other types and setups.

You would want to figure out the IP address of the datalogger.

Best regards,

Remco

Thanks, IP address is known.
I would have to disable the cloud connection, no other devices connected.
I’ll give it a go.

actually, I believe the TCP Modbus just overrules the cloud connection. So it might not even be necessary to disable it. So after the Modbus has cleared again the cloud connection should start back working. I can’t check myself as I have no cloud account.

It only allows connections to port 80. Tried several unit ID’s as well (0, 1, 2, 10 etc).

I’ve disconnected every cloud connection I could think of.

Found a datalogger setting to increase the max. nº of simultaneous connections, I’ve set it to 6. Dunno if that has any influence

could you check if port 8899 is open?

nc -vz [ip of stick] 8899

so:

nc -vz 192.x.x.x 8899

this is some other protocol I can port maybe.

Hi Remco

Solis Modbus TCP/IP only works via the S2-WL-ST datalogger. Modbus TCP/IP does not work with other models. Not even with a firmware update.

As long as a Modbus connection is open, the cloud connection does not work. If you disconnect the Modbus connection, data is sent to the Solis cloud again.

ID 1 is the default. You can assign a different ID to an inverter if you have multiple inverters on one datalogger. You need a special cable for this, but it is more expensive than another datalogger. So, for two inverters, it is not worthwhile.

Hello Remco,

Thank you for this great app!

I have 1 question

Is it possible to see at what % the reserve Soc is set in the dashboard? I can’t find it

see the first post

Hi @Remco_Bosshard

What a great initiative! I’m setting up a custom-build installation of solarpanels, huge battery and EV. Will install Solis S6 30kW 3 fase Hybride Omvormer (S6-EH3P30K-H). I don’t know whats the status of your app will be at that point but i’m happy to test the app!

Well, this is not all true. We are a swedish based “solar/AI” company (HEMS, app on Homey) who actually built our own Solis Modbus TCP without any limits. Read realtime, control in realtime and full access to solis cloud as well. All is done thru datalogger and Modbus TCP over wifi/Lan. No need for any RS485 gateways. This app has been used by our users for months. But it´s not public and need the Hems license to work. But there is a way to skip the RS485;)

After trying a lot of Modbus apps to get my solar panels values in Homey i tried Code Vibing in Codex with great result.

I’ve used ChatGpt Astra for vibe coding my own Solis Homey App:
Chat:

Build a Homey app that:

-Reads Modbus values from a Waveshare RS485 TO POE ETH (B) and adds them as solar panel values in Homey.
-Modbus reads data from a Solis Inverter Solis-mini-3600-4G.

after 10 minutes : great success, homey integration 100%, some finetuning for zero export possibilities !

AI has opened the door to a new era where ideas instantly become reality

Wauw that is really impressive! Will it be available for everyone to download?

Maybe. Right now, it has been created specifically for my Modbus hardware and Solis inverter. I made the post to show how easy it is to use a good AI to create your own solution for something you’d like to integrate with Homey.
If you want to try this version at your own risk : GitHub - paulmooibroek/solis-modbus-homey: Homey app voor Solis Mini 4G via Waveshare Modbus: zonneproductie, Insights en 0–100% vermogensregeling. · GitHub

Hi, Thanks for this app. Just get it to work and run into a question. Is there a way to summarize the grid power? both import and export and both toghether and separate so i can calculate export income and import costs?
If yes, how?

Good day,

I have a question, I have this inverter S6-GR1P2.5K-M and unfortunately it does not work with this app but is it perhaps possible to use it for the local data. Through the cloud it is a disaster.. I have the S2-WL-ST data logger.

Hope it can be made possible.

Thanks in advance

This sounds promising! Is there also a Zonneplan battery user with the original Solis inverter considering to install the app, or has thisnworking? What about the trading part?

Hi,

I’m setting up Homey Pro as an EMS using the Solis Local Hybrid Inverter app and I have a question about self-use control with my particular setup.

Hardware:

  • Solis S6-EA3P10KAA-NV-ND-H – 3-phase AC-coupled battery inverter, no PV connected to the Solis
  • Pylontech Force H3
  • Solis S2-WL-ST
  • Homey Pro
  • Homey Energy Dongle connected to the smart meter/P1 port
  • PV is connected to a separate SMA STP 10.0-3AV-40

Local Modbus communication works correctly. Homey can read SOC, battery voltage/power, work mode, etc., and it can successfully control the inverter.

I currently have this Flow:

Homey Energy Dongle → Power changed
→ Solis → Report grid power [P1 Power]

The sign is correct:

positive = grid import
negative = grid export

My goal is to use the battery for load following, not forced export. For example:

800 W grid import → battery supplies approximately 800 W
2 kW grid import → battery supplies approximately 2 kW
0 W import → no discharge

The Solis is in Self-use mode and Battery discharge = allowed, but the inverter itself is configured as No meter because there is no physical Solis meter connected.

With approximately 500–1000 W actual grid import measured by the Homey P1 dongle, the battery stays at 0 W in Self-use. Report grid power is definitely receiving the P1 measurement, but it does not appear to make Self-use follow that measurement.

I also tested Force discharge battery at 25 A to verify that Modbus control works. It definitely does: the inverter discharged at approximately 9.5 kW, while my house was only consuming a few hundred watts, resulting in roughly 9.2 kW export to the grid according to the Homey P1 meter.

So communication/control is working, but forced discharge is obviously not suitable for normal self-consumption control.

My main questions are:

  1. Can the Homey Report grid power value be used as a virtual grid meter for Self-use, without a physical Solis meter?
  2. Is Report grid power actually used for closed-loop battery discharge/load following, or only for things such as grid protection, optimiser logic and charge trimming?
  3. Is the S6-EA3P10KAA-NV-ND-H fully supported for this use case?
  4. Is there currently a way to control discharge power dynamically in watts or set a grid target, rather than using Force discharge in amps?
  5. If Self-use cannot use the external Homey P1 reading directly, would it be possible for the app to implement a P1-based closed-loop controller, for example:

P1 grid power → battery charge/discharge adjustment → grid power towards 0 W

Ideally Homey would decide when the battery may discharge based on electricity prices/SOC/solar forecast, while the battery only supplies the actual household deficit instead of exporting at full power.

I can provide screenshots, diagnostic information or test specific Modbus actions/registers if useful.

Thanks!