Forwarding to an AMQP 0-9-1 broker
We can forward messages to an AMQP 0-9-1 broker of choice, for example to a RabbitMQ broker. We can publish to a specific topic or to an exchange with a routing key. We use the persistent delivery mode an app id teleport
. The body of all messages is JSON encoded and they contain a content type property with value application/json
.
Below, examples of the payloads of the following messages can be found:
Solar power
Solar assets produce two types of messages: regular messages and flash messages.
Regular messages
An example of the body of a message forwarded from a Teleport device that is connected to a solar asset. The type
property of the message is solarPower:<version>
, where <version>
represents the specific version number of the message schema.
- Added
reactivePower
andpowerFactor
- The
activePowerLimit
object is deprecated and replaced bysetpoints
. - Mappings are applied as follows:
setpoints.confirmed.activePowerLimitPercentage
=activePowerLimit.percentage
{ "teleportHashId": "8de4y2", // uniquely identifies the teleport device "assetIdentifier": "huawei-4100", // globally unique identifier of the asset, when available the brand and serial number of the asset "attempt": 0, // 0-indexed delivery attempt "measuredAt": "2023-01-01T00:00:00Z", // when read-out started, ISO 8601 yyyy-mm-ddThh:mm:ssZ or YYYYYY-MM-DDTHH:mm:ss.sssZ, so in UTC "activePower": 12000.4, // in W, can be null "reactivePower": 100.1, // in var, can be null. Positive is injecting reactive power to the grid and negative is absorbing reactive power "powerFactor": 0.9, // unitless. Can be null. For capacitive loads (leading power factor, quadrant 4), the PF sign is positive. For inductive loads (lagging power factor, quadrants 1), the PF sign is negative. "generatedEnergy": 250000.1, // in Wh, can be null "setpoints": { "confirmed": { // configuration confirmed by the asset "activePowerLimitPercentage": 30.1, // In %, can be null "activePowerLimit": 10000.5, // In W. can be null "reactivePower": { // Object defining reactive power control, can be null. Contains a mode and its corresponding setpoint. // The mode determines which setpoint is relevant: // - "fixedReactivePower" → uses "reactivePower" (in var). // - "fixedPowerFactor" → uses "powerFactor" (unitless). "mode": "fixedReactivePower", // Reactive power control mode, either "fixedReactivePower" or "fixedPowerFactor". "reactivePower": 13.2 // Setpoint for "fixedReactivePower" mode, in var. Can be null. // Positive values inject reactive power into the grid, negative values absorb reactive power. } }, "desired": { // setpoints from different sources "activePowerLimit": { "cloud": 10000.5, // In W, can be null "activeControl": null, // In W, can be null "gridOperator": null, // In W, can be null "modbusServer": null, // In W, can be null "afrr": { // feedback on "applyAfrrDeltaSetpoint" API "delta": 2321.3, // In W, can be null. Contains portion of `deltaSetpoint` provided through the "applyAfrrDeltaSetpoint" API command "reference": 9983.3 // In W, can be null. Reference value for on which Teleport will apply the delta on, is the minimum of "availableActivePower" and all other active setpoints } }, "reactivePower": { // has the same object structure as "confirmed.reactivePower" "cloud": { "mode": "fixedReactivePower", // Reactive power control mode, either "fixedReactivePower" or "fixedPowerFactor". "reactivePower": 13.2 // Setpoint for "fixedReactivePower" mode, in var. Can be null. // Positive values inject reactive power into the grid, negative values absorb reactive power. }, "gridOperator": { // has the same object structure as "confirmed.reactivePower" "mode": "fixedPowerFactor", // can be "fixedReactivePower" or "fixedPowerFactor" "powerFactor": 0.95 // Setpoint for "fixedPowerFactor" mode, unitless. Can be null. // For capacitive loads (leading power factor, quadrants 2 and 4), the PF sign is positive. // For inductive loads (lagging power factor, quadrants 1 and 3), the PF sign is negative. } }, }, "effective": { // effective setpoint written by the Teleport "activePower": 12100.3, // In W, Positive means discharging, negative charging. "reactivePower": { // has the same object structure as "confirmed.reactivePower" "mode": "fixedReactivePower", // Reactive power control mode, either "fixedReactivePower" or "fixedPowerFactor". "reactivePower": 13.2 // Setpoint for "fixedReactivePower" mode, in var. Can be null. // Positive values inject reactive power into the grid, negative values absorb reactive power. }, }, }, "availableActivePower": 20000.1, // in W, can be null. Always null if no pyranometer or irradiance sensor is installed "alarms": ["huawei_inverter_abnormal_string_power", "huawei_inverter_output_overcurrent"], // See solar alarms under error codes section. Empty if inverter-specific alarms are present in inverter array. "inverters": [ { "slaveId": 1, // identifies the individual inverter "activePower": 12000.4, // in W, can be null "reactivePower": 100.1, // in var, can be null. Positive is injecting reactive power to the grid and negative is absorbing reactive power "powerFactor": 0.9, // unitless. Can be null. For capacitive loads (leading power factor, quadrant 4), the PF sign is positive. For inductive loads (lagging power factor, quadrants 1), the PF sign is negative. "generatedEnergy": 250000.1, // in Wh, can be null "setpoints": { "confirmed": { // configuration confirmed by the asset "activePowerLimitPercentage": 30.1, // In %, can be null "activePowerLimit": 10000.5, // In W, Positive means discharging, negative charging. "reactivePower": { // Object defining reactive power control, can be null. Contains a mode and its corresponding setpoint. // The mode determines which setpoint is relevant: // - "fixedReactivePower" → uses "reactivePower" (in var). // - "fixedPowerFactor" → uses "powerFactor" (unitless). "mode": "fixedReactivePower", // Reactive power control mode, either "fixedReactivePower" or "fixedPowerFactor". "reactivePower": 13.2 // Setpoint for "fixedReactivePower" mode, in var. Can be null. // Positive values inject reactive power into the grid, negative values absorb reactive power. }, }, }, "alarms": ["huawei_inverter_abnormal_string_power", "huawei_inverter_output_overcurrent"] // See solar alarms under error codes section } // in case of multiple slave inverters that are read out, can be many ], "scheduled": true // false for "extra" measurements (eg. directly after command execution and at Teleport initialisation)}
{ "teleportHashId": "8de4y2", // uniquely identifies the teleport device "assetIdentifier": "huawei-4100", // globally unique identifier of the asset, when available the brand and serial number of the asset "attempt": 0, // 0-indexed delivery attempt "measuredAt": "2023-01-01T00:00:00Z", // when read-out started, ISO 8601 yyyy-mm-ddThh:mm:ssZ or YYYYYY-MM-DDTHH:mm:ss.sssZ, so in UTC "activePower": 12000.4, // in W, can be null "generatedEnergy": 250000.7, // in Wh, can be null "activePowerLimit": { "percentage": 30.4, // can be null "reduction": null, // always null. deprecated but present to be non-breaking }, "availableActivePower": 20000.1, // in W, can be null. Always null if no pyranometer or irradiance sensor is installed "alarms": ["huawei_inverter_abnormal_string_power", "huawei_inverter_output_overcurrent"], // See solar alarms under error codes section. Empty if inverter-specific alarms are present in inverter array. "inverters": [ { "slaveId": 1, // identifies the individual inverter "activePower": 12000.4, // in W, can be null "generatedEnergy": 250000.7, // in Wh, can be null "activePowerLimit": { "percentage": 30.4 // can be null }, "alarms": ["huawei_inverter_abnormal_string_power", "huawei_inverter_output_overcurrent"] // See solar alarms under error codes section } // in case of multiple slave inverters that are read out, can be many ], "scheduled": true // false for "extra" measurements (eg. directly after command execution and at Teleport initialisation)}
{ "teleportHashId": "8de4y2", // uniquely identifies the teleport device "assetIdentifier": "huawei-4100", // globally unique identifier of the asset, when available the brand and serial number of the asset "attempt": 0, // 0-indexed delivery attempt "measuredAt": "2023-01-01T00:00:00Z", // when read-out started, ISO 8601 yyyy-mm-ddThh:mm:ssZ or YYYYYY-MM-DDTHH:mm:ss.sssZ, so in UTC "activePower": 12000, // in W, can be null "generatedEnergy": 250000, // in Wh, can be null "activePowerLimitPercentage": 30, // can be null "activePowerLimitReduction": null, // deprecated but present to be non-breaking "availableActivePower": 20000, // in W, can be null. Always null if no pyranometer or irradiance sensor is installed "scheduled": true // false for "extra" measurements (eg. directly after command execution and at Teleport initialisation)}
Flash messages
Solar assets report flash messages more often than regular messages (typically every second) and contain information that is needed for dispatching algorithms and to forward to the TSO when doing aFRR. Flash messages are active only when the relevant control strategy is activated. An example of a request containing one flash message forwarded from a Teleport device that is connected to a solar asset. The type
property of the message is solarPower.flash:<version>
, where <version>
represents the specific version number of the message schema.
{ "teleportHashId": "8de4y2", // uniquely identifies the teleport device "assetIdentifier": "huawei-4100", // globally unique identifier of the asset, when available the brand and serial number of the asset "attempt": 0, // 0-indexed delivery attempt "measuredAt": "2023-01-01T00:00:00Z", // when read-out started, ISO 8601 yyyy-mm-ddThh:mm:ssZ or YYYYYY-MM-DDTHH:mm:ss.sssZ, so in UTC "activePower": 12000.8, // in W, can be null "availableActivePower": 20000.7, // in W, can be null. Always null if no pyranometer or irradiance sensor is installed "scheduled": true // false for "extra" measurements (eg. directly after command execution and at Teleport initialisation)}
Wind power
An example of the body of a message forwarded from a Teleport device that is connected to a wind energy converter. The type
property of the message is windPower:<version>
, where <version>
represents the specific version number of the message schema.
- Added
reactivePower
andpowerFactor
- The
activePowerLimit
object is deprecated and replaced bysetpoints
. - Mappings are applied as follows:
setpoints.confirmed.activePowerLimitPercentage
=activePowerLimit.percentage
{ "teleportHashId": "8de4y2", // uniquely identifies the teleport device "assetIdentifier": "enercon-4100", // globally unique identifier of the asset, when available the brand and serial number of the asset "attempt": 0, // 0-indexed delivery attempt "measuredAt": "2023-01-01T00:00:00Z", // when read-out started, ISO 8601 yyyy-mm-ddThh:mm:ssZ or YYYYYY-MM-DDTHH:mm:ss.sssZ, so in UTC "activePower": 12000.4, // in W, can be null "reactivePower": 100.1, // in var, can be null. Positive is injecting reactive power to the grid and negative is absorbing reactive power "powerFactor": 0.9, // unitless. Can be null. For capacitive loads (leading power factor, quadrant 4), the PF sign is positive. For inductive loads (lagging power factor, quadrants 1), the PF sign is negative. "windSpeed": 2.1, // in m/s, can be null "availableActivePower": 12000.4, // in W, can be null "constrainedAvailableActivePower": { "currentWind": 12000.4, // in W, can be null "technical": 12000.4, // in W, can be null "forceMajeure": 12000.4, // in W, can be null "externalSetpoints": 12000.4 // in W, can be null }, "converters": [ { "identifier": "12345", // serial number of the converter "activePower": 3000, // in W, can be null "reactivePower": 100.1, // in var, can be null. Positive is injecting reactive power to the grid and negative is absorbing reactive power "powerFactor": 0.9, // unitless. Can be null. For capacitive loads (leading power factor, quadrant 4), the PF sign is positive. For inductive loads (lagging power factor, quadrants 1), the PF sign is negative. "windSpeed": 2.1, // in m/s, can be null "generatedEnergy": 230000, // in Wh, can be null "status": "on" // can be "running", "on", "pause", "stop". Missing if not available }, { "identifier": "6789", // serial number of the converter "activePower": 9000.4, // in W, can be null "reactivePower": 100.1, // in var, can be null. Positive is injecting reactive power to the grid and negative is absorbing reactive power "powerFactor": 0.9, // unitless. Can be null. For capacitive loads (leading power factor, quadrant 4), the PF sign is positive. For inductive loads (lagging power factor, quadrants 1), the PF sign is negative. "windSpeed": 2.1, // in m/s, can be null "generatedEnergy": 230000, // in Wh, can be null "status": "on" // can be "running", "on", "pause", "stop". Missing if not available } ], "setpoints": { "confirmed": { // configuration confirmed by the asset "activePowerLimitPercentage": 30.1, // In %, can be null "activePowerLimit": 10000.5, // In W. can be null "reactivePower": { // Object defining reactive power control, can be null. Contains a mode and its corresponding setpoint. // The mode determines which setpoint is relevant: // - "fixedReactivePower" → uses "reactivePower" (in var). // - "fixedPowerFactor" → uses "powerFactor" (unitless). "mode": "fixedReactivePower", // Reactive power control mode, either "fixedReactivePower" or "fixedPowerFactor". "reactivePower": 13.2 // Setpoint for "fixedReactivePower" mode, in var. Can be null. // Positive values inject reactive power into the grid, negative values absorb reactive power. } }, "desired": { // setpoints from different sources "activePowerLimit": { "cloud": 10000.5, // In W, can be null "activeControl": null, // In W, can be null "gridOperator": null, // In W, can be null "modbusServer": null, // In W, can be null "afrr": { // feedback on "applyAfrrDeltaSetpoint" API "delta": 2321.3, // In W, can be null. Contains portion of `deltaSetpoint` provided through the "applyAfrrDeltaSetpoint" API command "reference": 9983.3 // In W, can be null. Reference value for on which Teleport will apply the delta on, is the minimum of "availableActivePower" and all other active setpoints } }, "reactivePower": { // has the same object structure as "confirmed.reactivePower" "cloud": { "mode": "fixedReactivePower", // Reactive power control mode, either "fixedReactivePower" or "fixedPowerFactor". "reactivePower": 13.2 // Setpoint for "fixedReactivePower" mode, in var. Can be null. // Positive values inject reactive power into the grid, negative values absorb reactive power. }, "gridOperator": { // has the same object structure as "confirmed.reactivePower" "mode": "fixedPowerFactor", // can be "fixedReactivePower" or "fixedPowerFactor" "powerFactor": 0.95 // Setpoint for "fixedPowerFactor" mode, unitless. Can be null. // For capacitive loads (leading power factor, quadrants 2 and 4), the PF sign is positive. // For inductive loads (lagging power factor, quadrants 1 and 3), the PF sign is negative. } } }, "effective": { // effective setpoint written by the Teleport "activePower": 12100.3, // In W, Positive means discharging, negative charging. "reactivePower": { // has the same object structure as "confirmed.reactivePower" "mode": "fixedReactivePower", // Reactive power control mode, either "fixedReactivePower" or "fixedPowerFactor". "reactivePower": 13.2 // Setpoint for "fixedReactivePower" mode, in var. Can be null. // Positive values inject reactive power into the grid, negative values absorb reactive power. } }, }, "generatedEnergy": 460000, // in Wh, can be null "scheduled": true // false for "extra" measurements (eg. directly after command execution and at Teleport initialisation)}
{ "teleportHashId": "8de4y2", // uniquely identifies the teleport device "assetIdentifier": "enercon-4100", // globally unique identifier of the asset, when available the brand and serial number of the asset "attempt": 0, // 0-indexed delivery attempt "measuredAt": "2023-01-01T00:00:00Z", // when read-out started, ISO 8601 yyyy-mm-ddThh:mm:ssZ or YYYYYY-MM-DDTHH:mm:ss.sssZ, so in UTC "activePower": 12000.4, // in W, can be null "windSpeed": 2.1, // in m/s, can be null "availableActivePower": 12000.4, // in W, can be null "constrainedAvailableActivePower": { "currentWind": 12000.4, // in W, can be null "technical": 12000.4, // in W, can be null "forceMajeure": 12000.4, // in W, can be null "externalSetpoints": 12000.4 // in W, can be null }, "converters": [ { "identifier": "12345", // serial number of the converter "activePower": 3000, // in W, can be null "windSpeed": 2.4, // in m/s, can be null "generatedEnergy": 230000, // in Wh, can be null "status": "on" // can be "running", "on", "pause", "stop". Missing if not available }, { "identifier": "6789", // serial number of the converter "activePower": 9000.4, // in W, can be null "windSpeed": 1.9, // in m/s, can be null "generatedEnergy": 230000, // in Wh, can be null "status": "on" // can be "running", "on", "pause", "stop". Missing if not available } ], "activePowerLimit": { "percentage": 5.7 // can be null }, "generatedEnergy": 460000, // in Wh, can be null "scheduled": true // false for "extra" measurements (eg. directly after command execution and at Teleport initialisation)}
Battery power
Battery assets produce two types of messages: regular messages and flash messages.
Regular messages
An example of a request containing one message forwarded from a Teleport device that is connected to a battery is shown below. The type
property of the message is batteryPower:<version>
, where <version>
represents the specific version number of the message schema.
- Added
powerFactor
- The
configuration
object is deprecated and replaced bysetpoints
. - Mappings are applied as follows:
setpoints.confirmed.activePower
=configuration.dispatchPower.activePower
.setpoints.confirmed.deliverFcr
=configuration.deliverFCR.maxRate
.setpoints.confirmed.chargeToPercentage
=configuration.chargeToState.percentage
.
- Properties of
activePowerSetpoint
object are renamed as follows:dispatchPower
toactivePower
deliverFCR
todeliverFcr
chargeToState
tochargeToPercentage
{ "teleportHashId": "8de4y2", // uniquely identifies the teleport device "assetIdentifier": "alfen-123", // globally unique identifier of the asset, when available the brand and serial number of the asset "attempt": 0, // 0-indexed delivery attempt. integer "measuredAt": "2023-01-01T00:00:00Z", // when read-out started, ISO 8601 yyyy-mm-ddThh:mm:ssZ or YYYYYY-MM-DDTHH:mm:ss.sssZ, so in UTC "batteryStatus": "on", // can be "on", "off", "other" or null (see warning and errors in case of 'other') "energy": { "charged": 1000.2, // in Wh, can be null. Nonnegative "discharged": 1000.3 // in Wh, can be null. Nonnegative }, "frequency": 50.2, // in Hz, can be null. Nonnegative "activePower": 1000.1, // in W, can be null. Positive means discharging, negative charging. "reactivePower": 100.1, // in var, can be null. Positive is injecting reactive power to the grid and negative is absorbing reactive power "powerFactor": 0.9, // unitless. Can be null. For capacitive loads (leading power factor, quadrants 2 and 4), the PF sign is positive. For inductive loads (lagging power factor, quadrants 1 and 3), the PF sign is negative. "stateOfCharge": 90.1, // in %, can be null. Nonnegative "stateOfHealth": 85.1, // in %, can be null. Nonnegative "availableEnergy": 50.1, // in Wh, can be null. Nonnegative "ratedEnergy": 1000.1, // in Wh, can be null. Nonnegative "availableActivePower": { "charge": 300.1, // in W, can be null. Nonnegative "discharge": 500.1 // in W, can be null. Nonnegative }, "availableReactivePower": { "inject": 300.1, // in var, can be null. Nonnegative "absorb": 500.1 // in var, can be null. Nonnegative }, "activePowerSetpoint": { "activePower": 100.1, // in W, can be null. Positive means discharging, negative charging. "deliverFcr: 100.1, // in W, can be null. Positive means discharging, negative charging. "chargeToPercentage": 20.1, // in W, can be null. Positive means discharging, negative charging. "aggregate": 220.1 // in W, can be null. Positive means discharging, negative charging. }, "threePhaseConnectionTypeHighVoltage": "delta", // can be "wye" or "delta", can be null "acVoltageMediumVoltage": { "phase": { "l1": 230.4, // in V, can be null. Nonnegative "l2": 230.1, // in V, can be null. Nonnegative "l3": 230.2 // in V, can be null. Nonnegative }, // can be null "line": { "l1": 230.4, // in V, can be null. Nonnegative "l2": 230.1, // in V, can be null. Nonnegative "l3": 230.2 // in V, can be null. Nonnegative } // can be null }, "acCurrentMediumVoltage": { "phase": { "l1": 11.4, // in A, can be null. Delivering to the grid is a positive value "l2": 12.5, // in A, can be null. Delivering to the grid is a positive value "l3": 10.1 // in A, can be null. Delivering to the grid is a positive value }, // can be null "line": { "l1": 11.4, // in A, can be null. Delivering to the grid is a positive value "l2": 12.5, // in A, can be null. Delivering to the grid is a positive value "l3": 10.1 // in A, can be null. Delivering to the grid is a positive value } // can be null }, "auxiliaryPower": { "active": -120.3, // in W, can be null. Negative means consuming, positive generating, will be negative or 0 "reactive": -28.4 // in Var, can be null. Negative means consuming, positive generating, will be negative or 0 }, // can be null "batteryEnergyStorageSystems": [ { "identifier": "alfen-5678", // brand and serial number of the bess or if that's not available, its index "cellTemperature": { "min": 50.1, // in ºC, can be null, min value of all cells "max": 50.1 // in ºC, can be null, max value of all cells }, "roomTemperature": 30.1, // in ºC, can be null "stateOfCharge": 50.1, // in %, can be null. Nonnegative "availableEnergy": 1000.1, // in Wh, can be null. Nonnegative "availableActivePower": { "charge": 300.1, // in W, can be null. Nonnegative "discharge": 500.1 // in W, can be null. Nonnegative }, "threePhaseConnectionTypeLowVoltage": "wye", // can be "wye" or "delta", can be null "acVoltageLowVoltage": { "phase": { // can be null "l1": 230.4, // in V, can be null. Nonnegative "l2": 230.1, // in V, can be null. Nonnegative "l3": 230.2 // in V, can be null. Nonnegative }, "line": { // can be null "l1": 230.4, // in V, can be null. Nonnegative "l2": 230.1, // in V, can be null. Nonnegative "l3": 230.2 // in V, can be null. Nonnegative } }, "acCurrentLowVoltage": { "phase": { // can be null "l1": 11.4, // in A, can be null. Delivering to the grid is a positive value "l2": 12.5, // in A, can be null. Delivering to the grid is a positive value "l3": 10.1 // in A, can be null. Delivering to the grid is a positive value }, "line": { // can be null "l1": 11.4, // in A, can be null. Delivering to the grid is a positive value "l2": 12.5, // in A, can be null. Delivering to the grid is a positive value "l3": 10.1 // in A, can be null. Delivering to the grid is a positive value } }, "racks": [ { "identifier": "alfen-1", // brand and serial number of the rack or if that's not available, its index "dcVoltage": 12.5, // in V, can be null. Nonnegative "dcCurrent": 23.5 // in A, can be null. Delivering to the grid is a positive value } // can be many ], "warnings": ["ALFEN_SOME_WARNING_1", "ATEPS_SOME_WARNING_2"], // see error codes section "errors": ["ALFEN_SOME_ERROR_1"] // see error codes section } // can be many ], "setpoints": { "confirmed": { // configuration confirmed by the asset "activePower": 142.5, // In W, can be null. Positive means discharging, negative charging. "reactivePower": { // Object defining reactive power control, can be null. Contains a mode and its corresponding setpoint. // The mode determines which setpoint is relevant: // - "fixedReactivePower" → uses "reactivePower" (in var). // - "fixedPowerFactor" → uses "powerFactor" (unitless). "mode": "fixedReactivePower", // Reactive power control mode, either "fixedReactivePower" or "fixedPowerFactor". "reactivePower": 13.2 // Setpoint for "fixedReactivePower" mode, in var. Can be null. // Positive values inject reactive power into the grid, negative values absorb reactive power. }, "deliverFcr": 100.1, // In W, can be null. Positive means discharging, negative charging. "chargeToPercentage": 50.1 // In %, can be null. Nonnegative. }, "desired": { // setpoints from different sources "activePower": { // In W, Positive means discharging, negative charging. "cloud": 10000.5, // can be null "activeControl": null, // can be null "gridOperator": null, // can be null "modbusServer": null // can be null }, "reactivePower": { // has the same object structure as "confirmed.reactivePower" "cloud": { "mode": "fixedReactivePower", // Reactive power control mode, either "fixedReactivePower" or "fixedPowerFactor". "reactivePower": 13.2 // Setpoint for "fixedReactivePower" mode, in var. Can be null. // Positive values inject reactive power into the grid, negative values absorb reactive power. }, "gridOperator": { // has the same object structure as "confirmed.reactivePower" "mode": "fixedPowerFactor", // can be "fixedReactivePower" or "fixedPowerFactor" "powerFactor": 0.95 // Setpoint for "fixedPowerFactor" mode, unitless. Can be null. // For capacitive loads (leading power factor, quadrants 2 and 4), the PF sign is positive. // For inductive loads (lagging power factor, quadrants 1 and 3), the PF sign is negative. } }, "chargeToPercentage": { // In %, Nonnegative. "cloud": 50.1 // can be null }, "deliverFcr": { // In W, Positive means discharging, negative charging. "cloud": 100.1 // can be null } }, "effective": { // effective setpoint written by the Teleport "activePower": 12100.3, // In W, can be null. Positive means discharging, negative charging. "reactivePower": { // has the same object structure as "confirmed.reactivePower" "mode": "fixedReactivePower", // Reactive power control mode, either "fixedReactivePower" or "fixedPowerFactor". "reactivePower": 13.2 // Setpoint for "fixedReactivePower" mode, in var. Can be null. // Positive values inject reactive power into the grid, negative values absorb reactive power. } } }, "warnings": ["ALFEN_SOME_WARNING_1", "ATEPS_SOME_WARNING_B"], // see error codes section "errors": ["ALFEN_SOME_ERROR_1"], // see error codes section "scheduleCompleteUntil": "2023-01-01T00:00:00Z", // first gap in the schedule for this assetIdentifier. ISO 8601 yyyy-mm-ddThh:mm:ssZ or YYYYYY-MM-DDTHH:mm:ss.sssZ, so in UTC, can be null "scheduled": true // false for measurements that are not part of the regular reporting interval, eg. directly after command execution and at Teleport initialisation}
{ "teleportHashId": "8de4y2", // uniquely identifies the teleport device "assetIdentifier": "alfen-123", // globally unique identifier of the asset, when available the brand and serial number of the asset "attempt": 0, // 0-indexed delivery attempt. integer "measuredAt": "2023-01-01T00:00:00Z", // when read-out started, ISO 8601 yyyy-mm-ddThh:mm:ssZ or YYYYYY-MM-DDTHH:mm:ss.sssZ, so in UTC "batteryStatus": "on", // can be "on", "off", "other" or null (see warning and errors in case of 'other') "energy": { "charged": 1000.2, // in Wh, can be null. Nonnegative "discharged": 1000.3 // in Wh, can be null. Nonnegative }, "frequency": 50.2, // in Hz, can be null. Nonnegative "activePower": 1000.1, // in W, can be null. Positive means discharging, negative charging. "reactivePower": 100.1, // in var, can be null. Positive is injecting reactive power to the grid and negative is absorbing reactive power "stateOfCharge": 90.1, // in %, can be null. Nonnegative "stateOfHealth": 85.1, // in %, can be null. Nonnegative "availableEnergy": 50.1, // in Wh, can be null. Nonnegative "ratedEnergy": 1000.1, // in Wh, can be null. Nonnegative "availableActivePower": { "charge": 300.1, // in W, can be null. Nonnegative "discharge": 500.1 // in W, can be null. Nonnegative }, "availableReactivePower": { "inject": 300.1, // in var, can be null. Nonnegative "absorb": 500.1 // in var, can be null. Nonnegative }, "activePowerSetpoint": { "dispatchPower": 100.1, // in W, can be null. Positive means discharging, negative charging. "deliverFCR": 100.1, // in W, can be null. Positive means discharging, negative charging. "chargeToState": 20.1, // in W, can be null. Positive means discharging, negative charging. "aggregate": 220.1 // in W, can be null. Positive means discharging, negative charging. }, "threePhaseConnectionTypeHighVoltage": "delta", // can be "wye" or "delta", can be null "acVoltageMediumVoltage": { "phase": { "l1": 230.4, // in V, can be null. Nonnegative "l2": 230.1, // in V, can be null. Nonnegative "l3": 230.2 // in V, can be null. Nonnegative }, // can be null "line": { "l1": 230.4, // in V, can be null. Nonnegative "l2": 230.1, // in V, can be null. Nonnegative "l3": 230.2 // in V, can be null. Nonnegative } // can be null }, "acCurrentMediumVoltage": { "phase": { "l1": 11.4, // in A, can be null. Delivering to the grid is a positive value "l2": 12.5, // in A, can be null. Delivering to the grid is a positive value "l3": 10.1 // in A, can be null. Delivering to the grid is a positive value }, // can be null "line": { "l1": 11.4, // in A, can be null. Delivering to the grid is a positive value "l2": 12.5, // in A, can be null. Delivering to the grid is a positive value "l3": 10.1 // in A, can be null. Delivering to the grid is a positive value } // can be null }, "auxiliaryPower": { "active": -120.3, // in W, can be null. Negative means consuming, positive generating, will be negative or 0 "reactive": -28.4 // in Var, can be null. Negative means consuming, positive generating, will be negative or 0 }, // can be null "batteryEnergyStorageSystems": [ { "identifier": "alfen-5678", // brand and serial number of the bess or if that's not available, its index "cellTemperature": { "min": 50.1, // in ºC, can be null, min value of all cells "max": 50.1 // in ºC, can be null, max value of all cells }, "roomTemperature": 30.1, // in ºC, can be null "stateOfCharge": 50.1, // in %, can be null. Nonnegative "availableEnergy": 1000.1, // in Wh, can be null. Nonnegative "availableActivePower": { "charge": 300.1, // in W, can be null. Nonnegative "discharge": 500.1 // in W, can be null. Nonnegative }, "threePhaseConnectionTypeLowVoltage": "wye", // can be "wye" or "delta", can be null "acVoltageLowVoltage": { "phase": { // can be null "l1": 230.4, // in V, can be null. Nonnegative "l2": 230.1, // in V, can be null. Nonnegative "l3": 230.2 // in V, can be null. Nonnegative }, "line": { // can be null "l1": 230.4, // in V, can be null. Nonnegative "l2": 230.1, // in V, can be null. Nonnegative "l3": 230.2 // in V, can be null. Nonnegative } }, "acCurrentLowVoltage": { "phase": { // can be null "l1": 11.4, // in A, can be null. Delivering to the grid is a positive value "l2": 12.5, // in A, can be null. Delivering to the grid is a positive value "l3": 10.1 // in A, can be null. Delivering to the grid is a positive value }, "line": { // can be null "l1": 11.4, // in A, can be null. Delivering to the grid is a positive value "l2": 12.5, // in A, can be null. Delivering to the grid is a positive value "l3": 10.1 // in A, can be null. Delivering to the grid is a positive value } }, "racks": [ { "identifier": "alfen-1", // brand and serial number of the rack or if that's not available, its index "dcVoltage": 12.5, // in V, can be null. Nonnegative "dcCurrent": 23.5 // in A, can be null. Delivering to the grid is a positive value } // can be many ], "warnings": ["ALFEN_SOME_WARNING_1", "ATEPS_SOME_WARNING_2"], // see error codes section "errors": ["ALFEN_SOME_ERROR_1"] // see error codes section } // can be many ], // The configuration property has the same structure as the operation property of a SetBatteryOperation. Values are actually read out from the battery, not just a copy of what the Teleport has been instructed to do "configuration": { // When dispatchPower is null but the battery system does not support stand-by mode, the Teleport will send a schedule with 0 W to the asset, while the reported dispatchPower is null. "dispatchPower": { "activePower": 50.1 // In W, Positive means discharging, negative charging. }, // can be null "deliverFCR": { "maxRate": 100.1 // In W, Nonnegative. }, // can be null "chargeToState": { "percentage": 50.1 // In %, Nonnegative. } // can be null }, // can be null "warnings": ["ALFEN_SOME_WARNING_1", "ATEPS_SOME_WARNING_B"], // see error codes section "errors": ["ALFEN_SOME_ERROR_1"], // see error codes section "scheduleCompleteUntil": "2023-01-01T00:00:00Z", // first gap in the schedule for this assetIdentifier. ISO 8601 yyyy-mm-ddThh:mm:ssZ or YYYYYY-MM-DDTHH:mm:ss.sssZ, so in UTC, can be null "scheduled": true // false for measurements that are not part of the regular reporting interval, eg. directly after command execution and at Teleport initialisation}
Flash messages
Batteries report flash messages more often than regular messages (typically every second) and contain information that is needed for dispatching algorithms and to forward to the TSO when doing aFRR/FCR. The type
property of the message is batteryPower.flash:<version>
, where <version>
represents the specific version number of the message schema. An example of a request containing one flash message forwarded from a Teleport device that is connected to a battery:
{ "teleportHashId": "8de4y2", // uniquely identifies the teleport device "assetIdentifier": "alfen-123", // globally unique identifier of the asset, when available the brand and serial number of the asset "attempt": 0, // 0-indexed delivery attempt. integer "measuredAt": "2023-01-01T00:00:00Z", // when read-out started, ISO 8601 yyyy-mm-ddThh:mm:ssZ or YYYYYY-MM-DDTHH:mm:ss.sssZ, so in UTC "frequency": 50.1, // in Hz, can be null "activePower": 1000.1, // in W, can be null. Positive means discharging, negative charging. "availableEnergy": 1000.1, // in Wh, can be null "availableActivePower": { "charge": 300.1, // in W, can be null "discharge": 500.1 // in W, can be null }, "stateOfCharge": 90.1, // in %, can be null. "scheduled": true // false for measurements that are not part of the regular reporting interval, eg. directly after command execution and at Teleport initialisation}
Meter power
An example of a request containing one message forwarded from a Teleport device that is connected to a power meter is shown below. The type
property of the message is meterPower:<version>
, where <version>
represents the specific version number of the message schema.
- Added
threePhaseConnectionType
,apparentPower
,powerFactor
, expandedvoltage
andcurrent
measurements with phase and line - The phase voltage values are mapped to corresponding phase voltage fields:
voltage.phase.l1 = phaseVoltage.l1
,voltage.phase.l2 = phaseVoltage.l2
,voltage.phase.l3 = phaseVoltage.l3
.- line voltage fields are set to
NULL
, based on the assumption that all connection types are wye-connected, where phase and line voltages are not equal.
- Current values are mapped to both phase and line fields, as in wye-connected metering, phase and line currents are equal:
current.phase.l1 = current.l1
,current.phase.l2 = current.l2
,current.phase.l3 = current.l3
.current.line.l1 = current.l1
,current.line.l2 = current.l2
,current.line.l3 = current.l3
.
{ "teleportHashId": "8de4y2", // uniquely identifies the teleport device "assetIdentifier": "janitza-UMG806-12345", // globally unique identifier of the asset, when available the brand and serial number of the asset "attempt": 0, // 0-indexed delivery attempt. integer "measuredAt": "2023-01-01T00:00:00Z", // when read-out started, ISO 8601 yyyy-mm-ddThh:mm:ssZ or YYYYYY-MM-DDTHH:mm:ss.sssZ, so in UTC "voltage": { "phase": { "l1": 230.4, // in V, can be null. Nonnegative "l2": 230.1, // in V, can be null. Nonnegative "l3": 230.2 // in V, can be null. Nonnegative }, // can be null "line": { "l1": 400.4, // in V, can be null. Nonnegative "l2": 400.1, // in V, can be null. Nonnegative "l3": 400.2 // in V, can be null. Nonnegative } // can be null }, "current": { "phase": { "l1": 11.4, // in A, can be null. Delivering to the grid is a positive value "l2": 12.5, // in A, can be null. Delivering to the grid is a positive value "l3": 10.1 // in A, can be null. Delivering to the grid is a positive value }, // can be null "line": { "l1": 11.4, // in A, can be null. Delivering to the grid is a positive value "l2": 12.5, // in A, can be null. Delivering to the grid is a positive value "l3": 10.1 // in A, can be null. Delivering to the grid is a positive value } // can be null }, "threePhaseConnectionType": "wye", // can be "wye" or "delta", can be null "activePower": { "l1": 2626.56, // in W, can be null. Delivering to the grid is a positive value "l2": 2876.25, // in W, can be null. Delivering to the grid is a positive value "l3": 2325.02, // in W, can be null. Delivering to the grid is a positive value "sum": 7827.83 // in W, can be null. Delivering to the grid is a positive value }, "reactivePower": { "l1": 0.2, // in var, can be null. Positive is injecting reactive power to the grid and negative is absorbing reactive power "l2": 0.2, // in var, can be null. Positive is injecting reactive power to the grid and negative is absorbing reactive power "l3": 0.2, // in var, can be null. Positive is injecting reactive power to the grid and negative is absorbing reactive power "sum": 0.2 // in var, can be null. Positive is injecting reactive power to the grid and negative is absorbing reactive power }, "apparentPower": { "l1": 2629.51, // in VA, calculated from active and reactive power "l2": 2879.42, // in VA, calculated from active and reactive power "l3": 2328.45, // in VA, calculated from active and reactive power "sum": 7837.35 // in VA, calculated from active and reactive power }, "powerFactor": { "l1": 0.96, // unitless. Can be null. For capacitive loads (leading power factor, quadrants 2 and 4), the PF sign is positive. For inductive loads (lagging power factor, quadrants 1 and 3), the PF sign is negative. "l2": 0.96, // unitless. Can be null. For capacitive loads (leading power factor, quadrants 2 and 4), the PF sign is positive. For inductive loads (lagging power factor, quadrants 1 and 3), the PF sign is negative. "l3": 0.96 // unitless. Can be null. For capacitive loads (leading power factor, quadrants 2 and 4), the PF sign is positive. For inductive loads (lagging power factor, quadrants 1 and 3), the PF sign is negative. }, "frequency": 50.21, // in Hz, can be null. Nonnegative "activeEnergyConsumed": { "l1": 31235.1, // in Wh, can be null. Nonnegative "l2": 31235.1, // in Wh, can be null. Nonnegative "l3": 31235.1, // in Wh, can be null. Nonnegative "sum": 93702.1 // in Wh, can be null. Nonnegative }, "activeEnergyDelivered": { "l1": 31235.2, // in Wh, can be null. Nonnegative "l2": 31235.2, // in Wh, can be null. Nonnegative "l3": 31235.2, // in Wh, can be null. Nonnegative "sum": 93702.2 // in Wh, can be null. Nonnegative }, "scheduled": true // false for measurements that are not part of the regular reporting interval, eg. directly after command execution and at Teleport initialisation}
{ "teleportHashId": "8de4y2", // uniquely identifies the teleport device "assetIdentifier": "janitza-UMG806-12345", // globally unique identifier of the asset, when available the brand and serial number of the asset "attempt": 0, // 0-indexed delivery attempt. integer "measuredAt": "2023-01-01T00:00:00Z", // when read-out started, ISO 8601 yyyy-mm-ddThh:mm:ssZ or YYYYYY-MM-DDTHH:mm:ss.sssZ, so in UTC "phaseVoltage": { "l1": 230.4, // in V, can be null. Nonnegative "l2": 230.1, // in V, can be null. Nonnegative "l3": 230.2 // in V, can be null. Nonnegative }, "current": { "l1": 11.4, // in A, can be null. Delivering to the grid is a positive value "l2": 12.5, // in A, can be null. Delivering to the grid is a positive value "l3": 10.1 // in A, can be null. Delivering to the grid is a positive value }, "activePower": { "l1": 2626.56, // in W, can be null. Delivering to the grid is a positive value "l2": 2876.25, // in W, can be null. Delivering to the grid is a positive value "l3": 2325.02, // in W, can be null. Delivering to the grid is a positive value "sum": 7827.83 // in W, can be null. Delivering to the grid is a positive value }, "reactivePower": { "l1": 0.2, // in var, can be null. Positive is injecting reactive power to the grid and negative is absorbing reactive power "l2": 0.2, // in var, can be null. Positive is injecting reactive power to the grid and negative is absorbing reactive power "l3": 0.2, // in var, can be null. Positive is injecting reactive power to the grid and negative is absorbing reactive power "sum": 0.2 // in var, can be null. Positive is injecting reactive power to the grid and negative is absorbing reactive power }, "frequency": 50.21, // in Hz, can be null. Nonnegative "activeEnergyConsumed": { "l1": 31235.1, // in Wh, can be null. Nonnegative "l2": 31235.1, // in Wh, can be null. Nonnegative "l3": 31235.1, // in Wh, can be null. Nonnegative "sum": 93702.1 // in Wh, can be null. Nonnegative }, "activeEnergyDelivered": { "l1": 31235.2, // in Wh, can be null. Nonnegative "l2": 31235.2, // in Wh, can be null. Nonnegative "l3": 31235.2, // in Wh, can be null. Nonnegative "sum": 93702.2 // in Wh, can be null. Nonnegative }, "scheduled": true // false for measurements that are not part of the regular reporting interval, eg. directly after command execution and at Teleport initialisation}