Version 2.0.0 out now for testing!
Ultimate EMS — Setup Guide (v2.0.0)
This walks through every settings section in the order it appears on the app’s settings page. Skip any section for equipment you don’t have (battery, EV, heat pump, dump load are all optional).
1. Grid & Connection
P1 meter: pick the device that measures grid import/export (e.g. a HomeWizard P1 or DSMR reader). This is the single source of truth the EMS balances everything against.
Connection: set the number of phases (1 or 3) and your main fuse capacity in amps. If you have EV load balancing needs, enable Phase load balancing and set a threshold (e.g. 80% of max capacity) — it automatically throttles EV charging current if a phase gets close to overloaded, then waits a configurable delay before trying again.
Energy contract: choose Fixed or Dynamic (15-minute prices). On Fixed, just fill in your import/export price. On Dynamic:
-
Price source is now device-only — as of 2.0.0, Elecz has been removed as an option (its Dutch price data turned out to be structurally flat/incorrect). Pick a Power by the Hour or Tibber device instead.
-
To get the full 24-hour price curve (not just PBTH’s sparse “cheapest/most expensive hour” anchors), install the Power by the Hour app and build two Flows:
- PBTH “New prices received” (period: this day) → Ultimate EMS “Import full price data from PBTH” (period: this day)
- PBTH “New prices received” (period: tomorrow) → Ultimate EMS “Import full price data from PBTH” (period: tomorrow)
Without these two Flows, the EMS still works but only sees PBTH’s day low/high plus the next few hours — planning is noticeably better with the full curve feeding in.
-
Tibber users: just select your Tibber Home device, no Flow needed (it already exposes full hourly prices as a capability).
Zero export: closes the loop on your P1 meter so solar surplus doesn’t get exported — each 15-minute billing block, the EMS calculates how much the battery needs to charge/discharge to net out at zero, and dims inverters as a last resort if the battery is full or absent. Recommended if your contract doesn’t pay for export.
Zero import: independent of Zero export — lets the battery discharge deeper than it normally would to also cover import, but only when today’s remaining solar forecast is expected to refill it. Needs a battery with real capacity; a small battery can drain faster than you’d like with this on.
2. Solar Panels
Add each inverter’s kWh meter (up to 3) and, on a 3-phase install, which phase it’s wired to (or leave it on “Auto” if the meter already reports per-phase). Multiple meters get summed automatically.
Fill in peak power (kWp) — total for 1-phase, per-phase for 3-phase — and a peak hour per phase (13 = south-facing/default, 10 = east, 15 = west; no need to enter panel tilt/azimuth, the app pulls Open-Meteo radiation data for your location).
New in 2.0.0: on a 3-phase install, if one or more phases have no PV meter at all, the EMS now estimates that phase’s live production from its configured peak power + the weather forecast, so it’s no longer invisible to planning. It’s clearly flagged as an estimate in the diagnostic log (+XXXWschat), never silently blended in as if it were a real reading.
Curtailment isn’t a separate toggle — if Zero export is on, inverters get dimmed automatically once the battery is full/absent; if it’s off, dimming never happens.
3. Home Battery
Toggle “I have a home battery”, pick the device, and fill in capacity + max charge/discharge power. If it’s a Zendure battery on local HEMS mode, a separate box appears for the IP address and serial number (enable HEMS mode in the Zendure app first — Add HEMS, then leave it — or the local API won’t respond).
If your battery already runs its own algorithm (e.g. Zonneplan Nexus Powerplay), tick “Battery manages itself” — the EMS then only reads SoC/power and never sends charge/discharge commands.
4. Electric Vehicle
Pick your EV device (Tesla or other) and how many phases it charges on. If you also have a separate smart charger, add it — otherwise (Tesla users especially) the EMS drives the car directly via the Tesla API.
Set battery capacity and your default target SoC, then pick a charge mode:
- Solar only — pure surplus, never grid.
- Solar+ — surplus with a 5A/200W minimum floor.
- Solar + grid — Solar+ plus night charging when a trip is planned.
- Fixed power — always charges at a set current.
- Fast charge — max current.
- Off — EMS doesn’t manage the car.
The solar-ceiling threshold (new-ish, default 80%) governs charging above your normal target toward a higher “solar goal” (set via the EV widget’s charge-goals popup): it only keeps charging past the normal target if the measured charging power is genuinely mostly solar, not just because there’s some PV somewhere in the house.
Set min/max charge current, start/stop hysteresis (avoids flapping on passing clouds), min on/off time (protects the charger from rapid switching), and morning/evening peak-hour blocks — EV charging always stops during these, battery covers the house instead.
For night charging, enable it and tick which weekdays the car is actually home (day and night now — as of this release, “not home” on a given day means genuinely absent, not just “away during the day, back overnight”). The night window itself is derived automatically from your peak-hour settings (evening peak end → morning peak start), nothing to keep in sync manually.
5. Heat Pump(s)
Add up to 4 devices, each with a type (heating heat pump, cooling airco, or DHW boiler) and which grid phase it’s on — the EMS only nudges a device’s setpoint when there’s surplus on its own phase. Boilers are on/off only, no setpoint needed.
Set the base offset applied on surplus, plus a larger “sustained surplus” offset that kicks in once surplus has held continuously for a configurable number of minutes (default 20) — this builds up a bit of extra thermal buffer instead of just tracking instantaneous surplus. Peak hours no longer block or force heat pumps/aircos; they simply follow surplus like any other time.
6. Dump Load
Optional: any on/off device that can usefully absorb leftover surplus (e.g. an immersion heater) once battery, EV, and heat pumps are all already satisfied. Add up to 3 devices — no phase or price logic, just on/off.
Tip for existing users upgrading to 2.0.0: if your price source was previously set to Elecz, it’ll keep working until you touch that setting, but you can no longer re-select it — switch to a Power by the Hour or Tibber device, and set up the two PBTH Flows above if you want the full price curve.