SmartgridOne logo
SmartgridOne logo
Accessories
AppCertificates
Configuration from A to Z
Control response timeController
Customer Specific
Devices
External Signals
DSO

AgrolaAutarcoAxpoBEE EnergyCKWCompanion EnergyDexterDiagnostic testsDNO Relay ControlDynamic Energy TradingEdmijElia
Elindus
Energy Flexibility Solutions (EFS)EnervalisEngieEPEX Spot SolarEuropean CommoditiesFleco PowerFlowerFrank EnergieFuseboxGreenchoiceHallostroomHive PowerImbyKratTrade
Monitoring
Mqtt
BaselinesFCRLive MQTT controlOnboarding FlowScheduled MQTT controlVirtual Power Plant
New integrationsNext EnergyOpinumParagraph 14a IntegrationPlan-ahead APIPleeviPowernautRepoweredScholt
TrevionVGT EnergyYuso - Battery ControlYuso - Solar Curtailment
InstallationLicenseNetworkQuick StartSafety, maintenance and legal noticesSpecificationsStatus LEDs
Toolbox
Troubleshooting
Video tutorialsWiring & connectivity guidelines
External SignalsMqtt

FCR

This guide will help you configure FCR on your SmartgridOne Controller to remotely control and monitor battery installations.

Overview

Caution
Caution

NOTE: FCR overrides the original functionality of the controller.

Supported Devices

Device TypeVariantsSupported
Solar InvertersAll❌
Storage Devices✅
EV Chargers❌

Supported Countries

CountrySupported
Belgium❌
Netherlands
Switzerland✅

Prerequisites

Note
Note

Only specific installations can be set up via FCR. Please verify that the installation is certified.

1. Add the devices

and make sure the to the SmartgridOne Controller.

2. Check the grid power limits

In the settings, the grid power limits should be set correctly. Click Settings and check the highlighted setting in the image. If necessary, adjust the settings.

3. Check the address

Make sure .

Warning
Warning

The integration may not work correctly if the address is not correct!

Enabling FCR

From the commissioning interface, go to the 'External Signals' tab.

Image 1

Click on 'Energy Markets'.

Image 1

Select Eniris, select FCR and click 'Next'.

FCR operation

Frequency Containment Reserve (FCR) is the fastest automatic reserve used to keep the grid frequency close to its nominal value (50 Hz in Europe). The grid frequency is a direct measure of the balance between production and consumption: when consumption exceeds production the frequency drops below 50 Hz, and when production exceeds consumption it rises above 50 Hz. FCR reacts to these deviations within seconds to restore the balance.

As the EMS, the SmartgridOne Controller continuously measures the grid frequency locally and charges or discharges the battery based on the frequency, following a predefined droop curve:

  • Frequency below 50 Hz (shortage of power on the grid): the battery discharges, injecting power to help raise the frequency back to nominal.
  • Frequency above 50 Hz (surplus of power on the grid): the battery charges, absorbing power to help bring the frequency back down.
  • Frequency at 50 Hz (balanced grid): the battery stays idle within the dead band.

The droop curve defines how much power the battery delivers for a given frequency deviation. A small deadband, usually 10mHz, around 50 Hz avoids reacting to tiny fluctuations, and the response scales linearly with the deviation up to the maximum reserve power at the edge of the operating band. In the European FCR market, full activation is reached at a deviation of ±200 mHz (i.e. at 49.8 Hz and 50.2 Hz).

Because the controller measures the frequency itself and applies the droop curve autonomously, the battery responds automatically and in real time to grid frequency changes — no external setpoint is required to activate the reserve.

The grid operator controls the participation via (specified below). These messages determine:

  • Whether FCR is active or not — the grid operator enables or disables the reserve. When FCR is inactive, the controller does not respond to frequency deviations.
  • The allocated capacity — the amount of reserve power the battery must provide. This allocated capacity can differ from the battery's nominal power (nompower); the droop curve is scaled to this allocated capacity rather than to the full nominal power of the battery.

FCR MQTT Messages

FCR is driven by MQTT messages sent to the SmartgridOne Controller. For everything related to connecting to the MQTT broker — network requirements and credentials — follow the guide first. FCR uses the same broker and connection, but its own dedicated topics described below.

MQTT Topics

FCR uses a separate set of topics from the standard remote control. Replace <Controller SN> with the serial number of the SmartgridOne Controller you intend to control.

TopicDirectionPurpose
standard1/rp_one_s/remoteFCRMetrics/<Controller SN>To the controllerIncoming topic — used to send the FCR command (the JSON message below).
standard1/outbound/remoteFCRMetrics/ack/<Controller SN>From the controllerAck topic — the controller acknowledges here that the command has been received and saved.
standard1/outbound/remoteFCRMetrics/feedback/<Controller SN>From the controllerFeedback topic — the controller publishes feedback here every second.

Message format

The FCR message has the following structure:

