Zum Hauptinhalt springen
Data Connectors · Umwelt

Luftdaten (UBA)

Der Node fragt die Luftdaten-API v4 des Umweltbundesamts (UBA) für ausgewählte Messstationen ab. Er gibt am ersten Ausgang je Station die jüngste Messung als AirQualityObserved-Entität und am zweiten Ausgang eine Liste stündlicher AirQualityForecast-Entitäten aus.

  • Datenquelle
  • Triggerbasiert
  • AirQualityObserved
Node-Typ
luftdaten
Paket
@htag/node-red-contrib-hypertegrity-environment
Eingänge / Ausgänge
1 / 2
Datenquelle
Luftdaten-API v4 des Umweltbundesamts

Wofür Sie den Node verwenden​

Das Umweltbundesamt veröffentlicht die Messwerte der amtlichen Luftmessnetze der Länder über eine offene API. Der Luftdaten-Node holt diese Werte für die Stationen, die Sie auf einer Karte auswählen, in einen Node-RED-Flow und bildet sie auf die Smart Data Models AirQualityObserved und AirQualityForecast ab.

Typische Einsatzfälle sind:

  • Amtliche Luftqualität einer Stadt oder Region in einen NGSI-LD Context Broker übernehmen.
  • Feinstaub-, Stickstoffdioxid- und Ozonwerte in Dashboards und Warn-Flows auswerten.
  • Vorhersagen für die nächsten Stunden anzeigen, zum Beispiel für Hinweise an Radfahrende oder Sportveranstaltungen.

So funktioniert der Node​

1

Auslösen

Eine beliebige eingehende Nachricht startet den Abruf. Der Node fragt die API nicht von selbst ab.

2

Stationsliste laden

Die Stammdaten aller Stationen werden geladen und eine Stunde lang zwischengespeichert.

3

Messwerte und Vorhersage abrufen

Je Station werden die Messwerte von gestern bis heute und die Vorhersage für den Vorschauzeitraum abgefragt.

4

Ausgeben

Je Station verlässt die jüngste Messung Ausgang 1 und die Liste der Vorhersagestunden Ausgang 2.

Ergebnis: Pro Station eine AirQualityObserved-Entität und ein Array von AirQualityForecast-Entitäten, gefiltert auf die gewählten Schadstoffkomponenten.

Der Node ist triggerbasiert. Kombinieren Sie ihn mit einem Inject-Node, der stündlich auslöst, da das UBA die Messwerte als Stundenmittel bereitstellt. Die Stationen werden nacheinander abgefragt; für jede Station sendet der Node ein eigenes Nachrichtenpaar. Scheitert eine einzelne Abfrage, gibt der Node eine Warnung aus und fährt mit der nächsten Station fort.

Konfiguration​

Der Bearbeitungsdialog ist in die Registerkarten Stationen und Einstellungen gegliedert.

Registerkarte Stationen​

FeldTypStandardBedeutung
NameTextleerAnzeigename des Nodes im Flow. Ohne Namen zeigt der Node „UBA Luftdaten“.
Stationen auswählenKarte mit Listekeine AuswahlStationen wählen Sie per Klick auf einen Kartenmarker oder einen Listeneintrag. Gespeichert wird je Station ein Objekt mit id, name, lat und lon im Array stations.
Ort oder Adresse eingeben / SuchenText und SchaltflächeleerGeokodiert den Suchbegriff über den Nominatim-Dienst von OpenStreetMap und zeichnet einen Suchkreis um den Treffer. Ein Klick auf die Karte setzt den Kreis ebenfalls.
RadiusSchieberegler 5 km bis 100 km, Schritt 5 km25 kmRadius des Suchkreises. Stationen innerhalb des Kreises werden in der Liste hervorgehoben.
Liste filternTextleerFiltert die Stationsliste nach Name oder Stations-ID.
Sichtbare auswählen / Alle löschenSchaltflächen–Wählt alle gerade gelisteten Stationen aus bzw. entfernt die gesamte Auswahl und setzt den Radius zurück.

Registerkarte Einstellungen​

