Here's the maths that shapes almost every charging site: a depot with a 200 kVA grid connection wants twenty 22 kW chargers. That's 440 kW of potential demand on a 200 kVA supply. Naively, the site is impossible — or needs a grid upgrade costing more than the chargers.
Except it isn't, and it usually doesn't. Vehicles don't all charge at once, most don't need full power for their whole dwell time, and a fleet parked overnight cares about being ready by 6am, not about charging fast at 11pm. Load management is the software discipline of exploiting those facts safely.
The three levels of load management
Level 0 — hardwired limits. Each charger is permanently capped so the sum can never exceed supply. Simple, robust, and wasteful: with two cars plugged in on our depot above, each still gets its capped share while the rest of the site's capacity sits idle.
Level 1 — static site-level sharing. The backend or a local controller knows the site budget and divides it among active sessions. Two cars charging get far more than they would under hardwired caps; twenty cars get an even split of the budget. This alone rescues most "impossible" sites.
Level 2 — dynamic load management. A meter on the site's incoming supply feeds real consumption into the calculation, so charging expands into whatever headroom the building isn't using and retreats when it is. The site's other loads — kitchens, machinery, HVAC — become part of the equation instead of a guessed safety margin.
Beyond that sit tariff- and carbon-aware scheduling ("finish by 6am, prefer the cheap window") and, eventually, V2G — but the overwhelming majority of real-world value is captured at levels 1 and 2.
What OCPP charging profiles actually do
Smart charging in OCPP works through charging profiles — schedules of power or current limits that the backend sends to a charger. Three things practitioners should understand:
- Profiles stack. OCPP defines purposes (
ChargePointMaxProfile,TxDefaultProfile,TxProfile) with different precedence, so a site-wide ceiling and a per-session schedule can coexist. The effective limit at any moment is the composition — which is also why debugging "why is this car charging slowly?" means inspecting the whole stack, not one profile. - The car has a vote. A profile is a ceiling, not a command. The vehicle's onboard charger decides what it draws beneath that ceiling, and behaviour varies by model — some ramp smoothly, some step, some pause entirely below a threshold. Fleet operators learn their vehicles' quirks quickly.
- Version differences matter. OCPP 1.6 smart charging works and is widely deployed, but 2.x adds meaningful capability — better schedule negotiation and, in 2.1, groundwork for bidirectional flows. It's one of the stronger practical reasons to want a backend that spans 1.6 through 2.1 rather than the lowest common denominator.
Failure modes to design for
Load management is a safety-adjacent control loop, and it earns the same paranoia as any other one:
- Communications loss. What does a charger do when it can't reach the thing computing its budget? The answer must be a safe local fallback — a conservative default limit baked into the charger — never "carry on with the last generous allocation". This single design decision separates robust deployments from breaker-tripping ones.
- Stale meter data. Dynamic systems act on the site meter feed; a frozen feed looks exactly like low consumption. Treat meter staleness as an alarm state that reverts the site to its static budget.
- Oscillation. Naive controllers reallocate on every fluctuation, and some vehicles respond badly to rapid limit changes. Damping, minimum step sizes and minimum dwell times between adjustments keep the loop calm.
- The unfair queue. Even sharing sounds fair until one car has waited an hour at trickle rates behind three SUVs at 80% state-of-charge. Priority rules — by departure time, by state of charge where available, by fleet role — are a product decision; make it explicitly, or the site makes it badly by default.
Where the rules engine earns its keep
Static budgets and dynamic headroom are infrastructure. The operational layer on top — "pause the visitor bays if the depot feeder exceeds 85%", "guarantee the ambulance bays full power always", "prefer the overnight tariff window unless a vehicle is flagged for early departure" — is site policy, and it changes more often than firmware ever should.
This is exactly the layer we expose as rules in the AmpNexus platform: the electrical constraints stay enforced below, while operators express priorities and preferences above, in a form that's auditable and quick to change.
The takeaway
Load management is how sites get built without grid upgrades, how depots hit departure readiness on constrained supplies, and how site hosts stop fearing their electricity bill. The engineering is well understood; the differentiator is doing it safely across mixed hardware — with sane fallbacks, calm control loops and policies your operations team can actually read.
AmpNexus smart charging spans OCPP 1.6–2.1 with site budgets, dynamic limits and a policy rules layer — see Smart Charging, or dig into the API.