{
    "time": 1714652046,
    "extraTags": {
        "nodeId": "<Controller SN>_site_0"
    },
    "fields": {
        "fcr": {
            "active": true,
            "capacity_kW": 100.0,
            "start_time": 1714652046,
            "end_time": 1714655646
        },















Fields description

  • time (Integer): Unix timestamp in seconds indicating when the message was sent.
  • extraTags (Object):
    • nodeId (String): Unique identifier of the site node. This is your serial number followed by _site_0 for most SmartgridOne Controller devices.
  • fields (Object): Contains the FCR instruction, split into the fcr, management and test blocks below. Each block is optional; only include the ones that apply.

fcr

Defines the actual FCR participation. This is the main block that determines whether the reserve is active and how the is scaled.

  • active (Boolean): Whether FCR is active. When true, the controller responds to frequency deviations following the droop curve. When false, FCR is disabled and the controller does not react to the grid frequency.
  • capacity_kW (Float): The allocated reserve capacity, in kilowatts, that the battery must provide. The droop curve is scaled to this value. As noted above, this can differ from the battery's nominal power (nompower).
  • start_time (Integer): Unix timestamp in seconds at which this FCR instruction becomes active.
  • end_time (Integer): Unix timestamp in seconds at which this FCR instruction expires.

management

Applies an explicit power setpoint on top of, or in place of, the FCR response — for example to steer the battery's state of charge back into a workable range while participating in FCR.

  • setpoint_W (Float): Desired power setpoint in watts. A positive value charges the battery, a negative value discharges it.
  • start_time (Integer): Unix timestamp in seconds at which the management setpoint becomes active.
  • end_time (Integer): Unix timestamp in seconds at which the management setpoint expires.

test

Used to run a qualification or verification test on the installation. Only include this block when performing a test.

  • mode (String): The test to perform. One of:
    • "frequency_injection": Simulate a frequency deviation by ramping the frequency signal, to verify the droop response. Requires the ramp object below.
    • "usable_energy": Verify the usable energy of the battery.
  • ramp (Object): Only used when mode is "frequency_injection". Describes the simulated frequency ramp:
    • f_start_Hz (Float): Frequency at the start of the ramp, in hertz.
    • f_target_Hz (Float): Frequency to ramp towards, in hertz.
    • duration_s (Float): Duration of the ramp, in seconds.
    • t_start (Integer): Unix timestamp in seconds at which the ramp starts.
  • target_soc (Float): Only used when mode is "usable_energy". The target state of charge, as a value from 20 to 100, that the battery should reach during the usable-energy test. The controller charges or discharges the battery towards this state of charge, measuring the energy transferred to verify the battery's usable energy.

Acknowledgement message

After a command is received on the incoming topic, the SmartgridOne Controller publishes an acknowledgement on the . The acknowledgement reports whether the command was accepted and saved, or rejected. It comes in one of the following two formats.

When the command received:

{
    "requestTime": "<Unix Timestamp>",
    "time": "<Unix Timestamp>",
    "siteNodeId": "<Controller SN>_site_0",
    "data": {
        "status": "accepted" or "rejected",
        "error": "<error message>"
    },
    "fields": {}
}

Fields description

  • requestTime (Integer): Unix timestamp in seconds of the original command being acknowledged. This matches the time field of the command that was sent, allowing you to correlate the acknowledgement with the request.
  • time (Integer): Unix timestamp in seconds at which the acknowledgement was sent.
  • siteNodeId (String): The nodeId of the site sending the acknowledgement.
  • data (Object):
    • status (String): Either "accepted" when the command was received and saved, or "rejected" when it could not be applied.
    • error (String): Only present when status is "rejected". Describes why the command was rejected.
  • fields (Object): Empty object.

Feedback message

While FCR is running, the SmartgridOne Controller publishes a feedback message on the every second. This lets you monitor the live state of the installation and the FCR response in real time.

{
    "time": "<Unix Timestamp>",
    "siteNodeId": "<Controller SN>_site_0",
    "data": {
        "fcr_active": <bool>,
        "frequency_Hz": <float>,
        "actualPowerTot_W": <float>,
        "setpoint_W": <float>,
        "fcrSetpoint_W": 




Fields description

  • time (Integer): Unix timestamp in seconds at which the feedback message was sent.
  • siteNodeId (String): The nodeId of the site sending the feedback.
  • data (Object):
    • fcr_active (Boolean): Whether FCR is currently active.
    • frequency_Hz (Float): The local grid frequency measured by the controller, in hertz.
    • actualPowerTot_W (Float): The actual active power of the battery, in watts. A positive value indicates charging, a negative value discharging.
    • setpoint_W (Float): The current total power setpoint, in watts. This is the sum of fcrSetpoint_W and managementSetpoint_W below. A positive value charges the battery, a negative value discharges it.
    • fcrSetpoint_W (Float): The FCR contribution to the power setpoint, in watts. This is the part of the setpoint resulting from the frequency deviation and the .
    • managementSetpoint_W (Float): The management contribution to the power setpoint, in watts. This is the part of the setpoint coming from the charge/discharge signal, applied on top of the FCR response.
    • soc_perc (Float): The mean state of charge of the battery, as a percentage.
    • droop_perc (Float): The active droop, as a percentage — the share of the allocated FCR capacity currently being delivered in response to the frequency deviation.
Last updated July 9, 2026Edit this page

Baselines

Previous Page

Live MQTT control

Next Page

On this page

FCROverviewSupported DevicesSupported CountriesPrerequisites1. Add the devices2. Check the grid power limits3. Check the addressEnabling FCRFCR operationFCR MQTT MessagesMQTT TopicsMessage formatFields descriptionfcrmanagementtestAcknowledgement messageFields descriptionFeedback messageFields description
"management": {
"setpoint_W": -5000.0,
"start_time": 1714652046,
"end_time": 1714655646
},
"test": {
"mode": "frequency_injection",
"ramp": {
"f_start_Hz": 50.0,
"f_target_Hz": 49.8,
"duration_s": 30.0,
"t_start": 1714652046
}
}
}
}
<float>
,
"managementSetpoint_W": <float>,
"soc_perc": <float>,
"droop_perc": <float>
}
}
Login to the commissioning interface
devices are added
the address is set correctly
MQTT messages
Live MQTT Control
droop curve
ack topic
feedback topic
droop curve
management