FeldTypStandardBedeutung
API Basis-URLTextsiehe untenBasis-URL der UBA-API. Der Node hängt die Pfade stations/json, airquality/json und airqualityforecast/json an.
KomponentenKontrollkästchenPM10, PM2.5, NO2, O3Schadstoffe, die in die Entitäten übernommen werden: PM10, PM2.5, NO2 (Stickstoffdioxid), O3 (Ozon), SO2 (Schwefeldioxid), CO (Kohlenmonoxid). Gespeichert als Array components mit den Werten PM10, PM25, NO2, O3, SO2, CO.
Vorschau (Stunden)Zahl24Anzahl der Stunden, für die Vorhersagedaten abgefragt und ausgegeben werden.

Standardwerte der URL-Felder:

API Basis-URL: https://luftdaten.umweltbundesamt.de/api/air-data/v4/
Stationen ohne Messwerte

Die Stationsliste enthält alle Stationen, die im zurückliegenden Jahr Luftqualitätsdaten geliefert haben. Nicht jede Station misst jede Komponente. Fehlt eine Komponente an einer Station, fehlt sie auch in der Entität.

Eingang​

Der Eingang dient ausschließlich als Auslöser. Der Node wertet keine Eigenschaften der eingehenden Nachricht aus.

EigenschaftTypBedeutung
msgbeliebigJede Nachricht startet einen Abruf aller konfigurierten Stationen. Inhalt und Eigenschaften der Nachricht werden nicht in die Ausgabe übernommen.

Ausgang​

Der Node besitzt zwei Ausgänge mit den Beschriftungen Current Air Quality und Air Quality Forecast. Je Station sendet er ein Nachrichtenpaar; fehlt für eine Station einer der beiden Teile, ist der betreffende Ausgang für diese Station leer.

Ausgang 1: Aktuelle Messwerte​

msg.payload enthält eine AirQualityObserved-Entität mit der jüngsten verfügbaren Messung der Station. Die Schadstoffwerte sind flache Zahlenattribute, sodass die Entität direkt an den NGSI-LD Builder übergeben werden kann.

{
"id": "urn:ngsi-ld:AirQualityObserved:Germany-UBA-123",
"type": "AirQualityObserved",
"dateObserved": "2026-10-01T07:00:00+01:00",
"location": {"type": "Point", "coordinates": [7.4601, 51.5102]},
"address": {
"type": "Property",
"value": {"addressLocality": "Beispielstadt Mitte", "addressCountry": "DE"}
},
"source": "UBA Luftdaten API v4",
"PM10": 18,
"NO2": 22.5,
"PM25": 9,
"O3": 61
}
FeldBedeutung
idurn:ngsi-ld:AirQualityObserved:Germany-UBA- gefolgt von der numerischen Stations-ID des UBA.
typeImmer AirQualityObserved.
dateObservedZeitstempel der Messung aus der API, ergänzt um die Zeitzonenangabe +01:00.
locationGeoJSON-Punkt in der Reihenfolge Länge, Breite aus den Stationsstammdaten. Fehlen diese, steht hier [0, 0].
addressOrtsangabe im NGSI-LD-Property-Format mit dem Stationsnamen als addressLocality und DE als addressCountry.
sourceImmer UBA Luftdaten API v4.
PM10, PM25, NO2, O3, SO2, COMesswerte der gewählten Komponenten als Zahl. Nur Komponenten, die ausgewählt sind und an der Station gemessen werden, erscheinen.

Ausgang 2: Vorhersage​

msg.payload enthält ein Array von AirQualityForecast-Entitäten, je eine pro Vorhersagestunde innerhalb des Vorschauzeitraums.

[
{
"id": "urn:ngsi-ld:AirQualityForecast:Germany-UBA-123",
"type": "AirQualityForecast",
"dateIssued": "2026-10-01T08:15:00.000Z",
"validFrom": "2026-10-01T09:00:00+01:00",
"validTo": "2026-10-01T10:00:00+01:00",
"location": {"type": "Point", "coordinates": [7.4601, 51.5102]},
"address": {
"type": "Property",
"value": {"addressLocality": "Beispielstadt Mitte", "addressCountry": "DE"}
},
"source": "UBA Luftdaten API v4",
"PM10": 17,
"NO2": 20,
"O3": 58
}
]
FeldBedeutung
idurn:ngsi-ld:AirQualityForecast:Germany-UBA- gefolgt von der Stations-ID.
typeImmer AirQualityForecast.
dateIssuedZeitpunkt des Abrufs im ISO-8601-Format (UTC).
validFrom, validToBeginn und Ende der Vorhersagestunde aus der API, ergänzt um +01:00.
location, address, sourceWie am ersten Ausgang.
KomponentenVorhergesagte Werte der gewählten Komponenten als Zahl.

