Zum Hauptinhalt springen
Data Connectors · Wetter

OpenUV Index

Der Node fragt die OpenUV.io-API nach dem aktuellen UV-Index, Ozonwert und den sicheren Sonnenzeiten für einen oder mehrere Standorte ab. Optional liefert er zusätzlich die stündliche UV-Vorhersage des Tages. Die Ergebnisse werden als NGSI-LD-nahe Objekte vom Typ UVIndexObservation und UVIndexForecast ausgegeben.

  • Datenquelle
  • Triggerbasiert
  • API-Schlüssel
Node-Typ
openuv
Paket
@htag/node-red-contrib-hypertegrity-weather
Eingänge / Ausgänge
1 / 2
Datenquelle
OpenUV.io API (api.openuv.io/api/v1)

Wofür Sie den Node verwenden​

Der UV-Index beschreibt die sonnenbrandwirksame Strahlung und ist eine wichtige Kenngröße für Gesundheitsschutz im öffentlichen Raum. OpenUV.io stellt diesen Wert in Echtzeit für beliebige Koordinaten bereit, berechnet aus Satellitendaten zur Ozonschicht. Der OpenUV-Index-Node bindet den Dienst in Node-RED ein und übernimmt die Authentifizierung, die Abfrage je Standort und die Umformung in ein einheitliches Datenmodell.

Typische Einsatzfälle sind:

  • UV-Hinweise für Freibäder, Schulhöfe und Spielplätze auf Anzeigetafeln oder in einer Bürger-App.
  • Gesundheitsdashboards einer Kommune mit UV-Index, Ozon und sicheren Sonnenzeiten je Hauttyp.
  • Tagesverlauf des UV-Index als Vorhersage für Veranstaltungsplanung oder Bewässerungssteuerung.

So funktioniert der Node​

1

Auslösen

Eine eingehende Nachricht startet den Abruf. Der Node fragt OpenUV.io nicht von selbst ab.

2

Abfragen

Für jeden Standort wird der Endpunkt /uv mit Breiten- und Längengrad aufgerufen, bei aktivierter Vorhersage zusätzlich /forecast.

3

Umformen

Die Antwort wird in ein UVIndexObservation-Objekt umgeformt; jeder Vorhersagepunkt wird zu einem eigenen UVIndexForecast-Objekt.

4

Ausgeben

Ausgang 1 erhält je Standort eine Beobachtung, Ausgang 2 je Vorhersagestunde eine eigene Nachricht.

Ergebnis: UV-Beobachtungen und -Vorhersagen mit Geoposition, die direkt in den NGSI-LD Builder geführt werden können.

Der Node ist triggerbasiert. Kombinieren Sie ihn mit einem Inject-Node, der in einem festen Intervall auslöst. Beachten Sie dabei das Kontingent Ihres OpenUV.io-Tarifs: Jeder Auslöser verursacht eine Anfrage je Standort und bei aktivierter Vorhersage eine weitere. Die Standorte werden nacheinander abgefragt, der Timeout je Anfrage beträgt 10 Sekunden.

Konfiguration​

Der Bearbeitungsdialog besteht aus dem Feld Name und zwei Registerkarten.

Registerkarte „Standorte“​

FeldTypStandardBedeutung
NameTextleerAnzeigename des Nodes im Flow.
KartenauswahlKarte–Ein Klick auf die Karte setzt einen Punkt; „Ausgewählten Punkt hinzufügen“ übernimmt ihn in die Liste. Bereits vorhandene Koordinaten werden mit „Dieser Standort wurde bereits hinzugefügt“ abgewiesen.
Ausgewählte Standorte (locations)ListeleerEinträge mit Standortname (name), Breitengrad (lat) und Längengrad (lon). Der Name wird Teil der Entitäts-ID und erscheint in locationName.

Registerkarte „Einstellungen“​

FeldTypStandardBedeutung
API-Schlüssel (apiKey)Passwortfeld, PflichtfeldleerIhr OpenUV.io-API-Schlüssel. Er wird als HTTP-Header x-access-token gesendet.
Vorhersage (outputForecast)KontrollkästcheninaktivVorhersagedaten im Output einbeziehen: fragt zusätzlich den Endpunkt /forecast ab und bedient Ausgang 2.

