Yleistä tietoa
Meriliikenteen tiedot syntyvät VTS Finlandin ja Väyläviraston operoimissa ammattimerenkulun tietojärjestelmissä. Avoimet meriliikenteen tiedot sisältävät tällä hetkellä:
Merivaroitustiedot. Merivaroitustietojen avulla voidaan hakea voimassa olevat kauppamerenkulun väylien turvalaitepoikkeamat sekä voimassa olevat merivaroitukset.
Satamien aikataulutiedot. Portnet-järjestelmästä saatavien Suomen satamien aikataulutietojen kautta voidaan hakea kauppamerenkulun alusten satamatietoja
Alusten sijaintitiedot. AIS (Automatic Identification System) on alusten tunnistamiseen ja sijainnin määrittämiseen käytetty järjestelmä. Lisätietoa.
Talvimerenkulun avustustiedot Baltice-järjestelmästä
Meren tilan arviointi dataa älypoijuilta
Vesiliikenteen häiriötiedot
Turvalaiteviat
Näihin liittyvät metatiedot
Sisältö
- Do not remove this line (it will not be displayed)
REST/JSON-rajapinnat
Rajapintojen Swagger-kuvaukset
Rajapintakuvaukset löytyvät Swagger-dokumentaatiosta
Merivaroitukset
https://meri.digitraffic.fi/api/nautical-warning/v1/warnings/active
Merivaroitukset haetaan POOKI-järjestelmästä.
Merivaroituksiin liittyvää metadataa ei ole digitrafficista saatavilla.
Satamakäynnit
https://meri.digitraffic.fi/api/port-call/v1/port-calls
Satamakäynnit haetaan Portnet -järjestelmästä.
Metadatat:
https://meri.digitraffic.fi/api/port-call/v1/ports
https://meri.digitraffic.fi/api/port-call/v1/vessel-details
https://meri.digitraffic.fi/api/port-call/v1/code-descriptions
AIS-tiedot
https://meri.digitraffic.fi/api/ais/v1/locations
Alusten metadatat:
https://meri.digitraffic.fi/api/ais/v1/vessels
Alusten sijaintitiedot ja metatiedot kerätään laivojen lähettämien AIS-viestien perusteella. (Lisätietoa).
Talvimerenkulun avustustiedot
https://meri.digitraffic.fi/api/winter-navigation/v1/dirways
Avustustiedot haetaan Baltice -järjestelmästä.
Metadatat:
https://meri.digitraffic.fi/api/winter-navigation/v1/ports
https://meri.digitraffic.fi/api/winter-navigation/v1/vessels
Meren tilan arviointi (SSE)
Data + metadata:
https://meri.digitraffic.fi/api/sse/v1/measurements
Meren tilan arviointi -data haetaan TLSC-järjestelmästä, joka kerää ja analysoi älypoijujen lähettämää dataa julkaistavaan muotoon.
Data päivitetään 30 minuutin välein.
Vesiliikenteen häiriöt
https://meri.digitraffic.fi/api/bridge-lock/v1/disruptions
Vesiliikenteen häiriöt haetaan POOKI-järjestelmästä.
Data päivitetään 10 minuutin välein.
Turvalaiteviat
https://meri.digitraffic.fi/api/aton/v1/faults
Turvalaiteviat haetaan POOKI-järjestelmästä.
Data päivitetään 10 minuutin välein.
MQTT WebSocket -rajapinnat
Laivojen sijainteja ja älypoijudataa voi kuunnella WebSocket-rajapinnoista. Käytetty protokolla on MQTT over WebSockets, joka mahdollistaa ainoastaan haluttujen tietojen vastaanoton topicien avulla.
Tuotannon osoite on wss://meri.digitraffic.fi:443/mqtt
.
Kirjautuessa tulee käyttää SSL-yhteyttä.
Pahon JS-clientia käyttäessä osoite on pelkkä meri.digitraffic.fi ja portti 443, esimerkki alempana.
Testin osoite vastaavasti meri-test.digitraffic.fi
.
Yksinkertainen asiakas sovellus selaimelle löytyy Tuki > MQTT esimerkkejä -sivulta.
Topicit
Jokaisen tarjottavan datalajin juuressa on myös topikki status
. Viesti kertoo, milloin data on viimeksi päivittynyt epookki sekunteina. Esim.:
status: {
"updated" : 1676628995
}
Alusten topicit
Topicit ovat seuraavanlaista muotoa:
vessels-v2/<mmsi>/metadata
vessels-v2/<mmsi>/location
vessels-v2/status
Esimerkkejä alusten viestitilauksista
vessels-v2/# # Kaiken mahdollisen datan tilaaminen
vessels-v2/+/location # Kaikkien alusten sìjainnit
vessels-v2/+/metadata # Kaikkien alusten metadatat
vessels-v2/<mmsi>/+ # Yhden aluksen sijainnit ja metadata
vessels-v2/<mmsi>/location # Yhden aluksen sijainnit
vessels-v2/<mmsi>/metadata # Yhden aluksen metadata
Alusten viestimuodot
HUOM: metadataviestissä aikaleima on millisekunteina kun taas sijaintiviestissä se on sekunteina.
Ks. AIS-datan kenttien kuvaukset Swaggerista: https://meri.digitraffic.fi/swagger/#/AIS%20V1
Aluksen metadata -viesti
’
{
"timestamp":1668075026035,
"destination":"UST LUGA",
"name":"ARUNA CIHAN",
"draught":68,
"eta":733376,
"posType":15,
"refA":160,
"refB":33,
"refC":20,
"refD":12,
"callSign":"V7WW7",
"imo":9543756,
"type":70
}
Aluksen sijainti -viesti
{
"time":1668075025,
"sog":10.7,
"cog":326.6,
"navStat":0,
"rot":0,
"posAcc":true,
"raim":false,
"heading":325,
"lon":20.345818,
"lat":60.03802
}
SSE topicit
Topicit ovat seuraavanlaista muotoa:
sse-v2/status
sse-v2/site/<site-id>
Esimerkkejä SSE-viestitilauksista
sse-v2/# # Kaiken mahdollisen datan tilaaminen
sse-v2/status # Status viestien tilaaminen
sse-v2/site/+ # Kaikkien asemien datan tilaaminen
sse-v2/site/<site-id> # Yhden aseman datan tilaaminen
SSE-data -viesti
{
"timestamp":1668085252,
"seaState":"CALM",
"trend":"NO_CHANGE",
"windWaveDir":175,
"confidence":"GOOD",
"heelAngle":3,
"lightStatus":"OFF",
"temperature":10
}
Yksinkertainen JavaScript MQTT WebSocket -client
Alla olevassa koodissa viitataan puuttuvaan muuttujaan clientName, täydennä siihen sovelluksesi nimi.
HUOM! Mikäli et hae dataa jatkuvasti, sulje yhteys kutsumalla client.disconnect().
Esimerkkikoodissa yhteys katkaistaan 30 s kuluttua.
<html>
<head>
<title>Testiclient for vessel locations</title>
<script type="text/javascript"
src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script>
<script type="text/javascript"
src="https://cdnjs.cloudflare.com/ajax/libs/paho-mqtt/1.0.2/mqttws31.min.js"></script>
<script>
const lines = [];
var messageCount = 0;
let client;
function connect() {
console.log('trying to connect marine mqtt...');
// enter a valid client name to fix the syntax error
client = new Paho.MQTT.Client("meri-test.digitraffic.fi", 443, clientName);
client.onConnectionLost = function (response) {
console.info(Date.now() + ' Connection lost:' + response.errorMessage);
};
client.onMessageArrived = function (message) {
messageCount++;
addMessage(message);
updateList();
};
const connectionProperties = {
onSuccess: onConnect, onFailure: onConnectFailure, mqttVersion: 4, useSSL: true
};
client.connect(connectionProperties);
window.setInterval(logMessageCount, 60 * 1000);
}
function disconnect() {
client.disconnect();
}
function logMessageCount() {
console.info(Date.now() + ' ' + messageCount + ' messages per minute');
messageCount = 0;
}
function onConnect() {
console.info(Date.now() + ' Connection open');
client.subscribe("vessels-v2/#");
}
function onConnectFailure(response) {
console.info(
Date.now() + ' Connection failed .' + response.errorCode + ": " + response.errorMessage);
}
function addMessage(message) {
const text = convert(message);
if (lines.length > 100) {
lines.shift();
}
lines.push(text);
}
function updateList() {
$(".messages").html(lines.join('<br/>'));
}
function convert(message) {
const content = message.payloadString;
const topic = message.destinationName;
const time = Date.now();
const json = JSON.parse(content);
let deltaMs;
if (typeof json.properties === "undefined") {
deltaMs = time - json.timestamp;
} else {
deltaMs = time - json.properties.timestampExternal;
}
return "{ now: " + time + ", ΔtimeMs: " + deltaMs + ", topic: \"" + topic + "\", content: " + content + " }";
}
connect();
// disconnect after 30 seconds
setTimeout(disconnect, 30000);
</script>
</head>
<body>
Messages:
<div class="messages"/>
</body>
</html>
Yksinkertainen Python MQTT WebSocket -client
Vaihda APP_NAME
muuttujan sisältö oman sovelluksesi nimi.
HUOM! Mikäli et hae dataa jatkuvasti, sulje yhteys kutsumalla client.disconnect()
.
Esimerkkikoodissa yhteys katkaistaan 30 s kuluttua.
import uuid
import paho.mqtt.client as mqtt
import time
APP_NAME = 'Junamies/FoobarApp 1.0'
def on_message(client, userdata, message):
print('message received', str(message.payload.decode('utf-8')))
def on_connect(client, userdata, flags, rc):
if rc == 0:
print('Connected')
client.subscribe("vessels-v2/#")
else:
print('Failed to connect, return code %d\n', rc)
client_name = '{}; {}'.format(APP_NAME, str(uuid.uuid4()))
client = mqtt.Client(client_name, transport="websockets")
client.on_connect = on_connect
client.on_message = on_message
client.tls_set()
client.connect('tie.digitraffic.fi', 443)
client.loop_start()
time.sleep(30)
client.loop_stop()
client.disconnect()
Käyttörajoitukset
Katso Ohjeita ja lisätietoa rajapintojen käyttöön > Yleistä huomioitavaa
Tuetut ja vanhentuneet rajapinnat
Tuettujen ja vanhentuneiden rajapintojen listaus löytyy täältä.