Demand response (DR) is a planned change in a site's electricity use when the grid or the market asks for it. The site reduces, shifts or increases its load for a set period. The programme pays for the flexibility that the site makes available and for the change that its meter proves.
In the EU, Article 17 of Directive 2019/944 requires member states to let final customers take part in all electricity markets alongside producers, without discrimination, directly or through an aggregator. The national system operators then define the products. This guide uses examples from Great Britain and Ireland. An aggregator that combines many such sites into one resource runs a virtual power plant.
Types of demand response
The type of programme decides how fast the site must respond and how the response is measured.
| Type | What the site does | Response time | Metering | Example |
|---|---|---|---|---|
| Price-based | Moves load away from high-price periods on a time-of-use or dynamic tariff | Hours to a day ahead | The billing meter's half-hourly or 15-minute data | Dynamic retail tariffs |
| Energy and capacity | Reduces load when dispatched, for a set duration | Minutes to hours | Half-hourly or 15-minute data against a baseline | GB Demand Flexibility Service: half-hourly metering, at least 30 minutes of response |
| Static frequency response | Trips a load when frequency falls below a set point | Within 2 s or faster | Fast-sampled records around each trigger, as the operator specifies | DS3 Fast Frequency Response (static or dynamic): response within 2 s, held for at least 8 s |
| Dynamic frequency response | Follows frequency continuously outside a deadband | Full delivery within 1 s | 20 Hz performance data and 1 Hz operational data | GB Dynamic Containment: starts within 0.5 s, full within 1 s |
| Local flexibility | Reduces or increases load to relieve a constraint on the local network | Minutes to hours | Interval data at the connection point | DSO flexibility tenders |
The dynamic frequency response guide covers the GB frequency services in detail, and the FCAS guide covers Australia. The rest of this guide is about energy and capacity events, where most sites start.
The demand response cycle
A dispatched event has five steps:
- The site or its aggregator declares how much load it can change, and for how long.
- The system operator or the aggregator starts the event.
- Local control changes the selected loads within their safe limits.
- Metering records consumption before, during and after the event.
- The programme compares the metered consumption with a baseline and pays for the difference.
A price-based programme has no dispatch and no availability declaration. The site reacts to the tariff, and the bill is the settlement.
The availability declaration is only as good as the site's data. If the declaration is 100 kW but the flexible loads were already off, the site cannot deliver. Base each declaration on the current load of each flexible circuit, not on its nameplate rating.
Receive the instruction
Instructions arrive in one of three ways. The simplest is a volt-free contact or relay signal from a controller that the aggregator installs, which is still common on commercial and industrial sites. The second is the aggregator's own API, usually MQTT over TLS or HTTPS. The third is an open standard. OpenADR 2.0b is published as IEC 62746-10-1 and uses XML messages. OpenADR 3, launched in November 2023, is a REST API with JSON messages.
Whatever the interface, the site equipment must:
- authenticate the sender, and reject an instruction that is late or that repeats an earlier one;
- acknowledge the instruction with a timestamp;
- log every instruction, acknowledgement and load action.
Decide the behaviour for a lost connection before the first event. An instruction that carries its own end time or duration lets the controller finish the event without the link, and then return the loads on time. Without an end time, the controller must choose between two failures. If it holds the loads off, a cold store can pass its limit. If it returns the loads at once, the site under-delivers and the programme reduces the payment. A link that fails before an event is simpler: declare the site unavailable.
Change the load safely
A suitable load has storage in it: a cold store holds its temperature, a hot water cylinder holds heat, a battery holds charge and a reservoir holds water. The flexible amount is set by the storage and by the stop condition.
For example, a trial with the compressors off shows a product-zone probe warming at 1.5 K/h from a −22 °C set point. The product limit is −18 °C and the site keeps 1 K of margin. The store can stay off for (4 K − 1 K) ÷ 1.5 K/h = 2 hours. Air probes warm much faster than the product, so the limit must come from a product-zone probe. The refrigeration demand response guide shows the measurement points.
| Load | How it changes | Stop condition | After the event |
|---|---|---|---|
| Refrigeration | Compressors off or set point raised | Product-zone temperature limit | Compressors run at full load until the store recovers |
| Water heating and electric boilers | Heating held off, or added when there is surplus generation | Minimum storage temperature, often 60 °C in a water safety plan | Heater runs until the store is at temperature |
| EV charging | Charging current reduced, or start delayed | Departure time and required charge | Chargers ramp back to their allocation |
| Batteries | Discharge to reduce site import | Reserve state of charge for the next event, and the export limit | Recharge, which is new import |
| Process loads | Batch or pumping moved to a later period | Process schedule or reservoir level | The moved load runs later |
Two constraints catch sites out. EV chargers cannot reduce current below 6 A per phase under IEC 61851-1, so a three-phase charger at 230 V cannot run below about 4.1 kW; below that, it must pause. A battery that discharges more than the site load exports the difference. If the connection has an export limit, as many G99 connections do, the battery must follow the site load down during the event.
Local limits always have priority over a remote instruction. When a stop condition ends the event, the controller returns that load, logs the withdrawal with a timestamp and reports it to the aggregator. Release the loads in a staggered order after the event. If every compressor restarts in the same minute, the site sets a new peak, and a capacity or demand charge can cost more than the event paid. The EV charging capacity calculator shows the capacity left for chargers at the connection.
Measure the response
The metering must record the site's consumption at the resolution and the accuracy that the programme requires. Record the meter identity, the CT ratios, the CT orientation, the clock source and every gap in the data.
Interval energy converts to average demand. A reading of 7 kWh in a 15-minute interval is an average demand of 28 kW:
Three measurement faults are common, and none of them is visible in a single reading:
- Clock offset. A meter clock that is 2 minutes slow puts 2 minutes of pre-event load into the first event interval. At a 110 kW reduction, that moves about 3.7 kWh, or 13% of the reduction in that 15-minute interval. Synchronise every meter and controller to NTP or GNSS, and log the offset.
- CT ratio. A meter set to 400/5 on a 500/5 CT reads 80% of the true load. The error scales the baseline days and the event day equally, so the data looks consistent and the site is paid for 80% of its reduction. Compare the sub-meter total with the fiscal meter to find it.
- CT direction. One reversed CT on a balanced three-phase load reads one third of the true power. On an unbalanced load it can read negative in some intervals.
Sub-metering the flexible loads is not always required for settlement. It does show which load delivered the response and which one withdrew early, and that makes the next availability declaration more accurate.
Calculate the baseline and the delivered response
The baseline is the consumption that the site would have had without the event. The programme defines the method, and the method decides the payment.
The GB Demand Flexibility Service uses the P376 method by default. For a working day, the baseline for each half hour is the mean of the same half hour on the 10 most recent eligible working days, taken from the previous 60 days. For a weekend or bank holiday, it takes the 4 most recent eligible days and averages the 2 median values. Days with a DFS event, a capacity market event or a DSO flexibility event called at 48 hours' notice or less are not eligible. A meter point with fewer than 5 eligible working days cannot be used. The August 2026 guidance adds an optional self-nominated baseline for industrial and commercial sites.
A same-day adjustment scales the historical baseline to the site's consumption just before the event. It corrects for weather and occupancy, but it can be gamed. In winter 2022/23 the DFS domestic baseline included an in-day adjustment based on consumption from 4 hours to 1 hour before the event. A site that raises its load in that window raises its baseline, and is then paid for reducing load that it added. NESO removed the adjustment for winter 2023/24. If a programme keeps an adjustment, check its cap and check that the adjustment window closes before the site receives notice of the event.
Dynamic frequency services do not use a historical baseline. The expected response is calculated from the measured frequency and the contracted response curve, and compared with the metered power in each interval.
The delivered response is the baseline minus the metered consumption, interval by interval. In the example below, a cold store site committed 100 kW for one hour and delivered between 95 kW and 110 kW in each 15-minute interval. In the two intervals after the event, the compressors recovered and the site used 85 kW and 45 kW above its baseline:
The event reduced 106.3 kWh, and the rebound took back 32.5 kWh. Most energy programmes pay only for the event intervals. The rebound is still a cost if it sets the month's peak demand. The baseline guide compares the baseline methods and the data each one needs, and the peak shaving guide covers the same rebound for tariff peaks.
A partial event is common. If the product limit ends the event after 30 minutes, the last two intervals show almost no reduction, and average delivery falls to about 55%. The DFS applies no penalty between 50% and 120% of the accepted volume. It reduces the payment between 25% and 50%, and pays nothing below 25%. A site that declares its real duration earns more than a site that declares its best case.
Commissioning checklist
Frequency services such as Dynamic Containment require a performance test before a unit can take part, and energy programmes can call test events. Check these points before the first test or live event:
| Check | Pass condition |
|---|---|
| Meter clock | Offset from NTP or GNSS is logged, and is small compared with the settlement interval |
| CT ratio and direction | Sub-meter total agrees with the fiscal meter within the combined accuracy of both meters |
| Data buffer | The site keeps readings for longer than the longest network outage you expect, and backfills them in order when the link returns |
| Data delivery | Readings reach the aggregator in time for the programme deadline, for example the weekly DFS settlement submission |
| Local limits | Each stop condition ends the event in a trial, and the withdrawal appears in the event log |
| Lost link | Disconnect the network during a trial event and confirm the loads return at the planned time |
| Release order | Loads return in stages, and the post-event peak stays below the site's maximum demand |
How EpiSensor supports demand response
EpiSensor provides the measurement and local control at the site. ZEM electricity monitors meter the connection point and the flexible circuits. Each ZEM is calibrated with its current sensors before it ships, so Class 0.5S describes the meter and its CTs together. The ZDR demand response controller meters to the same class and responds to under-frequency within 100 ms. The ZDR-20 and ZDR-21 switch a load through a relay, and the ZDR-22 sends a set point to a battery or UPS over Modbus. The ZDR-21 and ZDR-22 add GPS time and 20 ms event records.
The Gateway runs Edge on site. Edge stores the readings locally and forwards them over MQTTS or HTTPS when the link is available. Edge automations enforce local stop conditions, such as a product temperature limit. A timed automation saves its end action before it starts, so the loads return on time after a lost link or a restart. An aggregator sends commands through the authenticated Edge command API or an agreed MQTTS topic. The command model is agreed for each project. The Edge Modbus TCP server can give readings to a site controller, but it does not accept control commands.
The Demand response and VPP page shows the complete architecture. In Germany, controllable heat pumps, wallboxes and batteries also fall under Section 14a EnWG, which has its own control rules.
Common questions
What is the difference between demand response and a virtual power plant?
Demand response is the change in consumption at one site. A virtual power plant is a portfolio of sites and assets (loads, batteries, generators, EV chargers) that an aggregator controls together and offers to a market as one resource. The aggregator settles the portfolio, but each site still needs its own metering and its own local limits.
How long can a cold store stay off during an event?
Measure it. Stop the compressors in a trial under normal load and door use, and log a product-zone probe. If the product warms at 1.5 K/h from −22 °C and you keep 1 K of margin below a −18 °C limit, the store can stay off for 2 hours. Air temperature rises much faster than product temperature, so do not set the limit on an air probe.
Why did a site deliver less than it planned?
Check four causes first. A local limit ended the event early. The baseline days included unusual consumption. The meter clock was offset from the settlement intervals. A CT ratio or a CT direction was wrong, which scales the baseline and the event data together and hides the error.