Pegelonline
Der Node verbindet sich beim Deployment mit dem MQTT-Broker EDIS der Wasserstraßen- und Schifffahrtsverwaltung des Bundes und abonniert die Pegelstationen, die Sie nach Gewässer oder einzeln auswählen. Jede eingehende Messung, zum Beispiel ein neuer Wasserstand, verlässt den Node als flache WaterObserved-Entität.
- Node-Typ
- pegelonline
- Paket
- @htag/node-red-contrib-hypertegrity-environment
- Eingänge / Ausgänge
- 0 / 1
- Datenquelle
- Pegelonline (WSV) über EDIS-MQTT-Broker und Dict-API
Wofür Sie den Node verwenden
Pegelonline stellt die Messwerte von über 600 Pegelstationen an Bundeswasserstraßen bereit: Wasserstand, Abfluss, Wassertemperatur und weitere Parameter. Statt die REST-Schnittstelle regelmäßig abzufragen, empfängt der Pegelonline-Node die Messungen als Ereignisse über MQTT, sobald die Station sie liefert.
Typische Einsatzfälle sind:
- Wasserstände von Rhein, Mosel oder Elbe nahezu in Echtzeit in einen NGSI-LD Context Broker übernehmen.
- Hochwasser-Frühwarnung in Kommunen an Bundeswasserstraßen durch Schwellenwertprüfung im Flow.
- Schifffahrts- und Tourismusanwendungen, die aktuelle Pegel und Wassertemperaturen anzeigen.
So funktioniert der Node
Themen auflösen
Beim Deployment fragt der Node die Dict-API von Pegelonline ab und ermittelt die MQTT-Topics und Stammdaten der gewünschten Stationen.
Verbinden und abonnieren
Der Node verbindet sich per TLS mit dem EDIS-Broker und abonniert je Station das Stations-Topic in Blöcken von 50.
Filtern und anreichern
Eingehende Nachrichten werden auf die gewählten Parameter gefiltert und mit Stationsname, Gewässer, Behörde und Koordinaten ergänzt.
Ausgeben
Jede Messung verlässt den Node als eigene Nachricht mit einer WaterObserved-Entität in msg.payload.
Ergebnis: Ein kontinuierlicher Strom einzelner Messungen, der direkt in den NGSI-LD Builder geführt werden kann.
Der Node ist ereignisbasiert und hat keinen Eingang. Er startet automatisch nach dem Deployment oder beim Start von Node-RED. Schlägt die Dict-API-Abfrage fehl, wiederholt der Node den Versuch bis zu zehnmal im Abstand von 10 Sekunden. Bricht die MQTT-Verbindung ab, verbindet sich der Client alle 5 Sekunden neu.
Konfiguration
Der Bearbeitungsdialog ist in die Registerkarten Stationen, Parameter und Einstellungen gegliedert.
Registerkarte Stationen
| Feld | Typ | Standard | Bedeutung |
|---|---|---|---|
| Name | Text | leer | Anzeigename des Nodes im Flow. Ohne Namen zeigt der Node „Pegelonline: Gewässer“ oder „Pegelonline: Global“. |
| Filter-Modus | Auswahl (water, all) | water | Nach Gewässer filtern blendet die Gewässerauswahl ein; Global (Alle Gewässer) leert das Gewässer und listet alle Stationen. Gespeichert als selectionMode. |
| Gewässer | Auswahl | leer (alle Gewässer) | Kurzname des Gewässers aus der Gewässer-API, zum Beispiel RHEIN. Gespeichert als water. |
| Verfügbare Stationen / Abonnierte Stationen | Doppelliste mit Suchfeld | keine Auswahl | Mit den Pfeiltasten verschieben Sie Stationen in die rechte Liste. Gespeichert werden die Stations-UUIDs im Array stations. Ist die rechte Liste leer, abonniert der Node alle Stationen, die zum Gewässerfilter passen. |
Registerkarte Parameter
| Feld | Typ | Standard | Bedeutung |
|---|---|---|---|
| Parameter auswählen | Kontrollkästchen | W | Messgrößen, die weitergegeben werden. Gespeichert als Array parameters. Ohne Auswahl verwendet der Node W. |
Verfügbare Parameter nach Gruppen:
| Gruppe | Parameter |
|---|---|
| Primär | Wasserstand (W) |
| Hydrologie | Abfluss (Q), Fließgeschwindigkeit (VA), Fließrichtung (RV), Wellenhöhe (SIGH), Wellenperiode (TP) |
| Wasserqualität | Wassertemperatur (WT), Salzgehalt (S), pH-Wert (PH), Sauerstoffgehalt (O2), Leitfähigkeit (LF), Trübung (TR) |
| Meteorologie | Lufttemperatur (LT), Niederschlag (P), Windgeschwindigkeit (WG), Windrichtung (WR) |
Nicht jede Station liefert alle Parameter. Der Node abonniert immer das vollständige Stations-Topic und verwirft Nachrichten mit nicht gewählten Parametern.
Registerkarte Einstellungen
| Feld | Typ | Standard | Bedeutung |
|---|---|---|---|
| Broker-URL | Text | siehe unten | Adresse des EDIS-MQTT-Brokers. Die Verbindung nutzt TLS mit Zertifikatsprüfung. |
| Benutzername | Text (Credential) | leer | Benutzername für den Broker. Wird verschlüsselt in den Node-RED-Credentials gespeichert. |
| Passwort | Passwort (Credential) | leer | Passwort für den Broker. Wird verschlüsselt gespeichert. |
| Dict-API | Text | siehe unten | Endpunkt, der Stationsstammdaten und MQTT-Topics liefert. |
| Gewässer-API | Text | siehe unten | REST-Endpunkt für die Gewässerliste im Dialog. |
| Stations-API | Text | siehe unten | REST-Endpunkt für die Stationsliste im Dialog. |
| Debug-Modus | Kontrollkästchen | aus | Schreibt detaillierte Protokolle als Warnungen in die Debug-Seitenleiste. |
Standardwerte der URL-Felder:
Broker-URL: ssl://edis.pegelonline.wsv.de:8883
Dict-API: https://dict-api.pegelonline.wsv.de/search
Gewässer-API: https://pegelonline.wsv.de/webservices/rest-api/v2/waters.json
Stations-API: https://pegelonline.wsv.de/webservices/rest-api/v2/stations.json
Der EDIS-Broker verlangt eine Anmeldung. Für den öffentlichen, nur lesenden Zugang steht der Benutzer edis-mqtt-ro zur Verfügung; das zugehörige Passwort entnehmen Sie der Pegelonline-Dokumentation zum MQTT-Zugang. Tragen Sie Benutzername und Passwort auf der Registerkarte Einstellungen ein, bevor Sie deployen.
Eingang
Der Node hat keinen Eingang. Er wird ausgelöst durch:
- das Deployment des Flows oder den Start von Node-RED, wodurch die Stammdaten geladen und die MQTT-Verbindung aufgebaut wird;
- jede MQTT-Nachricht des EDIS-Brokers auf einem abonnierten Stations-Topic.
Um die Auswahl zu ändern, bearbeiten Sie den Node und deployen erneut. Beim Deployment oder Entfernen des Nodes wird die MQTT-Verbindung sauber geschlossen.
Ausgang
Für jede empfangene Messung sendet der Node eine eigene Nachricht. msg.payload ist ein flaches Objekt, das sich am Smart Data Model WaterObserved orientiert. Der gemessene Wert steht in einem Attribut, dessen Name vom Parameter abhängt.
{
"payload": {
"id": "00000000-0000-4000-8000-000000000001",
"type": "WaterObserved",
"name": "MUSTERSTADT - Wasserstand",
"description": "Musterstadt at MUSTERFLUSS (km 123.4)",
"dataProvider": "WSA Musterfluss",
"areaServed": "Musterkreis, Musterland",
"location": {"type": "Point", "coordinates": [7.4001, 50.4302]},
"dateObserved": "2026-10-01T08:15:00+02:00",
"unit": "cm",
"stationId": "00000000-0000-4000-8000-000000000001",
"parameter": "W",
"parameterName": "Wasserstand",
"riverKilometer": 123.4,
"waterLevel": 212
},
"topic": "edis/pegelonline/MUSTERFLUSS/…/00000000-0000-4000-8000-000000000001/W",
"_station": {"…": "Stammdaten der Station aus der Dict-API"},
"_originalPayload": {"…": "unveränderte MQTT-Nachricht"}
}
| Feld | Bedeutung |
|---|---|
payload.id, payload.stationId | UUID der Pegelstation. |
payload.type | Immer WaterObserved. |
payload.name | Kurzname der Station und Langname des Parameters, getrennt durch Bindestrich. |
payload.description | Langname der Station, Gewässer und Flusskilometer. |
payload.dataProvider | Zuständige Behörde laut Stammdaten, zum Beispiel das Wasserstraßen- und Schifffahrtsamt. |
payload.areaServed | Landkreis und Bundesland der Station. Fehlende Angaben erscheinen als Unknown. |
payload.location | GeoJSON-Punkt in der Reihenfolge Länge, Breite. |
payload.dateObserved | Zeitstempel der Messung aus der MQTT-Nachricht; fehlt er, der Empfangszeitpunkt. |
payload.unit | Einheit laut Zeitreihe der Station, zum Beispiel cm, m³/s oder °C. |
payload.parameter, payload.parameterName | Kurzzeichen und Langname des Parameters. |
payload.riverKilometer | Flusskilometer der Station. |
| Messwert-Attribut | Der Messwert unter dem Attributnamen aus der folgenden Tabelle. |
topic | MQTT-Topic, auf dem die Nachricht empfangen wurde. |
_station | Vollständiger Stammdatensatz der Station aus der Dict-API. |
_originalPayload | Unveränderte MQTT-Nachricht. |
Zuordnung der Parameter zu Attributnamen:
| Parameter | Attribut | Parameter | Attribut |
|---|---|---|---|
| W | waterLevel | S | salinity |
| Q | discharge | PH | ph |
| WT | waterTemperature | O2 | oxygenContent |
| LT | airTemperature | VA | flowVelocity |
| P | precipitation | RV | flowDirection |
| LF | conductivity | TR | turbidity |
| WG | windSpeed | SIGH | significantWaveHeight |
| WR | windDirection | TP | wavePeriod |
Unbekannte Parameter landen im Attribut measuredValue.
Beispiel-Flow
Das Paket bringt einen Beispiel-Flow mit. Sie importieren ihn in Node-RED über Menü → Importieren → Beispiele → @htag/node-red-contrib-hypertegrity-environment → pegelonline. Alternativ laden Sie die Datei pegelonline.json herunter und importieren sie über Menü → Importieren.
Pegelonline
Der Node „Pegel Andernach“ ist im globalen Modus mit genau einer abonnierten Station und dem Parameter W vorkonfiguriert.
Zugangsdaten ergänzen
Tragen Sie auf der Registerkarte Einstellungen Benutzername und Passwort für den EDIS-Broker ein und deployen Sie.
Debug
Ein Debug-Node zeigt jede eingehende Messung als vollständige Nachricht in der Seitenleiste.
Beispiel-Flow als JSON anzeigen
[
{"id": "pegel1", "type": "pegelonline", "z": "tab1", "name": "Pegel Andernach", "water": "", "stations": "[\"5735892a-ec65-4b29-97c5-50939aa9584e\"]", "selectionMode": "all", "brokerUrl": "ssl://edis.pegelonline.wsv.de:8883", "dictApiUrl": "https://dict-api.pegelonline.wsv.de/search", "restApiWatersUrl": "https://pegelonline.wsv.de/webservices/rest-api/v2/waters.json", "restApiStationsUrl": "https://pegelonline.wsv.de/webservices/rest-api/v2/stations.json", "parameters": "[\"W\"]", "debug": false, "x": 140, "y": 100, "wires": [["debug1"]]},
{"id": "debug1", "type": "debug", "z": "tab1", "name": "Pegel Ausgabe", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "false", "x": 400, "y": 100, "wires": []}
]
Status und Fehler
| Anzeige | Bedeutung |
|---|---|
| Blauer Punkt „Themen auflösen...“ | Die Dict-API wird abgefragt. |
| Gelber Ring „Setup-Versuch (n/10)...“ | Die Dict-API-Abfrage ist fehlgeschlagen; der Node wartet 10 Sekunden und versucht es erneut. |
| Gelber Ring „Keine Stationen gefunden“ | Die Dict-API hat keine Stationen geliefert. |
| Gelber Ring „Keine passenden Stationen“ | Keine der ausgewählten Stations-UUIDs ist im Ergebnis der Dict-API enthalten. |
| Gelber Ring „Keine Themen für Parameter“ | Für die Zielstationen wurde kein MQTT-Topic gefunden. |
| Blauer Punkt „MQTT verbinden...“ | Die Verbindung zum Broker wird aufgebaut. |
| Grüner Punkt „Verbunden“ | Die Verbindung steht; die Abonnements werden eingerichtet. |
| Grüner Punkt „(n Stations)“ | Die Abonnements sind beauftragt; n Stationen werden überwacht. |
| Gelber Punkt „Verbindung wird wiederhergestellt...“ | Der MQTT-Client versucht, die Verbindung erneut aufzubauen. |
| Roter Punkt „Offline“ | Der Client hat die Verbindung zum Broker verloren. |
| Roter Ring „Abonnementfehler“ | Ein Abonnement-Block wurde vom Broker abgelehnt. Die Meldung „Subscription chunk error: …“ wird über node.error gemeldet. |
| Roter Punkt „MQTT-Fehler“ | Der MQTT-Client hat einen Fehler gemeldet, zum Beispiel abgelehnte Zugangsdaten. Die Meldung „MQTT Error: …“ wird über node.error gemeldet. |
| Roter Ring „Getrennt“ | Die Verbindung wurde geschlossen. |
| Roter Punkt „Setup fehlgeschlagen“ | Die Initialisierung ist nach allen Versuchen gescheitert. Die Meldung „Nodes initialization failed: …“ wird über node.error gemeldet. |
Fehler werden über node.error gemeldet und können mit einem Catch-Node abgefangen werden. Nachrichten, die kein gültiges JSON enthalten, werden stillschweigend verworfen.
Hinweise
- Zugangsdaten und Nutzungsbedingungen: Der EDIS-Broker und die Pegelonline-Schnittstellen unterliegen den Nutzungsbedingungen der Wasserstraßen- und Schifffahrtsverwaltung des Bundes. Die Daten werden in der Regel unter der Datenlizenz Deutschland bereitgestellt; prüfen Sie die aktuellen Bedingungen auf der Pegelonline-Website.
- Dauerhafte Verbindung: Der Node hält eine ständige TLS-Verbindung (Keepalive 60 Sekunden, Verbindungsaufbau mit Zeitüberschreitung 30 Sekunden). Mehrere Node-Instanzen bauen jeweils eigene Verbindungen auf. Fassen Sie Stationen daher möglichst in einem Node zusammen.
- Proxy und Firewall: Für den Betrieb müssen ausgehende Verbindungen zu Port 8883 (MQTT über TLS) sowie HTTPS zu den Pegelonline-Endpunkten erlaubt sein.
- Admin-Endpunkte: Der Dialog lädt Gewässer und Stationen über die Endpunkte
/pegelonline/watersund/pegelonline/stationsdes Node-RED-Servers, die die Anfrage an die REST-API weiterreichen. - Einheiten: Die Einheiten stammen aus den Zeitreihen der Station und werden unverändert übernommen (zum Beispiel cm für Wasserstand, m³/s für Abfluss, °C für Temperaturen).
- Personenbezogene Daten: Die Daten beschreiben amtliche Pegelstationen und enthalten keine personenbezogenen Angaben.
dataProvidernennt die zuständige Behörde. - Ausgabeformat: Der Node liefert ein flaches Objekt ohne NGSI-LD-Kontext. Für einen Context Broker formen Sie die Daten mit dem NGSI-LD Builder um.