WSV
PEGELONLINE PEGELONLINE Webservices PEGELONLINE

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:

Konfiguration

Im nächsten Schritt müssen einige grundlegende Eigenschaften der EDIS-Library konfiguriert werden. Hierbei existieren folgende Parameter:

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:

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'),
  });
}