Skip to content

Forwarding to Amazon SNS

We can forward messages to Amazon Simple Notification Service (Amazon SNS). We publish to the topic of your choice. This can be a FIFO topic in case “Content-based message deduplication” is enabled. The message group ID will always be teleport-messages. The body of the message is JSON encoded and the format is identical to our HTTPS forwarder.

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 a request containing one message forwarded from a Teleport device that is connected to a solar inverter:

  • The activePowerLimit object is deprecated and replaced by setpoints.
  • Mappings are applied as follows:
    • setpoints.confirmed.activePowerLimitPercentage = activePowerLimit.percentage
[
{
"type": "solarPower:3", // identifies this 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. 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
"activePower": 12000.1, // 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.1, // 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, quadrants 2 and 4), the PF sign is positive. For inductive loads (lagging power factor, quadrants 1 and 3), the PF sign is negative.
"generatedEnergy": 250000.7, // 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
],
"environmentalSensors": [
{
"type": "irradiance", // identifies the sensor schema, can be "irradiance", "wind" or "temperature"
"identifier": "kipp-zonen-1234", // globally unique identifier of the asset, when available the brand and serial number of the asset
"irradianceFactor": 6348, // a static property defined as product of area and efficiency, used to calculate availableActivePower (area is the total surface area of the solar panels in square meters, efficiency is the efficiency of the solar panels + inverters)
"irradiance": 421, // in W/m², can be null
"temperature": {
"sensor": 11.3 // in °C, can be null, is optional
} // consists of any number of unique properties, all representing temperature measurements
},
{
"type": "wind", // identifies the sensor schema, can be "irradiance", "wind" or "temperature"
"identifier": "thies-clima-1234", // globally unique identifier of the asset, when available the brand and serial number of the asset
"windSpeed": 0, // in m/s, can be null
"temperature": {
"sensor": 21.4 // in °C, can be null, is optional
} // consists of any number of unique properties, all representing temperature measurements
},
{
"type": "temperature", // identifies the sensor schema, can be "irradiance", "wind" or "temperature"
"identifier": "huawei-smartlogger-temperature-sensor-1234", // globally unique identifier of the asset, when available the brand and serial number of the asset
"temperature": {
"sensor": 11.4, // in °C, can be null, is optional
"ambient": 9.9, // in °C, can be null, is optional
"solarModule": 12.4, // in °C, can be null, is optional
"customProperty": 11.2 // in °C, can be null, is optional
} // consists of any number of unique properties, all representing temperature measurements
}
// in case of multiple environmental sensors that are read out, can be many
],
"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.

[
{
"type": "solarPower.flash:1", // identifies this 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

Wind 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 wind energy converter:

  • The activePowerLimit object is deprecated and replaced by setpoints.
  • Mappings are applied as follows:
    • setpoints.confirmed.activePowerLimitPercentage = activePowerLimit.percentage
[
{
"type": "windPower:3", // identifies this schema
"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. 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
"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
"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
"alarms": ["error_string"] // See wind alarms under error codes section. Empty if no alarms, 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
"alarms": ["error_string"] // See wind alarms under error codes section. Empty if no alarms, 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 measurements that are not part of the regular reporting interval, eg. directly after command execution and at Teleport initialisation
}
]

Flash messages

Wind assets report flash messages more often than regular messages (typically every four seconds) 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 wind asset.

  • Added setpoints object
[
{
"type": "windPower.flash:1", // identifies this schema
"teleportHashId": "8de4y2", // uniquely identifies the teleport device
"assetIdentifier": "vestas-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.
"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.
}
}
},
"scheduled": true // false for "extra" measurements (eg. directly after command execution and at Teleport initialisation)
}
]

Battery power

Batteries produce two types of messages: regular messages and flash messages. Regular messages can be exported in full, or to contain only information relevant for operators. For the strings that can occur in the errors and warnings properties, see Battery power error and warning codes.

Regular messages in full

An example of a request containing one message forwarded from a Teleport device that is connected to a battery:

  • The configuration object is deprecated and replaced by setpoints.
  • 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 to activePower
    • deliverFCR to deliverFcr
    • chargeToState to chargeToPercentage
