17
PUBLIC TRANSPORT API’s HOW WE ARE USING AND CREATING LONG LASTING API’S AT NOBI @ULRIKAPARK & PETTER KVARNFORS

Public Transport APIs – How we are using and creating long lasting APIs at Nobina (Ulrika Park & Petter Kvarnfors)

Embed Size (px)

Citation preview

Page 1: Public Transport APIs – How we are using and creating long lasting APIs at Nobina (Ulrika Park & Petter Kvarnfors)

PUBLIC TRANSPORT API’sHOW WE ARE USING AND CREATING LONG LASTING API’S AT NOBINA

@ULRIKAPARK & PETTER KVARNFORS

Page 2: Public Transport APIs – How we are using and creating long lasting APIs at Nobina (Ulrika Park & Petter Kvarnfors)

RES I STHLM – THE JOURNEY PLANNER FOR STOCKHOLM PUBLIC TRANSPORT

Page 3: Public Transport APIs – How we are using and creating long lasting APIs at Nobina (Ulrika Park & Petter Kvarnfors)

TRAFIKLAB – A COMMUNITY FOR OPEN DATA IN PUBLIC TRANSPORT

Page 4: Public Transport APIs – How we are using and creating long lasting APIs at Nobina (Ulrika Park & Petter Kvarnfors)

HOW TO ADDRESS THE CHALLENGES• For long term solutions: Influence

Trafiklab, SL, bus & train operators – working on source data, make data reliable

For urgent solutions: Build our own solutions – for bad and good. Ex: ”the Jesus problem”, ”Where is the bus?”

Design for error – Design the app for expected errors in data

Co-operate with the community. Communities have new ideas and solutions – for instance the ”Right exit”

Page 5: Public Transport APIs – How we are using and creating long lasting APIs at Nobina (Ulrika Park & Petter Kvarnfors)
Page 6: Public Transport APIs – How we are using and creating long lasting APIs at Nobina (Ulrika Park & Petter Kvarnfors)

Central computer

WiFi antenna and router

Antennas on the roof

Computer for destination

displays

Ethernet switch

Page 7: Public Transport APIs – How we are using and creating long lasting APIs at Nobina (Ulrika Park & Petter Kvarnfors)
Page 8: Public Transport APIs – How we are using and creating long lasting APIs at Nobina (Ulrika Park & Petter Kvarnfors)

Onboard computer

MQTT Broker

GW400 Door2MQTT

Passenger Counter

Door Sensor

Passenger sensor

Position Tracker

GPS

Field Gateway

GPS Antenna Sensors

Interface programs

Broker

Programs

Page 9: Public Transport APIs – How we are using and creating long lasting APIs at Nobina (Ulrika Park & Petter Kvarnfors)

#define MQTT_HOSTNAME "localhost"#define MQTT_PORT 1883#define MQTT_TOPIC "nobina/position/gps"

struct mosquitto *mosq;

int main(int argc, char* argv[]){ initialize_mqtt();

mosquitto_connect(mosq, MQTT_HOSTNAME, MQTT_PORT, 60); mosquitto_loop_forever(mosq, -1, 1);

mosquitto_destroy(mosq); mosquitto_lib_cleanup();}

void mqtt_connect_callback(struct mosquitto *mosq, void* userdata, int result){ if (!result) { mosquitto_subscribe (mosq, NULL, MQTT_TOPIC, 0); } else { fprintf(stderr, "Connection failed\n"); }}

void mqtt_message_callback(struct mosquitto *mosq, void *obj, const struct mosquitto_message *message) { send_to_event_hub((char *)message->payload); }

Page 10: Public Transport APIs – How we are using and creating long lasting APIs at Nobina (Ulrika Park & Petter Kvarnfors)

#define MQTT_HOSTNAME "localhost"#define MQTT_PORT 1883#define MQTT_TOPIC "nobina/position/gps"

struct mosquitto *mosq;

int main(int argc, char* argv[]){ initialize_mqtt();

mosquitto_connect(mosq, MQTT_HOSTNAME, MQTT_PORT, 60); mosquitto_loop_forever(mosq, -1, 1);

mosquitto_destroy(mosq); mosquitto_lib_cleanup();}

void mqtt_connect_callback(struct mosquitto *mosq, void* userdata, int result){ if (!result) { mosquitto_subscribe (mosq, NULL, MQTT_TOPIC, 0); } else { fprintf(stderr, "Connection failed\n"); }}

