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.
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>
AssignmentState.assigned=true
AssignmentState.assigned=true
AssignmentState.assigned=false
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
The vehicle will be signed on to service the pre-existing plans for the specified serviceWindow
Used if additional vehicles are demanded to serve the pre-existing plans for the specified serviceWindow
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 successfull 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-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.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.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 calls or journeys the PTO has no intention of servicing.
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.Accepts 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: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",
"doorRef": "01",
"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. |
The sensor / telemetry Id.
Accepts the following message:
Raw-data from door-sensor for later evaluation.
{
"doorRef": "01",
"alightingCount": 23,
"boardingCount": 12,
"traceId": "3841a268-0c03-4588-b476-211be0f26a0d",
"eventTimestamp": "2017-10-31T12:45:50.749Z",
"messageNumber": 123456,
"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.
{
"doorOpen": true,
"traceId": "3841a268-0c03-4588-b476-211be0f26a0d",
"eventTimestamp": "2017-10-31T12:45:50.749Z"
}
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/{sensorId} |
Schema | telemetry.json |
Producer | PTO |
Consumer | Ruter BO |
Service Level | ✅ External API. Restrictions apply. Only backward compatible changes may happen within the major version. |
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 |
Optional unless stated explicitly in the main ADT document.
ID | Subid | Name | Value | Recommended refresh interval | Remarks |
---|---|---|---|---|---|
0001FF25 | Charger | onChange | |||
10003 | Wall charger connected | boolean | |||
10004 | Fast charger connected | boolean | |||
10005 | Charging active | boolean | |||
01000002 | Temperature indoor | 6/min | * Unit: Celcius * Resolution: <= 1 C |
||
tempavg | Temperature indoor average | float | |||
tempfront | Temperature indoor front | float | |||
tempmiddle | Temperature indoor middle | float | |||
temprear | Temperature indoor rear | float | |||
01000005 | SOC | float | 1/min | ||
01000006 | Transmission mode | combustion/electric | onChange | Intended for hybrid vehicles | |
01000007 | Windscreen wiper active | boolean | onChange | Taken to represent a measurement of the ground truth binary rainfall state, given that it is a better predictor of the binary rainfall state than radar- or gauge-based measurements | |
01000008 | Accelerometry | 6/min | * Bandwidth: >= 100 hz * Unit: g * Resolution: <= 0.01 g |
||
xmin | Min x value last interval | float | |||
xmax | Max x value last interval | float | |||
xavg | Average x value last interval | float | |||
ymin | Min y value last interval | float | |||
ymax | Max y value last interval | float | |||
yavg | Average y value last interval | float | |||
zmin | Min z value last interval | float | |||
zmax | Max z value last interval | float | |||
zavg | Average z value last interval | float | |||
01000009 | Temperature outdoor | float | 1/min | * Unit: Celcius * Resolution: <= 1 C * Measured at front of vehicle as near as possible to the ground |
|
0100000A | Accumulated energy consumption | float | 1/min | * Energy consumed * Including HVAC * Unit: kWh |
The sensor / telemetry Id.
Accepts the following message:
{
"eventTimestamp": "2022-05-09T13:27:59.624Z",
"traceId": "3841a268-0c03-4588-b476-211be0f26a0d",
"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
}
]
}
{
"eventTimestamp": "2022-05-09T13:27:59.624Z",
"traceId": "3841a268-0c03-4588-b476-211be0f26a0d",
"messageNumber": 1,
"id": "01000002",
"payloads": [
{
"subid": "tempavg",
"name": "Temperature indoor average",
"unit": "C",
"value": 18.1
}
]
}
{
"eventTimestamp": "2022-05-09T13:27:59.624Z",
"traceId": "3841a268-0c03-4588-b476-211be0f26a0d",
"messageNumber": 1,
"id": "01000002",
"payloads": [
{
"subid": "tempfront",
"name": "Temperature indoor front",
"unit": "C",
"value": 18.2
},
{
"subid": "tempmiddle",
"name": "Temperature indoor middle",
"unit": "C",
"value": 18.1
},
{
"subid": "temprear",
"name": "Temperature indoor rear",
"unit": "C",
"value": 18.4
}
]
}
{
"eventTimestamp": "2022-05-09T13:27:59.624Z",
"traceId": "3841a268-0c03-4588-b476-211be0f26a0d",
"messageNumber": 1,
"id": "01000005",
"payloads": [
{
"name": "SOC",
"unit": "%",
"value": 20.3
}
]
}
{
"eventTimestamp": "2022-05-09T13:27:59.624Z",
"traceId": "3841a268-0c03-4588-b476-211be0f26a0d",
"messageNumber": 1,
"id": "01000006",
"payloads": [
{
"name": "Transmission mode",
"value": "electric"
}
]
}
{
"eventTimestamp": "2022-05-09T13:27:59.624Z",
"traceId": "3841a268-0c03-4588-b476-211be0f26a0d",
"messageNumber": 1,
"id": "01000007",
"payloads": [
{
"name": "Windscreen wiper active",
"value": true
}
]
}
{
"eventTimestamp": "2022-05-09T13:27:59.624Z",
"traceId": "3841a268-0c03-4588-b476-211be0f26a0d",
"messageNumber": 1,
"id": "01000008",
"payloads": [
{
"subid": "xmin",
"name": "Min x value last interval",
"value": 0.1
},
{
"subid": "xmax",
"name": "Max x value last interval",
"value": 0.2
},
{
"subid": "xavg",
"name": "Average x value last interval",
"value": 0.15
},
{
"subid": "ymin",
"name": "Min y value last interval",
"value": -0.1
},
{
"subid": "ymax",
"name": "Max y value last interval",
"value": 0.2
},
{
"subid": "yavg",
"name": "Average y value last interval",
"value": 0.1
},
{
"subid": "zmin",
"name": "Min z value last interval",
"value": 0.01
},
{
"subid": "zmax",
"name": "Max z value last interval",
"value": 0.03
},
{
"subid": "zavg",
"name": "Average z value last interval",
"value": 0.02
}
]
}
{
"eventTimestamp": "2022-05-09T13:27:59.624Z",
"traceId": "3841a268-0c03-4588-b476-211be0f26a0d",
"messageNumber": 1,
"id": "01000007",
"payloads": [
{
"name": "Temperature outdoor",
"unit": "C",
"value": 20.7
}
]
}
{
"eventTimestamp": "2022-05-09T13:27:59.624Z",
"traceId": "3841a268-0c03-4588-b476-211be0f26a0d",
"messageNumber": 1,
"id": "01000007",
"payloads": [
{
"name": "Accumulated energy consumption",
"unit": "kWh",
"value": 0.972
}
]
}
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. |
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",
"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 | RuterSalg |
Consumer | RuterSalg |
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 bus. The health status is intended both as a real time surveillance of health status for each individual bus 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",
"nfcReaderConnected": false,
"printerConnected": true,
"nodAvailable": true,
"backendAvailable": false,
"loggedIn": true,
"journeyRef": "42911-2020-05-25T16:42:00+02:00",
"stopPlaceId": "NSR:StopPlace:59734",
"progressRef": "3841a268-0c03-4588-b476-211be0f26a0d",
"appVersion": "2.5.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 | {operatorId}/ruter/{vehicleId}/adt/v3/pe/sales/current_stop |
Schema | sales-current_stop.json |
Producer | RuterSalg |
Consumer | RuterSalg |
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",
"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": "OK",
"reason": "OK",
"description": "The vehicle has been assigned"
},
"state": {
"assigned": true,
"code": "PLANNED",
"vehicleTaskId": "99991",
"operatingDate": "2023-04-27"
}
}
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. |
Topic used exclusively to transmit audio messages to be played by the speaker system. The audio messages may contain an array of sound bites, that are to be played in the sequence they have been received.
Multiple speaker groups may be the target of the same sound file.
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"
},
"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 |
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",
"vehicleId": "VNE5046N40M039404",
"apiVersion": "3"
}