Hi all ![]()
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.
It’s now out of beta — v1.0 is the first stable release.
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
- Cover the house from the battery, leaving out the EV (new) — the same, but your car charges from the grid while the battery only covers the rest of the house. It uses the power you send with Report EV charge power
- Keep the grid at zero with the battery (new) — works both ways: export charges the battery, import discharges it. Made for setups where the battery can’t see the solar surplus by itself
- 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
- Grid protection — battery grid-charging is capped to what your connection can carry. With a Plugwise Smile P1 it watches each phase separately, so a single-phase appliance (a washing machine heating up) can’t push one phase over the fuse while the total still looks fine
- Follow-the-sun triggers that recommend an EV charging current to soak up surplus solar
- 36 Flow cards in total (8 triggers, 5 conditions, 23 actions)
Works with AC-coupled setups too. If your battery is on the Solis but your panels are on a different inverter, the Solis can’t see that solar at all — home consumption comes out far too low and the battery never soaks up the surplus. Feed the other inverter’s AC power in with Report external solar production and the app gets the full picture — home consumption, the grid guard and the optimizer all use it. Keep the grid at zero with the battery then lets the battery charge from that surplus.
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 connection, use that 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 second Modbus client in parallel.
Requirements & hardware
- A Solis hybrid inverter and a reliable Modbus TCP endpoint on your LAN at a fixed IP — either an RS485-to-Ethernet gateway (e.g. Waveshare RS485 TO ETH) on the COM port, or your existing 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; confirmed working on the S6-EH3P10K-H too. Bigger or smaller than 10 kW? Set Rated power in the device settings and forced charging, discharging and export limits scale to your model. 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, then release it into the price peak, driven by any Homey price app (Tibber, Frank, EPEX…), no optimiser needed
- True home consumption by combining a P1 meter with the inverter’s AC power
Manual: Solis Local Hybrid Inverter for Homey — User Manual
Install: Solis Local Hybrid Inverter | Homey
Unofficial community app — not affiliated with or endorsed by Solis / Ginlong. Feedback and reports from other models are hugely appreciated ![]()
What’s new — v1.0.1
- New: Keep the grid at zero with the battery. Like Cover the house from the battery, but it also charges the battery from solar surplus when your meter shows export. Useful when your panels are on a different inverter.
- New: Cover the house from the battery, leaving out the EV. The battery covers the house while your car charges from the grid. Thanks to the community members who asked for both.
v1.0.0 — first stable release
- Improved: per-phase grid protection with a Plugwise Smile P1 — battery charging backs off before any single phase goes over the fuse.
Since the last update here
- New: Rated power setting for inverters other than 10 kW (e.g. the S6-EH3P15K-H) — existing installs keep 10 kW.
- Fixed: forced charge/discharge on models without the remote-control timeout setting (such as the S6-EH3P10K-H) — they now use their built-in default instead of refusing the command.
- Improved: clearer errors — when the inverter refuses a command, the app now says why and names the setting, and a partly refused stop is reported instead of hidden.
Recent highlights
- Cover the house from the battery — closed-loop discharge, no more exporting the surplus
- Report external solar production — full support for AC-coupled systems
- Battery + EV grid-charge together inside one cheap hour, with the connection guard counting actual 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 cloud API.
- 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, on the manufacturer’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 talk Modbus to the stick and leave everything as-is. That’s what I did first: point the app at the stick’s IP and it works. For monitoring it was fine. For sustained control 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 SolisCloud connection and dropped local writes after ~13 minutes. Invisible for monitoring; fatal for a control loop — the inverter would silently drift back to self-use mid-dispatch.
- No persistent session. The inverter’s real-time dispatch is guarded by a watchdog that expires when the control socket closes. The stick’s behaviour made a stable, held-open session impossible.
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 cloud client competing for the bus, the ~13-minute ceiling is gone (proven with 25 minutes of continuous control, 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 because 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 is the control 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 route you take; the app serialises every request onto one connection. You can’t also run a separate Home Assistant 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 port”.
Why it was worth it. The payoff is a fully local, cloud-independent control loop that drives the 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.



