All projects

Making renewable energy behave like a power plant 2021 – 2022

Real-time dispatch engine for a Virtual Power Plant

A real-time control system inside a major energy company's Virtual Power Plant that reliably redistributes the Dutch grid operator's power requests across wind and solar parks every four seconds, around the clock.

Client
Under NDA
Industry
Energy, short-term power trading
Scope
Real-time control systems, microservice architecture, event streaming, timeseries data pipelines, simulation and testing
Period
2021 – 2022
The reality

The Grid Doesn't Wait

Electricity has to be produced at the exact moment it's consumed. When demand jumps or the wind drops across the North Sea, the grid goes out of balance, and the national grid operator pays energy companies to fix it within seconds, on command.

That job used to belong to large, controllable power stations. Today it increasingly falls to wind farms and solar parks: hundreds of smaller installations whose output depends on the weather. One of the largest energy companies in the Netherlands set out to make that scattered fleet behave like one large, dependable plant: a Virtual Power Plant (VPP) that trades on energy markets and answers the national grid operator as a single unit.

The challenge

Four Seconds, Around the Clock

Our team built the Automatic Generation Control (AGC), the real-time decision engine at the heart of the VPP.

The requirements leave no room for optimism. The grid operator's power request changes almost every second. Every four seconds, the system has to read that signal, check the live state of every asset, decide which parks adjust and by how much, and send the instructions out. Then it does it all again. Day and night, with real money and grid stability on the line.

And the assets themselves don't cooperate. Forecasts are never exactly right, no machine can jump from zero to full power instantly, and a wind farm can't deliver more than the wind provides. A system like this can't just be fast. It has to be right under conditions that keep changing.

What we built

An Architecture That Can't Be Blocked

We designed the AGC as a set of independent microservices connected by message queues, so no single slow component can ever stall the control loop.

Streams of data flow in continuously over Apache Kafka: trading schedules, production forecasts, prices, and 4-second telemetry from the field. Internal services coordinate over Azure Service Bus, and the grid operator's signal arrives through a dedicated gateway. Incoming requests are buffered and the loop always acts on the freshest signal instead of working through a backlog. If the world changed while we were computing, we compute again with the new truth.

The hard timing problem got equally direct treatment. The full cycle has a fixed budget, every external call has a strict deadline, and an overrunning cycle is skipped rather than queued. The loop never falls behind.

Dispatch Logic That Trusts Measurements Over Forecasts

The allocation algorithm splits the grid operator's request across the fleet following a cost ranking from the trading desk, while respecting each asset's schedule, capacity limits, and ramp rates. When one park can't ramp fast enough, the shortfall shifts instantly to assets that can, so the portfolio as a whole always hits the target.

For wind and solar, the system trusts live measurements over predictions, adjusting its view of what each park can actually deliver in real time. Weather surprises become routine input, not incidents.

Three Clocks, One Timeline

The data arrives at three different rhythms: second-by-second grid signals, 4-second telemetry, and 15-minute trading schedules. We built a pipeline that flattens, interpolates, and aligns all of it onto a single timeline, so every control decision starts from a consistent picture of the present.

Proven Before It Touched a Turbine

A control system earns trust through evidence, so we built the proof in from the start. Recorded days of real grid operator signals were replayed through the engine, and its output was matched against reference calculations to a precision of seven decimal places. A simulation environment lets operators run what-if scenarios on uploaded datasets before anything reaches a real asset.

That's what de-risking looks like in practice: by the time the AGC steered its first wind farm, its behavior had already been verified thousands of times.

The outcome

Renewables That Act Like One Disciplined Plant

The result is a fleet of weather-dependent assets that responds to the national grid like a single, dependable power plant. It helps keep the lights on while making renewable energy more valuable on the market.

For us, the project proves a point we keep coming back to: real-time, mission-critical systems don't have to be fragile. With clear boundaries between services, queues that absorb the chaos, and testing that leaves nothing to faith, even a four-second deadline becomes something you can rely on.

What we built

Delivered for this project

A four-second control loop

The Automatic Generation Control engine reads the grid operator's signal, checks live telemetry from the field, and sends new instructions to every asset. It does this every four seconds, without exception.

An allocation algorithm that respects physics

Dispatch logic that splits a portfolio-level power request across assets by cost ranking, capacity limits, and ramp rates, then automatically shifts the shortfall from slow assets to fast ones.

A data pipeline for three different clocks

Ingestion and alignment of second-by-second grid signals, 4-second telemetry, and 15-minute trading schedules into one timeline the control loop can act on.

Proof before production

A simulation environment and replay tests that ran recorded days of real grid signals through the engine and matched the results against reference calculations to scientific precision.

How it is put together

System architecture

Streaming
Apache KafkaAvroSchema Registry
Services
.NET microservicesgRPC
Messaging
Azure Service Bus
Data
SQL ServerAzure Cosmos DB
Infrastructure
DockerAzure Kubernetes ServiceAzure Pipelines

More work

Have something similar?

Get a realistic estimate

The more we know about your project, the better we can fit the solution to match your needs. So - let's talk!

Get a realistic estimate