Tenix Open Data Platform API - MQTT v1

Schema Documentation

Topic convention

Topics read tenix/{domain}/{sender}/{recipient}/…, where todp is the Tenix Open Data Platform. The order of those two segments is what gives the direction of a message:

  • tenix/{domain}/todp/{companyId}/… — sent by Tenix. Subscribe to receive it.
  • tenix/{domain}/{companyId}/todp/… — received by Tenix. Publish to send it.
  • #Vehicle
  • #Charge
  • #Energy

Operations

  • SEND tenix/vehicle/todp/{companyId}/{internalNumber}/telemetry

    Vehicle Telemetry Channel

    Publish Vehicle Telemetry messages

    Operation IDpublishVehicleTelemetry
    object
    required
    string

    The unique identifier of the Company.

      Examples values:
    • "1877c37hcebb4c4f808628d99d7bs0df"
    • "4577c37hc4f808d28d99d7bsadfsebb4"
    required
    string

    A Vehicle internal number

      Examples values:
    • "2255"
    • "2067"
    • #Vehicle

    Accepts the following message:

    A Vehicle Telemetry message

    A Vehicle Telemetry message

    object

    Examples

  • RECEIVE tenix/vehicle/{companyId}/todp/{internalNumber}/telemetry

    Vehicle Telemetry Channel

    Receive Vehicle Telemetry messages

    Operation IDgetVehicleTelemetry
    object
    required
    string

    The unique identifier of the Company.

      Examples values:
    • "1877c37hcebb4c4f808628d99d7bs0df"
    • "4577c37hc4f808d28d99d7bsadfsebb4"
    required
    string

    A Vehicle internal number

      Examples values:
    • "2255"
    • "2067"
    • #Vehicle

    Accepts the following message:

    A Vehicle Telemetry message

    A Vehicle Telemetry message

    object

    Examples

  • SEND tenix/charge/todp/{companyId}/{depotId}/{chargerId}/{connectorId}/session

    Charging Session State Topic

    Publish Charging Session State messages

    Operation IDpublishChargingSessionState
    object
    required
    string

    The unique identifier of the Company.

      Examples values:
    • "1877c37hcebb4c4f808628d99d7bs0df"
    • "4577c37hc4f808d28d99d7bsadfsebb4"
    required
    string

    The unique identifier of the Depot.

      Examples values:
    • "1877c37hcebb4c4f808628d99d7bs0df"
    • "4577c37hc4f808d28d99d7bsadfsebb4"
    chargerId
    required
    string

    The unique identifier of the charger.

    connectorId
    required
    number

    The unique identifier of the connector.

    • #Charge

    Accepts the following message:

    Charging Session State

    A message providing the complete state of a charging session.

    object

    Examples

  • RECEIVE tenix/charge/{companyId}/todp/{depotId}/{chargerId}/status

    Charger Connection Status Topic

    Receive Charger Connection Status messages

    Operation IDgetChargerConnectionStatus
    object
    required
    string

    The unique identifier of the Company.

      Examples values:
    • "1877c37hcebb4c4f808628d99d7bs0df"
    • "4577c37hc4f808d28d99d7bsadfsebb4"
    required
    string

    The unique identifier of the Depot.

      Examples values:
    • "1877c37hcebb4c4f808628d99d7bs0df"
    • "4577c37hc4f808d28d99d7bsadfsebb4"
    chargerId
    required
    string

    The unique identifier of the charger.

    • #Charge

    Accepts the following message:

    Charger Connection Status

    A message providing the current connection status of a charger.

    object

    Examples

  • RECEIVE tenix/charge/{companyId}/todp/{depotId}/{chargerId}/{connectorId}/status

    Connector Status Topic

    Receive Connector Status messages

    Operation IDgetConnectorStatus
    object
    required
    string

    The unique identifier of the Company.

      Examples values:
    • "1877c37hcebb4c4f808628d99d7bs0df"
    • "4577c37hc4f808d28d99d7bsadfsebb4"
    required
    string

    The unique identifier of the Depot.

      Examples values:
    • "1877c37hcebb4c4f808628d99d7bs0df"
    • "4577c37hc4f808d28d99d7bsadfsebb4"
    chargerId
    required
    string

    The unique identifier of the charger.

    connectorId
    required
    number

    The unique identifier of the connector.

    • #Charge

    Accepts the following message:

    Connector Status

    A message providing the current status of a charger's connector.

    object

    Examples

  • RECEIVE tenix/charge/{companyId}/todp/{depotId}/{chargerId}/{connectorId}/session

    Charging Session State Update Topic

    Receive Charging Session State Update messages

    Operation IDgetChargingSessionStateUpdate
    object
    required
    string

    The unique identifier of the Company.

      Examples values:
    • "1877c37hcebb4c4f808628d99d7bs0df"
    • "4577c37hc4f808d28d99d7bsadfsebb4"
    required
    string

    The unique identifier of the Depot.

      Examples values:
    • "1877c37hcebb4c4f808628d99d7bs0df"
    • "4577c37hc4f808d28d99d7bsadfsebb4"
    chargerId
    required
    string

    The unique identifier of the charger.

    connectorId
    required
    number

    The unique identifier of the connector.

    • #Charge

    Accepts the following message:

    Charging Session State Update

    A message providing the current state of a charging session.

    object

    Examples

  • SEND tenix/charge/todp/{companyId}/{depotId}/{chargerId}/{connectorId}/alarm

    Connector Alarm Topic

    Publish Connector Alarm messages

    Operation IDpublishConnectorAlarm
    object
    required
    string

    The unique identifier of the Company.

      Examples values:
    • "1877c37hcebb4c4f808628d99d7bs0df"
    • "4577c37hc4f808d28d99d7bsadfsebb4"
    required
    string

    The unique identifier of the Depot.

      Examples values:
    • "1877c37hcebb4c4f808628d99d7bs0df"
    • "4577c37hc4f808d28d99d7bsadfsebb4"
    chargerId
    required
    string

    The unique identifier of the charger.

    connectorId
    required
    number

    The unique identifier of the connector.

    • #Charge

    Accepts the following message:

    Connector Alarm

    A message providing an alarm raised on a charger's connector.

    object

    Examples

  • SEND tenix/charge/todp/{companyId}/{depotId}/{chargerId}/charging/profile

    Charging Profile Configuration Command Topic

    Publish Charging Profile Configuration Command

    Operation IDpublishChargingProfileCommand
    object
    required
    string

    The unique identifier of the Company.

      Examples values:
    • "1877c37hcebb4c4f808628d99d7bs0df"
    • "4577c37hc4f808d28d99d7bsadfsebb4"
    required
    string

    The unique identifier of the Depot.

      Examples values:
    • "1877c37hcebb4c4f808628d99d7bs0df"
    • "4577c37hc4f808d28d99d7bsadfsebb4"
    chargerId
    required
    string

    The unique identifier of the charger.

    • #Charge

    Accepts the following message:

    Charging Profile Configuration Request

    A message providing new charging profile configuration request

    object

    In case of setting a profile (requestType = "SET_PROFILE") all the fields are supposed to be provided. In case of clearing the profile (requestType = "CLEAR_PROFILE") "startSchedule" and "charging periods" will be omitted

    Examples

  • RECEIVE tenix/charge/{companyId}/todp/{depotId}/{chargerId}/charging/profile/{requestId}

    Charging Profile Configuration Result Topic

    Receive Charging Profile Configuration Result messages

    Operation IDgetChargingProfileConfigurationResult
    object
    required
    string

    The unique identifier of the Company.

      Examples values:
    • "1877c37hcebb4c4f808628d99d7bs0df"
    • "4577c37hc4f808d28d99d7bsadfsebb4"
    required
    string

    The unique identifier of the Depot.

      Examples values:
    • "1877c37hcebb4c4f808628d99d7bs0df"
    • "4577c37hc4f808d28d99d7bsadfsebb4"
    chargerId
    required
    string

    The unique identifier of the charger.

    required
    string

    The unique identifier of the correlated request.

      Examples values:
    • "1877c37hcebb4c4f808628d99d7bs0df"
    • "4577c37hc4f808d28d99d7bsadfsebb4"
    • #Charge

    Accepts the following message:

    Charging Profile Configuration Response

    A message providing new charging profile configuration result

    object

    Examples

  • RECEIVE tenix/energy/{companyId}/todp/{depotId}/telemetry

    Energy Telemetry Topic.

    Power measurements from the depot's Energy Management System: how much power is flowing at a point in the depot's electrical hierarchy, and how much more may flow there, in each direction, before a limit is reached.

    Power is signed as it is everywhere in this domain: positive is drawn from the grid, negative is sent to it. A depot with batteries or PV therefore reports a negative activePower at a node while that node is exporting.

    Publish one message per node per sample. The node is named in the payload, so this single topic carries the depot's grid connection point, its power groups and, where present, its substation.

    timestamp, node and activePower are required. Send availableImportPower and availableExportPower for whichever directions the system limits, and include phases where the equipment measures per phase.

    Receive Energy Telemetry messages

    Operation IDgetEnergyTelemetry
    object
    required
    string

    The unique identifier of the Company.

      Examples values:
    • "1877c37hcebb4c4f808628d99d7bs0df"
    • "4577c37hc4f808d28d99d7bsadfsebb4"
    required
    string

    The unique identifier of the Depot.

      Examples values:
    • "1877c37hcebb4c4f808628d99d7bs0df"
    • "4577c37hc4f808d28d99d7bsadfsebb4"
    object
    • #Energy

    Accepts the following message:

    Energy Telemetry

    A message providing electrical measurements at a node of the depot energy hierarchy.

    object

    A power measurement at one node of the depot's electrical hierarchy, taken at one instant.

    The same shape is used at every level, so node is what distinguishes a reading at the depot's grid connection point from one at a power group. Every value in a message comes from the same sample, hence the single timestamp.

    Flow is signed — positive drawn from the grid, negative sent to it — while the two headroom values are magnitudes in a named direction. Sites with batteries or PV are limited both ways, so the two are reported separately rather than as one margin.

    Examples

  • RECEIVE tenix/energy/{companyId}/todp/{depotId}/alarm

    Energy Alarm Topic.

    Grid-side conditions detected by the depot's Energy Management System — ground faults, transformer over temperature, tripped breakers.

    Each message carries the complete set of alarms active at the depot at that moment. Publish a new message whenever that set changes: a condition arises, a condition clears, or an active alarm's severity or detail changes.

    An alarm present in one message and absent from the next has cleared. An empty alarms array is a normal message, and says nothing is currently wrong.

    Publish with the MQTT retain flag set, so that Tenix picks up the depot's current alarm state on reconnecting rather than waiting for the next change.

    Receive Energy Alarm State messages

    Operation IDgetEnergyAlarm
    object
    required
    string

    The unique identifier of the Company.

      Examples values:
    • "1877c37hcebb4c4f808628d99d7bs0df"
    • "4577c37hc4f808d28d99d7bsadfsebb4"
    required
    string

    The unique identifier of the Depot.

      Examples values:
    • "1877c37hcebb4c4f808628d99d7bs0df"
    • "4577c37hc4f808d28d99d7bsadfsebb4"
    object
    • #Energy

    Accepts the following message:

    Energy Alarm State

    A message providing every grid-side alarm currently active at the depot.

    object

    The depot's complete alarm state at one instant, published whenever that state changes — a condition arises, a condition clears, or an active alarm's severity or detail changes.

    Because each message is the whole state, clearing needs no event of its own: an alarm that was in the previous message and is not in this one has cleared. A message with an empty alarms array says the depot is currently clear, and is how the last alarm's clearance is reported.

    Send the whole set every time, including alarms that have not changed. Nothing is acknowledged over this channel, and Tenix holds no state the publisher needs to reconcile with.

    Examples

  • RECEIVE tenix/energy/{companyId}/todp/{depotId}/status

    Energy Management System Link Status Topic.

    Whether the depot's Energy Management System is currently connected.

    Publish ONLINE on connecting, and register this same topic as the client's MQTT Last Will and Testament with a payload of OFFLINE. That lets Tenix tell a system with nothing to report from one that has gone away, and mark the depot's grid-side data stale when the link drops.

    Receive Energy Management System Link Status messages

    Operation IDgetEnergyManagementSystemLinkStatus
    object
    required
    string

    The unique identifier of the Company.

      Examples values:
    • "1877c37hcebb4c4f808628d99d7bs0df"
    • "4577c37hc4f808d28d99d7bsadfsebb4"
    required
    string

    The unique identifier of the Depot.

      Examples values:
    • "1877c37hcebb4c4f808628d99d7bs0df"
    • "4577c37hc4f808d28d99d7bsadfsebb4"
    object
    • #Energy

    Accepts the following message:

    Energy Management System Link Status

    A message providing the current connection status of the Energy Management System.

    object

    Examples