Die Entitäten enthalten keine Einheitenangabe. Maßgeblich sind die Einheiten der UBA-API, die in der API-Dokumentation je Komponente beschrieben sind.

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 → lufdaten-api. Alternativ laden Sie die Datei lufdaten-api.json herunter und importieren sie über Menü → Importieren.

Schritt 1

Inject

Ein Inject-Node löst den Abruf manuell aus. Für den Dauerbetrieb stellen Sie ein stündliches Intervall ein.

Schritt 2

Luftdaten

Der Node ist ohne Stationen vorkonfiguriert. Wählen Sie im Dialog mindestens eine Station aus, bevor Sie deployen.

Schritt 3

Zwei Debug-Nodes

„Current Data“ zeigt die AirQualityObserved-Entitäten, „Forecast Data“ die Vorhersage-Arrays.

Beispiel-Flow als JSON anzeigen
[
{"id": "tab1", "type": "tab", "label": "Luftdaten Api", "disabled": false, "info": ""},
{"id": "inject1", "type": "inject", "z": "tab1", "name": "", "props": [{"p": "payload"}, {"p": "topic", "vt": "str"}], "repeat": "", "crontab": "", "once": false, "onceDelay": 0.1, "topic": "", "payload": "", "payloadType": "date", "x": 120, "y": 140, "wires": [["uba1"]]},
{"id": "uba1", "type": "luftdaten", "z": "tab1", "name": "", "stations": [], "components": ["PM10", "NO2", "PM25", "O3"], "apiBaseUrl": "https://luftdaten.umweltbundesamt.de/api/air-data/v4/", "lookahead": 24, "x": 300, "y": 140, "wires": [["debug1"], ["debug2"]]},
{"id": "debug1", "type": "debug", "z": "tab1", "name": "Current Data", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "payload", "targetType": "msg", "x": 510, "y": 100, "wires": []},
{"id": "debug2", "type": "debug", "z": "tab1", "name": "Forecast Data", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "payload", "targetType": "msg", "x": 520, "y": 160, "wires": []}
]

Status und Fehler​

AnzeigeBedeutung
Roter Ring „no station selected“Der Abruf wurde ausgelöst, aber es ist keine Station konfiguriert. Die Meldung „No station selected“ wird über node.error gemeldet.
Blauer Punkt „fetching...“Der Abruf läuft.
Grüner Punkt „Obs: n, Forecast: m“Der Abruf ist abgeschlossen; n Messwert-Entitäten und m Vorhersage-Entitäten wurden gesendet.
Roter Punkt „error“Der Abruf ist insgesamt fehlgeschlagen, zum Beispiel weil die Stationsliste nicht geladen werden konnte. Die Meldung „Processing failed: …“ wird über node.error gemeldet.
Warnung „Observed data fetch failed for …“Die Messwertabfrage einer einzelnen Station ist nach drei Versuchen gescheitert. Die übrigen Stationen werden weiter verarbeitet.
Warnung „Forecast fetch failed for …“Die Vorhersageabfrage einer einzelnen Station ist nach drei Versuchen gescheitert.

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

Hinweise​

  • Kein API-Schlüssel nötig: Die Luftdaten-API des UBA ist frei zugänglich. Der Node nutzt eine Zeitüberschreitung von 15 Sekunden und wiederholt jede Anfrage bis zu dreimal mit kurzer Pause.
  • Stationscache: Die Stationsliste wird prozessweit für eine Stunde zwischengespeichert, auch über mehrere Node-Instanzen hinweg. Ein Neustart von Node-RED leert den Cache.
  • Externe Dienste im Editor: Die Adresssuche sendet den Suchbegriff direkt aus dem Browser an den Nominatim-Dienst von OpenStreetMap; die Kartenbibliothek Leaflet wird von unpkg.com geladen. Die Stationsliste lädt der Dialog über den Admin-Endpunkt /luftdaten/stations des Node-RED-Servers.
  • Einheiten: Die Werte werden ohne Einheit und ohne Umrechnung übernommen (Konzentrationen in metrischen Einheiten gemäß UBA-API, in der Regel µg/m³).
  • Personenbezogene Daten: Die Daten beschreiben amtliche Messstationen und enthalten keine personenbezogenen Angaben.

Weiterführende Themen​

Referenzen​