Skip to main content

Asset Steering

For now, external asset steering is done on a site level. This means that rather than steering each device individually, the steering signal is applied to the whole site components. An example of this is that a curtailment signal is applied to the PV cluster, rather than to each individual PV inverter.

We offer three ways to do asset steering:

  • Active site curtailment
  • Active site ESS steering
  • Active site steering that combines both ESS and curtailment signals

Active site steering signal

Payload interface (in TypeScript)

interface ActiveSteeringRequest {
energyStorageSetting?: PowerValue;
productionCurtailment?: CurtailmentValue;

validFrom?: number; // If not specified, the setting will be applied immediately.
validUntil: number;
}

interface CurtailmentValue {
value: number;
unit: 'W' | 'kW' | 'MW';
}

interface PowerValue {
value: number;
unit: 'W' | 'kW' | 'MW';
}

The steering signal currently consists of 3 components:

  • Energy storage setting: This can either be an active power, a (dis-)charge until, or ensure idle request. If multiple energy storage systems are installed on a site, Cosmos EMS will use pre-defined, site-specific rules to determine how to fulfil the request.

  • Production curtailment: Curtails the total production power on site, which can be set using a fixed value or a percentage. If multiple production devices are installed on a site, Cosmos EMS will use pre-defined, site-specific rules to determine how to fulfil the request.

  • Maximize grid import: Strategy that utilizes the grid import as much as possible. This is useful when performing trading with energy storage systems, when the price to take energy from the grid is favorable (e.g. negative). On sites with production devices (e.g. solar), this strategy often results in production curtailment.

A fourth component, temporary grid limit adjustments, will be implemented in a future release.

Example payload

// POST /sites/ste_19TH6nLcjKlb/steering
{
"energyStorageSetting": {
"value": 100000, // Positive for discharging, negative for charging.
"unit": "W"
},
"validUntil": 1720699996562 // End of quarter
}

New input processing

It is important to understand how new steering signals are processed. As mentioned in the previous section, the steering signal consists of three components. We always split requests into these components and set them separately. This makes it possible to send partial updates, rather than always replacing the entire steering signal.

Scenario:

  1. A site steering signal is send. This is internally split into an ESS command to discharge with 100kW, and a production curtailment command to curtail to 300kW, and a maximize grid import command that is set to false.

    // POST /sites/ste_19TH6nLcjKlb/steering
    {
    "energyStorageSetting": {
    "value": 100000,
    "unit": "W"
    },
    "productionCurtailment": {
    "value": 300000,
    "unit": "W"
    },
    "validUntil": 1720699996562
    }
  2. An ESS steering signal is send (this could also be a curtailment signal).

    // POST /sites/ste_19TH6nLcjKlb/steering/ess
    {
    "setting": {
    "value": 300000,
    "unit": "W"
    },
    "validUntil": 1720699996562
    }
  3. This new ESS steering signal will override the energy storage setting in the site steering signal. The new combined signal will be a curtailment of 300kW, and a ESS discharge of 300kW.

    // New combined signal
    {
    "energyStorageSetting": {
    "value": 300000,
    "unit": "W"
    },
    "productionCurtailment": {
    "value": 300000,
    "unit": "W"
    },
    "validUntil": 1720699996562
    }