Messages

  • #1A Vehicle Telemetry messagetelemetry

    A Vehicle Telemetry message

    Message IDtelemetry
    object
  • #2Charging Session StatechargingSessionState

    A message providing the complete state of a charging session.

    Message IDchargingSessionState
    object
  • #3Charger Connection StatuschargerConnectionStatus

    A message providing the current connection status of a charger.

    Message IDchargerConnectionStatus
    object
  • #4Connector StatusconnectorStatus

    A message providing the current status of a charger's connector.

    Message IDconnectorStatus
    object
  • #5Charging Session State UpdatechargingSessionStateUpdate

    A message providing the current state of a charging session.

    Message IDchargingSessionStateUpdate
    object
  • #6Connector AlarmconnectorAlarm

    A message providing an alarm raised on a charger's connector.

    Message IDconnectorAlarm
    object
  • #7Charging Profile Configuration RequestconfigureChargingProfileRequest

    A message providing new charging profile configuration request

    Message IDconfigureChargingProfileRequest
    object

    In case of setting a profile (requestType = "SET_PROFILE") all the fields are supposed to be provided. In case of clearing the profile (requestType = "CLEAR_PROFILE") "startSchedule" and "charging periods" will be omitted

  • #8Charging Profile Configuration ResponseconfigureChargingProfileResponse

    A message providing new charging profile configuration result

    Message IDconfigureChargingProfileResponse
    object
  • #9Energy TelemetryenergyTelemetry

    A message providing electrical measurements at a node of the depot energy hierarchy.

    Message IDenergyTelemetry
    object

    A power measurement at one node of the depot's electrical hierarchy, taken at one instant.

    The same shape is used at every level, so node is what distinguishes a reading at the depot's grid connection point from one at a power group. Every value in a message comes from the same sample, hence the single timestamp.

    Flow is signed — positive drawn from the grid, negative sent to it — while the two headroom values are magnitudes in a named direction. Sites with batteries or PV are limited both ways, so the two are reported separately rather than as one margin.

  • #10Energy Alarm StateenergyAlarm

    A message providing every grid-side alarm currently active at the depot.

    Message IDenergyAlarm
    object

    The depot's complete alarm state at one instant, published whenever that state changes — a condition arises, a condition clears, or an active alarm's severity or detail changes.

    Because each message is the whole state, clearing needs no event of its own: an alarm that was in the previous message and is not in this one has cleared. A message with an empty alarms array says the depot is currently clear, and is how the last alarm's clearance is reported.

    Send the whole set every time, including alarms that have not changed. Nothing is acknowledged over this channel, and Tenix holds no state the publisher needs to reconcile with.

  • #11Energy Management System Link StatusenergyManagementSystemLinkStatus

    A message providing the current connection status of the Energy Management System.

    Message IDenergyManagementSystemLinkStatus
    object

