Warning! This app might not work properly.
This app version is currently being tested, and has not yet been reviewed. It might not work as expected.
Be extra careful when installing this app.
« Back to the regular version
Ultimate EMS turns your Homey Pro into a full-featured energy management system. It intelligently coordinates your solar panels, home battery, EV charger and heat pumps to maximise self-consumption and minimise energy costs.
Every evening the EMS calculates a detailed plan for the next day based on the weather forecast, expected solar production and your energy prices. During the day it follows this plan in real-time, adjusting automatically when clouds roll in or your energy use changes.
Key features:
- Works with your existing Homey apps — no custom drivers needed
- Multi-inverter support with per-phase surplus tracking (L1/L2/L3)
- EV charging via Zaptec, Easee, Tesla and other supported chargers
- EV departure planning with target SoC and solar-priority logic
- Heat pump and air conditioning control with seasonal heating/cooling switching
- PV curtailment for Growatt inverters (zero-export / export limit)
- Dynamic tariff support: Tibber, PBTH/Enever and other price providers
- Live dashboard widgets for EV status and PV fleet overview
Read more ›
Flow cards
Click on a device above to show related Flow cards only.
When...
EMS Controller
Turned off
Ultimate EMS
EMS mode changed
Ultimate EMS
Priority 1 not fully achievable tomorrow
Ultimate EMS
EV ready for departure
Ultimate EMS
Battery below minimum SoC
Ultimate EMS
Dump load activated
Ultimate EMS
Dump load deactivated
Ultimate EMS
EMS wants to set EV charge current
Ultimate EMS
EMS wants to start or stop EV charging
Ultimate EMS
EMS wants to start EV charging
Ultimate EMS
EMS wants to stop EV charging
Ultimate EMS
Heat pump switched mode
And...
EMS Controller
Is turned on
Ultimate EMS
EMS mode is Mode
Ultimate EMS
Battery SoC is above Threshold (%)%
Ultimate EMS
A trip is planned today
Ultimate EMS
Heat pump is in Mode mode
Ultimate EMS
Solar is producing
Then...
EMS Controller
Toggle on or off
Ultimate EMS
Set EMS mode to Mode
Ultimate EMS
Plan EV trip: depart Departure time at Target SoC (%)%
Ultimate EMS
Recalculate day plan now
Ultimate EMS
Set EV charge profile to Profile
Ultimate EMS
Set EV fixed current to Current (A)A
Ultimate EMS
Set EV max current to Max current (A)A
Ultimate EMS
Set battery target SoC to Target SoC (%)%
Ultimate EMS
Set dump load to Enabled
Ultimate EMS
Postpone EV charging (load balance)
Ultimate EMS
Import PBTH prices for Period: Prices (JSON)
What’s new
Version 2.0.0 — New: full-resolution day-ahead prices (today AND tomorrow, all 24 hours) can now be imported directly from Power by the Hour through a Homey Flow action ('Import full price data from PBTH'), instead of relying only on its sparse capability anchors (day low/high plus the next few hours). Set up two Flows — PBTH 'New prices received' (period: this day / tomorrow) → Ultimate EMS 'Import full price data from PBTH' — to have planning use the real ENTSO-E curve; the settings page now explains exactly how. Removed: Elecz as a selectable price source — its Dutch data turned out to be structurally flat/incorrect compared to PBTH's real curve, so the settings page now only offers a price device (Power by the Hour or Tibber). New: on 3-phase installations where one or more phases have no PV metering at all, that phase's live production is now estimated from its configured peak power together with the weather forecast, and clearly marked as an estimate in the diagnostic log, instead of being invisible to planning. Fix: several related bugs in the day-plan's night-charge block were found and fixed the same day — the plan preview used a stricter 'cheap enough' threshold than the realtime controller actually used to decide charging, so the preview could show no night block even though charging would really happen; a single day's price array could conflate two physically different nights (the tail of last night and the start of the next one); the cheapest-hours selection could be forced into a more expensive hour when the truly cheapest hours weren't back-to-back (now picks the individually cheapest hours, gaps allowed); and PBTH's rolling 'next 8 hours' price anchor could be discarded near midnight even when it genuinely belonged to the day being planned. Fix: the real-time 'is this price expensive' check for the Elecz source used a coarse one-third-of-the-day bucket that flagged roughly a third of every single day regardless of the actual price level, while the day plan used a much rarer definition for the same concept, causing night charging to sometimes not fire even on a clearly cheap night; the two now use the same definition. Fix: forward (tomorrow) planning could schedule a full EV night-charge block on a day the car is configured to be away, simply because the car happened to be connected at home right now (today); tomorrow's plan now only charges the EV when it's actually expected home that day, an explicit trip is planned, or (today only) it's genuinely connected. New: past the ordinary grid-charge ceiling, the EV is only allowed to keep charging toward the higher solar ceiling if the measured charging power is genuinely mostly solar (configurable minimum ratio), instead of just because there's some PV production somewhere in the house. Fix: a heat pump/thermostat whose target_temperature capability is (or turns out to be) not settable no longer floods the log with a repeating error; it's now logged once, skipped gracefully, and recovers automatically if the device becomes settable again. Fix: sending a Zendure battery a slightly different power target on every single tick could prevent its internal ramp-up from ever settling (confirmed by Zendure support that the hardware ramps slowly and this can't be changed in software); a new target is now only resent once it differs meaningfully from the last one actually sent. Changed: the 'NOM' import-side setting has been renamed to 'Zero import' for consistency with 'Zero export', and can now be toggled fully independently of it.
View changelog