Zum Hauptinhalt springen
Data Connectors · Wetter

Nivus Regenschreiber

Der Node liest die kumulierte Füllhöhe von Nivus-Regenschreibern über die Nivus DataKiosk API, berechnet daraus den Niederschlag seit der letzten Messung und gibt je Station ein WeatherObserved- und ein WaterObserved-Objekt aus. Stationen wählen Sie in einer Doppelliste aus, die der Node direkt aus der API befüllt.

  • Datenquelle
  • Triggerbasiert
  • API-Schlüssel
Node-Typ
nivus-rainfall
Paket
@htag/node-red-contrib-hypertegrity-weather
Eingänge / Ausgänge
1 / 2
Datenquelle
Nivus DataKiosk API (datakiosk-api.nivusweb.com/api/v2)

Wofür Sie den Node verwenden​

Regenschreiber von Nivus erfassen Niederschlag als kumulierte Füllhöhe eines Sammelbehälters und übertragen ihre Messwerte in das Nivus-Portal. Die DataKiosk API stellt diese Werte bereit. Der Nivus-Regenschreiber-Node übernimmt die Authentifizierung, das Zusammenführen von Stammdaten und aktuellen Werten sowie die Umrechnung in Niederschlag je Messintervall.

Typische Einsatzfälle sind:

  • Lokale Niederschlagsmessung aus dem eigenen Sensornetz in einen NGSI-LD Context Broker übernehmen.
  • Starkregen-Monitoring für Kanalnetz, Hochwasserschutz oder Bauhof mit stündlichen Niederschlagswerten.
  • Füllstände der Sammelbehälter überwachen, um Wartung und Entleerung zu planen.

So funktioniert der Node​

1

Auslösen

Eine eingehende Nachricht startet den Durchlauf. Ohne Eingangsnachricht erzeugt der Node keine Ausgabe.

2

Stammdaten laden

Über GET /stations und GET /stations/{Id} ermittelt der Node Name, GPS-Position und den Wert-Kanal jeder Station und legt sie im Node-Kontext ab.

3

Werte abrufen

Über POST /channels/curdata holt der Node die aktuellen Kanalwerte, verwirft Platzhalterwerte und verknüpft den Rest mit den Stammdaten.

4

Niederschlag berechnen und ausgeben

Die Differenz der Füllhöhe zur vorherigen Gerätemessung ergibt den Niederschlag. Ausgang 1 erhält WeatherObserved, Ausgang 2 WaterObserved.

Ergebnis: Je Station ein Niederschlags- und ein Füllhöhenobjekt mit Geoposition, als Array oder als Einzelnachrichten.

Der Node ist triggerbasiert. Jede Eingangsnachricht schreibt zunächst den Stammdaten-Cache neu und ruft dann die aktuellen Werte ab. Zusätzlich kann der Node den Cache in einem festen Intervall und beim Start vorwärmen; diese Läufe erzeugen keine Ausgabe.

Der Niederschlag ist die Zunahme der kumulierten Füllhöhe zwischen zwei unterschiedlichen Gerätemessungen, erkannt am Zeitstempel CurValueTS. Beim ersten Abruf einer Station ist der Wert 0. Lösen Sie den Node mehrfach aus, ohne dass eine neue Messung vorliegt, wird der zuletzt berechnete Wert erneut ausgegeben und die Bezugshöhe bleibt erhalten. Negative Differenzen durch Behälterentleerung oder Zählerüberlauf werden auf 0 begrenzt.

Konfiguration​

Der Bearbeitungsdialog ist in vier Registerkarten unterteilt.

Registerkarte „Allgemein“​

FeldTypStandardBedeutung
NameTextleerAnzeigename des Nodes im Flow.
Nachrichtenformat (messageFormat)AuswahlEine Nachricht (Array)Eine Nachricht (Array): je Ausgang eine Nachricht mit allen Entitäten als Array. Eine Nachricht pro Station: je Station und Ausgang eine eigene Nachricht.