API-Schlüssel beziehen​

Registrieren Sie sich auf openuv.io und erzeugen Sie im Dashboard einen API-Schlüssel. OpenUV.io bietet einen kostenlosen Tarif mit begrenztem Tageskontingent sowie kostenpflichtige Tarife mit höheren Limits; die aktuellen Konditionen finden Sie auf der Website des Anbieters.

Eingang​

Der Eingang dient ausschließlich als Auslöser. Der Node wertet keine Eigenschaft der Eingangsnachricht aus und übernimmt sie auch nicht in die Ausgabe.

EigenschaftTypBedeutung
msgbeliebigJede Nachricht startet den Abruf für alle konfigurierten Standorte.

Ausgang​

Der Node hat zwei Ausgänge. Beide Payloads sind weitgehend flache Objekte; nur location ist bereits als NGSI-LD-GeoProperty strukturiert. Sie können an den NGSI-LD Builder übergeben werden.

Ausgang 1: UVIndexObservation​

Je Standort eine Nachricht mit msg.topic = "uv-observation" und msg.location = Standortname.

{
"id": "urn:ngsi-ld:UVIndexObservation:Freibad_Beispielstadt",
"type": "UVIndexObservation",
"uVIndex": 3.2,
"uVIndexMax": 4.1,
"uVIndexMaxTime": "2026-10-01T11:20:00.000Z",
"ozone": 298.5,
"ozoneTime": "2026-10-01T07:00:00.000Z",
"safeExposure": {"st1": 52, "st2": 62, "st3": 83, "st4": 104, "st5": 166, "st6": 311},
"sunInfo": {
"sun_times": {"sunrise": "2026-10-01T05:25:00.000Z", "sunset": "2026-10-01T16:58:00.000Z"},
"sun_position": {"azimuth": 0.42, "altitude": 0.61}
},
"location": {"type": "GeoProperty", "value": {"type": "Point", "coordinates": [7.77, 49.44]}},
"locationName": "Freibad Beispielstadt"
}
FeldBedeutung
idurn:ngsi-ld:UVIndexObservation: plus Standortname; alle Zeichen außer Buchstaben und Ziffern werden durch _ ersetzt.
typeImmer UVIndexObservation.
uVIndexAktueller UV-Index (dimensionslos, OpenUV uv).
uVIndexMaxTagesmaximum des UV-Index (OpenUV uv_max).
uVIndexMaxTimeZeitpunkt des Tagesmaximums (OpenUV uv_max_time, ISO 8601).
ozoneOzonsäule in Dobson-Einheiten (OpenUV ozone).
ozoneTimeZeitstempel der Ozonmessung (OpenUV ozone_time).
safeExposureSichere Sonnenzeit in Minuten je Hauttyp st1 bis st6 nach Fitzpatrick (OpenUV safe_exposure_time), unverändert übernommen.
sunInfoSonnenauf- und -untergangszeiten sowie Sonnenstand (OpenUV sun_info), unverändert übernommen.
locationGeoProperty mit GeoJSON-Punkt [Länge, Breite] des Standorts.
locationNameDer von Ihnen vergebene Standortname.

Ausgang 2: UVIndexForecast​

Nur bei aktivierter Vorhersage. Je Vorhersagepunkt (stündlich für den laufenden Tag) eine eigene Nachricht mit msg.topic = "uv-forecast" und msg.location = Standortname.

{
"id": "urn:ngsi-ld:UVIndexForecast:Freibad_Beispielstadt",
"type": "UVIndexForecast",
"dateIssued": "2026-10-01T12:00:00.000Z",
"uVIndex": 3.8,
"sunPosition": {"azimuth": 0.55, "altitude": 0.58},
"location": {"type": "GeoProperty", "value": {"type": "Point", "coordinates": [7.77, 49.44]}},
"locationName": "Freibad Beispielstadt"
}
FeldBedeutung
idurn:ngsi-ld:UVIndexForecast: plus bereinigter Standortname.
typeImmer UVIndexForecast.
dateIssuedZeitpunkt, für den der Vorhersagewert gilt (OpenUV uv_time).
uVIndexVorhergesagter UV-Index.
sunPositionSonnenstand zum Vorhersagezeitpunkt (OpenUV sun_position).
location, locationNameWie bei Ausgang 1.

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 → openuv-io. Alternativ laden Sie die Datei openuv-io.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.

