LANUK Hochwasser
Der Node lädt die ZIP-Datei mit den aktuellen Wasserständen des Hochwasserportals NRW (Betreiber: Landesamt für Natur, Umwelt und Klima, LANUK), entpackt die enthaltene CSV-Datei und verknüpft sie mit der Stationsliste. Das Ergebnis sind FloodMonitoring-Entitäten nach dem FIWARE Smart Data Model, wahlweise mit dem letzten Wert oder der kompletten Zeitreihe.
- Node-Typ
- lanuk
- Paket
- @htag/node-red-contrib-hypertegrity-environment
- Eingänge / Ausgänge
- 1 / 1
- Datenquelle
- Hochwasserportal NRW (hochwasserportal.nrw)
Wofür Sie den Node verwenden
Das Hochwasserportal NRW veröffentlicht die Wasserstände der Landespegel in Nordrhein-Westfalen als regelmäßig aktualisiertes Archiv. Der LANUK-Node holt dieses Archiv in einen Node-RED-Flow, ordnet jeder Messung die Stammdaten des Pegels zu und bildet alles auf das Smart Data Model FloodMonitoring ab, einschließlich Gefahrenschwelle und Hochwasserstatus.
Typische Einsatzfälle sind:
- Pegel an Landesgewässern wie Ruhr, Lippe, Sieg oder Wupper in einen NGSI-LD Context Broker übernehmen.
- Hochwasser-Warnflows aufbauen, die den Status
Dangerauswerten und Benachrichtigungen auslösen. - Zeitreihen eines Pegels für Dashboards oder Analysen bereitstellen.
So funktioniert der Node
Auslösen
Eine eingehende Nachricht oder der Poll-Timer startet den Abruf. Läuft bereits ein Abruf, wird der neue übersprungen.
Herunterladen
Stationsliste (JSON) und Messwertarchiv (ZIP mit CSV) werden parallel geladen; die CSV wird entpackt.
Verknüpfen
Die Messungen werden nach Stationsnummer gruppiert, sortiert und mit Name, Einzugsgebiet, Koordinaten und Schwellenwerten der Station ergänzt.
Ausgeben
Je Station entsteht eine FloodMonitoring-Entität, ausgegeben als ein Array oder als eine Nachricht pro Station.
Ergebnis: FloodMonitoring-Entitäten mit aktuellem Wasserstand in Zentimetern, Status, Standort und Abrufmetadaten in msg.lanuk.
Der Node kann triggerbasiert oder per Polling arbeiten. Mit Poll-Intervall 0 löst nur eine eingehende Nachricht den Abruf aus. Mit einem Intervall größer als 0 ruft der Node zusätzlich selbstständig ab und, falls aktiviert, einmal etwa 2 Sekunden nach dem Start. Eigenschaften der auslösenden Nachricht werden in die Ausgabe übernommen.
Konfiguration
Der Bearbeitungsdialog ist in die Registerkarten Allgemein, Stationen, Quellen und Erweitert gegliedert.
Registerkarte Allgemein
| Feld | Typ | Standard | Bedeutung |
|---|---|---|---|
| Name | Text | leer | Anzeigename des Nodes im Flow. Ohne Namen zeigt der Node „LANUK Hochwasser“. |
| Output-Modus | Auswahl (latest, timeseries) | latest | Nur letzter Wert gibt je Station den jüngsten Messwert aus; Komplette Zeitreihe ergänzt jede Entität um ein Array measurements mit allen Werten des Archivs. |
| Nachrichtenformat | Auswahl (array, split) | array | Eine Nachricht (Array) sendet alle Entitäten in einer Nachricht; Eine Nachricht pro Station sendet je Entität eine eigene Nachricht. |
Registerkarte Stationen
| Feld | Typ | Standard | Bedeutung |
|---|---|---|---|
| Nur Stationen mit aktuellen Messwerten anzeigen | Kontrollkästchen (nur Dialog) | aktiv | Blendet in der linken Liste nur Stationen ein, die im aktuellen Archiv Messwerte haben. Ist das Archiv nicht erreichbar, werden alle Stationen gezeigt. |
| Verfügbare Stationen / Ausgewählte Stationen | Doppelliste mit Suchfeld | keine Auswahl | Mit den Pfeiltasten verschieben Sie Stationen in die rechte Liste. Gespeichert werden die Stationsnummern im Array stations. Ohne Auswahl gibt der Node alle Stationen mit Messwerten aus. |
| Neu laden / Auswahl leeren | Schaltflächen | – | Lädt die Stationsliste erneut bzw. entfernt die gesamte Auswahl. |
Registerkarte Quellen
| Feld | Typ | Standard | Bedeutung |
|---|---|---|---|
| Messwerte-ZIP | Text (Pflichtfeld) | siehe unten | Adresse des Messwertarchivs. Die enthaltene Textdatei ist eine CSV mit Semikolon als Trennzeichen und den Spalten station_no, time, value. |
| Stationsliste | Text (Pflichtfeld) | siehe unten | Adresse der Stationsstammdaten. |
| Poll-Intervall (Min.) | Zahl | 0 | Abrufintervall in Minuten. 0 schaltet das Polling ab; dann löst nur eine Eingangsnachricht den Abruf aus. |
| Beim Start abrufen | Kontrollkästchen | aktiv | Führt bei aktivem Polling etwa 2 Sekunden nach dem Deployment einen ersten Abruf aus. |
| Timeout (Sek.) | Zahl | 60 | Zeitüberschreitung für die beiden Downloads in Sekunden. |
Standardwerte der URL-Felder:
Messwerte-ZIP: https://www.hochwasserportal.nrw/data/downloads/messwerte.zip
Stationsliste: https://www.hochwasserportal.nrw/data/internet/stations/stations.json
Registerkarte Erweitert
| Feld | Typ | Standard | Bedeutung |
|---|---|---|---|
| Entity-Typ | Text (Pflichtfeld) | FloodMonitoring | Wert des Feldes type in jeder Entität und msg.topic im Array-Modus. |
| ID-Präfix | Text | urn:ngsi-ld:FloodMonitoring:LANUK: | Präfix der Entitäts-ID. Die ID entsteht aus Präfix und Stationsnummer. |
| Debug-Modus | Kontrollkästchen | aus | Schreibt detaillierte Protokolle als Warnungen in die Debug-Seitenleiste. |
Eingang
Jede eingehende Nachricht löst einen Abruf aus. Der Node wertet keine speziellen Eigenschaften aus, reicht die Nachricht aber als Basis an die Ausgabe weiter.
| Eigenschaft | Typ | Bedeutung |
|---|---|---|
msg | beliebig | Startet den Abruf. Alle Eigenschaften der Nachricht bleiben in der Ausgabe erhalten; payload, topic und lanuk werden überschrieben. |
Trifft eine Nachricht ein, während ein Abruf läuft, wird sie übersprungen (im Debug-Modus mit Hinweis).
Ausgang
Im Nachrichtenformat Array sendet der Node eine Nachricht mit allen Entitäten; im Format pro Station je Entität eine Nachricht mit msg.topic gleich der Entitäts-ID. In beiden Fällen enthält msg.lanuk Metadaten zum Abruf.
{
"payload": [
{
"id": "urn:ngsi-ld:FloodMonitoring:LANUK:2718130000100",
"type": "FloodMonitoring",
"stationID": "2718130000100",
"currentLevel": 84,
"observationDateTime": "2026-10-01T08:00:00+02:00",
"name": "Musterstadt",
"areaServed": "Musterbach",
"dataProvider": "LANUK",
"location": {"type": "Point", "coordinates": [7.0101, 51.4502]},
"dangerLevel": 180,
"referenceLevel": 112.5,
"floodLevelStatus": "Normal",
"source": "https://www.hochwasserportal.nrw/data/internet/stations/stations.json",
"unitCode": "CMT"
}
],
"topic": "FloodMonitoring",
"lanuk": {
"dataModel": "FloodMonitoring",
"source": "LANUK Hochwasserportal NRW",
"zipUrl": "https://www.hochwasserportal.nrw/data/downloads/messwerte.zip",
"stationsUrl": "https://www.hochwasserportal.nrw/data/internet/stations/stations.json",
"outputMode": "latest",
"retrievedAt": "2026-10-01T08:15:00.000Z",
"stationCount": 1,
"unmatchedStations": 0,
"containsPersonalData": false
}
}
| Feld | Bedeutung |
|---|---|
id | ID-Präfix gefolgt von der Stationsnummer. |
type | Konfigurierter Entity-Typ, standardmäßig FloodMonitoring. |
stationID | Stationsnummer (station_no) aus dem Archiv. |
currentLevel | Jüngster Wasserstand der Station in Zentimetern. |
observationDateTime | Zeitstempel des jüngsten Messwerts, unverändert aus der CSV-Spalte time. |
name | Stationsname aus den Stammdaten; fehlt, wenn die Station nicht in der Stationsliste steht. |
areaServed | Einzugsgebiet (catchment_name) aus den Stammdaten. |
dataProvider | Betreiber laut Stammdaten (LANUV_Betr, ersatzweise site_name); ohne Stammdaten LANUK. |
location | GeoJSON-Punkt in der Reihenfolge Länge, Breite; nur vorhanden, wenn die Stammdaten Koordinaten liefern. |
dangerLevel | Mittleres Hochwasser (MHW) in Zentimetern aus den Stammdaten; entfällt bei fehlendem Wert oder 0. |
referenceLevel | Pegelnullpunkt (station_gauge_datum) in Zentimetern; entfällt bei fehlendem Wert oder 0. |
floodLevelStatus | Danger, wenn currentLevel die Gefahrenschwelle erreicht oder überschreitet, sonst Normal. Entfällt ohne dangerLevel. |
source | Konfigurierte Adresse der Stationsliste. |
unitCode | Immer CMT (UN/CEFACT-Code für Zentimeter). |
measurements | Nur im Modus Komplette Zeitreihe: Array von Objekten mit observedAt und currentLevel, chronologisch sortiert. |
lanuk.stationCount | Anzahl der ausgegebenen Entitäten. |
lanuk.unmatchedStations | Anzahl der Stationen mit Messwerten, aber ohne Eintrag in der Stationsliste. |
lanuk.containsPersonalData | Immer false; die Daten enthalten keine personenbezogenen Angaben. |
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 → lanuk. Alternativ laden Sie die Datei lanuk.json herunter und importieren sie über Menü → Importieren.
Inject
Ein Inject-Node „Go!“ löst den Abruf manuell aus. Alternativ stellen Sie im Node ein Poll-Intervall ein.
LANUK Hochwasser
Der Node ist mit den Standardendpunkten, ohne Stationsauswahl und im Modus „Nur letzter Wert“ als Array vorkonfiguriert.
Debug
Ein Debug-Node „Lanuk Output“ zeigt das Array der FloodMonitoring-Entitäten in der Seitenleiste.
Beispiel-Flow als JSON anzeigen
[
{"id": "tab1", "type": "tab", "label": "Lanuk", "disabled": false, "info": ""},
{"id": "inject1", "type": "inject", "z": "tab1", "name": "Go!", "props": [{"p": "payload"}, {"p": "topic", "vt": "str"}], "repeat": "", "crontab": "", "once": false, "onceDelay": 0.1, "topic": "", "payload": "", "payloadType": "date", "x": 110, "y": 120, "wires": [["lanuk1"]]},
{"id": "lanuk1", "type": "lanuk", "z": "tab1", "name": "", "zipUrl": "https://www.hochwasserportal.nrw/data/downloads/messwerte.zip", "stationsUrl": "https://www.hochwasserportal.nrw/data/internet/stations/stations.json", "stations": [], "outputMode": "latest", "messageFormat": "array", "entityType": "FloodMonitoring", "idPrefix": "urn:ngsi-ld:FloodMonitoring:LANUK:", "pollInterval": 0, "requestTimeout": 60, "fetchOnStartup": true, "debug": false, "x": 320, "y": 120, "wires": [["debug1"]]},
{"id": "debug1", "type": "debug", "z": "tab1", "name": "Lanuk Output", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "payload", "targetType": "msg", "x": 550, "y": 120, "wires": []}
]
Status und Fehler
| Anzeige | Bedeutung |
|---|---|
| Blauer Punkt „Lade Daten...“ | Stationsliste und Messwertarchiv werden heruntergeladen. |
| Blauer Punkt „Verarbeite...“ | Die CSV wird geparst und mit den Stammdaten verknüpft. |
| Grüner Punkt „n stations“ | Der Abruf war erfolgreich; n Entitäten wurden gesendet. |
| Roter Ring „Fehler beim Abruf“ | Download, Entpacken oder Verarbeitung sind fehlgeschlagen. Die Meldung „LANUK fetch failed: …“ wird über node.error mit der auslösenden Nachricht gemeldet. |
Fehler können mit einem Catch-Node abgefangen werden. Im Dialog erscheint die Meldung „Stationsliste konnte nicht geladen werden.“, wenn der Admin-Endpunkt die Stationsliste nicht abrufen kann.
Hinweise
- Datenvolumen und Intervall: Das Messwertarchiv ist etwa 1 MB groß und wird bei jedem Abruf vollständig geladen. Wählen Sie ein Poll-Intervall, das zur Aktualisierungsfrequenz des Portals passt; Intervalle von 15 Minuten oder mehr sind in der Regel ausreichend. Es ist kein API-Schlüssel erforderlich.
- Nutzungsbedingungen: Beachten Sie die Nutzungs- und Lizenzbedingungen des Hochwasserportals NRW für die Weiterverwendung der Daten.
- Admin-Endpunkt: Der Dialog lädt die Stationsliste über
/lanuk/stationsdes Node-RED-Servers. Der Endpunkt verlangt die Berechtigunglanuk.readund hält die Liste der Stationen mit Messwerten für 5 Minuten im Cache. - Einheiten: Wasserstände, Gefahrenschwelle und Pegelnullpunkt sind in Zentimetern angegeben (
unitCode: CMT). Dezimalkommas in der CSV werden in Punkte umgewandelt. - Ausgabeformat: Die Entität ist ein flaches Objekt mit NGSI-ähnlicher ID. Für einen Context Broker formen Sie die Daten mit dem NGSI-LD Builder um.
- Personenbezogene Daten: Die Datensätze enthalten ausschließlich technische Stations- und Messdaten und keine personenbezogenen Angaben. Das Feld
dataProvidernennt den Betreiber der Station.