Schemas

  • string
      Examples values:
    • "1877c37hcebb4c4f808628d99d7bs0df"
    • "4577c37hc4f808d28d99d7bsadfsebb4"
  • vin
    string
      Examples values:
    • "2GBE4C3126H66WC5A"
    • "KM8SGDKB3A847RKMX"
    • "5Y2SN65L661921TVB"
  • string
      Examples values:
    • "2255"
    • "2067"
  • bmsId
    string
      Examples values:
    • "FD43DE0DC4B6"
    • "51BEF9F0EFAE"
    • "A2987A5E09D0"
  • timestamp
    string
    format: date-time
      Examples values:
    • "2023-06-30T00:00:00.000Z"
  • object
  • object
  • object
  • object
  • object
  • object
  • chargingSessionStatus
    string
      Allowed values:
    • "PENDING"
    • "ACTIVE"
    • "COMPLETED"
    • "FAULTED"
  • chargerConnectionStatus
    string
      Allowed values:
    • "ONLINE"
    • "OFFLINE"
  • connectorStatus
    string
      Allowed values:
    • "AVAILABLE"
    • "PREPARING"
    • "CHARGING"
    • "SUSPENDED_EVSE"
    • "SUSPENDED_EV"
    • "FINISHING"
    • "RESERVED"
    • "UNAVAILABLE"
    • "FAULTED"
    • "UNKNOWN"
  • chargingSessionStopReason
    string
      Allowed values:
    • "EMERGENCY_STOP"
    • "EV_DISCONNECTED"
    • "HARD_RESET"
    • "LOCAL"
    • "OTHER"
    • "POWER_LOSS"
    • "REBOOT"
    • "REMOTE"
    • "SOFT_RESET"
    • "UNLOCK_COMMAND"
    • "DE_AUTHORIZED"
  • chargingProfileConfigurationStatus
    string
      Allowed values:
    • "ACCEPTED"
    • "REJECTED"
    • "NOT_SUPPORTED"
    • "UNKNOWN"
  • chargingProfilePurpose
    string
      Allowed values:
    • "TX_DEFAULT_PROFILE"
    • "TX_PROFILE"
  • chargingProfileRequestType
    string
      Allowed values:
    • "SET_PROFILE"
    • "CLEAR_PROFILE"
  • alarmType
    string
      Allowed values:
    • "CONNECTOR_UNAVAILABLE"
    • "CONNECTOR_FAULTED"
  • object
  • object
  • object
  • object
  • object
  • object
  • object

    In case of setting a profile (requestType = "SET_PROFILE") all the fields are supposed to be provided. In case of clearing the profile (requestType = "CLEAR_PROFILE") "startSchedule" and "charging periods" will be omitted

  • object
  • energyNodeType
    string

    Where in the depot's electrical hierarchy a measurement or alarm belongs.

    POINT_OF_CONNECTION — the depot's grid connection. One per depot, and where depot-level measurements are taken.

    POWER_GROUP — a group of chargers sharing a supply, as Tenix models it.

    SUBSTATION — a monitoring and protection node. Carries no capacity of its own and is not a power group.

      Allowed values:
    • "POINT_OF_CONNECTION"
    • "POWER_GROUP"
    • "SUBSTATION"
  • object
  • phaseIdentifier
    string
      Allowed values:
    • "L1"
    • "L2"
    • "L3"
  • object
  • object

    A power measurement at one node of the depot's electrical hierarchy, taken at one instant.

    The same shape is used at every level, so node is what distinguishes a reading at the depot's grid connection point from one at a power group. Every value in a message comes from the same sample, hence the single timestamp.

    Flow is signed — positive drawn from the grid, negative sent to it — while the two headroom values are magnitudes in a named direction. Sites with batteries or PV are limited both ways, so the two are reported separately rather than as one margin.

  • energyAlarmSeverity
    string

    How urgent the condition is, from an informational note through to a fault needing immediate operator attention.

      Allowed values:
    • "INFO"
    • "WARNING"
    • "MAJOR"
    • "CRITICAL"
    • "UNKNOWN"
  • energyAlarmType
    string

    The kind of condition detected. Use OTHER where none of the listed values fits, and describe the specifics in message and details.

      Allowed values:
    • "GROUND_FAULT"
    • "OVERCURRENT"
    • "OVERVOLTAGE"
    • "UNDERVOLTAGE"
    • "TRANSFORMER_OVERTEMPERATURE"
    • "PHASE_IMBALANCE"
    • "BREAKER_TRIPPED"
    • "FUSE_BLOWN"
    • "COMMUNICATION_LOST"
    • "SENSOR_FAULT"
    • "OTHER"
  • object

    One grid-side condition currently active at the depot: node says where it arose, raisedAt when it was detected, severity how urgent it is, and affectedPowerGroupIds which parts of the depot it affects.

    raisedAt is when the condition began, not when the message was sent — it stays the same across every message the alarm appears in, while the enclosing timestamp moves on.

    Only alarmType, raisedAt, severity and node are required — send whichever of the rest the system exposes.

  • object

    The depot's complete alarm state at one instant, published whenever that state changes — a condition arises, a condition clears, or an active alarm's severity or detail changes.

    Because each message is the whole state, clearing needs no event of its own: an alarm that was in the previous message and is not in this one has cleared. A message with an empty alarms array says the depot is currently clear, and is how the last alarm's clearance is reported.

    Send the whole set every time, including alarms that have not changed. Nothing is acknowledged over this channel, and Tenix holds no state the publisher needs to reconcile with.

  • energyManagementSystemLinkStatus
    string

    Whether the Energy Management System is connected.

      Allowed values:
    • "ONLINE"
    • "OFFLINE"
  • object