void mqtt_message_callback(struct mosquitto *mosq, void *obj, const struct mosquitto_message *message) { send_to_event_hub((char *)message->payload); }

Page 11: Public Transport APIs – How we are using and creating long lasting APIs at Nobina (Ulrika Park & Petter Kvarnfors)

#define MQTT_HOSTNAME "localhost"#define MQTT_PORT 1883#define MQTT_TOPIC "nobina/position/gps"

struct mosquitto *mosq;

int main(int argc, char* argv[]){ initialize_mqtt();

mosquitto_connect(mosq, MQTT_HOSTNAME, MQTT_PORT, 60); mosquitto_loop_forever(mosq, -1, 1);

mosquitto_destroy(mosq); mosquitto_lib_cleanup();}

void mqtt_connect_callback(struct mosquitto *mosq, void* userdata, int result){ if (!result) { mosquitto_subscribe (mosq, NULL, MQTT_TOPIC, 0); } else { fprintf(stderr, "Connection failed\n"); }}

void mqtt_message_callback(struct mosquitto *mosq, void *obj, const struct mosquitto_message *message) { send_to_event_hub((char *)message->payload); }

Page 12: Public Transport APIs – How we are using and creating long lasting APIs at Nobina (Ulrika Park & Petter Kvarnfors)

#define MQTT_HOSTNAME "localhost"#define MQTT_PORT 1883#define MQTT_TOPIC "nobina/position/gps"

struct mosquitto *mosq;

int main(int argc, char* argv[]){ initialize_mqtt();

mosquitto_connect(mosq, MQTT_HOSTNAME, MQTT_PORT, 60); mosquitto_loop_forever(mosq, -1, 1);

mosquitto_destroy(mosq); mosquitto_lib_cleanup();}

void mqtt_connect_callback(struct mosquitto *mosq, void* userdata, int result){ if (!result) { mosquitto_subscribe (mosq, NULL, MQTT_TOPIC, 0); } else { fprintf(stderr, "Connection failed\n"); }}

void mqtt_message_callback(struct mosquitto *mosq, void *obj, const struct mosquitto_message *message) { send_to_event_hub((char *)message->payload); }

Page 13: Public Transport APIs – How we are using and creating long lasting APIs at Nobina (Ulrika Park & Petter Kvarnfors)

#define MQTT_HOSTNAME "localhost"#define MQTT_PORT 1883#define MQTT_TOPIC "nobina/position/gps"

struct mosquitto *mosq;

int main(int argc, char* argv[]){ initialize_mqtt();

mosquitto_connect(mosq, MQTT_HOSTNAME, MQTT_PORT, 60); mosquitto_loop_forever(mosq, -1, 1);

mosquitto_destroy(mosq); mosquitto_lib_cleanup();}

void mqtt_connect_callback(struct mosquitto *mosq, void* userdata, int result){ if (!result) { mosquitto_subscribe (mosq, NULL, MQTT_TOPIC, 0); } else { fprintf(stderr, "Connection failed\n"); }}

void mqtt_message_callback(struct mosquitto *mosq, void *obj, const struct mosquitto_message *message) { send_to_event_hub((char *)message->payload); }

Page 14: Public Transport APIs – How we are using and creating long lasting APIs at Nobina (Ulrika Park & Petter Kvarnfors)

Event Hub

App Servic

e

Blob storage

API

IoT Unit

Nobina Backoffice

MS Azure

Page 15: Public Transport APIs – How we are using and creating long lasting APIs at Nobina (Ulrika Park & Petter Kvarnfors)

Event Hub

App Servic

e

Blob storage

API

IoT Unit App

trafiklab.se

Backend

Res i Stockholm

Nobina Backoffice

MS Azure

Page 16: Public Transport APIs – How we are using and creating long lasting APIs at Nobina (Ulrika Park & Petter Kvarnfors)

Event Hub

Nobina Backoffice

App Servic

e

API

IoT Unit

trafiklab.se

Other apps

AppBackend

Res i Stockholm

MS Azure

Blob storage

Page 17: Public Transport APIs – How we are using and creating long lasting APIs at Nobina (Ulrika Park & Petter Kvarnfors)

Thanks for listening!

COLLABORATE WITH COMMUNITY

DESIGN FOR CHANGE

USE STANDARDS

EXPERIMENT