What a demand charge actually measures — and why EV depots amplify it
In Germany and across much of continental Europe, industrial electricity tariffs are split into two components: the Arbeitspreis (energy charge, priced per kWh) and the Leistungspreis (demand charge, priced per kW of peak demand within a billing period). For most commercial and industrial consumers, the Leistungspreis is measured as the highest 15-minute average power draw recorded during the month. It's billed in €/kW regardless of how briefly that peak occurred.
A depot running conventional lighting, HVAC, and forklift charging might see a Leistungspreis contribution of 25–35% of the total electricity bill. The moment that depot adds EV charging infrastructure, that figure can climb past 50%. The reason is straightforward: a fleet of 40 trucks returning from the afternoon shift and all connecting to 22 kW AC chargers simultaneously generates a near-instantaneous demand spike. Forty vehicles at 22 kW each equals 880 kW — a 15-minute measurement window will capture the full spike, and the grid operator will bill for it at the peak rate for the entire month, regardless of how few times it happened.
This is not a theoretical scenario. A mid-size logistics depot in the Stuttgart region operating 48 medium-duty electric delivery vans — each with a 100 kWh usable capacity — faces a transformer rated at 630 kVA. At a 0.9 power factor, that's roughly 567 kW of active power available. If 35 of those 48 vehicles connect within a 20-minute window at 22 kW each, the depot already exceeds its transformer limit by more than 200 kW, triggering both a protection trip risk and a Leistungspreis measurement that could run €15,000–25,000 per month in excess demand charges depending on the local network tariff zone.
The three layers of peak shaving for fleet charging
Effective peak shaving in a depot context works at three distinct layers, and conflating them leads to incomplete deployments.
Layer 1: Transformer limit enforcement
The first layer is hard infrastructure protection. The aggregate active power drawn across all active charge points must never exceed the transformer's rated capacity minus headroom for other depot loads. This requires real-time metering of the building's main incomer — not just the EVSE sub-panel — and a control loop that continuously computes the available charging budget and distributes it across active sessions via OCPP SetChargingProfile.req messages. The response latency matters: a control loop with a 30-second adjustment cycle will still see 30-second overshoot windows during rapid connection events. Depots with fast transformer protection relays need control cycle times under 10 seconds.
Layer 2: Demand charge setpoint management
The second layer is billing-window management. Rather than simply preventing transformer trips, sophisticated systems track the running peak demand across the billing month and set a target ceiling — typically 85–90% of the contracted Leistungspreis tier, leaving buffer for unexpected spikes from non-EV loads. Every time a new vehicle connects, the scheduling engine recalculates whether the available grid budget supports immediate charging or whether the vehicle should be queued for a lower-demand window later in the night. This is where the distinction between transformer capacity management and actual bill reduction becomes clear: the transformer limit prevents hardware damage; the demand setpoint reduces what appears on the invoice.
Layer 3: Overnight load profile optimisation
The third layer is where meaningful cost reduction accumulates. Given that most depot vehicles have departure windows of 05:30–07:00 and arrive between 17:00–20:00, there is an 8–12 hour charging window available. A flat-rate approach fills vehicles in the first 3–4 hours after arrival because unmanaged chargers simply deliver maximum current until the battery management system signals full. A load-optimised approach spreads energy delivery across the full overnight window, targeting the lowest-tariff hours (often 22:00–04:00 in German time-of-use structures) and keeping instantaneous demand at 40–60% of the transformer capacity rather than the 90–100% utilisation of unmanaged charging.
The MILP scheduling model behind demand charge reduction
The scheduling problem is fundamentally a Mixed Integer Linear Programming (MILP) problem with the following structure. Decision variables are the per-vehicle, per-time-slot charging power allocations p(i,t) across a scheduling horizon of typically 15-minute intervals. The objective function minimises total electricity cost, combining energy cost at time-varying tariff rates c(t) with a demand charge penalty term that captures the maximum power drawn in any interval. Constraints include:
- State-of-charge (SoC) evolution: SoC(i, t+1) = SoC(i,t) + p(i,t) × η / capacity(i)
- Departure readiness: SoC(i, departure_slot(i)) ≥ target_SoC(i)
- Transformer limit: Σ p(i,t) + baseline_load(t) ≤ P_transformer_max for all t
- Charger hardware limits: 0 ≤ p(i,t) ≤ P_max_charger(i)
- Binary session state: vehicle i is available for charging only when physically connected
The demand charge term in the objective function is non-linear (it's the maximum over all time intervals), which requires either linearisation via an auxiliary variable or heuristic approximation. In production deployments for depots with 40+ vehicles, the full MILP is typically solved for the next 24-hour horizon every 15 minutes using a warm-start from the previous solution, with OCPP profile updates sent to the affected charge points after each re-solve.
We're not saying that MILP is the only viable approach — receding horizon greedy algorithms with priority queues can achieve 80–90% of the theoretical optimum at much lower computational cost for fleets under 30 vehicles. The MILP formulation becomes necessary when the tariff structure includes multiple peak windows, V2G discharge constraints, or complex interoperability requirements between charge point brands with different OCPP profile refresh latencies.
A practical scenario: 44-truck depot, 400 kVA transformer, autumn peak
Consider a depot operating 44 BEV rigid trucks, each with 150 kWh usable capacity, at a site in the Munich metropolitan area with a 400 kVA distribution transformer serving both the charging infrastructure and a 60 kW baseline building load (office HVAC, workshop lighting, security systems). At 0.9 power factor the transformer delivers ~360 kW. Subtract the 60 kW baseline and the available EV charging budget is 300 kW across the fleet.
In an unmanaged scenario, 30 of the 44 trucks return between 17:30 and 18:15. Each AC charger delivers 22 kW (3-phase, 32A, 400V). Within 20 minutes of the first wave arriving, 25 vehicles are connected and drawing simultaneously: 25 × 22 kW = 550 kW against a 300 kW budget. The transformer's overcurrent protection activates. The depot facility manager manually resets the charging group to 12A per connector via the CPMS — a rough sledgehammer fix that cuts current uniformly but leaves some vehicles undercharged by morning.
With a demand-aware scheduling engine, the same 44 vehicles return on the same schedule but each connection triggers a profile push via SetChargingProfile.req with a recalculated ChargingSchedule maintaining aggregate power under 290 kW (the transformer budget with a 10 kW safety margin). Energy delivery is deferred to 22:00–04:00 when the building baseline drops to 15 kW, making 285 kW available exclusively for EV charging. Vehicles with an 05:30 departure receive priority scheduling in the final 90 minutes of the window to top off. The Leistungspreis peak for the month never exceeds 310 kW — versus an unmanaged peak of 550+ kW. At a typical southern German network area tariff of €12–18/kW per month, the demand charge saving is €2,880–4,320 per month on the demand component alone, before any consideration of time-of-use energy arbitrage.
Where peak shaving alone falls short
There is a boundary worth drawing clearly: peak shaving reduces demand charges effectively, but it does not by itself optimise the energy cost component. A system that simply flattens the load curve to stay under a demand ceiling will spread charging evenly across the overnight window — which is better than an unmanaged spike but still pays daytime tariff rates for any sessions that extend into the early morning peak window. True cost optimisation requires combining peak shaving logic with time-of-use tariff weighting in the objective function, so that the scheduler actively gravitates toward the cheapest overnight hours rather than treating all hours equally.
Similarly, peak shaving at the software level does not replace the need to understand the physical network connection at the medium-voltage feeder level. German DSOs (Verteilnetzbetreiber) are increasingly exercising their §14a EnWG (steuerbare Verbrauchseinrichtungen) rights to curtail EV charging loads during grid congestion events. A depot's grid connection agreement — the Netzanschlussvertrag — defines the contracted capacity and the curtailment conditions. Software-side demand management works within that contracted capacity; it does not create additional capacity that the DSO hasn't agreed to supply. Operators planning major fleet electrification should engage their DSO early on the grid connection level, before sizing the software-side demand management envelope.
Measuring success: what good looks like after six months
The right metrics for a peak shaving deployment are not simply "peak demand fell" — the comparison baseline matters. Meaningful benchmarks include: the ratio of peak demand to average demand across the billing month (a healthy managed depot should see a ratio below 1.4:1; unmanaged depots often run 2.5:1 or higher during electrification ramp-up); the percentage of vehicles meeting departure SoC targets (100% is the floor — any shortfall indicates the demand constraint is too tight and needs re-parameterising); and the monthly Leistungspreis invoice line versus the pre-EV baseline.
Depots that instrument their demand management correctly typically see the Leistungspreis contribution fall from 40–50% of total electricity cost back to the 25–30% range characteristic of non-EV industrial consumers, while adding the EV energy consumption at a lower average kWh rate due to overnight tariff optimisation. The combination delivers the 20–35% total electricity cost reduction that is achievable with this approach — not from any single lever, but from flattening demand charges and shifting energy to cheaper hours simultaneously.