Schritt 2

OpenUV Index

Der Node fragt OpenUV.io für die konfigurierten Standorte ab. Im Beispiel sind API-Schlüssel und Standortliste leer und müssen ergänzt werden.

Schritt 3

Debug

Zwei Debug-Nodes zeigen Beobachtung und Vorhersage in der Seitenleiste an.

Beispiel-Flow als JSON anzeigen
[
{"id": "tab1", "type": "tab", "label": "openuv-io", "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": 100, "wires": [["uv1"]]},
{"id": "uv1", "type": "openuv", "z": "tab1", "name": "", "apiKey": "", "locations": [], "outputForecast": false, "x": 300, "y": 100, "wires": [["debug1"], ["debug2"]]},
{"id": "debug1", "type": "debug", "z": "tab1", "name": "Observation", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "payload", "targetType": "msg", "x": 490, "y": 80, "wires": []},
{"id": "debug2", "type": "debug", "z": "tab1", "name": "Forecast", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "payload", "targetType": "msg", "x": 480, "y": 120, "wires": []}
]

Status und Fehler​

AnzeigeBedeutung
Roter Ring „Kein API-Schlüssel konfiguriert“Das Feld API-Schlüssel ist leer. Der Abruf wird nicht gestartet; der Fehler wird zusätzlich über node.error gemeldet.
Grauer Ring „Keine Standorte konfiguriert“Die Standortliste ist leer. Der Abruf wird nicht gestartet.
Blauer Punkt „Abrufen…“Der Abruf läuft.
Grüner Punkt „Aktiv: n“Alle n Standorte wurden erfolgreich abgefragt.
Gelber Punkt „Aktiv: n, Fehler: m“n Standorte erfolgreich, m Standorte mit Fehler.
Roter Ring „Fehler beim Abrufen“Kein Standort konnte abgefragt werden.
Fehler „Fehler beim Abrufen der UV-Daten (Standort): …“Die Anfrage an /uv ist für diesen Standort gescheitert, zum Beispiel wegen eines ungültigen Schlüssels, eines erschöpften Kontingents oder eines Timeouts.
Warnung „Fehler beim Abrufen der Vorhersage (Standort): …“Die Anfrage an /forecast ist gescheitert; die Beobachtung wurde trotzdem ausgegeben.

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

Hinweise​

  • Kontingent und Rate Limits: OpenUV.io begrenzt die Zahl der Anfragen je Tag abhängig vom Tarif. Jeder Auslöser verursacht eine Anfrage je Standort, bei aktivierter Vorhersage zwei. Bei 5 Standorten und stündlichem Abruf entstehen also 120 beziehungsweise 240 Anfragen pro Tag. Nachts liefert OpenUV.io einen UV-Index von 0; sparen Sie Anfragen, indem Sie nur zwischen Sonnenaufgang und Sonnenuntergang auslösen.
  • Nutzungsbedingungen: Die Nutzung der API unterliegt den Bedingungen von OpenUV.io. Prüfen Sie vor einer Veröffentlichung der Daten, ob Ihr Tarif dies erlaubt.
  • Kontextspeicher: Der Node speichert keine Daten im Node-RED-Kontext.
  • Proxy: Es gibt keine eigene Proxy-Einstellung; axios beachtet die Umgebungsvariablen HTTP_PROXY und HTTPS_PROXY.
  • Einheiten: UV-Index dimensionslos nach WHO-Skala, Ozon in Dobson-Einheiten, sichere Sonnenzeiten in Minuten, Sonnenstand in Radiant.
  • Externe Dienste im Editor: Die Karte lädt Kacheln von OpenStreetMap; der Browser mit dem Node-RED-Editor benötigt dafür Internetzugang.
  • Personenbezogene Daten: Die Ausgabe enthält Koordinaten und die von Ihnen vergebenen Standortnamen. Verwenden Sie keine Namen von Privatpersonen oder private Adressen als Standortnamen, wenn die Daten veröffentlicht werden.
  • Datenmodell: Die Ausgabetypen UVIndexObservation und UVIndexForecast folgen den Konventionen der Smart Data Models (flache Attribute, GeoProperty für location).

Weiterführende Themen​

Referenzen​