[
{
"type": "batteryPower:2", // identifies this schema
"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": {
"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
},
"acCurrentLowVoltage": {
"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
},
"racks": [
{
"identifier": "alfen-1", // brand and serial number of the rack or if that's not available, its index
"rackStatus": "on", // can be "on", "off", "other" or null (see warning and errors in case of 'other'),
"stateOfCharge": 90.1, // in %, can be null. Nonnegative
"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
"cellTemperature": {
"min": 30.1, // in ºC, can be null, min value of all cells in the rack
"cellIdMin": 19, // can be null, numeric ID of the cell with the lowest temperature in the rack
"max": 50.1, // in ºC, can be null, max value of all cells in the rack
"cellIdMax": 19 // can be null, numeric ID of the cell with the highest temperature in the rack
},
"cellVoltage": {
"min": 3.1, // in V, can be null, min value of all cells in the rack
"cellIdMin": 19, // can be null, numeric ID of the cell with the lowest voltage in the rack
"max": 4.1, // in V, can be null, max value of all cells in the rack
"cellIdMax": 19, // can be null, numeric ID of the cell with the highest voltage in the rack
"average": 3.6 // in V, can be null, average value of all cells in the rack
}
}
// 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
}
]

Regular messages for operators

A regular message for operators contains a subset of the information available in the regular message and is sent out at the same frequency. An example of a request containing one message for operators forwarded from a Teleport device that is connected to a battery:

  • The configuration object is deprecated and replaced by setpoints.
  • Mappings are applied as follows:
    • setpoints.confirmed.activePower = configuration.dispatchPower.activePower.
    • setpoints.confirmed.deliverFcr = configuration.deliverFCR.maxRate.
    • setpoints.confirmed.chargeToPercentage = configuration.chargeToState.percentage.
[
{
"type": "batteryPower.filtered:2", // identifies this schema
"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')
"frequency": 50.1, // in Hz, can be null. Nonnegative
"activePower": 1000.1, // in W, can be null. Positive means discharging, negative charging.
"stateOfCharge": 90.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
},
"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
}
}
// 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
}
]

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. An example of a request containing one flash message forwarded from a Teleport device that is connected to a battery:

[
{
"type": "batteryPower.flash:1", // identifies this schema
"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
}
]

EV power

An example of a request containing one message forwarded from a Teleport device that is connected to a (set of) EV charger stations. For the strings that can occur in the errors and warnings properties, see EV power error and warning codes.

  • voltage and current objects report phase and line measurements, voltage.l1, voltage.l2, voltage.l3, current.l1, current.l2, current.l3 are deprecated
  • The configuration and limit objects are deprecated and replaced by setpoints.
  • Mappings are applied as follows:
    • setpoints.confirmed.current = limit.current.
    • setpoints.confirmed.power = limit.power.
    • setpoints.effective.current = configuration.current.
    • setpoints.effective.power = configuration.power..