Registerkarte „Stationen“​

FeldTypStandardBedeutung
Verfügbare Stationen / Ausgewählte Stationen (stations)DoppellisteleerBeschränkt den Abruf auf die rechte Liste. Ohne Auswahl werden alle Stationen der API abgefragt. „Neu laden“ holt die Stationsliste erneut über die API, „Auswahl leeren“ entfernt alle Einträge. Das Suchfeld filtert die linke Liste.

Die Stationsliste lädt der Editor über das Node-RED-Backend mit dem gespeicherten API-Schlüssel beziehungsweise der Umgebungsvariable API_KEY. Dafür ist nach dem Eintragen eines neuen Schlüssels gegebenenfalls ein Deploy nötig.

Registerkarte „Authentifizierung“​

FeldTypStandardBedeutung
API Key (apiKey)Credential (Passwort)leerWird als HTTP-Header X-API-Key gesendet. Leer lassen, um die Umgebungsvariable API_KEY des Node-RED-Prozesses zu verwenden.

Registerkarte „Erweitert“​

FeldTypStandardBedeutung
API Basis-URLText, Pflichtfeldsiehe untenBasis aller API-Aufrufe. Gespeichert als apiBase.
Wert-KanalText, Pflichtfeldin1_valKanal, dessen Name oder ExchangeName die Messwerte liefert. Stationen ohne diesen Kanal werden übersprungen. Gespeichert als channelName.
Cache-Intervall (Min.)Zahl120Periodisches Neuschreiben des Stammdaten-Caches in Minuten. 0 = nur bei Eingangsnachricht. Erzeugt keine Ausgabe. Gespeichert als cacheInterval.
Cache beim Start ladenKontrollkästchenaktivWärmt den Cache etwa zwei Sekunden nach Deploy oder Start vor. Erzeugt keine Ausgabe. Gespeichert als fetchOnStartup.
Timeout (Sek.)Zahl60HTTP-Timeout je Anfrage. Gespeichert als requestTimeout.
WeatherObserved-TypText, PflichtfeldWeatherObservedEntitätstyp für Ausgang 1. Gespeichert als weatherType.
WaterObserved-TypText, PflichtfeldWaterObservedEntitätstyp für Ausgang 2. Gespeichert als waterType.
ID-PräfixTexturn:ngsi-ld:Die Entitäts-ID entsteht aus Präfix, Typ, Doppelpunkt und Stations-ID (siehe Beispiel unter Ausgang 1). Gespeichert als idPrefix.
Debug-ModusKontrollkästcheninaktivGibt detaillierte Protokolle mit dem Präfix [Nivus] als Warnungen in der Debug-Seitenleiste aus. Gespeichert als debug.

Standardwerte der URL-Felder:

API Basis-URL: https://datakiosk-api.nivusweb.com/api/v2

API-Schlüssel beziehen​

Der Schlüssel für die DataKiosk API gehört zu Ihrem Nivus-Kundenkonto. Wenden Sie sich an Ihren Nivus-Ansprechpartner oder den Nivus-Support, um den Zugang zur DataKiosk API freischalten zu lassen. Kontingente und Nutzungsbedingungen ergeben sich aus Ihrem Vertrag mit Nivus; der Node selbst setzt keine Limits.

Eingang​

Der Eingang dient als Auslöser. Der Inhalt der Nachricht wird nicht ausgewertet; ihre Eigenschaften werden jedoch in die Ausgangsnachrichten übernommen, soweit sie nicht von payload, topic oder nivus überschrieben werden.

EigenschaftTypBedeutung
msgbeliebigJede Nachricht startet Stammdaten-Abgleich und Werteabruf. Läuft bereits ein Werteabruf, wird der neue Durchlauf übersprungen.

Ausgang​

