What is EOS Connect?

Software you run at home that decides, hour by hour, when your battery should charge, hold or discharge — and then makes it happen.

How it works

EOS Connect sits between the things that measure your house and the things that control it. Every few minutes it runs the same four steps.

  1. Collect. It builds a load profile from your historical consumption — days of it, not a single reading — and reads the things that only matter right now, such as battery charge level and whether a car is charging. Sources are Home Assistant, openHAB, EVCC or the inverter itself.
  2. Forecast. It fetches the next 48 hours of solar yield and electricity prices.
  3. Optimise. It works out, slot by slot, the cheapest way through those 48 hours — when grid electricity is worth buying, when solar should be stored rather than exported, and when the battery should carry the house.
  4. Control. It writes that decision to your battery inverter — directly, or through EVCC acting as the gateway — and shows you the plan it is following. It never commands your wallbox; what the car is doing is an input it works around, not something it takes over.

A new plan is worked out on the quarter hour, and the plan in force is applied continuously in between. Plans are built in hourly slots; 15-minute slots are available with either EVopt backend.

Your house consumption history live SOC · EV state Forecasts solar yield electricity prices optimizer — built in works out the cheapest path through the next 24–48 hours optional alternative external server Akkudoktor EOS or EVopt temperature forecast: EOS server only Your battery inverter EOS Connect history, plus live state next 48 hours charge · hold · discharge directly, or through EVCC the house changes, and the next run reads it back re-runs on the quarter hour
The optimizer sits inside EOS Connect. An external server can take its place, but nothing needs one.

The optimizer

The part that actually decides is the optimizer, and EOS Connect ships with one. No external server is required. The setting is eos.source, and its default needs nothing installed.

Local EVopt — the default

local_evopt runs inside EOS Connect. It solves the whole 48-hour plan at once rather than deciding hour by hour, using a technique called mixed-integer linear programming. Nothing leaves your network, and it handles both hourly and 15-minute slots. Built on evcc-io/optimizer.

Akkudoktor EOS

eos_server talks to Akkudoktor EOS, which you install and run yourself (port 8503 by default). Hourly slots only. This is the one backend that uses the outside-temperature forecast.

EVopt

evopt talks to a separate EVopt server (port 7050 by default). Lighter than Akkudoktor EOS, and it handles 15-minute slots.

Both external backends are entirely optional. You can start on the built-in one and switch later — it is a single setting, not a reinstall. Optimizer settings

What you need

Less than you might expect. A fresh install starts and runs with nothing configured: it falls back to a built-in load profile, a demo solar curve for a typical 4 kW array, and market prices from Akkudoktor. That gets you a working dashboard in minutes. It does not get you savings — for that, the list is:

  • Somewhere to run it. The Home Assistant add-on, Docker, or Python 3.13 from source.
  • A battery and an inverter it can drive. Without one, EOS Connect still forecasts and plans, but the plan is only advice — the inverter setting stays at default, which displays and controls nothing.
  • Live measurements. Home Assistant or openHAB supplying your actual household load and battery charge level. This is the single change that most improves the results.
  • A dynamic electricity tariff. Optimising against a flat rate has very little to work with.
  • EVCC, if you charge a car and want the car and the house battery to stop bidding for the same cheap hour.

On first start a setup wizard walks through these in order, asking only what your earlier answers make relevant — say you have no data source and it stops asking about sensors. It saves only the answers it asked for; everything else keeps its default until you change it. There is no configuration file to edit.

Handled for you

A few things EOS Connect does on its own, or behind a single switch.

PV forecast auto-scaling

Compares the forecast against your metered yield and corrects the next one, separately for four blocks of the day. Needs a cumulative PV generation sensor. Details

Smart Price Prediction

When your tariff has not published tomorrow yet, it learns how your prices relate to the spot market and projects that forward, instead of repeating today. Details

Dynamic PV override

In any slot where the solar forecast exceeds your load, it can release the battery to discharge even though the plan said hold. Details

Temperature forecast

The outside-temperature curve is fetched hourly and handed to the optimizer, which models the house more accurately with it. Akkudoktor EOS backend only.

Backup and restore

One file holding the whole install — settings plus the measured PV history, which is kept on a rolling window and stored nowhere else. A restore always previews before it applies. Details

Battery energy costing

It tracks what the energy already in your battery cost to put there, so it will not sell cheaply what it bought expensively. Details

What it talks to

Measurements

Home Assistant or openHAB for load and battery sensors, EVCC for car and charger state. Each sensor field has a Test button that reads the entity and shows its value, so a typo is caught before you restart.

Inverters

Fronius GEN24 (current and legacy interfaces), Victron, any inverter reachable through Home Assistant service calls, or EVCC as a gateway. Leave it at default to watch without controlling.

Solar forecasts

Akkudoktor, Open-Meteo (hosted or local), Forecast.Solar, Solcast, Victron, EVCC, your own time series, or the built-in demo curve. Several arrays at different orientations are added together.

Prices

Tibber, smartenergy.at, Stromligning, EVCC, a fixed 24-hour curve or your own series. Export prices come from a fixed rate, Elpris DK, EPEX Spot or EVCC.

EV charging

EOS Connect reads EVCC — several instances at once, if you run them — so the house battery is planned around what the car is doing. Charging itself stays EVCC's job.

Everything else

MQTT with Home Assistant auto-discovery, the same topics for openHAB through its MQTT binding, and a REST API if you would rather drive it yourself. API and MQTT reference

The dashboard

Everything lives in one web page, served on port 8081. The centre of it is a chart of the next two days: forecast solar, forecast load, the price curve, and the mode EOS Connect intends to run in each slot. When it decides to buy grid electricity at three in the morning, that chart is where you see why.

The EOS Connect dashboard. Four summary panels across the top show the current control state, battery state with the next planned AC charge, EV charging status and running costs. Below them a chart plots forecast load, solar yield, grid use, price and battery charge level across the next 24 hours, with shaded bands marking the slots where discharge is allowed. A table on the right lists the planned control state, price and battery level for each hour.
The plan for the next 24 hours, and the reason behind each slot. Open full size.

The menu adds a battery overview with charge sessions, temperature and cost; override controls for taking over manually; alarms and a filtered log viewer; the full settings pages; and backup and restore. Nothing needs a terminal.

Docker installs also check for new images in the background and show a dismissible banner when one is available. Home Assistant add-on updates are handled by Home Assistant. Update notifications

Next steps

Install it

Home Assistant add-on, Docker or source, then the setup wizard.

User guide

Tune it

Every setting, with its default and whether it needs a restart.

Configuration

Automate it

MQTT topics, the REST API and automation recipes.

Advanced

Still deciding? EOS Connect is MIT-licensed and developed in the open — read the source or ask in Discussions before you install anything.