Human vs algorithm: manual battery control vs AI
A commercial site ran its 1 MWh battery by hand for a month. We compared its manual schedule with optimal AI control on the very same real data - and measured how much more it could save: +34%.

A commercial site with a 1 MWh battery ran it by hand, convinced it schedules storage better than any automation. We took its real 29-day data and priced two variants with the same cost engine: its manual schedule and optimal AI control. On identical data, AI delivered 34% more savings (an extra 5,988 zł a month), without adding a single cell to the battery.
The setup: good hardware, a manual habit
The site in question is a commercial consumer subject to the Polish capacity fee (hourly-settled), with its own PV installation and a 1,000 kWh / 500 kW battery. Its energy bill alone runs to around 100k zł a month, so every percent of optimization is real money.
The battery runs in zero-export mode - it never sells to the grid, it only covers on-site consumption. The owner controls it by hand, on his own schedule, and holds off on automation: he is convinced he can plan the battery better than any algorithm. That is the perfect test - compare both approaches on the very same days.
How we measured it - one fair experiment
The rule was simple: change exactly one thing. The same 29 days, the same energy prices, the same consumption and PV generation profile, the same battery-wear cost, the same tariff and the same capacity fee. The only variable is the battery charge/discharge schedule - once as the human set it day by day, once as our optimizer computed it. As a reference we also price the same site with no battery.
The result shows the optimization potential - how much cheaper the battery could have been run on this period’s data - under an identical pricing method and end-state-of-charge normalization for both sides. Prices use RCE (the Polish market reference price); using an exchange fixing would give marginally different totals, but the intraday price shape is nearly identical, so the control logic is unchanged.
The same battery: run by hand it cut the bill by 17,638 zł (-18%), under AI control by 23,626 zł (-24%). Total energy cost over the period: no battery 99,362 zł, manual 81,724 zł, AI 75,736 zł.
Run by hand, the battery cut the bill by 17,638 zł versus no battery. That is a good result. But the same battery under AI control cut it by 23,626 zł - that is 5,988 zł more. In other words: the algorithm extracted 34% more savings from the very same hardware.
Where the edge comes from
Since the battery never sells to the grid, the whole game is about timing: when to draw energy from the grid, and when to release it from the battery to cover consumption.
- Self-consumption timing. The algorithm charges the battery in the cheapest hours - sunny midday, when market prices fall near zero or below - and discharges into the evening peak, when energy is priciest. The manual schedule largely misses that rhythm.
- The capacity fee. This is a bill line that is easy to forget when planning by hand. Its size depends on how "spiky" your peak-hour draw is - the algorithm deliberately shifts charging outside those hours to drop from the most expensive band to the cheapest. More on the capacity fee.
- Discipline every 15 minutes. The optimizer builds a plan for all 96 quarter-hours of the day and sticks to it without exception. A human sets a few thresholds and inevitably simplifies.
An upward bar = a day AI beat manual control (26 of 29 days; best day +715 zł). The downward bars are the 3 days when the manual schedule came out marginally ahead.
Being fair: single days can tie
On 3 of 29 days manual control came out slightly ahead. That is not an error - it is the nature of a battery, a resource shared across days. When the algorithm "banks" cheap energy on one day for the next, it charges the current day but recovers it tomorrow. That is why the right measure is the whole-period total, not a single day - and over that total, AI wins decisively.
What it means in practice
For this site, moving from manual control to automation means +34% savings with no hardware investment - the battery is already there, only the way it is controlled changes. Human intuition handles "charge by day, discharge in the evening" well, but it cannot keep up with a market that shifts every 15 minutes and that additionally rewards a clever profile shaped around the capacity fee.
EnergyPal’s algorithms schedule your battery and PV for every quarter-hour of the coming days, combining energy prices, consumption and generation forecasts and the full capacity-fee arithmetic. The plan refreshes automatically as new forecasts arrive - with no changes to your site’s processes.
Summary
- The same 1 MWh battery, the same data: AI control delivered 34% more savings than manual (an extra 5,988 zł over 29 days).
- The edge is consistent: AI matched or beat manual on 26 of 29 days, averaging +206 zł a day.
- The edge comes from self-consumption timing and capacity-fee optimization - not from selling energy to the grid (the battery runs zero-export).
- These are savings with no hardware investment - the battery is already there, only the control changes.
Full day-by-day figures
Show table (energy cost, zł)
| Day | No battery | Manual | EnergyPal AI | Delta |
|---|---|---|---|---|
| 06-09 Tue | 4,100 | 3,618 | 3,742 | -124 |
| 06-10 Wed | 6,593 | 6,696 | 6,150 | +546 |
| 06-11 Thu | 4,927 | 5,067 | 4,726 | +341 |
| 06-12 Fri | 2,697 | 2,447 | 2,335 | +112 |
| 06-13 Sat | 2,164 | 1,795 | 1,732 | +63 |
| 06-14 Sun | 1,255 | 905 | 1,221 | -316 |
| 06-15 Mon | 2,825 | 2,394 | 2,158 | +236 |
| 06-16 Tue | 3,180 | 2,746 | 2,471 | +275 |
| 06-17 Wed | 2,944 | 2,371 | 2,247 | +124 |
| 06-18 Thu | 4,206 | 3,199 | 2,883 | +316 |
| 06-19 Fri | 2,980 | 2,295 | 2,116 | +179 |
| 06-20 Sat | 3,555 | 3,002 | 2,768 | +234 |
| 06-21 Sun | 2,958 | 2,503 | 2,587 | -84 |
| 06-22 Mon | 3,849 | 3,096 | 2,634 | +462 |
| 06-23 Tue | 4,132 | 2,744 | 2,394 | +350 |
| 06-24 Wed | 4,882 | 2,974 | 2,580 | +394 |
| 06-25 Thu | 3,850 | 2,888 | 2,664 | +224 |
| 06-26 Fri | 3,912 | 2,830 | 2,602 | +228 |
| 06-27 Sat | 3,123 | 2,404 | 2,239 | +165 |
| 06-28 Sun | 2,420 | 1,919 | 1,812 | +107 |
| 06-29 Mon | 2,819 | 1,895 | 1,687 | +208 |
| 06-30 Tue | 4,118 | 2,969 | 2,254 | +715 |
| 07-01 Wed | 3,350 | 2,648 | 2,383 | +265 |
| 07-02 Thu | 3,569 | 3,025 | 2,794 | +231 |
| 07-03 Fri | 2,530 | 2,137 | 2,021 | +116 |
| 07-04 Sat | 2,326 | 1,920 | 1,860 | +60 |
| 07-05 Sun | 2,148 | 1,828 | 1,721 | +107 |
| 07-06 Mon | 2,737 | 2,104 | 1,914 | +190 |
| 07-07 Tue | 5,212 | 5,305 | 5,040 | +265 |
| Total, 29 days | 99,362 | 81,724 | 75,736 | +5,988 |
Analysis on real metered data from 29 full days (June-July 2026). The site’s data is fully anonymized.