[
{
"type": "evPower:2", // identifies this schema
"teleportHashId": "8de4y2", // uniquely identifies the teleport device
"assetIdentifier": "phoenix-contact-charx-abd9234", // 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
"currentType": "ac", // can be "ac" or "dc" or "mixed"
"power": -40700.23, // in W, can be null. Negative if charging a vehicle (consuming from the grid). Active power in case currentType is "ac"
"energyConsumed": 93702.1, // in Wh, can be null. Nonnegative. Active consumed energy in case currentType is "ac"
"energyProduced": null, // in Wh, can be null. Nonnegative. Active produced energy in case currentType is "ac". Only relevant for bidirectional chargers
"errors": [], // array of strings. see error codes section
"setpoints": {
"confirmed": { // the setpoints reported by the EV charging point
"activePowerLimit": null, // in W, can be null. The actual power limit, combining setpoints from the Teleport with that of other sources (eg. the vehicles over OCPP)
"currentLimit": -16 // in A, can be null. The actual current limit, combining setpoints from the Teleport with that of other sources (eg. the vehicles over OCPP)
},
"desired": { // setpoints from different sources
"activePowerLimit": {
"cloud": null, // 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
},
"currentLimit": {
"cloud": -15, // in A, can be null.
"activeControl": null, // in A, can be null.
"gridOperator": null, // in A, can be null.
"modbusServer": -19 // in A, can be null.
}
},
"effective": { // the setpoints written by the Teleport in the EV charging point
"activePowerLimit": null, // in W, can be null. Negative if charging a vehicle (consuming from the grid). Active power in case currentType is "ac". For EV chargers that only allow control via current this property is null. In that case the Teleport converts the setpoint to a current value and it is included there.
"currentLimit": -15 // in A, can be null. Negative if charging a vehicle (consuming from the grid)
}
},
"stations": [
{
"identifier": "x9844a", // not guaranteed to be unique outside the asset
"errors": [], // array of strings. see error codes section
"points": [
{
"identifier": "ge874564", // not guaranteed to be unique outside the station
"currentType": "ac-3-phase-wye", // can be "ac-3-phase-wye", "ac-3-phase-delta", "ac-1-phase" and "dc"
"errors": ["phoenix_contact_charx_external_temperature_too_high"], // array of strings. see error codes section
"isCharging": true, // can be null
"vehicleConnected": true, // can be null
"setpoints": {
"confirmed": { // the setpoints reported by the EV charging point
"activePowerLimit": null, // in W, can be null. The actual power limit, combining setpoints from the Teleport with that of other sources (eg. the vehicles over OCPP)
"currentLimit": -16 // in A, can be null. The actual current limit, combining setpoints from the Teleport with that of other sources (eg. the vehicles over OCPP)
},
"effective": { // the setpoints written by the Teleport in the EV charging point
"activePowerLimit": null, // in W, can be null. Negative if charging a vehicle (consuming from the grid). Active power in case currentType is "ac". For EV chargers that only allow control via current this property is null. In that case the Teleport converts the setpoint to a current value and it is included there.
"currentLimit": -15 // in A, can be null. Negative if charging a vehicle (consuming from the grid)
}
},
"voltage": { // can be null. Is a number or null for "dc" and "ac-1-phase" currentTypes
"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": { // can be null. Is a number or null for "dc" and "ac-1-phase" currentTypes
"phase": {
"l1": -14.9, // in A, can be null. Delivering to the grid is a positive value
"l2": -15.0, // in A, can be null. Delivering to the grid is a positive value
"l3": -15.1 // in A, can be null. Delivering to the grid is a positive value
}, // can be null
"line": {
"l1": -14.9, // in A, can be null. Delivering to the grid is a positive value
"l2": -15.0, // in A, can be null. Delivering to the grid is a positive value
"l3": -15.1 // in A, can be null. Delivering to the grid is a positive value
} // can be null
},
"energyConsumed": 33702.1, // in Wh, can be null. is active energy for AC currentTypes
"energyProduced": 254.9, // in Wh, can be null. is active energy for AC currentTypes. Only relevant for bidirectional chargers
"power": { // can be null, is active power for AC currentTypes. Is a number or null for "dc" and "ac-1-phase" currentTypes
"l1": -3410.01, // in W, can be null. Charging a vehicle has a negative value
"l2": -3400.01, // in W, can be null. Charging a vehicle has a negative value
"l3": -3440.01, // in W, can be null. Charging a vehicle has a negative value
"sum": -10250.03 // in W, can be null. Charging a vehicle has a negative value
}
},
...
]
}
],
"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:

  • 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.
  • phaseVoltage, current.l1, current.l2, current.l3 are deprecated
[
{
"type": "meterPower:2", // identifies this schema
"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": 124.5, // in var, can be null. Positive is injecting reactive power to the grid and negative is absorbing reactive power
"l2": 135.1, // in var, can be null. Positive is injecting reactive power to the grid and negative is absorbing reactive power
"l3": 126.4, // in var, can be null. Positive is injecting reactive power to the grid and negative is absorbing reactive power
"sum": 386.1 // 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
}
]