Alle Attribute werden flach ausgegeben; nur location ist als NGSI-LD-GeoProperty strukturiert, wie es der Stellio Context Broker erwartet. Die Objekte können an den NGSI-LD Builder übergeben werden.

Ausgang 1: WeatherObserved​

Im Array-Modus ein Array aller Stationen mit msg.topic = "WeatherObserved", im Einzelmodus je Station eine Nachricht mit msg.topic = Entitäts-ID.

[
{
"id": "urn:ngsi-ld:WeatherObserved:123",
"type": "WeatherObserved",
"name": "Regenschreiber Kläranlage",
"alternateName": "in1_val",
"location": {"type": "GeoProperty", "value": {"type": "Point", "coordinates": [7.77, 49.44]}},
"dateObserved": "2026-10-01T08:00:12.000Z",
"precipitation": 1.4,
"nivusHeight": 238.6
}
]
FeldBedeutung
idID-Präfix + WeatherObserved-Typ + : + Stations-ID.
typeDer konfigurierte WeatherObserved-Typ.
nameStationsname aus der API.
alternateNameName des Wert-Kanals (Channel.Name).
locationGeoProperty mit GeoJSON-Punkt [Länge, Breite] aus den GPS-Daten der Station.
dateObservedZeitpunkt des Abrufs im ISO-8601-Format.
precipitationNiederschlag seit der vorherigen Gerätemessung, zwei Nachkommastellen, in der Einheit des Kanals nach Anwendung von Unit.Factor (bei Regenschreibern mm).
nivusHeightRohwert CurValue des Sensors ohne Umrechnung.

Ausgang 2: WaterObserved​

Im Array-Modus ein Array aller Stationen mit msg.topic = "WaterObserved", im Einzelmodus je Station eine Nachricht mit msg.topic = Entitäts-ID.

[
{
"id": "urn:ngsi-ld:WaterObserved:123",
"type": "WaterObserved",
"name": "Regenschreiber Kläranlage",
"alternateName": "in1_val",
"location": {"type": "GeoProperty", "value": {"type": "Point", "coordinates": [7.77, 49.44]}},
"dateObserved": "2026-10-01T07:55:00.000Z",
"height": 238.6,
"waterLevel": 1.4
}
]
FeldBedeutung
idID-Präfix + WaterObserved-Typ + : + Stations-ID.
typeDer konfigurierte WaterObserved-Typ.
name, alternateName, locationWie bei Ausgang 1.
dateObservedZeitstempel der Gerätemessung (CurValueTS).
heightKumulierte Füllhöhe CurValue × Unit.Factor, zwei Nachkommastellen.
waterLevelÄnderung der Füllhöhe seit der vorherigen Messung, identisch mit precipitation.

Zusätzliche Nachrichteneigenschaften​

EigenschaftBedeutung
msg.nivusMetadaten zum Abruf: source (Nivus DataKiosk API), apiBase, channelName, retrievedAt, stationCount und containsPersonalData: false.
msg.topicIm Array-Modus der Entitätstyp, im Einzelmodus die Entitäts-ID.

Beispiel-Flow​

Das Paket bringt einen Beispiel-Flow mit. Sie importieren ihn in Node-RED über Menü → Importieren → Beispiele → @htag/node-red-contrib-hypertegrity-weather → nivus. Alternativ laden Sie die Datei nivus.json herunter und importieren sie über Menü → Importieren.

Schritt 1

Inject

Ein Inject-Node löst den Abruf manuell oder in einem festen Intervall aus, passend zur Messrate der Geräte.

Schritt 2

Nivus Regenschreiber

Der Node fragt alle Stationen des Kontos ab. Im Beispiel muss der API-Schlüssel ergänzt werden.

Schritt 3

Debug

Zwei Debug-Nodes zeigen WeatherObserved und WaterObserved in der Seitenleiste an.

