This specification contains interfaces to be used between PTOs (operators) and Ruter. The API describes a set of MQTT topics which are used to distribute data onboard public transport vehicles/vessels as well as between the vehicle/vessel and Ruter’s Back Office or vv.
The API follows the upgrade cycles of ADT. Major releases are done more or less once a year and usually include breaking changes.
Minor/build releases are performed as continual deliveries and are non-breaking. New versions of this document will be published when new topics and/or fields are added.
Clients consuming information posted on the topics must be tolerant to:
Generally, QoS level 1 is applied for most topics and the retain
flag is true for most topics. See the respective topic for precise info.
Subscribers should start with Clean Session set to True to assure that they get the latest information at reconnection (the retained info) and avoid first having to process a long queue of outdated old information that in reality hinders new relevant information to reach the subscriber.
Global topic names are generally written on the format of {recipient}/{sender}/{vehicleid}/{topic}
to make it easy to identify the source and destination of the messages.
Local topic names have omitted the {recipient}/{sender}/{vehicleid}
part in order to have onboard equipment pre-configured with vehicle independent settings.
All topic names must thus be rewritten local/global in the MQTT bridge according to a provided configuration file.
All data must be JSON and UTF-8 encoded.
The diagram below shows an overview of the most important messages that manage the assignment and journey of a vehicle.
For more information, please go to: Ruter’s ADT agreement.
Please open an issue here: ADT-DOC Issues
Ruters central MQTT broker
The mqtt broker is available through TCP (:8883) and Websockets (:9883)
Please reach out to rdp-support@ruter.no to request access.
Field | Value |
---|---|
Central Topic | ruter/{operatorId}/{vehicleId}/adt/v3/operational/assignment/attempt/request |
Schema | assignment-attempt-request.json |
Producer | PTO |
Consumer | Ruter Assignment |
Service Level | ✅ External API. Restrictions apply. Only backward compatible changes may happen within the major version. |
Follows the request/response/state pattern. When a request
is made to the request topic, a response
will be available at the response topic once Ruter has finished processing.
In addition, if the request
results in a change of state
, the status topic will be updated to reflect the current state as seen by Ruter.
An AssignmentAttemptRequest
can be made for:
Action | Description |
---|---|
SignOn | Creating an Assignment for a vehicle. Signing a vehicle on to a set of planned journeys/stops |
SignOff | Signing a vehicle off from an assigned assignment |
Update | Altering an existing assigned assignment |
reqired
in the schema specifications.block
contains a set of journeys.vehicleTask
is a set of one or more blocks that can be served by one vehicle during one operating day.
In the example below, the vehicle task with vehicleTaskId=59001
consists of the 2 Block
s with <PrivateCode>59001</PrivateCode>
.<VehicleScheduleFrame version="20220908125021" id="RUT:VehicleScheduleFrame:1">
<blocks>
<Block version="20220908125021" id="RUT:Block:168197-59001mut-202209081312000">
<PrivateCode>59001</PrivateCode>
<StartTime>11:12:00</StartTime>
<EndTime>14:41:00</EndTime>
<dayTypes>
<DayTypeRef ref="RUT:DayType:2022-09-08"/>
</dayTypes>
<StartPointRef ref="RUT:ScheduledStopPoint:Fg" version="20220908125021"/>
<EndPointRef ref="RUT:ScheduledStopPoint:Fg" version="20220908125021"/>
<journeys>
<DeadRunRef ref="RUT:DeadRun:006723-008020-131200"/>
<VehicleJourneyRef ref="RUT:ServiceJourney:003565-004003-131500"/>
...
</journeys>
</Block>
<Block version="20220908125021" id="RUT:Block:168197-59001muwt-202209080359000">
<PrivateCode>59001</PrivateCode>
<StartTime>01:59:00</StartTime>
<EndTime>06:16:00</EndTime>
<dayTypes>
<DayTypeRef ref="RUT:DayType:2022-09-08"/>
</dayTypes>
<StartPointRef ref="RUT:ScheduledStopPoint:Fg" version="20220908125021"/>
<EndPointRef ref="RUT:ScheduledStopPoint:Fg" version="20220908125021"/>
<journeys>
<DeadRunRef ref="RUT:DeadRun:006713-008006-035900"/>
<VehicleJourneyRef ref="RUT:ServiceJourney:002521-002932-041700"/>
...
</journeys>
</Block>
</blocks>
</VehicleScheduleFrame>
assignment-attempt-request.signOn
RUT:DatedServiceJourney:a
PublicationDelivery/dataObjects/CompositeFrame/frames/TimetableFrame/vehicleJourneys/DatedServiceJourney/@id
505
PublicationDelivery/dataObjects/CompositeFrame/frames/TimetableFrame/vehicleJourneys/ServiceJourney/PrivateCode
RUT:Line:1337
2024-01-01T03:28:00+02:00
DepartureTime
found here: PublicationDelivery/dataObjects/CompositeFrame/frames/TimetableFrame/vehicleJourneys/ServiceJourney/passingTimes/TimetabledPassingTime/DepartureTime
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<PublicationDelivery>
<dataObjects>
<CompositeFrame>
<frames>
<ServiceFrame>
<routes>
<Route id="RUT:Route:007">
<LineRef ref="RUT:Line:1337"/>
</Route>
</routes>
<lines>
<Line id="RUT:Line:1337">
</Line>
</lines>
<journeyPatterns>
<JourneyPattern id="RUT:JourneyPattern:123456">
<RouteRef ref="RUT:Route:007"/>
</JourneyPattern>
</journeyPatterns>
</ServiceFrame>
<TimetableFrame>
<vehicleJourneys>
<ServiceJourney id="RUT:ServiceJourney:1">
<JourneyPatternRef ref="RUT:JourneyPattern:123456"/>
<PrivateCode>505</PrivateCode>
<passingTimes>
<TimetabledPassingTime>
<StopPointInJourneyPatternRef/>
<DepartureTime>03:28:00</DepartureTime>
</TimetabledPassingTime>
<TimetabledPassingTime>
<StopPointInJourneyPatternRef/>
<DepartureTime>03:31:00</DepartureTime>
</TimetabledPassingTime>
<TimetabledPassingTime>
<StopPointInJourneyPatternRef/>
<DepartureTime>03:33:00</DepartureTime>
</TimetabledPassingTime>
</passingTimes>
</ServiceJourney>
<DatedServiceJourney id="RUT:DatedServiceJourney:a">
<ServiceJourneyRef ref="RUT:ServiceJourney:1"/>
<OperatingDayRef ref="RUT:OperatingDay:2024-01-01"/>
</DatedServiceJourney>
</vehicleJourneys>
</TimetableFrame>
</frames>
</CompositeFrame>
</dataObjects>
</PublicationDelivery>
AssignmentState.assigned=true
AssignmentState.assigned=true
AssignmentState.assigned=false
VehicleTask
:DatedServiceJourneys
or Journeys
vehicleTaskId
and serviceWindow
.vehicleTaskId
: Can be found in the common file in the NeTEx export under this path VehicleScheduleFrame.blocks[].Block.PrivateCode
serviceWindow
: Defines a time range for which journeys the vehicle should be signed on.
The vehicle will be signed on to all the journeys in the vehicle task between provided times.
Signed on journeys may be part of 1 or more Block
s.
Times provided may belong to the same calendar date, or 2 consecutive dates.
Attempts not containing valid date times for firstDepartureDateTime
and lastArrivalDateTimes
will be rejected, resulting in AssignmentState.assigned=false
DatedServiceJourneys
:datedServiceJourneyId
: Can be found in the respective Journey file in the NeTEx export (See above example xml)serviceWindow
: Optional: Defines a time range for which calls in the journey the vehicle should be signed on. If not provided, the entire journey is includedJourneys
. See above example on how to locate the fields in the NeTEx export:vehicleJourneyId
: Required if calls are not provided. Also known as 'turnummer'/trip number/privateCode of the journey.lineId
: Required if calls are not provided. Id for the line, e.g.: 'RUT:Line:32'. RUT:Line:0 can be used for DeadRunsdepartureDateTime
: Planned departure date time for the first call in the journey. This field is used to pinpoint the exact dated journey to be servicedserviceWindow
: Optional: Defines a time range for which calls in the journey the vehicle should be signed on. If not provided, the entire journey is includedcalls
: Optional: Used to create DeadRuns
. Please provide a list of two or more calls. quayId
: Id of the quay (NSR:Quay:xxx) to be serviced or the depot (RUT/NBU)arrivalDateTime
: Required for all calls except the first call to be serviceddepartureDateTime
: Required for all calls except the last call to be servicedThe vehicle will be signed on to service the pre-existing plans
Used if additional vehicles are demanded to serve the pre-existing plans
Used if another vehicle can not service parts of its assignment.
The operator should sign off the other vehicle using either SHORTENING
or BREAKDOWN
.
Note: Ruter will not sign off the other vehicle automatically.
The vehicle has serviced all journeys in the assignment
The vehicle has broken down, or in some way not capable of servicing the rest of the assignment
Remaining not serviced stops/journeys in the assignment will not be serviced (by the assigned vehicle).
Same as CANCELLED
EXPIRED
Given a successful signOn, if the vehicle is not signed off before two hours after the last planned arrival. The vehicle will be automatically signed off with the code EXPIRED
.Operational change of a pre-existing assigned assignment for a vehicle.
Failed attempts will not affect the assignment state for a vehicle.
serviceWindow
is honoured as SignOn - PLANNED
Given an assignment (vehicle plan) with two journeys:
Journey 1
Quay 1 dep 2023-04-27T10:00Z
Quay 2 arr 2023-04-27T10:01Z, dep 2023-04-27T10:01Z
Quay 3 arr 2023-04-27T10:02Z
Journey 2
Quay 3 dep 2023-04-27T10:03Z
Quay 2 arr 2023-04-27T10:04Z, dep 2023-04-27T10:04Z
Quay 1 arr 2023-04-27T10:05Z
When SHORTENING
{
"eventTimestamp": "2023-04-27T12:40:12.631914Z",
"traceId": "083b71c4-e417-11ed-b5ea-0242ac120004",
"update":
{
"code": "SHORTENING",
"serviceWindow":
{
"firstDepartureDateTime": "2023-04-27T10:02Z",
"lastArrivalDateTime": "2023-04-27T10:03Z"
}
}
}
Then; both visits at Quay 3 will be removed from the assignment. The resulting assignment will be:
Journey 1
Quay 1 dep 2023-04-27T10:00Z
Quay 2 arr 2023-04-27T10:01Z, dep 2023-04-27T10:01Z
Journey 2
Quay 2 arr 2023-04-27T10:04Z, dep 2023-04-27T10:04Z
Quay 1 arr 2023-04-27T10:05Z
Effectively, the vehicle should turn around at Journey 1 Quay 2 and continue servicing Journey 2 from Quay 2
Accepts the following message:
Request to sign a vehicle on/off, or update an assigned assignment. The vehicle in question is provided in the mqtt topic name. Response will be sent to this vehicle via assignment attempt response.
{
"eventTimestamp": "2023-04-27T12:40:12.631933Z",
"traceId": "083b71c4-e417-11ed-b5ea-0242ac120088",
"signOn": {
"code": "PLANNED",
"journeys": [
{
"calls": [
{
"quayId": "NBU:Quay:HomeGar",
"departureDateTime": "2023-04-27T13:12:00Z"
},
{
"quayId": "NSR:Quay:1221",
"arrivalDateTime": "2023-04-27T13:30:00Z"
}
]
},
{
"vehicleJourneyId": "1337",
"lineId": "RUT:Line:88",
"departureDateTime": "2023-04-27T13:32:00Z",
"serviceWindow": {
"firstDepartureDateTime": "2023-04-27T13:35:00Z",
"lastArrivalDateTime": "2023-04-27T14:00:00Z"
}
},
{
"calls": [
{
"quayId": "NSR:Quay:1335",
"arrivalDateTime": "2023-04-27T14:00:00Z"
},
{
"quayId": "NBU:Quay:HomeGar",
"departureDateTime": "2023-04-27T14:12:00Z"
}
]
}
]
}
}
{
"eventTimestamp": "2023-04-27T14:43:12.631911Z",
"traceId": "083b71c4-e417-11ed-b5ea-0242ac120001",
"signOff": {
"code": "FINISHED"
}
}
{
"eventTimestamp": "2023-04-27T12:40:12.631913Z",
"traceId": "083b71c4-e417-11ed-b5ea-0242ac120003",
"signOn": {
"code": "PLANNED",
"vehicleTaskId": "99991",
"serviceWindow": {
"firstDepartureDateTime": "2023-04-27T13:00:00Z",
"lastArrivalDateTime": "2023-04-27T13:37:00Z"
}
}
}
{
"eventTimestamp": "2023-04-27T12:40:12.631913Z",
"traceId": "083b71c4-e417-11ed-b5ea-0242ac120003",
"signOn": {
"code": "PLANNED",
"datedServiceJourneys": [
{
"datedServiceJourneyId": "RUT:DatedServiceJourney:7c1f03be273b5baaeba55b8c35c19a3f",
"serviceWindow": {
"firstDepartureDateTime": "2023-04-27T13:23:00Z",
"lastArrivalDateTime": "2023-04-27T13:37:00Z"
}
},
{
"datedServiceJourneyId": "RUT:DatedServiceJourney:fad12f60510017bb9b50479c3225840f"
}
]
}
}
{
"eventTimestamp": "2023-04-27T12:40:12.631914Z",
"traceId": "083b71c4-e417-11ed-b5ea-0242ac120004",
"update": {
"code": "SHORTENING",
"serviceWindow": {
"firstDepartureDateTime": "2023-04-27T13:23:00Z",
"lastArrivalDateTime": "2023-04-27T13:37:00Z"
}
}
}
{
"eventTimestamp": "2023-04-27T12:40:12.631912Z",
"traceId": "083b71c4-e417-11ed-b5ea-0242ac120002",
"signOn": {
"code": "EXTRA",
"vehicleTaskId": "99991",
"serviceWindow": {
"firstDepartureDateTime": "2023-04-27T13:00:00Z",
"lastArrivalDateTime": "2023-04-27T13:37:00Z"
}
}
}
Field | Value |
---|---|
Central Topic | ruter/{operatorId}/back_office/adt/v3/operational/assignment/omit/request |
Schema | assignment-omit-request.json |
Producer | PTO |
Consumer | Ruter Assignment |
Service Level | ✅ External API. Restrictions apply. Only backward compatible changes may happen within the major version. |
Follows the request/response pattern. When a request
is made to this topic, a response
will be available at the response topic once Ruter has finished processing.
required
in the schema specifications.Introducing the flag omit
allows the operator to send omit=false
to cancel an omit.
Inform Ruter that the PTO has no intention of servicing the journeys and stops defined by the provided service window.
vehicleTaskId
and serviceWindow
.vehicleTaskId
: Can be found in the common file in the NeTEx export under this path VehicleScheduleFrame.blocks[].Block.PrivateCode
serviceWindow
: Defines a time range for which journeys the vehicle should be omitted.datedServiceJourneyId
: Can be found in the respective Journey file in the NeTEx export (See above example xml)serviceWindow
: Optional: Defines a time range for which calls in the journey the vehicle should be signed on. If not provided, the entire journey is includedcalls
: Optional: Defines a list of calls by NSR:Quay:Id
. This list can be used if only one call should be omitted, or the calls do not fall within one service windwAccepts the following message:
Request to omit a specified service. Response will be sent to the back office via assignment attempt response.
{
"eventTimestamp": "2023-04-27T12:40:13.631914Z",
"traceId": "083b71c4-e417-11ed-b5ea-0242ac120005",
"omit": true,
"datedServiceJourneys": [
{
"datedServiceJourneyId": "RUT:DatedServiceJourney:1234",
"serviceWindow": {
"firstDepartureDateTime": "2023-04-27T13:23:00Z",
"lastArrivalDateTime": "2023-04-27T13:37:00Z"
}
},
{
"datedServiceJourneyId": "RUT:DatedServiceJourney:1235"
}
]
}
{
"eventTimestamp": "2023-04-27T12:40:13.631914Z",
"traceId": "083b71c4-e417-11ed-b5ea-0242ac120005",
"code": "NO_INTENTION",
"datedServiceJourneys": [
{
"datedServiceJourneyId": "RUT:DatedServiceJourney:1235"
},
{
"datedServiceJourneyId": "RUT:DatedServiceJourney:1236",
"calls": [
{
"nsrQuayId": "NSR:Quay:1234",
"time": "2023-04-27T13:57:00Z"
},
{
"nsrQuayId": "NSR:Quay:1239",
"time": "2023-04-27T14:12:00Z"
}
]
}
]
}
{
"eventTimestamp": "2023-04-27T12:40:13.631916Z",
"traceId": "083b71c4-e417-11ed-b5ea-0242ac120004",
"omit": false,
"datedServiceJourneys": [
{
"datedServiceJourneyId": "RUT:DatedServiceJourney:1234",
"serviceWindow": {
"firstDepartureDateTime": "2023-04-27T13:23:00Z",
"lastArrivalDateTime": "2023-04-27T13:37:00Z"
}
},
{
"datedServiceJourneyId": "RUT:DatedServiceJourney:1235",
"serviceWindow": {
"firstDepartureDateTime": "2023-04-27T13:40:00Z",
"lastArrivalDateTime": "2023-04-27T13:56:00Z"
}
}
]
}
{
"eventTimestamp": "2023-04-27T12:40:12.631914Z",
"traceId": "083b71c4-e417-11ed-b5ea-0242ac120004",
"code": "NO_INTENTION",
"vehicleTaskId": "99991",
"serviceWindow": {
"firstDepartureDateTime": "2023-04-27T13:23:00Z",
"lastArrivalDateTime": "2023-04-27T13:37:00Z"
}
}
Field | Value |
---|---|
Central Topic | ruter/{operatorId}/{vehicleId}/adt/v3/pe/active_cab |
Schema | active-cab.json |
Producer | PTO |
Consumer | Ruter BO |
Service Level | ✅ External API. Restrictions apply. Only backward compatible changes may happen within the major version. |
Accepts the following message:
Used to keep track of what direction the train is driving
{
"eventTimestamp": "2020-10-31T08:38:02.749Z",
"traceId": "3841a268-0c03-4588-b476-211be0f26a0d",
"activeCab": "c1"
}
Field | Value |
---|---|
Central Topic | ruter/{operatorId}/{vehicleId}/adt/v3/pe/door_lock |
Schema | door-lock.json |
Producer | PTO |
Consumer | Ruter BO |
Service Level | ✅ External API. Restrictions apply. Only backward compatible changes may happen within the major version. |
This message is used to track if the vehicle doors are locked or unlocked.
Frequency: on change
Accepts the following message:
Door lock event
{
"eventTimestamp": "2020-10-31T08:38:02.749Z",
"traceId": "3841a268-0c03-4588-b476-211be0f26a0d",
"locked": false
}
Field | Value |
---|---|
Central Topic | ruter/{operatorId}/{vehicleId}/adt/v3/pe/doors_individually |
Schema | doors-individually.json |
Producer | PTO |
Consumer | Ruter BO |
Service Level | ✅ External API. Restrictions apply. Only backward compatible changes may happen within the major version. |
This topic is used to track the individual status of doors. One use case is to improve the data quality of APC counts. See also topic sensors/door for status of anyDoorOpen/allDoorsClosed.
Accepts the following message:
This object is used to represent a door individually.
{
"traceId": "3841a268-0c03-4588-b476-211be0f26a0d",
"eventTimestamp": "2021-10-31T12:45:50.749Z",
"messageNumber": 123456,
"doorRef": "1",
"isOpen": true
}
Field | Value |
---|---|
Central Topic | ruter/{operatorId}/{vehicleId}/adt/v3/sensors/apc/{sensorId} |
Schema | apc.json |
Producer | PTO |
Consumer | Ruter BO |
Service Level | ✅ External API. Restrictions apply. Only backward compatible changes may happen within the major version. |
Identification of the physical sensor, e.g. serial number
Accepts the following message:
Raw-data from door-sensor for later evaluation.
{
"traceId": "3841a268-0c03-4588-b476-211be0f26a0d",
"eventTimestamp": "2023-10-31T12:45:50.749Z",
"messageNumber": 123456,
"doorRef": "1",
"alightingCount": 23,
"boardingCount": 12,
"categoryActivities": [
{
"categoryRef": "ADULT",
"alightingCount": 23,
"boardingCount": 9
},
{
"categoryRef": "CHILD",
"alightingCount": 0,
"boardingCount": 3
}
]
}
Field | Value |
---|---|
Central Topic | ruter/{operatorId}/{vehicleId}/adt/v3/sensors/door |
Schema | door.json |
Producer | PTO |
Consumer | Ruter BO |
Service Level | ✅ External API. Restrictions apply. Only backward compatible changes may happen within the major version. |
Frequency: on change
Accepts the following message:
Describes if any door is open (if the door lock is released). Also see topic pe/doors_individually for status on individual doors.
{
"traceId": "3841a268-0c03-4588-b476-211be0f26a0d",
"eventTimestamp": "2017-10-31T12:45:50.749Z",
"messageNumber": 123456,
"doorOpen": true
}
Field | Value |
---|---|
Central Topic | ruter/{operatorId}/{vehicleId}/adt/v3/sensors/location |
Schema | location.json |
Producer | PTO |
Consumer | Ruter BO |
Service Level | ✅ External API. Restrictions apply. Only backward compatible changes may happen within the major version. |
Describes the GNSS navigation receiver feedback in metric format.
The GNSS type is expected to be GPS. The GNSS coordinate system is expected be “WGS84”. Negative values is used south of the equator and west of Greenwich.
Frequency is expected to be at 1 message per second.
Accepts the following message:
Location sensor data
{
"traceId": "3841a268-0c03-4588-b476-211be0f26a0d",
"eventTimestamp": "2017-10-31T12:45:50.749Z",
"latitudeDegree": 59.251356,
"longitudeDegree": 11.581231,
"altitude": 124,
"messageNumber": 12345,
"speedOverGround": 15.3,
"trackDegreeTrue": 324,
"signalQuality": 1,
"numberOfSatellites": 12,
"hdop": 2.4
}
Field | Value |
---|---|
Central Topic | ruter/{operatorId}/{vehicleId}/adt/v3/sensors/odometer |
Schema | odometer.json |
Producer | PTO |
Consumer | Ruter BO |
Service Level | ✅ External API. Restrictions apply. Only backward compatible changes may happen within the major version. |
Describes an odometer value in meters based on total vehicle distance or similar. Absolute value of less importance but should be increasing within the scope of a journey.
Frequency is expected to be at 1 message per second.
Accepts the following message:
Odometer data
{
"traceId": "3841a268-0c03-4588-b476-211be0f26a0d",
"eventTimestamp": "2017-11-30T23:45:52.006Z",
"distance": 23434556,
"messageNumber": 12345
}
Field | Value |
---|---|
Central Topic | ruter/{operatorId}/{vehicleId}/adt/v3/sensors/stop_button |
Schema | stop-button.json |
Producer | PTO |
Consumer | Ruter DPI |
Service Level | ✅ External API. Restrictions apply. Only backward compatible changes may happen within the major version. |
This message should be produced whenever the stop signal is turned on or off. Depending on whether the regular stop button is pressed or the blue accessebility button is pressed, a different signal should be produced.
Whenever the vehicle has serviced a stop, the signal is to be reset.
Frequency: on change
Accepts the following message:
Describes if passengers have requested that the bus should stop (stop button pressed).
{
"eventTimestamp": "2021-11-30T23:45:52.006Z",
"traceId": "c26f450f-2418-4792-a567-05f6771cba7a",
"stopPressed": true,
"accessibility": false
}
{
"eventTimestamp": "2021-11-30T23:45:52.006Z",
"traceId": "c26f450f-2418-4792-a567-05f6771cba7a",
"stopPressed": false,
"accessibility": false
}
{
"eventTimestamp": "2021-11-30T23:45:52.006Z",
"traceId": "c26f450f-2418-4792-a567-05f6771cba7a",
"stopPressed": true,
"accessibility": true
}
Field | Value |
---|---|
Central Topic | ruter/{operatorId}/{vehicleId}/adt/v3/sensors/telemetry/{telemetryId} |
Schema | telemetry.json |
Producer | PTO |
Consumer | Ruter BO |
Service Level | ✅ External API. Restrictions apply. Only backward compatible changes may happen within the major version. |
For telemetry not listed in the Available ADT Telemetry section below, refer to the FMS (Fleet Management System) standard documentation. However, before using the FMS standard directly:
Several different kinds of sensor/telemetry data are available varying by vehicle type For traditional busses, FMS is the standard that defines what data about the vehicle is published on the FMS bus and further on by ITxPT FMStoIP service.In addition, vessels, trams and different bus types have proprietary data not captured by FMS.
According to the data centric approach from ITxPT, several of these data types (door, location, stop button etc) have been assigned separate topics as being described in this document. However, data types required by Ruter that haven’t yet been described in the MQTT structure from ITxPT, will still be handled by the general Telemetry topic that was introduced by Ruter in 2019.
All such data are defined by unique, 32 bit, identifiers. Data caught from the FMS bus retain their PGN numbers as the last 16 bits of the ID. Data not coming from the FMS bus follow a separate addressing scheme, with addresses allocated by Ruter on request. Please note that PTOs are free to decide if they want to use FMS or a non-FMS data source to provide the data.
To utilize FMS data in Ruter’s architecture, Operators can either set up an FMS2IP service or use any other means to subscribe to the FMS bus data. Note that there must be one separate MQTT message per FMS PGN.
The identifiers are constructed this way:
Bytes | Description |
---|---|
1 | Source identifier (0x00 FMS, 0x01 Non-FMS) |
2-4 | Source-specific id, e.g. FMS PGNs |
See topics with specific id for more information.
Telemetry ID | Telemetry Type |
---|---|
0001FF25 | Charger (deprecated) |
01000002 | Temperature indoor |
01000005 | State of charge |
01000006 | Transmission mode |
01000007 | Windscreen wiper active |
01000008 | Accelerometry |
01000009 | Temperature outdoor |
0100000A | Accumulated energy consumption |
An unique ID of the telemetry type.
Accepts the following message:
Schema for telemetry data, supporting both single-sensor and multi-sensor payloads.
{
"traceId": "string",
"eventTimestamp": "string",
"messageNumber": 0,
"id": "string",
"name": "string",
"sensorId": "string",
"payloads": [
{
"subid": "string",
"sensorId": "string",
"name": "string",
"unit": "string",
"value": null
}
]
}
Field | Value |
---|---|
Central Topic | ruter/{operatorId}/{vehicleId}/adt/v3/sensors/telemetry/0001FF25 |
Schema | telemetry.json |
Producer | PTO |
Consumer | Ruter BO |
Service Level | ✅ External API. Restrictions apply. Only backward compatible changes may happen within the major version. |
This has been deprecated and will be removed in the next major version. See´sensors/charging´ for information about new topic.
Describes the charging status and details of an electric vehicle.
Sub ID | Name | Value Type | Description |
---|---|---|---|
10003 | Wall charger connected | boolean | Indicates if connected to a wall charger |
10004 | Fast charger connected | boolean | Indicates if connected to a fast charger |
10005 | Charging active | boolean | Indicates if the vehicle is actively charging |
Accepts the following message:
Schema for telemetry data, supporting both single-sensor and multi-sensor payloads.
{
"name": "Charger",
"eventTimestamp": "2022-05-09T13:27:59.624Z",
"traceId": "3841a268-0c03-4588-b476-211be0f26a0d",
"sensorId": "XB7F-9T2M-L4FC-3R8Q",
"messageNumber": 1,
"id": "0001FF25",
"payloads": [
{
"subid": "10003",
"name": "Wall charger connected",
"value": true
},
{
"subid": "10004",
"name": "Fast charger connected",
"value": true
},
{
"subid": "10005",
"name": "Charging active",
"value": true
}
]
}
Field | Value |
---|---|
Central Topic | ruter/{operatorId}/{vehicleId}/adt/v3/sensors/telemetry/01000002 |
Schema | telemetry.json |
Producer | PTO |
Consumer | Ruter BO |
Service Level | ✅ External API. Restrictions apply. Only backward compatible changes may happen within the major version. |
Describes the interior temperature of the vehicle.
Sub ID | Value Type | Description |
---|---|---|
tempavg | float | Average interior temperature |
tempfront | float | Front interior temperature |
tempmiddle | float | Middle interior temperature |
temprear | float | Rear interior temperature |
Accepts the following message:
Schema for telemetry data, supporting both single-sensor and multi-sensor payloads.
{
"name": "Temperature indoor",
"eventTimestamp": "2022-05-09T13:27:59.624Z",
"traceId": "3841a268-0c03-4588-b476-211be0f26a0d",
"messageNumber": 1,
"id": "01000002",
"payloads": [
{
"subid": "tempavg",
"sensorId": "XB7F-9T2M-L4FC-3R8Q",
"value": 18.1
},
{
"subid": "tempfront",
"sensorId": "XB7F-9T2M-L4FC-3R8Q",
"value": 18.2
},
{
"subid": "tempmiddle",
"sensorId": "XB7F-9T2M-L4FC-3R8Q",
"value": 18.1
},
{
"subid": "temprear",
"sensorId": "XB7F-9T2M-L4FC-3R8Q",
"value": 18.4
}
]
}
Field | Value |
---|---|
Central Topic | ruter/{operatorId}/{vehicleId}/adt/v3/sensors/telemetry/01000005 |
Schema | telemetry.json |
Producer | PTO |
Consumer | Ruter BO |
Service Level | ✅ External API. Restrictions apply. Only backward compatible changes may happen within the major version. |
Describes the current charge level of the vehicle's battery.
If vehicle has more than one battery use the sub id to identify them:
Sub ID | Name | Value Type | Description |
---|---|---|---|
N/A | State of charge | float | Only one battery in the given vehicle |
1 | State of charge | float | Battery 1 |
2 | State of charge | float | Battery 2 |
(n) | State of charge | float | Battery (n) |
Accepts the following message:
Schema for telemetry data, supporting both single-sensor and multi-sensor payloads.
{
"eventTimestamp": "2022-05-09T13:27:59.624Z",
"traceId": "3841a268-0c03-4588-b476-211be0f26a0d",
"messageNumber": 1,
"id": "01000005",
"payloads": [
{
"name": "State of charge",
"sensorId": "XB7F-9T2M-L4FC-3R8Q",
"value": 20.3
}
]
}
Field | Value |
---|---|
Central Topic | ruter/{operatorId}/{vehicleId}/adt/v3/sensors/telemetry/01000006 |
Schema | telemetry.json |
Producer | PTO |
Consumer | Ruter BO |
Service Level | ✅ External API. Restrictions apply. Only backward compatible changes may happen within the major version. |
Intended for hybrid vehicles. Describes the current transmission mode of the vehicle.
COMBUSTION
or ELECTRIC
Sub ID | Name | Value Type | Description |
---|---|---|---|
N/A | Transmission mode | string | Current transmisison mode, should be either COMBUSTION or ELECTRIC |
Accepts the following message:
Schema for telemetry data, supporting both single-sensor and multi-sensor payloads.
{
"eventTimestamp": "2022-05-09T13:27:59.624Z",
"traceId": "3841a268-0c03-4588-b476-211be0f26a0d",
"messageNumber": 1,
"id": "01000006",
"payloads": [
{
"name": "Transmission mode",
"sensorId": "XB7F-9T2M-L4FC-3R8Q",
"value": "electric"
}
]
}
Field | Value |
---|---|
Central Topic | ruter/{operatorId}/{vehicleId}/adt/v3/sensors/telemetry/01000007 |
Schema | telemetry.json |
Producer | PTO |
Consumer | Ruter BO |
Service Level | ✅ External API. Restrictions apply. Only backward compatible changes may happen within the major version. |
Describes the activity of the windscreen wipers.
Sub ID | Name | Value Type | Description |
---|---|---|---|
N/A | Windscreen wiper active | boolean |
Accepts the following message:
Schema for telemetry data, supporting both single-sensor and multi-sensor payloads.
{
"eventTimestamp": "2022-05-09T13:27:59.624Z",
"traceId": "3841a268-0c03-4588-b476-211be0f26a0d",
"messageNumber": 1,
"id": "01000007",
"payloads": [
{
"name": "Windscreen wiper active",
"sensorId": "XB7F-9T2M-L4FC-3R8Q",
"value": true
}
]
}
Field | Value |
---|---|
Central Topic | ruter/{operatorId}/{vehicleId}/adt/v3/sensors/telemetry/01000008 |
Schema | telemetry.json |
Producer | PTO |
Consumer | Ruter BO |
Service Level | ✅ External API. Restrictions apply. Only backward compatible changes may happen within the major version. |
Describes the vehicle's acceleration in three dimensions.
Sub Id | Value Type | Description |
---|---|---|
xmin | float | Minimum X-axis acceleration |
xmax | float | Maximum X-axis acceleration |
xavg | float | Average X-axis acceleration |
ymin | float | Minimum Y-axis acceleration |
ymax | float | Maximum Y-axis acceleration |
yavg | float | Average Y-axis acceleration |
zmin | float | Minimum Z-axis acceleration |
zmax | float | Maximum Z-axis acceleration |
zavg | float | Average Z-axis acceleration |
Accepts the following message:
Schema for telemetry data, supporting both single-sensor and multi-sensor payloads.
{
"name": "Accelerometry",
"eventTimestamp": "2022-05-09T13:27:59.624Z",
"traceId": "3841a268-0c03-4588-b476-211be0f26a0d",
"messageNumber": 1,
"id": "01000008",
"sensorId": "XB7F-9T2M-L4FC-3R8Q",
"payloads": [
{
"subid": "xmin",
"value": 0.1
},
{
"subid": "xmax",
"value": 0.2
},
{
"subid": "xavg",
"value": 0.15
},
{
"subid": "ymin",
"value": -0.1
},
{
"subid": "ymax",
"value": 0.2
},
{
"subid": "yavg",
"value": 0.1
},
{
"subid": "zmin",
"value": 0.01
},
{
"subid": "zmax",
"value": 0.03
},
{
"subid": "zavg",
"value": 0.02
}
]
}
Field | Value |
---|---|
Central Topic | ruter/{operatorId}/{vehicleId}/adt/v3/sensors/telemetry/01000009 |
Schema | telemetry.json |
Producer | PTO |
Consumer | Ruter BO |
Service Level | ✅ External API. Restrictions apply. Only backward compatible changes may happen within the major version. |
Measures the external temperature around the vehicle.
Sub ID | Name | Value Type | Description |
---|---|---|---|
N/A | Temperature outdoor | float | External temperature measurement |
Accepts the following message:
Schema for telemetry data, supporting both single-sensor and multi-sensor payloads.
{
"eventTimestamp": "2022-05-09T13:27:59.624Z",
"traceId": "3841a268-0c03-4588-b476-211be0f26a0d",
"messageNumber": 1,
"id": "01000009",
"payloads": [
{
"name": "Temperature outdoor",
"sensorId": "XB7F-9T2M-L4FC-3R8Q",
"value": 20.7
}
]
}
Field | Value |
---|---|
Central Topic | ruter/{operatorId}/{vehicleId}/adt/v3/sensors/telemetry/0100000A |
Schema | telemetry.json |
Producer | PTO |
Consumer | Ruter BO |
Service Level | ✅ External API. Restrictions apply. Only backward compatible changes may happen within the major version. |
Describes total energy consumption by the vehicle.
Energy consumed including HVAC
Value Type | Description |
---|---|
float | Accumulated energy consumption |
Accepts the following message:
Schema for telemetry data, supporting both single-sensor and multi-sensor payloads.
{
"eventTimestamp": "2022-05-09T13:27:59.624Z",
"traceId": "3841a268-0c03-4588-b476-211be0f26a0d",
"messageNumber": 1,
"id": "0100000A",
"payloads": [
{
"name": "Accumulated energy consumption",
"sensorId": "XB7F-9T2M-L4FC-3R8Q",
"value": 0.972
}
]
}
Field | Value |
---|---|
Central Topic | ruter/{operatorId}/{vehicleId}/adt/v3/sensors/charging |
Schema | charging.json |
Producer | PTO |
Consumer | Ruter BO |
Service Level | ✅ External API. Restrictions apply. Only backward compatible changes may happen within the major version. |
Describes the charging status and details of an electric vehicle. The message includes information about whether the vehicle is connected to a charging point, if it's actively charging, and the current charging effect in kilowatts (kW).
Message frequency:
Properties:
isConnected:
isCharging:
chargingEffect:
Accepts the following message:
Schema for vehicle charging data
{
"eventTimestamp": "2023-05-10T14:30:00Z",
"traceId": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"sensorId": "XB7F-9T2M-L4FC-3R8Q",
"messageNumber": 42,
"isConnected": true,
"isCharging": true,
"chargingEffect": 155.1
}
{
"eventTimestamp": "2023-05-10T14:30:00Z",
"traceId": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"sensorId": "XB7F-9T2M-L4FC-3R8Q",
"messageNumber": 42,
"isConnected": true,
"isCharging": false,
"chargingEffect": 0
}
{
"eventTimestamp": "2023-05-10T14:30:00Z",
"traceId": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"sensorId": "XB7F-9T2M-L4FC-3R8Q",
"messageNumber": 42,
"isConnected": false,
"isCharging": false,
"chargingEffect": 0
}
Field | Value |
---|---|
Central Topic | ruter/{operatorId}/{vehicleId}/adt/v3/sensors/temperature/water |
Schema | temperature-water.json |
Producer | PTO |
Consumer | Ruter BO |
Service Level | ✅ External API. Restrictions apply. Only backward compatible changes may happen within the major version. |
Describes the water temperature in Celsius, measured 1 meter below the water surface. The value should be a float with a resolution of 1°C or better.
Accepts the following message:
Schema for water temperature sensor data
{
"eventTimestamp": "2022-05-09T13:27:59.624Z",
"traceId": "3841a268-0c03-4588-b476-211be0f26a0d",
"messageNumber": 1,
"sensorId": "XB7F-9T2M-L4KP-3R8Q",
"value:": 18.5
}
Field | Value |
---|---|
Central Topic | ruter/{operatorId}/{vehicleId}/adt/v3/sensors/wind |
Schema | wind.json |
Producer | PTO |
Consumer | Ruter BO |
Service Level | ✅ External API. Restrictions apply. Only backward compatible changes may happen within the major version. |
Describes the wind speed and direction measured on the vehicle. The wind speed should be reported in meters per second ( m/s) as a float with a resolution of 0.1 m/s or better. The wind direction should be reported in degrees from true north (0-359°) as an integer.
Message frequency:
Properties:
speed
direction:
Accepts the following message:
Schema for wind speed and direction sensor data
{
"eventTimestamp": "2023-05-10T14:30:00Z",
"traceId": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"messageNumber": 42,
"sensorId": "XB7F-9T2M-L4FC-3R8Q",
"speed": 2.7,
"direction": 225
}
Field | Value |
---|---|
Central Topic | ruter/{operatorId}/{vehicleId}/adt/v3/di/override_attempt/destination_display |
Schema | destination-display-override.json |
Producer | PTO |
Consumer | Ruter BO |
Service Level | ✅ External API. Restrictions apply. Only backward compatible changes may happen within the major version. |
To construct a message, refer to the Available Destination Displays Message list and ensure that all fields provided in the list are included in the message.
If an entry contains publicCode, destination, and alternativeMessage, all three fields must be included exactly as specified in the list. The only additional fields you need to provide are a current eventTimestamp and a unique traceId.
Accepts the following message:
Describes a request from MADT or other GUI to manually override the information shown on the destination display. It is up to the presenting system to decide how and for how long the override will apply. A rule could be until next journey begins or a new override_attempt/destination_display is received. The topic could be blanked (provided with a zero-byte payload) to indicate that any overriding information is no longer valid and that the destination display can return to normal
{
"eventTimestamp": "2023-04-10T16:45:33.901Z",
"traceId": "3841a268-0c03-4588-b476-211be0f26a0d",
"publicCode": "250",
"destination": " Oslo bussterminal",
"alternativeMessage": " Ingen påstigning"
}
Field | Value |
---|---|
Central Topic | ruter/{operatorId}/{vehicleId}/adt/v3/pe/dpi/ack |
Schema | dpi-acknowledge.json |
Producer | PTO, Ruter DPI |
Consumer | Ruter DPI |
Service Level | ✅ External API. Restrictions apply. Only backward compatible changes may happen within the major version. |
The DPI Ack topic is used to inform the Ruter BO about the correct transfer and interpretation of messages to the vehicle.
Ruter shall receive an acknowledgment message for the following topics:
Topic | Responsible for producing ack |
---|---|
External display messages | PTO |
Audio messages | PTO |
Journey messages | DPI application |
NextStop messages | DPI application |
The ack message should be produced as soon as the message is received and validated. This is a confirmation that the system on board the vehicle have received the data and is capable of acting on it.
No confirmation message should be returned if the system is unable to playback the content. (e.g. invalid message format)
Accepts the following message:
The DPI Ack topic.
{
"eventTimestamp": "2017-10-31T12:45:50.749Z",
"traceId": "2ccf77aa-463f-4b98-ad19-61ec5d213e36",
"clientId": "8fac6c64la4cap4b21R90d",
"physicalId": "screen1",
"messageReceived": {
"topic": "pe/dpi/journey",
"eventTimestamp": "2017-10-31T12:45:50.749Z",
"traceId": "b88aaf6a-b15b-415a-8c44-ac7ad42de59e"
}
}
Field | Value |
---|---|
Central Topic | ruter/{operatorId}/{vehicleId}/adt/v3/pe/dpi/diagnostics |
Schema | dpi-diagnostics.json |
Producer | Ruter DPI |
Consumer | Ruter DPI |
Service Level | ⛔ Ruter internal API. No restrictions apply. Api may be removed or modified freely by Ruter within major version. |
Report to PTA BO about a screen.
The DPI application itself produces diagnostic messages. The payload is defined as an object with no pre-defined structure to provide flexibility.
Accepts the following message:
{
"eventTimestamp": "2019-10-09T10:16:07.000Z",
"traceId": "3841a268-0c03-4588-b476-211be0f26a0d",
"clientId": "638f47b7-d0d4-4043-9125-2dd8db6b8a84",
"type": "HEARTBEAT",
"payload": {
"client": {
"version": "2019-08-16T08-11-58Z",
"display": "1",
"windowHeight": 1080,
"windowWidth": 1920
},
"routeId": "RUT:Route:0-54012"
}
}
{
"eventTimestamp": "2018-10-31T12:45:50.010Z",
"traceId": "3841a268-0c03-4588-b476-211be0f26a0d",
"clientId": "ad71dba8-c881-11e8-a8d5-f2801f1b9fd1",
"type": "STATUS",
"payload": {
"version": {
"application": "2018-10-03T12:45:50Z",
"media": "2018-10-05T12:45:50Z"
},
"display": {
"type": "1",
"res": {
"height": 360,
"width": 1080
}
},
"stats": {
"logEntries": {
"error": 0,
"warning": 14,
"info": 123
},
"lastLoaded": "2018-10-31T12:45:45Z",
"pingFreq": 3600,
"usedStorage": "124kb"
}
}
}
Field | Value |
---|---|
Central Topic | ruter/{operatorId}/{vehicleId}/adt/v3/pe/sales/diagnostics |
Schema | sales-diagnostics.json |
Producer | Betjent salg |
Consumer | Betjent salg |
Service Level | ⛔ Ruter internal API. No restrictions apply. Api may be removed or modified freely by Ruter within major version. |
Diagnostics message generated by RuterSalg.
This topic is intended for applications interested in health status for the RuterSalg application on each vehicle. The health status is intended both as a real time surveillance of health status for each individual vehicle as well as for aggregating data per operator to see larger, more general issues. The topic can also, when enriched by other data, determine whether or not RuterSalg was used and working on a specific departure.
Accepts the following message:
{
"eventTimestamp": "2020-04-28T13:49:50.814Z",
"traceId": "3841a268-0c03-4588-b476-211be0f26a0d",
"spanId": "76867064-33bb-4c3a-b692-1b688253441a",
"metrics": {
"nfcStatus": {
"interfaceType": "usb",
"connected": true,
"errorMessage": ""
},
"printerStatus": {
"connected": false,
"errorMessage": "Connection failed with error code 12345"
},
"internetConnectionStatus": {
"connected": true,
"errorMessage": ""
},
"loggedIn": false
},
"context": {
"vehicleRef": "XNL404P500D041745",
"lineRef": "RUT:Line:81",
"journeyRef": "42911-2020-05-25T16:42:00+02:00",
"stopPlaceId": "NSR:StopPlace:3996",
"tariffZone": "RUT:TariffZone:227",
"trigger": "StopPlace",
"appVersion": "2.7.1",
"userId": "nor12345"
}
}
Field | Value |
---|---|
Central Topic | ruter/{operatorId}/{vehicleId}/adt/v3/pe/cardreader_diagnostics/vix/{deviceRef} |
Schema | vix-cardreader_diagnostics.json |
Producer | VIX |
Consumer | Ruter BackOffice |
Service Level | ⛔ Ruter internal API. No restrictions apply. Api may be removed or modified freely by Ruter within major version. |
Diagnostics message sent from any Vix-validator running Ruter-firmware in the vehicle. Can be used by both PTA and PTO to monitor the operational status of these units.
An unique ID of the unit.
Accepts the following message:
{
"eventTimestamp": "2022-05-24T07:00:25Z",
"traceId": "3841a268-0c03-4588-b476-211be0f26a0d",
"deviceRef": "RUT1234",
"inService": true
}
Field | Value |
---|---|
Central Topic | ruter/{operatorId}/{vehicleId}/adt/v3/pe/sales/sla |
Schema | sales-sla.json |
Producer | Betjent salg |
Consumer | Betjent salg |
Service Level | ✅ External API. Restrictions apply. Only backward compatible changes may happen within the major version. |
SLA message generated by Betjent salg (RuterSalg app and clones).
The topic is used in SLA measurements. The 'metrics' section contains the SLA-related fields, while the 'context' section contains meta data related to a potential breach.
Accepts the following message:
{
"eventTimestamp": "2020-04-28T13:49:50.814Z",
"traceId": "c6494c5c-eff7-45ec-a8d9-722a387eefb2",
"spanId": "76867064-33bb-4c3a-b692-1b688253441a:bdda2da8-72e7-467e-940c-21173b4aa3d9",
"metrics": {
"loggedIn": true
},
"context": {
"vehicleRef": "XNL404P500D041745",
"lineRef": "RUT:Line:81",
"progressRef": "3841a268-0c03-4588-b476-211be0f26a0d",
"assignmentRef": "bdc4e54425fb418fa7ca5ea769d18416",
"actualCallRef": "bd58550c-bd45-4047-adf5-a7f8cab3ff05",
"chainId": "130",
"journeyRef": "42911-2020-05-25T16:42:00+02:00",
"stopPlaceId": "NSR:StopPlace:3996",
"tariffZone": "RUT:TariffZone:227",
"appVersion": "2.7.1",
"userId": "nor12345",
"adtApiVersion": "3"
}
}
Field | Value |
---|---|
Central Topic | {operatorId}/ruter/{vehicleId}/adt/v3/pe/sales/current_stop |
Schema | sales-current_stop.json |
Producer | Betjent salg |
Consumer | Betjent salg |
Service Level | ⛔ Ruter internal API. No restrictions apply. Api may be removed or modified freely by Ruter within major version. |
Used to alert the RuterSalg app about the current stop. This message is triggered when the Progress entity determines that the bus is arriving at the quay, meaning it is maximum 35 meters from the quay, approaching it. Contains information about the zone the current stop belongs to.
The message also contains information about the NEXT stop and its zone. This is used to determine if the bus is approaching a zone border. One use for this is whether or not to sell a "smart ticket" if the passenger has funds in their travel purse.
Accepts the following message:
{
"eventTimestamp": "2020-04-28T13:49:50.814Z",
"traceId": "3841a268-0c03-4588-b476-211be0f26a0d",
"spanId": "76867064-33bb-4c3a-b692-1b688253441a",
"progressRef": "3841a268-0c03-4588-b476-211be0f26a0d",
"actualCallRef": "3791a268-0c03-9876-b476-289be0f26ifj",
"journeyRef": "42911-2020-05-25T16:42:00+02:00",
"vehicleRef": "VNE5248P50M039131",
"chainId": "140",
"lineId": "RUT:Line:140",
"blockId": "44f45aeb-7e7a-456f-b326-0546e988ae00",
"quayId": "NSR:Quay:17023",
"stopPlaceId": "NSR:StopPlace:4000",
"tariffZone": "RUT:TariffZone:227",
"stopPlaceIdNextStop": "NSR:StopPlace:4001",
"tariffZoneNextStop": "RUT:TariffZone:227"
}
Field | Value |
---|---|
Central Topic | {operatorId}/ruter/{vehicleId}/adt/v3/operational/assignment/attempt/response |
Schema | assignment-attempt-response.json |
Producer | Ruter Assignment |
Consumer | PTO |
Service Level | ✅ External API. Restrictions apply. Only backward compatible changes may happen within the major version. |
When an AssignmentAttemptRequest is made, and Ruter has finished processing, the results are presented as AssignmentAttemptResponse. The response contains:
result
to indicate if processing by Ruter has been successfully processed, or not. See the schema for possible codes.state
as a representation of the Assignment state as seen by Ruter after processing is completed.Indicates what state the vehicle has in the RUTER systems. A vehicle can be either assigned or unassigned. In addition the state shows what code is applied
In addition to the codes supplied in the assignment attempts for signOn, signOff and update, RUTER can apply some codes.
REPLACED
When a vehicle attempts a SignOn with the code REPLACED
. Any other vehicle signed on to the same vehicle task and not marked as EXTRA
will be automatically signed off with the code REPLACED
.EXPIRED
Given a successfull signOn, if the vehicle is not signed off before two hours after the last planned arrival. The veicle will be automatically signed off with the code EXPIRED
.Accepts the following message:
A response to an assignment attempt request
{
"eventTimestamp": "2023-04-27T12:40:12.731913Z",
"traceId": "083b71c4-e417-11ed-b5ea-0242ac120003",
"result": {
"code": "PLANNED",
"reason": "OK",
"description": "Attempt processed without errors"
},
"state": {
"assigned": true,
"code": "PLANNED",
"vehicleTaskId": "99991",
"operatingDate": "2023-04-27",
"firstJourneyId": "RUT:DeadRun:123234345",
"journeys": [
{
"journeyId": "RUT:DeadRun:123234345",
"lineId": "RUT:Line:0",
"datedServiceJourneyId": "RUT:DatedServiceJourney:54785478",
"vehicleJourneyId": "504",
"serviceWindow": {
"firstDepartureDateTime": "2024-09-11T12:34:00Z",
"lastArrivalDateTime": "2024-09-11T12:54:00Z"
}
},
{
"journeyId": "RUT:ServiceJourney:987654321",
"lineId": "RUT:Line:1337",
"datedServiceJourneyId": "RUT:DatedServiceJourney:12541554",
"vehicleJourneyId": "505",
"serviceWindow": {
"firstDepartureDateTime": "2024-09-11T12:57:00Z",
"lastArrivalDateTime": "2024-09-11T13:30:00Z"
}
}
]
}
}
Field | Value |
---|---|
Central Topic | {operatorId}/ruter/{vehicleId}/adt/v3/operational/assignment/status |
Schema | assignment-status.json |
Producer | Ruter Assignment |
Consumer | PTO |
Service Level | ✅ External API. Restrictions apply. Only backward compatible changes may happen within the major version. |
Current Assignment State for a vehicle as seen by Ruter. The topic is retained
so the current status is persisted on the mqtt-broker.
The topic is updated when an AssignmentAttemptRequest is made, processing is complete and/or the state has changed.
Note that Ruter could, in case of operational deviations, or missing sign offs, update the assignment. This update will be reflected here.
Accepts the following message:
Assignment status for the vehicle as recorded by Ruter
{
"eventTimestamp": "2023-04-27T12:40:12.831913Z",
"traceId": "083b71c4-e417-11ed-b5ea-0242ac120003",
"state": {
"assigned": true,
"code": "PLANNED",
"vehicleTaskId": "99991",
"operatingDate": "2023-04-27"
}
}
Field | Value |
---|---|
Central Topic | {operatorId}/ruter/back_office/adt/v3/operational/assignment/omit/response |
Schema | assignment-omit-response.json |
Producer | Ruter Assignment |
Consumer | PTO |
Service Level | ✅ External API. Restrictions apply. Only backward compatible changes may happen within the major version. |
When an AssignmentAttemptRequest is made, and Ruter has finished processing, the results are presented as AssignmentAttemptResponse. The response contains:
result
to indicate if processing by Ruter has been successfully processed, or not. See the schema for possible codes.Accepts the following message:
A response to an assignment omit request
{
"eventTimestamp": "2023-04-27T12:40:12.731913Z",
"traceId": "083b71c4-e417-11ed-b5ea-0242ac120003",
"result": {
"code": "OK",
"reason": "OK",
"description": "The omission is successfully registered"
}
}
Field | Value |
---|---|
Central Topic | {operatorId}/ruter/{vehicleId}/adt/v3/di/available_destination_displays |
Schema | available-destination-displays.json |
Producer | Ruter DPI |
Consumer | PTO |
Service Level | ✅ External API. Restrictions apply. Only backward compatible changes may happen within the major version. |
Provides a list of available destination displays for a vehicle. The list should be used for external displays, in case the vehicle has lost connection to the backoffice.
Accepts the following message:
{
"eventTimestamp": "2017-10-31T12:45:50.749Z",
"traceId": "3841a268-0c03-4588-b476-211be0f26a0d",
"availableDestinationDisplays": [
{
"publicCode": "20",
"destination": " Galgeberg"
},
{
"destination": " Ikke i trafikk "
},
{
"publicCode": "N160",
"destination": " Oslo Bussterminal",
"alternativeMessage": " Ingen påstigning"
}
]
}
Field | Value |
---|---|
Central Topic | {operatorId}/ruter/{vehicleId}/adt/v3/di/operational_message_to_driver |
Schema | operational-message-to-driver.json |
Producer | - |
Consumer | PTO |
Service Level | ✅ External API. Restrictions apply. Only backward compatible changes may happen within the major version. |
Provides an operational message directed to the driver onboard this vehicle. Direction: From back-office to driver.
Accepts the following message:
Operational message to driver
{
"traceId": "3841a268-0c03-4588-b476-211be0f26a0d",
"heading": "Emergency repair",
"body": "Service personnel will meet at terminus to adjust door mechanism.",
"senderRef": "Garage maintenance",
"eventTimestamp": "2017-10-31T12:45:50.749Z"
}
Field | Value |
---|---|
Central Topic | {operatorId}/ruter/{vehicleId}/adt/v3/pe/audio |
Schema | audio.json |
Producer | Ruter DPI |
Consumer | PTO |
Service Level | ✅ External API. Restrictions apply. Only backward compatible changes may happen within the major version. |
The topic used for transmitting these audio messages is dedicated exclusively to audio playback through the vehicle's speaker system. The audio messages may contain an array of sound clips that should be played sequentially as they were received.
In some cases, multiple speaker groups may be targeted by the same audio message.
Accepts the following message:
This topic provides an audio message intended for passengers onboard the vehicle that should be played on speaker(s) defined in the speaker property of the payload.
{
"traceId": "3841a268-0c03-4588-b476-211be0f26a0d",
"eventTimestamp": "2018-11-13T11:40:02.749Z",
"expiryDateTime": "2018-11-13T08:40:32.249Z",
"preferredStartDateTime": "2018-11-13T08:39:32.749Z",
"ref": "RUT:StopPlace:03012453",
"audio": [
{
"encoding": "OPUS",
"contentUrl": "http://webserver.local/resources/safety_long.opus",
"speakers": {
"INTERNAL": 70
}
},
{
"encoding": "MP3",
"content": "SUQzBAAAAAAAI1RTU0UAAAAPAAADTGF2ZjU3...",
"speakers": {
"INTERNAL": 70
}
}
]
}
{
"traceId": "3841a268-0c03-4588-b476-211be0f26a0d",
"eventTimestamp": "2018-11-13T11:40:02.749Z",
"expiryDateTime": "2018-11-13T08:40:32.249Z",
"preferredStartDateTime": "2018-11-13T08:39:32.749Z",
"ref": "RUT:StopPlace:03012453",
"audio": [
{
"encoding": "MP3",
"content": "SUQzBAAAAAAAI1RTU0UAAAAPAAADTGF2ZjU3...",
"speakers": {
"INTERNAL": 70
}
},
{
"encoding": "MP3",
"content": "SUQzBAAAAAAAI1RTU0UAAAAPAAADTGF2ZjU3...",
"speakers": {
"INTERNAL": 70,
"EXTERNAL": 40
}
}
]
}
Field | Value |
---|---|
Central Topic | {operatorId}/ruter/{vehicleId}/adt/v3/pe/dpi/journey |
Schema | dpi-journey.json |
Producer | Ruter DPI |
Consumer | Ruter DPI |
Service Level | ⛔ Ruter internal API. No restrictions apply. Api may be removed or modified freely by Ruter within major version. |
Message containing the stops included in the journey, connections to other lines, positions ++.
Accepts the following message:
List of stops for current journey in block
{
"eventTimestamp": "2017-10-31T08:38:02.749Z",
"traceId": "3841a268-0c03-4588-b476-211be0f26a0d",
"journeyId": "RUT:ServiceJourney:31-117215-13227462",
"journeyRef": "31001-2019-02-17T21:55:00+01:00",
"route": {
"id": "RUT:Route:31-1041",
"name": "Fornebu vest-Tonsenhagen",
"line": {
"id": "RUT:Line:31",
"name": "Snarøya - Fornebu - Tonsenhagen - Grorud",
"publicCode": "31"
},
"journeyPatternRef": "RUT:JourneyPattern:011579",
"stopPlaces": [
{
"id": "RUT:StopPlace:02190017",
"name": "Fornebu vest",
"location": {
"latitude": 12.33345,
"longitude": 12.33345
},
"tariffZones": [
"OST:TariffZone:227",
"RUT:TariffZone:1"
]
},
{
"id": "RUT:StopPlace:03010013",
"name": "Jernbanetorget",
"location": {
"latitude": 12.33345,
"longitude": 12.33345
},
"tariffZones": [
"RUT:TariffZone:1"
]
}
]
}
}
Field | Value |
---|---|
Central Topic | {operatorId}/ruter/{vehicleId}/adt/v3/pe/dpi/nextstop |
Schema | dpi-nextstop.json |
Producer | Ruter DPI |
Consumer | Ruter DPI |
Service Level | ⛔ Ruter internal API. No restrictions apply. Api may be removed or modified freely by Ruter within major version. |
Next stop on the buss route after leaving a stop.
Accepts the following message:
Notification that vehicle has a new next stop
{
"eventTimestamp": "2017-10-31T08:38:02.749Z",
"traceId": "3841a268-0c03-4588-b476-211be0f26a0d",
"stopPlaceId": "RUT:StopPlace:03012453",
"index": 0
}
Field | Value |
---|---|
Central Topic | {operatorId}/ruter/{vehicleId}/adt/v3/pe/dpi/eta |
Schema | dpi-eta.json |
Producer | Ruter DPI |
Consumer | Ruter DPI |
Service Level | ⛔ Ruter internal API. No restrictions apply. Api may be removed or modified freely by Ruter within major version. |
Estimated arrival at the remaining stops.
Accepts the following message:
Estimated time of arrival for future stops on a journey
{
"eventTimestamp": "2017-10-31T08:38:02.749Z",
"traceId": "3841a268-0c03-4588-b476-211be0f26a0d",
"estimatedCalls": [
{
"eta": "2017-10-13T12:27:04.416Z",
"stopPlaceId": "RUT:StopPlace:03010510",
"text": "Nå"
},
{
"eta": "2017-10-13T12:27:04.416Z",
"stopPlaceId": "RUT:StopPlace:03010511",
"text": "1 Min"
}
]
}
Field | Value |
---|---|
Central Topic | {operatorId}/ruter/{vehicleId}/adt/v3/pe/dpi/externaldisplay |
Schema | dpi-externaldisplay.json |
Producer | Ruter DPI |
Consumer | PTO |
Service Level | ✅ External API. Restrictions apply. Only backward compatible changes may happen within the major version. |
Message to be shown on the external destination display. Usually line number (publicCode) and routeName, with support for alternative message.
Accepts the following message:
Notification that the external displays should show new destination information
{
"eventTimestamp": "2021-03-04T15:08:07.519Z",
"traceId": "3841a268-0c03-4588-b476-211be0f26a0d",
"destination": "Ikke i trafikk"
}
{
"eventTimestamp": "2017-10-31T08:38:02.749Z",
"traceId": "3841a268-0c03-4588-b476-211be0f26a0d",
"publicCode": "20",
"destination": "Galgeberg",
"alternativeMessage": "Duis aute irure dolor"
}
Field | Value |
---|---|
Central Topic | {operatorId}/ruter/{vehicleId}/adt/v3/pe/dpi/pa |
Schema | dpi-pa.json |
Producer | Ruter DPI |
Consumer | Ruter DPI |
Service Level | ⛔ Ruter internal API. No restrictions apply. Api may be removed or modified freely by Ruter within major version. |
Message to be shown on internal displays. May contain references to videos, html, images, text etc.
Accepts the following message:
{
"eventTimestamp": "2022-05-09T13:27:59.624Z",
"traceId": "3841a268-0c03-4588-b476-211be0f26a0d",
"ref": "757fd8b4-2e57-4ad3-9aee-76e793c514d9",
"content": [
{
"type": "IMAGE",
"duration": 5,
"src": "../media/logo.png"
},
{
"type": "HTML",
"duration": 10,
"src": "../media/kampanje.html"
}
]
}
{
"eventTimestamp": "2022-05-09T13:27:59.624Z",
"traceId": "3841a268-0c03-4588-b476-211be0f26a0d",
"ref": "757fd8b4-2e57-4ad3-9aee-76e793c514d9",
"content": [
{
"type": "TEXT",
"duration": 10,
"colorScheme": "INFO",
"icon": "ARROW_UP",
"iconAnchor": "LEFT",
"message": {
"no": {
"title": "Tittel på melding",
"paragraphs": [
"En tekst",
"En annen tekst"
]
}
}
}
]
}
{
"eventTimestamp": "2022-05-09T13:27:59.624Z",
"traceId": "3841a268-0c03-4588-b476-211be0f26a0d",
"ref": "CLEAR_SCREEN"
}
{
"eventTimestamp": "2022-05-09T13:27:59.624Z",
"traceId": "3841a268-0c03-4588-b476-211be0f26a0d",
"ref": "757fd8b4-2e57-4ad3-9aee-76e793c514d9",
"content": [
{
"type": "VIDEO",
"duration": 10,
"src": "../media/1080p_Ruter_Takk.mp4"
}
]
}
Field | Value |
---|---|
Central Topic | {operatorId}/ruter/{vehicleId}/adt/v3/pe/dpi/arriving |
Schema | dpi-arriving.json |
Producer | Ruter DPI |
Consumer | Ruter DPI |
Service Level | ⛔ Ruter internal API. No restrictions apply. Api may be removed or modified freely by Ruter within major version. |
Notice to passengers that the bus is approaching a stop.
Accepts the following message:
For display of arriving information to passengers
{
"eventTimestamp": "2017-10-31T08:38:02.749Z",
"traceId": "3841a268-0c03-4588-b476-211be0f26a0d",
"expiryTimestamp": "2017-10-31T08:38:47.749Z",
"ref": "RUT:StopPlace:03012453",
"zoneId": "2b-vest",
"message": {
"no": {
"text": "Ankommer Jernbanetorget"
},
"en": {
"text": "Arriving at Jerbanetorget"
}
}
}
Field | Value |
---|---|
Central Topic | {operatorId}/ruter/{vehicleId}/adt/v3/pe/dpi/connections |
Schema | dpi-connections.json |
Producer | Ruter DPI |
Consumer | Ruter DPI |
Service Level | ⛔ Ruter internal API. No restrictions apply. Api may be removed or modified freely by Ruter within major version. |
List of connections for the remaining stops on a journey with expected departures.
Accepts the following message:
This schema defines the connection message sent as an MQTT message to buses
{
"eventTimestamp": "2017-10-31T12:45:50.749Z",
"traceId": "3841a268-0c03-4588-b476-211be0f26a0d",
"expiryTimestamp": "2020-03-16T14:35:08.762206Z",
"nextStop": {
"stopPlaceId": "NSR:StopPlace:6498",
"quayId": "NSR:Quay:11950"
},
"journeyId": "RUT:ServiceJourney:60-138542-15631728",
"routeId": "RUT:Route:60-4",
"calls": [
{
"name": "Tøyenkirken",
"stopPlaceId": "NSR:StopPlace:6498",
"quayId": "NSR:Quay:11950",
"index": 4,
"connections": []
},
{
"name": "Tøyen skole",
"stopPlaceId": "NSR:StopPlace:6480",
"quayId": "NSR:Quay:11910",
"index": 5,
"connections": []
},
{
"name": "Tøyen",
"stopPlaceId": "NSR:StopPlace:6478",
"quayId": "NSR:Quay:11908",
"index": 6,
"connections": [
{
"line": {
"id": "RUT:Line:20",
"publicCode": "20",
"transportMode": "bus"
},
"direction": "1",
"departures": [
{
"destination": "Galgeberg",
"text": "5 min",
"departureTime": "2020-03-16T14:35:37Z",
"delay": "PT1M37S",
"journeyId": "RUT:ServiceJourney:20-131531-15685688"
},
{
"destination": "Galgeberg",
"text": "10 min",
"departureTime": "2020-03-16T14:40:58Z",
"delay": "PT1M58S",
"journeyId": "RUT:ServiceJourney:20-131531-15685689"
},
{
"destination": "Galgeberg",
"text": "15:45",
"departureTime": "2020-03-16T14:45:09Z",
"delay": "PT1M9S",
"journeyId": "RUT:ServiceJourney:20-131531-15685690"
}
]
},
{
"line": {
"id": "RUT:Line:20",
"publicCode": "20",
"transportMode": "bus"
},
"quay": {
"id": "NSR:Quay:11906",
"description": "i Kjølberggata"
},
"direction": "2",
"departures": [
{
"destination": "Skøyen",
"text": "3 min",
"departureTime": "2020-03-16T14:34:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:20-131531-15685534"
},
{
"destination": "Skøyen",
"text": "8 min",
"departureTime": "2020-03-16T14:39:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:20-131531-15685535"
},
{
"destination": "Skøyen",
"text": "13 min",
"departureTime": "2020-03-16T14:44:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:20-131531-15685536"
}
]
}
]
},
{
"name": "Brinken",
"stopPlaceId": "NSR:StopPlace:6562",
"quayId": "NSR:Quay:12119",
"index": 7,
"connections": []
},
{
"name": "Kampen kirke",
"stopPlaceId": "NSR:StopPlace:6564",
"quayId": "NSR:Quay:12123",
"index": 8,
"connections": []
},
{
"name": "Kampen park",
"stopPlaceId": "NSR:StopPlace:6571",
"quayId": "NSR:Quay:12135",
"index": 9,
"connections": []
},
{
"name": "Ensjøveien",
"stopPlaceId": "NSR:StopPlace:6046",
"quayId": "NSR:Quay:11097",
"index": 10,
"connections": []
},
{
"name": "Tøyen stasjon",
"stopPlaceId": "NSR:StopPlace:6044",
"quayId": "NSR:Quay:11092",
"index": 11,
"connections": []
},
{
"name": "Hasle kirke",
"stopPlaceId": "NSR:StopPlace:6049",
"quayId": "NSR:Quay:11101",
"index": 12,
"connections": []
},
{
"name": "Hasle",
"stopPlaceId": "NSR:StopPlace:6031",
"quayId": "NSR:Quay:11076",
"index": 13,
"connections": [
{
"line": {
"id": "RUT:Line:21",
"publicCode": "21",
"transportMode": "bus"
},
"quay": {
"id": "NSR:Quay:11069",
"publicCode": "D"
},
"direction": "1",
"departures": [
{
"destination": "Helsfyr T",
"text": "13 min",
"departureTime": "2020-03-16T14:44:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:21-131531-15685155"
},
{
"destination": "Helsfyr T",
"text": "15:49",
"departureTime": "2020-03-16T14:49:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:21-131531-15685156"
},
{
"destination": "Helsfyr T",
"text": "15:54",
"departureTime": "2020-03-16T14:54:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:21-131531-15685157"
}
]
},
{
"line": {
"id": "RUT:Line:21",
"publicCode": "21",
"transportMode": "bus"
},
"quay": {
"id": "NSR:Quay:11070",
"publicCode": "C"
},
"direction": "2",
"departures": [
{
"destination": "Tjuvholmen",
"text": "13 min",
"departureTime": "2020-03-16T14:44:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:21-131531-15685274"
},
{
"destination": "Tjuvholmen",
"text": "15:49",
"departureTime": "2020-03-16T14:49:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:21-131531-15685275"
},
{
"destination": "Tjuvholmen",
"text": "15:54",
"departureTime": "2020-03-16T14:54:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:21-131531-15685276"
}
]
},
{
"line": {
"id": "RUT:Line:28",
"publicCode": "28",
"transportMode": "bus"
},
"quay": {
"id": "NSR:Quay:11075",
"publicCode": "B"
},
"direction": "2",
"departures": [
{
"destination": "Fornebu",
"text": "15:47",
"departureTime": "2020-03-16T14:47:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:28-131531-15685026"
},
{
"destination": "Fornebu",
"text": "15:54",
"departureTime": "2020-03-16T14:54:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:28-131531-15685039"
},
{
"destination": "Fornebu",
"text": "16:02",
"departureTime": "2020-03-16T15:02:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:28-131531-15685027"
}
]
},
{
"line": {
"id": "RUT:Line:28",
"publicCode": "28",
"transportMode": "bus"
},
"direction": "1",
"departures": [
{
"destination": "Økern T",
"text": "15:48",
"departureTime": "2020-03-16T14:48:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:28-131531-15685014"
},
{
"destination": "Økern T",
"text": "15:57",
"departureTime": "2020-03-16T14:57:43Z",
"delay": "PT1M43S",
"journeyId": "RUT:ServiceJourney:28-131531-15685006"
},
{
"destination": "Økern T",
"text": "16:03",
"departureTime": "2020-03-16T15:03:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:28-131531-15685015"
}
]
}
]
},
{
"name": "Haslevangen",
"stopPlaceId": "NSR:StopPlace:6036",
"quayId": "NSR:Quay:11080",
"index": 14,
"connections": [
{
"line": {
"id": "RUT:Line:28",
"publicCode": "28",
"transportMode": "bus"
},
"direction": "1",
"departures": [
{
"destination": "Økern T",
"text": "15:49",
"departureTime": "2020-03-16T14:49:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:28-131531-15685014"
},
{
"destination": "Økern T",
"text": "15:58",
"departureTime": "2020-03-16T14:58:43Z",
"delay": "PT1M43S",
"journeyId": "RUT:ServiceJourney:28-131531-15685006"
},
{
"destination": "Økern T",
"text": "16:04",
"departureTime": "2020-03-16T15:04:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:28-131531-15685015"
}
]
},
{
"line": {
"id": "RUT:Line:28",
"publicCode": "28",
"transportMode": "bus"
},
"quay": {
"id": "NSR:Quay:11079"
},
"direction": "2",
"departures": [
{
"destination": "Fornebu",
"text": "15:46",
"departureTime": "2020-03-16T14:46:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:28-131531-15685026"
},
{
"destination": "Fornebu",
"text": "15:53",
"departureTime": "2020-03-16T14:53:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:28-131531-15685039"
},
{
"destination": "Fornebu",
"text": "16:01",
"departureTime": "2020-03-16T15:01:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:28-131531-15685027"
}
]
}
]
},
{
"name": "Økern",
"stopPlaceId": "NSR:StopPlace:5907",
"quayId": "NSR:Quay:10835",
"index": 15,
"connections": [
{
"line": {
"id": "RUT:Line:23",
"publicCode": "23",
"transportMode": "bus"
},
"quay": {
"id": "NSR:Quay:10834",
"publicCode": "B"
},
"direction": "1",
"departures": [
{
"destination": "Simensbråten",
"text": "15:55",
"departureTime": "2020-03-16T14:55:18Z",
"delay": "PT18S",
"journeyId": "RUT:ServiceJourney:23-137908-16794834"
},
{
"destination": "Simensbråten",
"text": "16:05",
"departureTime": "2020-03-16T15:05:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:23-137908-16794835"
},
{
"destination": "Simensbråten",
"text": "16:15",
"departureTime": "2020-03-16T15:15:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:23-137908-16794836"
}
]
},
{
"line": {
"id": "RUT:Line:23",
"publicCode": "23",
"transportMode": "bus"
},
"quay": {
"id": "NSR:Quay:10832",
"publicCode": "A"
},
"direction": "2",
"departures": [
{
"destination": "Lysaker",
"text": "16:06",
"departureTime": "2020-03-16T15:06:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:23-137908-16794741"
},
{
"destination": "Lysaker",
"text": "15:56",
"departureTime": "2020-03-16T14:56:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:23-137908-16794740"
},
{
"destination": "Lysaker",
"text": "16:16",
"departureTime": "2020-03-16T15:16:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:23-137908-16794742"
}
]
},
{
"line": {
"id": "RUT:Line:24",
"publicCode": "24",
"transportMode": "bus"
},
"quay": {
"id": "NSR:Quay:10834",
"publicCode": "B"
},
"direction": "1",
"departures": [
{
"destination": "Brynseng T",
"text": "15:55",
"departureTime": "2020-03-16T14:55:46Z",
"delay": "PT5M46S",
"journeyId": "RUT:ServiceJourney:24-137908-16794944"
},
{
"destination": "Brynseng T",
"text": "16:00",
"departureTime": "2020-03-16T15:00:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:24-137908-16794945"
},
{
"destination": "Brynseng T",
"text": "16:10",
"departureTime": "2020-03-16T15:10:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:24-137908-16794946"
}
]
},
{
"line": {
"id": "RUT:Line:24",
"publicCode": "24",
"transportMode": "bus"
},
"quay": {
"id": "NSR:Quay:10832",
"publicCode": "A"
},
"direction": "2",
"departures": [
{
"destination": "Fornebu",
"text": "16:11",
"departureTime": "2020-03-16T15:11:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:24-137908-16794982"
},
{
"destination": "Fornebu",
"text": "16:41",
"departureTime": "2020-03-16T15:41:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:24-137908-16794985"
},
{
"destination": "Fornebu",
"text": "16:31",
"departureTime": "2020-03-16T15:31:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:24-137908-16794984"
}
]
},
{
"line": {
"id": "RUT:Line:28",
"publicCode": "28",
"transportMode": "bus"
},
"quay": {
"id": "NSR:Quay:10832",
"publicCode": "A"
},
"direction": "2",
"departures": [
{
"destination": "Fornebu",
"text": "16:43",
"departureTime": "2020-03-16T15:43:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:28-131531-15685030"
},
{
"destination": "Fornebu",
"text": "16:05",
"departureTime": "2020-03-16T15:05:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:28-131531-15685040"
},
{
"destination": "Fornebu",
"text": "16:35",
"departureTime": "2020-03-16T15:35:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:28-131531-15685042"
}
]
},
{
"line": {
"id": "RUT:Line:345",
"publicCode": "345",
"transportMode": "bus"
},
"direction": "2",
"departures": [
{
"destination": "Vestvollen",
"text": "15:50",
"departureTime": "2020-03-16T14:50:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:345-138458-16752823"
},
{
"destination": "Vestvollen",
"text": "16:00",
"departureTime": "2020-03-16T15:00:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:345-138458-16752806"
},
{
"destination": "Vestvollen",
"text": "16:01",
"departureTime": "2020-03-16T15:01:22Z",
"delay": "PT21M22S",
"journeyId": "RUT:ServiceJourney:345-138458-16752805"
}
]
},
{
"line": {
"id": "RUT:Line:67",
"publicCode": "67",
"transportMode": "bus"
},
"direction": "1",
"departures": [
{
"destination": "Lørenskog sentrum",
"text": "15:51",
"departureTime": "2020-03-16T14:51:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:67-138542-15631987"
},
{
"destination": "Lørenskog sentrum",
"text": "16:01",
"departureTime": "2020-03-16T15:01:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:67-138542-15631988"
},
{
"destination": "Lørenskog sentrum",
"text": "16:11",
"departureTime": "2020-03-16T15:11:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:67-138542-15631989"
}
]
}
]
},
{
"name": "Økern næringspark",
"stopPlaceId": "NSR:StopPlace:5916",
"quayId": "NSR:Quay:10849",
"index": 16,
"connections": []
},
{
"name": "Lånekassen",
"stopPlaceId": "NSR:StopPlace:5918",
"quayId": "NSR:Quay:10852",
"index": 17,
"connections": []
},
{
"name": "Nedre Risløkka",
"stopPlaceId": "NSR:StopPlace:5928",
"quayId": "NSR:Quay:10872",
"index": 18,
"connections": []
},
{
"name": "Rabbeveien",
"stopPlaceId": "NSR:StopPlace:5930",
"quayId": "NSR:Quay:10875",
"index": 19,
"connections": []
},
{
"name": "Anton Tschudis vei",
"stopPlaceId": "NSR:StopPlace:5932",
"quayId": "NSR:Quay:10878",
"index": 20,
"connections": []
},
{
"name": "Kroklia",
"stopPlaceId": "NSR:StopPlace:5941",
"quayId": "NSR:Quay:10894",
"index": 21,
"connections": []
},
{
"name": "Øvre Risløkka",
"stopPlaceId": "NSR:StopPlace:5943",
"quayId": "NSR:Quay:10898",
"index": 22,
"connections": []
},
{
"name": "Økernbråten",
"stopPlaceId": "NSR:StopPlace:5945",
"quayId": "NSR:Quay:10902",
"index": 23,
"connections": [
{
"line": {
"id": "RUT:Line:58",
"publicCode": "58",
"transportMode": "bus"
},
"quay": {
"id": "NSR:Quay:10901"
},
"direction": "1",
"departures": [
{
"destination": "Tveita T",
"text": "15:57",
"departureTime": "2020-03-16T14:57:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:58-138542-17261911"
},
{
"destination": "Tveita T",
"text": "16:12",
"departureTime": "2020-03-16T15:12:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:58-138542-17261912"
},
{
"destination": "Tveita T",
"text": "16:27",
"departureTime": "2020-03-16T15:27:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:58-138542-17261913"
}
]
}
]
},
{
"name": "Linne hotell",
"stopPlaceId": "NSR:StopPlace:5952",
"quayId": "NSR:Quay:10916",
"index": 24,
"connections": []
},
{
"name": "Linderud T",
"stopPlaceId": "NSR:StopPlace:5950",
"quayId": "NSR:Quay:10911",
"index": 25,
"connections": []
},
{
"name": "Veitvetstubben",
"stopPlaceId": "NSR:StopPlace:5967",
"quayId": "NSR:Quay:10946",
"index": 26,
"connections": []
},
{
"name": "Linderud senter",
"stopPlaceId": "NSR:StopPlace:5974",
"quayId": "NSR:Quay:10960",
"index": 27,
"connections": [
{
"line": {
"id": "RUT:Line:25",
"publicCode": "25",
"transportMode": "bus"
},
"quay": {
"id": "NSR:Quay:10959"
},
"direction": "1",
"departures": [
{
"destination": "Lørenskog stasjon",
"text": "16:02",
"departureTime": "2020-03-16T15:02:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:25-138571-16843154"
},
{
"destination": "Lørenskog stasjon",
"text": "16:09",
"departureTime": "2020-03-16T15:09:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:25-138571-16843009"
},
{
"destination": "Lørenskog stasjon",
"text": "16:17",
"departureTime": "2020-03-16T15:17:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:25-138571-16843010"
}
]
},
{
"line": {
"id": "RUT:Line:31",
"publicCode": "31",
"transportMode": "bus"
},
"quay": {
"id": "NSR:Quay:10959"
},
"direction": "1",
"departures": [
{
"destination": "Grorud T",
"text": "16:04",
"departureTime": "2020-03-16T15:04:11Z",
"delay": "PT2M11S",
"journeyId": "RUT:ServiceJourney:31-138571-15639652"
},
{
"destination": "Grorud T",
"text": "16:12",
"departureTime": "2020-03-16T15:12:01Z",
"delay": "PT1H10M1S",
"journeyId": "RUT:ServiceJourney:31-138571-15639647"
},
{
"destination": "Grorud T",
"text": "16:14",
"departureTime": "2020-03-16T15:14:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:31-138571-15639653"
}
]
},
{
"line": {
"id": "RUT:Line:33",
"publicCode": "33",
"transportMode": "bus"
},
"quay": {
"id": "NSR:Quay:10959"
},
"direction": "1",
"departures": [
{
"destination": "Ellingsrudåsen T",
"text": "16:03",
"departureTime": "2020-03-16T15:03:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:33-138542-15632327"
},
{
"destination": "Ellingsrudåsen T",
"text": "16:18",
"departureTime": "2020-03-16T15:18:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:33-138542-15632328"
},
{
"destination": "Ellingsrudåsen T",
"text": "16:33",
"departureTime": "2020-03-16T15:33:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:33-138542-15632329"
}
]
}
]
},
{
"name": "Linderudsletta",
"stopPlaceId": "NSR:StopPlace:5972",
"quayId": "NSR:Quay:10956",
"index": 28,
"connections": [
{
"line": {
"id": "RUT:Line:25",
"publicCode": "25",
"transportMode": "bus"
},
"direction": "2",
"departures": [
{
"destination": "Majorstuen",
"text": "16:01",
"departureTime": "2020-03-16T15:01:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:25-138571-16843093"
},
{
"destination": "Majorstuen",
"text": "16:09",
"departureTime": "2020-03-16T15:09:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:25-138571-16843094"
},
{
"destination": "Majorstuen",
"text": "16:16",
"departureTime": "2020-03-16T15:16:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:25-138571-16843170"
}
]
},
{
"line": {
"id": "RUT:Line:31",
"publicCode": "31",
"transportMode": "bus"
},
"direction": "2",
"departures": [
{
"destination": "Snarøya",
"text": "16:07",
"departureTime": "2020-03-16T15:07:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:31-138571-15639845"
},
{
"destination": "Snarøya",
"text": "16:19",
"departureTime": "2020-03-16T15:19:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:31-138571-15639846"
},
{
"destination": "Snarøya",
"text": "16:27",
"departureTime": "2020-03-16T15:27:31Z",
"delay": "PT56M31S",
"journeyId": "RUT:ServiceJourney:31-138571-15639842"
}
]
},
{
"line": {
"id": "RUT:Line:2031",
"publicCode": "31E",
"transportMode": "bus"
},
"quay": {
"id": "NSR:Quay:10950"
},
"direction": "1",
"departures": [
{
"destination": "Kalbakken",
"text": "16:03",
"departureTime": "2020-03-16T15:03:55Z",
"delay": "PT1M55S",
"journeyId": "RUT:ServiceJourney:2031-138571-15640592"
},
{
"destination": "Kalbakken",
"text": "16:12",
"departureTime": "2020-03-16T15:12:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:2031-138571-15640593"
},
{
"destination": "Kalbakken",
"text": "16:22",
"departureTime": "2020-03-16T15:22:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:2031-138571-15640594"
}
]
},
{
"line": {
"id": "RUT:Line:33",
"publicCode": "33",
"transportMode": "bus"
},
"direction": "2",
"departures": [
{
"destination": "Filipstad",
"text": "16:09",
"departureTime": "2020-03-16T15:09:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:33-138542-15632358"
},
{
"destination": "Filipstad",
"text": "16:24",
"departureTime": "2020-03-16T15:24:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:33-138542-15632359"
},
{
"destination": "Filipstad",
"text": "16:39",
"departureTime": "2020-03-16T15:39:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:33-138542-15632360"
}
]
},
{
"line": {
"id": "RUT:Line:380",
"publicCode": "380",
"transportMode": "bus"
},
"quay": {
"id": "NSR:Quay:10955"
},
"direction": "1",
"departures": [
{
"destination": "Oslo bussterminal",
"text": "16:17",
"departureTime": "2020-03-16T15:17:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:380-136266-16659813"
},
{
"destination": "Oslo bussterminal",
"text": "16:37",
"departureTime": "2020-03-16T15:37:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:380-136266-16659814"
},
{
"destination": "Oslo bussterminal",
"text": "16:57",
"departureTime": "2020-03-16T15:57:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:380-136266-16659815"
}
]
},
{
"line": {
"id": "RUT:Line:380",
"publicCode": "380",
"transportMode": "bus"
},
"quay": {
"id": "NSR:Quay:10950"
},
"direction": "2",
"departures": [
{
"destination": "Lillestrøm",
"text": "16:17",
"departureTime": "2020-03-16T15:17:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:380-136266-16659969"
},
{
"destination": "Lillestrøm",
"text": "16:37",
"departureTime": "2020-03-16T15:37:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:380-136266-16659970"
},
{
"destination": "Lillestrøm",
"text": "16:57",
"departureTime": "2020-03-16T15:57:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:380-136266-16659971"
}
]
},
{
"line": {
"id": "RUT:Line:390",
"publicCode": "390",
"transportMode": "bus"
},
"quay": {
"id": "NSR:Quay:10950"
},
"direction": "2",
"departures": [
{
"destination": "Kongskog",
"text": "16:08",
"departureTime": "2020-03-16T15:08:19Z",
"delay": "PT42M19S",
"journeyId": "RUT:ServiceJourney:390-136266-16660240"
},
{
"destination": "Nittedal sentrum",
"text": "16:16",
"departureTime": "2020-03-16T15:16:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:390-136266-16660219"
},
{
"destination": "Nittedal sentrum",
"text": "16:46",
"departureTime": "2020-03-16T15:46:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:390-136266-16660220"
}
]
},
{
"line": {
"id": "RUT:Line:390",
"publicCode": "390",
"transportMode": "bus"
},
"quay": {
"id": "NSR:Quay:10955"
},
"direction": "1",
"departures": [
{
"destination": "Oslo bussterminal",
"text": "16:03",
"departureTime": "2020-03-16T15:03:04Z",
"delay": "PT1M4S",
"journeyId": "RUT:ServiceJourney:390-136266-16660178"
},
{
"destination": "Oslo bussterminal",
"text": "16:17",
"departureTime": "2020-03-16T15:17:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:390-136266-16660203"
},
{
"destination": "Oslo bussterminal",
"text": "16:32",
"departureTime": "2020-03-16T15:32:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:390-136266-16660179"
}
]
}
]
},
{
"name": "Kolåsbakken",
"stopPlaceId": "NSR:StopPlace:5978",
"quayId": "NSR:Quay:10969",
"index": 29,
"connections": [
{
"line": {
"id": "RUT:Line:25",
"publicCode": "25",
"transportMode": "bus"
},
"quay": {
"id": "NSR:Quay:10968"
},
"direction": "1",
"departures": [
{
"destination": "Lørenskog stasjon",
"text": "16:01",
"departureTime": "2020-03-16T15:01:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:25-138571-16843154"
},
{
"destination": "Lørenskog stasjon",
"text": "16:08",
"departureTime": "2020-03-16T15:08:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:25-138571-16843009"
},
{
"destination": "Lørenskog stasjon",
"text": "16:16",
"departureTime": "2020-03-16T15:16:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:25-138571-16843010"
}
]
},
{
"line": {
"id": "RUT:Line:25",
"publicCode": "25",
"transportMode": "bus"
},
"direction": "2",
"departures": [
{
"destination": "Majorstuen",
"text": "16:02",
"departureTime": "2020-03-16T15:02:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:25-138571-16843093"
},
{
"destination": "Majorstuen",
"text": "16:10",
"departureTime": "2020-03-16T15:10:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:25-138571-16843094"
},
{
"destination": "Majorstuen",
"text": "16:17",
"departureTime": "2020-03-16T15:17:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:25-138571-16843170"
}
]
},
{
"line": {
"id": "RUT:Line:31",
"publicCode": "31",
"transportMode": "bus"
},
"quay": {
"id": "NSR:Quay:10968"
},
"direction": "1",
"departures": [
{
"destination": "Grorud T",
"text": "16:02",
"departureTime": "2020-03-16T15:02:05Z",
"delay": "PT1M5S",
"journeyId": "RUT:ServiceJourney:31-138571-15639652"
},
{
"destination": "Grorud T",
"text": "16:11",
"departureTime": "2020-03-16T15:11:01Z",
"delay": "PT1H10M1S",
"journeyId": "RUT:ServiceJourney:31-138571-15639647"
},
{
"destination": "Grorud T",
"text": "16:14",
"departureTime": "2020-03-16T15:14:24Z",
"delay": "PT1M24S",
"journeyId": "RUT:ServiceJourney:31-138571-15639653"
}
]
},
{
"line": {
"id": "RUT:Line:31",
"publicCode": "31",
"transportMode": "bus"
},
"direction": "2",
"departures": [
{
"destination": "Snarøya",
"text": "16:08",
"departureTime": "2020-03-16T15:08:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:31-138571-15639845"
},
{
"destination": "Snarøya",
"text": "16:20",
"departureTime": "2020-03-16T15:20:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:31-138571-15639846"
},
{
"destination": "Snarøya",
"text": "16:28",
"departureTime": "2020-03-16T15:28:31Z",
"delay": "PT56M31S",
"journeyId": "RUT:ServiceJourney:31-138571-15639842"
}
]
},
{
"line": {
"id": "RUT:Line:33",
"publicCode": "33",
"transportMode": "bus"
},
"direction": "2",
"departures": [
{
"destination": "Filipstad",
"text": "16:09",
"departureTime": "2020-03-16T15:09:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:33-138542-15632358"
},
{
"destination": "Filipstad",
"text": "16:24",
"departureTime": "2020-03-16T15:24:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:33-138542-15632359"
},
{
"destination": "Filipstad",
"text": "16:39",
"departureTime": "2020-03-16T15:39:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:33-138542-15632360"
}
]
},
{
"line": {
"id": "RUT:Line:33",
"publicCode": "33",
"transportMode": "bus"
},
"quay": {
"id": "NSR:Quay:10968"
},
"direction": "1",
"departures": [
{
"destination": "Ellingsrudåsen T",
"text": "16:03",
"departureTime": "2020-03-16T15:03:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:33-138542-15632327"
},
{
"destination": "Ellingsrudåsen T",
"text": "16:18",
"departureTime": "2020-03-16T15:18:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:33-138542-15632328"
},
{
"destination": "Ellingsrudåsen T",
"text": "16:33",
"departureTime": "2020-03-16T15:33:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:33-138542-15632329"
}
]
}
]
},
{
"name": "Tonsenhagen",
"stopPlaceId": "NSR:StopPlace:6008",
"quayId": "NSR:Quay:11023",
"index": 30,
"connections": [
{
"line": {
"id": "RUT:Line:25",
"publicCode": "25",
"transportMode": "bus"
},
"direction": "2",
"departures": [
{
"destination": "Majorstuen",
"text": "16:19",
"departureTime": "2020-03-16T15:19:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:25-138571-16843170"
},
{
"destination": "Majorstuen",
"text": "16:35",
"departureTime": "2020-03-16T15:35:36Z",
"delay": "PT1M36S",
"journeyId": "RUT:ServiceJourney:25-138571-16843096"
},
{
"destination": "Majorstuen",
"text": "16:42",
"departureTime": "2020-03-16T15:42:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:25-138571-16843097"
}
]
},
{
"line": {
"id": "RUT:Line:25",
"publicCode": "25",
"transportMode": "bus"
},
"quay": {
"id": "NSR:Quay:11024"
},
"direction": "1",
"departures": [
{
"destination": "Lørenskog stasjon",
"text": "16:15",
"departureTime": "2020-03-16T15:15:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:25-138571-16843010"
},
{
"destination": "Lørenskog stasjon",
"text": "16:37",
"departureTime": "2020-03-16T15:37:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:25-138571-16843012"
},
{
"destination": "Lørenskog stasjon",
"text": "16:45",
"departureTime": "2020-03-16T15:45:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:25-138571-16843013"
}
]
},
{
"line": {
"id": "RUT:Line:31",
"publicCode": "31",
"transportMode": "bus"
},
"direction": "2",
"departures": [
{
"destination": "Fornebu",
"text": "16:04",
"departureTime": "2020-03-16T15:04:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:31-138571-15639929"
},
{
"destination": "Fornebu",
"text": "17:04",
"departureTime": "2020-03-16T16:04:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:31-138571-15639934"
},
{
"destination": "Fornebu",
"text": "16:28",
"departureTime": "2020-03-16T15:28:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:31-138571-15639931"
}
]
},
{
"line": {
"id": "RUT:Line:31",
"publicCode": "31",
"transportMode": "bus"
},
"quay": {
"id": "NSR:Quay:11024"
},
"direction": "1",
"departures": [
{
"destination": "Grorud T",
"text": "16:48",
"departureTime": "2020-03-16T15:48:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:31-138571-15639656"
},
{
"destination": "Grorud T",
"text": "16:12",
"departureTime": "2020-03-16T15:12:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:31-138571-15639653"
},
{
"destination": "Grorud T",
"text": "16:58",
"departureTime": "2020-03-16T15:58:28Z",
"delay": "PT22M28S",
"journeyId": "RUT:ServiceJourney:31-138571-15639655"
}
]
},
{
"line": {
"id": "RUT:Line:33",
"publicCode": "33",
"transportMode": "bus"
},
"quay": {
"id": "NSR:Quay:11024"
},
"direction": "1",
"departures": [
{
"destination": "Ellingsrudåsen T",
"text": "16:17",
"departureTime": "2020-03-16T15:17:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:33-138542-15632328"
},
{
"destination": "Ellingsrudåsen T",
"text": "17:02",
"departureTime": "2020-03-16T16:02:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:33-138542-15632331"
},
{
"destination": "Ellingsrudåsen T",
"text": "16:32",
"departureTime": "2020-03-16T15:32:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:33-138542-15632329"
}
]
},
{
"line": {
"id": "RUT:Line:33",
"publicCode": "33",
"transportMode": "bus"
},
"direction": "2",
"departures": [
{
"destination": "Filipstad",
"text": "16:10",
"departureTime": "2020-03-16T15:10:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:33-138542-15632358"
},
{
"destination": "Filipstad",
"text": "16:40",
"departureTime": "2020-03-16T15:40:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:33-138542-15632360"
},
{
"destination": "Filipstad",
"text": "16:25",
"departureTime": "2020-03-16T15:25:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:33-138542-15632359"
}
]
}
]
}
]
}
Field | Value |
---|---|
Central Topic | {operatorId}/ruter/{vehicleId}/adt/v3/pe/dpi/key_stops |
Schema | dpi-key_stops.json |
Producer | Ruter DPI |
Consumer | Ruter DPI |
Service Level | ⛔ Ruter internal API. No restrictions apply. Api may be removed or modified freely by Ruter within major version. |
List of X number of most trafficked stops in the rest of the journey. Based on predicted number of passengers leaving on each stop
Accepts the following message:
This schema defines the Key Stops message sent as an MQTT message to vehicles
{
"eventTimestamp": "2022-05-10T10:35:16.708Z",
"traceId": "3841a268-0c03-4588-b476-211be0f26a0d",
"id": "RUT:ServiceJourney:18-164036-22694106",
"lineId": "RUT:Line:18",
"linePublicCode": "18",
"stopPlaces": [
{
"stopPlaceId": "NSR:StopPlace:3986",
"stopPlaceIndex": 11,
"boarding": {
"predictedValue": 0.33333334,
"qualityIndicator": "GOOD"
},
"alighting": {
"predictedValue": 5.233333,
"qualityIndicator": "GOOD"
}
},
{
"stopPlaceId": "NSR:StopPlace:6258",
"stopPlaceIndex": 16,
"boarding": {
"predictedValue": 1.4375,
"qualityIndicator": "GOOD"
},
"alighting": {
"predictedValue": 0.28125,
"qualityIndicator": "GOOD"
}
},
{
"stopPlaceId": "NSR:StopPlace:6269",
"stopPlaceIndex": 20,
"boarding": {
"predictedValue": 6.6968083,
"qualityIndicator": "GOOD"
},
"alighting": {
"predictedValue": 12.484042,
"qualityIndicator": "GOOD"
}
},
{
"stopPlaceId": "NSR:StopPlace:6266",
"stopPlaceIndex": 26,
"boarding": {
"predictedValue": 1.5,
"qualityIndicator": "GOOD"
},
"alighting": {
"predictedValue": 0.4375,
"qualityIndicator": "GOOD"
}
}
]
}
Field | Value |
---|---|
Central Topic | {operatorId}/ruter/{vehicleId}/adt/v3/pe/dpi/command |
Schema | dpi-command.json |
Producer | Ruter DPI |
Consumer | Ruter DPI |
Service Level | ⛔ Ruter internal API. No restrictions apply. Api may be removed or modified freely by Ruter within major version. |
This channels is reserved for command and control messages originated by Ruter. Typical use cases include:
The payload is defined as an object with no structure to provide flexibility.
Accepts the following message:
Message sent to bus to control DPI functions
{
"eventTimestamp": "2017-10-31T12:45:50.749Z",
"traceId": "3841a268-0c03-4588-b476-211be0f26a0d",
"type": "DEBUG",
"payload": {
"command": "LOG_TRANSFER",
"args": {
"level": "ERROR",
"limit": 10,
"page": 0
}
}
}
Field | Value |
---|---|
Central Topic | {operatorId}/ruter/{vehicleId}/adt/v3/pe/input/stop_button |
Schema | stop-button.json |
Producer | Ruter DPI |
Consumer | PTO |
Service Level | ✅ External API. Restrictions apply. Only backward compatible changes may happen within the major version. |
This message should be interpreted as if the stop button, accessibility button or the stop was served by the vehicle.
A corresponding message should be produced on /sensors/stop_button
as normal, confirming that the stop signal lights was
lit and the vehicle actually served the stop.
Frequency: on change
Accepts the following message:
Describes if passengers have requested that the bus should stop (stop button pressed).
{
"eventTimestamp": "2021-11-30T23:45:52.006Z",
"traceId": "c26f450f-2418-4792-a567-05f6771cba7a",
"stopPressed": true,
"accessibility": false
}
{
"eventTimestamp": "2021-11-30T23:45:52.006Z",
"traceId": "c26f450f-2418-4792-a567-05f6771cba7a",
"stopPressed": false,
"accessibility": false
}
{
"eventTimestamp": "2021-11-30T23:45:52.006Z",
"traceId": "c26f450f-2418-4792-a567-05f6771cba7a",
"stopPressed": true,
"accessibility": true
}
Field | Value |
---|---|
Central Topic | {operatorId}/ruter/{vehicleId}/adt/v3/pe/vehicle/api |
Schema | api.json |
Producer | Ruter DPI |
Consumer | Ruter DPI |
Consumer | RuterSalg |
Service Level | ⛔ Ruter internal API. No restrictions apply. Api may be removed or modified freely by Ruter within major version. |
Message used by Ruter to distribute information about the vehicle and it's supported APIs as provided by the PTO.
Accepts the following message:
Vehicle API topic
{
"eventTimestamp": "2021-03-04T15:08:07.519Z",
"traceId": "2ccf77aa-463f-4b98-ad19-61ec5d213e36",
"operatorRef": "nobina",
"vehicleId": "VNE5046N40M039404",
"apiVersion": "3"
}