EDIS-Library Dokumentation
Die EDIS-Library ist eine TypeScript-Bibliothek welche den Umgang mit den Komponenten der PEGELONLINE-Echtzeitdateninfrastruktur (EDIS) bei der Entwicklung von Client-Komponenten vereinfacht. Ziel ist es dabei die Abfragen an einzelne Komponenten zu kapseln und so eine Abstraktionsschicht zu schaffen.
Diese Dokumentation erklärt anhand praktischer Beispiele, wie Sie mithilfe der EDIS-Library Metadaten zu Stationen sowie (Echtzeit-) Messdaten und Zeitreihen abfragen können.
Grundlage für diese Bibliothek sind die verschiedenen Dienste, welche im Rahmen von PEGELONLINE bzw. EDIS bereitgestellt werden. Die Metadaten zu einer Station und die historischen Messwerte der letzten 30 Tage werden über die PEGELONLINE API bezogen. Die Echtzeitmessdaten können über einen MQTT-Broker abonniert werden. Die EDIS Dict-API stellt eine Suchfunktion nach Stationen und Zeitreihen bereit (Suchkriterien sind z.B. Ortsnamen, Messgrößen, Einzugsgebiete oder räumliche Filter). Eine Übersicht über die EDIS-Architektur ist hier veröffentlicht: https://www.itzbund.de/DE/itloesungen/egovernment/echtzeitdateninfrastruktur/edis.html?nn=360446#title3618461.
Die hier verwendete EDIS-Library verbindet all diese Endpunkte durch eine einfach zu verwendende npm-Library.
Um die EDIS-Library zu verwenden, sind folgende Schritte erforderlich:
Voraussetzungen
Node.js und npm müssten auf Ihrem System installiert sein. Weitere Informationen zur Installation sind an dieser Stelle verfügbar: https://docs.npmjs.com/downloading-and-installing-node-js-and-npm
Installation
Die Installation der EDIS-Library erfolgt über die Kommandozeile mit folgendem Befehl:
npm install @52north/edis-lib
Verwendung
Importieren der Module
Zunächst ist es notwendig, die Module der EDIS-Library in den eigenen Programmcode zu importieren. Dies erfolgt über folgende Zeile:
import { Edis, EdisProperties, Station, TimeSeries } from '@52north/edis-lib';Bei den importierten Modulen handelt es sich um:
- Edis: Hauptklasse, um mit den APIs zu kommunizieren.
- EdisProperties: Konfiguration der EDIS-Klasse.
- Station, TimeSeries: Klassen zur Arbeit mit Stationen und deren Zeitreihen.
Konfiguration
Im nächsten Schritt müssen einige grundlegende Eigenschaften der EDIS-Library konfiguriert werden. Hierbei existieren folgende Parameter:
- usedInBrowser: Hier kann konfiguriert werden, ob die EDIS-Library im Browser oder in der NodeJs-Umgebung genutzt wird. Bei der Browser-Nutzung werden die Echtzeitwerte per Websocket bezogen und in der NodeJS-Umgebung direkt über MQTT. Standardmäßig ist der Wert auf true gesetzt (d.h. Nutzung im Browser)
- pegelonlineUrl: Hier kann die URL zum PEGELONLINE-REST-Service geändert werden. Der Standardwert ist: https://www.pegelonline.wsv.de/webservices/rest-api/v2
- dictApiUrl: Hier kann die URL zur DICT-API geändert werden. Der Standardwert ist: https://dict-api.pegelonline.wsv.de
- mqttHost: Host für die Echtzeitdaten. Der Standardwert ist: edis.pegelonline.wsv.de
- mqttCredentials: Basic-Auth-Zugangsdaten für die Verbindung zum MQTT-Broker. Standardmäßig nicht gesetzt. Für die Phase der Pilotierung sind hier die Credentials beim ITZBund (il-pegelonline@itzbund.de) zu erfragen und hier einzutragen
const options: EdisProperties = { usedInBrowser: true, pegelonlineUrl: 'https://www.pegelonline.wsv.de/webservices/rest-api/v2', dictApiUrl: 'https://dict-api.pegelonline.wsv.de', mqttHost: 'edis.pegelonline.wsv.de', mqttCredentials: { username: 'username', password: 'passwort', }, }; const edis = new Edis(options);
Abfragen von Stationen und der ersten Zeitreihe
Der nachfolgende Beispielcode stellt dar, wie Stationen mit einer bestimmten Bezeichnung abgefragt werden können und wie zur ersten gefundenen Station die zugehörigen Zeitreihen abgerufen werden:
- Mit der Methode
getStations
kann über alle Stationen gesucht werden. In diesem Fall werden alle Stationen ermittelt, die den String 'Helgoland' in der Bezeichnung tragen. - Nach erfolgreicher Suche werden die Namen der gefundenen Stationen in der Konsole ausgegeben.
- Danach wird die erste Station im Suchergebnis ausgewählt (
stations[0]
); für diese Station werden mit Hilfe vongetTimeSeries
alle zugehörigen Zeitreihen abgefragt und ihr Name auf der Konsole ausgegeben. - Die Funktion
fetchCurrentDataFor
ermöglicht das Abonnieren der aktuellen Messdaten für eine bestimmte Zeitreihe an einer Station (siehe unten).
edis.getStations({ q: 'Helgoland' }).subscribe((stations) => { const stationNames = stations.map((st) => st.longname); console.log(`Found stations: ${stationNames.join(', ')}`); const station = stations[0]; if (station) { station .getTimeSeries() .forEach((ts) => { console.log(`${station.longname} with timeseries: ${ts.name}`); fetchCurrentDataFor(ts, station); }); } });
Verwendung der Funktion fetchCurrentDataFor
Mit der Funktion fetchCurrentDataFor
können die Echtzeit-Daten einer Zeitreihe einer Station abonniert werden. Das folgende Code-Beispiel zeigt,
wie das Erzeugen eines solchen Abonnements erfolgt und wie die Daten mit Hilfe von RxJS asynchron verarbeitet werden können:
function fetchCurrentDataFor(ts: TimeSeries, station: Station) { return ts.getCurrentTimeSeriesData().subscribe({ next: (data) => console.log( `${new Date().toISOString()} - ${station.id}/${ts.name} - ${data.value}${ts.unit} at ${data.timestamp}` ), error: (err) => console.error(err), complete: () => console.log('Complete'), }); }