Beispiel-Flow als JSON anzeigen
[
{"id": "tab1", "type": "tab", "label": "Nivus", "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": 150, "y": 160, "wires": [["nivus1"]]},
{"id": "nivus1", "type": "nivus-rainfall", "z": "tab1", "name": "", "apiBase": "https://datakiosk-api.nivusweb.com/api/v2", "channelName": "in1_val", "stations": [], "weatherType": "WeatherObserved", "waterType": "WaterObserved", "idPrefix": "urn:ngsi-ld:", "messageFormat": "array", "cacheInterval": 120, "requestTimeout": 60, "fetchOnStartup": true, "debug": false, "x": 380, "y": 160, "wires": [["debug1"], ["debug2"]]},
{"id": "debug1", "type": "debug", "z": "tab1", "name": "WeatherObserved", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "payload", "targetType": "msg", "x": 610, "y": 140, "wires": []},
{"id": "debug2", "type": "debug", "z": "tab1", "name": "WaterObserved", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "payload", "targetType": "msg", "x": 600, "y": 180, "wires": []}
]

Status und Fehler​

AnzeigeBedeutung
Blauer Punkt „loading metadata...“Stammdaten werden geladen.
Blauer Punkt „loading values...“Aktuelle Werte werden abgerufen.
Grüner Punkt „n station(s)“Der Durchlauf war erfolgreich; n Stationen wurden ausgegeben.
Grüner Ring „n station(s) cached“Ein Cache-Lauf (Start oder Intervall) hat n Stationen gespeichert; es wurde keine Ausgabe erzeugt.
Gelber Ring „no stations“Es wurden keine Stationen mit dem konfigurierten Wert-Kanal gefunden.
Roter Ring „error“Ein Durchlauf ist fehlgeschlagen; Details liefert die zugehörige Fehlermeldung.
Fehler „Nivus input run failed: …“ / „Nivus value fetch failed: …“Stammdaten oder Werte konnten nicht geladen werden, zum Beispiel „No API key configured (credential or env API_KEY).“
Fehler „Nivus metadata refresh failed: …“Ein Cache-Lauf ist fehlgeschlagen.
Warnung „Nivus: failed to load station …: …“Der Detailabruf einer einzelnen Station ist gescheitert; sie wird übersprungen.

Fehler werden über node.error mit der auslösenden Nachricht gemeldet und können mit einem Catch-Node abgefangen werden.

Hinweise​

  • API-Aufrufe je Durchlauf: Jede Eingangsnachricht erzeugt einen Listenaufruf, einen Detailaufruf je Station und einen Werteabruf. Eine Stationsauswahl reduziert die Detailaufrufe. Lösen Sie den Node nicht häufiger aus als die Geräte messen, typischerweise stündlich.
  • Kontextspeicher: Stammdaten (stationsMeta) und Bezugshöhen (heights) liegen im Node-Kontext. Mit dem Standard-Kontextspeicher gehen sie bei Neustart oder Deploy verloren; der erste Niederschlagswert danach ist 0. Konfigurieren Sie in settings.js einen persistenten Kontextspeicher, wenn die Berechnung Neustarts überdauern soll.
  • Umgebungsvariable: Ohne eingetragenen Schlüssel liest der Node API_KEY aus der Umgebung des Node-RED-Prozesses, zum Beispiel aus einem Container-Secret.
  • Proxy: Es gibt keine eigene Proxy-Einstellung; axios beachtet die Umgebungsvariablen HTTP_PROXY und HTTPS_PROXY.
  • Einheiten: Füllhöhe und Niederschlag werden in der Einheit des Kanals nach Unit.Factor ausgegeben; bei Regenschreibern ist das mm. Werte mit der Platzhalter-Einheit 00000000-0000-0000-0000-000000000000 werden verworfen.
  • Personenbezogene Daten: Die Ausgabe enthält nur technische Stations- und Messdaten einschließlich der GPS-Position der Messstellen. msg.nivus.containsPersonalData ist stets false.

Weiterführende Themen​

Referenzen​