Zum Hauptinhalt springen
Data Connectors · Umwelt

openSenseMap

Der Node ruft für eine Liste ausgewählter senseBoxen die Stammdaten und die jeweils letzten Messwerte aller Sensoren von der openSenseMap-API ab. Die Boxen wählen Sie im Bearbeitungsdialog über eine Karte mit Bounding Box oder über eine manuelle Liste von Box-IDs aus.

  • Datenquelle
  • Triggerbasiert
  • Bürgersensorik
Node-Typ
opensensemap
Paket
@htag/node-red-contrib-hypertegrity-environment
Eingänge / Ausgänge
1 / 1
Datenquelle
openSenseMap-API (api.opensensemap.org)

Wofür Sie den Node verwenden​

Die openSenseMap ist eine offene Plattform für Umweltsensoren, auf der Schulen, Vereine und Privatpersonen ihre senseBoxen veröffentlichen. Der openSenseMap-Node holt die letzten Messwerte ausgewählter Boxen in einen Node-RED-Flow, ohne dass Sie die API selbst ansprechen müssen. Jede Box wird mit allen ihren Sensoren als ein Objekt ausgegeben.

Typische Einsatzfälle sind:

  • Lokale Umweltdaten wie Temperatur, Luftfeuchte oder Feinstaub aus einem Stadtgebiet in eine urbane Datenplattform übernehmen.
  • Bürgersensorik ergänzen, wenn amtliche Messstationen zu weit entfernt sind.
  • Dashboards speisen, die den Zustand mehrerer senseBoxen in einem Quartier zeigen.

So funktioniert der Node​

1

Auslösen

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

2

Boxen abrufen

Für jede konfigurierte Box-ID wird die API einzeln aufgerufen. Nicht erreichbare Boxen werden mit einer Warnung übersprungen.

3

Umformen

Jede Box wird in ein Objekt mit Standort, Stammdaten, Sensorliste und einem Messwert-Index nach Sensortyp überführt.

4

Ausgeben

Alle Boxen verlassen den Node in einer Nachricht als Array in msg.payload.

Ergebnis: Ein Array von Box-Objekten mit den jeweils letzten Messwerten aller Sensoren, ergänzt um Zähler für Boxen und Sensoren.

Der Node ist triggerbasiert. Kombinieren Sie ihn mit einem Inject-Node, der in einem festen Intervall auslöst. Zur Laufzeit ruft der Node ausschließlich die im Dialog gespeicherten Box-IDs ab. Die Bounding Box dient nur dazu, Boxen im Bearbeitungsdialog auf der Karte zu finden und auszuwählen. Ohne ausgewählte Boxen liefert der Node ein leeres Array.

Konfiguration​

Der Bearbeitungsdialog zeigt je nach Auswahlmodus entweder die Kartenauswahl oder ein Textfeld für Box-IDs. Die Felder API URL und Debug-Modus sind in beiden Modi sichtbar.

FeldTypStandardBedeutung
NameTextleerAnzeigename des Nodes im Flow. Ohne Namen zeigt der Node „openSenseMap: BBox“ oder „openSenseMap: n Boxes“.
AuswahlmodusAuswahl (bbox, ids)bboxBounding Box (Bereich auf Karte) zeigt eine Karte mit Suchfunktion; Manuelle Box-IDs zeigt ein Textfeld. In beiden Fällen wird am Ende eine Liste von Box-IDs gespeichert.
Manuelle ID(s)Text (nur Bounding-Box-Modus)leerKommagetrennte Box-IDs. Das Feld spiegelt die aktuell ausgewählten Boxen und kann auch direkt bearbeitet werden.
Stadt oder Adresse / SuchenText und SchaltflächeleerGeokodiert den Suchbegriff über den Nominatim-Dienst von OpenStreetMap und legt die Bounding Box um den gefundenen Punkt.
GrößeSchieberegler 200 m bis 20 000 m, Schritt 200 m1000 (1,0 km)Kantenlänge der Bounding Box in Metern. Gespeichert als bboxSize.
Nord (Breite), Ost (Länge), Süd (Breite), West (Länge)Zahl52.005, 7.505, 51.995, 7.495Eckkoordinaten der Bounding Box in Dezimalgrad. Gespeichert als Objekt bbox. Eine Änderung lädt die Boxenliste neu.
Boxen filternTextleerFiltert die Liste der gefundenen Boxen nach Name oder ID.
Sichtbare auswählen / Alle löschenSchaltflächen–Wählt alle gerade gelisteten Boxen aus bzw. leert die Auswahl.
Box IDsMehrzeiliger Text (nur Modus Manuelle Box-IDs)leerEine senseBox-ID pro Zeile. Gespeichert als Array boxIds.
API URLTextsiehe untenBasis-URL des Boxen-Endpunkts. Der Node hängt /<Box-ID> an.
Debug-ModusKontrollkästchenausSchreibt detaillierte Protokolle als Warnungen in die Debug-Seitenleiste.

Standardwerte der URL-Felder:

API URL: https://api.opensensemap.org/boxes
Auswahl ist eine Momentaufnahme

Die Karte zeigt Boxen, die zum Zeitpunkt der Bearbeitung innerhalb der Bounding Box liegen. Gespeichert werden nur die angehakten Box-IDs. Neue Boxen, die später im Gebiet erscheinen, werden nicht automatisch aufgenommen.

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 Boxen. Inhalt und Eigenschaften der Nachricht werden nicht übernommen.

Ausgang​

Der Node sendet pro Abruf eine Nachricht. msg.payload ist ein Array mit einem Objekt je erfolgreich abgerufener Box. Zusätzlich werden Zähler und die Rohdaten der API mitgegeben.

{
"payload": [
{
"id": "5f1a2b3c4d5e6f7a8b9c0d1e",
"name": "senseBox Beispielstadt Rathaus",
"location": {"type": "Point", "coordinates": [7.5001, 52.0002]},
"exposure": "outdoor",
"model": "homeV2Wifi",
"createdAt": "2024-03-01T10:00:00.000Z",
"updatedAt": "2026-10-01T08:10:00.000Z",
"lastMeasurementAt": "2026-10-01T08:10:00.000Z",
"grouptag": ["Beispielstadt"],
"sensors": {
"Temperatur": {"id": "5f1a2b3c4d5e6f7a8b9c0d1f", "title": "Temperatur", "sensorType": "HDC1080", "unit": "°C", "icon": "osem-thermometer", "value": "18.5", "timestamp": "2026-10-01T08:10:00.000Z"},
"PM10": {"id": "5f1a2b3c4d5e6f7a8b9c0d20", "title": "PM10", "sensorType": "SDS 011", "unit": "µg/m³", "icon": "osem-cloud", "value": "12.3", "timestamp": "2026-10-01T08:10:00.000Z"}
},
"measurements": {
"HDC1080": {"value": "18.5", "unit": "°C", "timestamp": "2026-10-01T08:10:00.000Z"},
"SDS 011": {"value": "12.3", "unit": "µg/m³", "timestamp": "2026-10-01T08:10:00.000Z"}
}
}
],
"boxCount": 1,
"sensorCount": 2,
"_rawBoxes": ["… unveränderte API-Antworten …"]
}
FeldBedeutung
payload[].idID der senseBox (Feld _id der API).
payload[].nameName der Box, wie von der Betreiberin oder dem Betreiber vergeben.
payload[].locationGeoJSON-Punkt in der Reihenfolge Länge, Breite. Fehlt der Standort, sind beide Werte null.
payload[].exposureAufstellungsort laut API, zum Beispiel outdoor, indoor oder mobile; sonst unknown.
payload[].modelHardware-Modell der Box; sonst unknown.
payload[].createdAt, updatedAt, lastMeasurementAtZeitstempel aus den Stammdaten der Box.
payload[].grouptagGruppen-Tags der Box als Array; leer, wenn keine vergeben sind.
payload[].sensorsObjekt, dessen Schlüssel der Sensortitel ist. Jeder Eintrag enthält id, title, sensorType, unit, icon sowie value und timestamp der letzten Messung. Ohne Messung sind value und timestamp null.
payload[].measurementsKurzindex der letzten Messwerte, Schlüssel ist der sensorType (ersatzweise der Titel). Enthält value, unit und timestamp.
boxCountAnzahl der erfolgreich abgerufenen Boxen.
sensorCountSumme aller Sensoren über alle Boxen.
_rawBoxesUnveränderte API-Antworten der Boxen zur Nachverfolgung.

Die Messwerte werden so übernommen, wie die API sie liefert, in der Regel als Zeichenkette. Sind keine Boxen konfiguriert oder keine erreichbar, sendet der Node payload: [] mit boxCount: 0 und sensorCount: 0 ohne _rawBoxes.

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

Schritt 1

Inject

Ein Inject-Node mit dem Namen „Go!“ löst den Abruf manuell aus.

Schritt 2

openSenseMap

Der Node ist im Bounding-Box-Modus ohne ausgewählte Boxen vorkonfiguriert. Wählen Sie im Dialog Boxen aus, bevor Sie deployen.

Schritt 3

Debug

Ein Debug-Node „Sensor Outputs“ zeigt das Array der Box-Objekte in der Seitenleiste.

Beispiel-Flow als JSON anzeigen
[
{"id": "tab1", "type": "tab", "label": "OpenSensemap", "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": 100, "y": 100, "wires": [["osm1"]]},
{"id": "osm1", "type": "opensensemap", "z": "tab1", "name": "", "selectionMode": "bbox", "boxIds": [], "bbox": {"north": 52.005, "east": 7.505, "south": 51.995, "west": 7.495}, "bboxSize": 1000, "apiUrl": "https://api.opensensemap.org/boxes", "debug": false, "x": 400, "y": 100, "wires": [["debug1"]]},
{"id": "debug1", "type": "debug", "z": "tab1", "name": "Sensor Outputs", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "payload", "targetType": "msg", "x": 720, "y": 100, "wires": []}
]

Status und Fehler​

AnzeigeBedeutung
Grauer Ring „no boxes selected“Beim Start sind keine Box-IDs konfiguriert.
Grauer Punkt „n boxes ready“Beim Start sind n Box-IDs konfiguriert; der Node wartet auf einen Auslöser.
Blauer Punkt „fetching...“Der Abruf läuft.
Gelber Ring „no boxes selected“Der Abruf wurde ausgelöst, aber es sind keine Boxen konfiguriert oder keine erreichbar. Es wird ein leeres Array gesendet.
Grüner Punkt „n boxes (m sensors)“Der Abruf war erfolgreich; n Boxen mit insgesamt m Sensoren wurden ausgegeben.
Roter Ring „API Error“Ein unerwarteter Fehler beim Zusammenstellen der Anfragen. Die Meldung „API Error: …“ wird über node.error gemeldet.
Roter Ring „error“Der Abruf ist fehlgeschlagen. Die Meldung „Failed to fetch data: …“ wird über node.error gemeldet.
Warnung „Failed to fetch box …“Eine einzelne Box konnte nicht geladen werden (Zeitüberschreitung nach 10 Sekunden oder Fehlerantwort). Der Abruf der übrigen Boxen läuft weiter.

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

Hinweise​

  • Kein API-Schlüssel nötig: Die openSenseMap-API ist ohne Registrierung lesbar. Beachten Sie die Nutzungsbedingungen des Betreibers und wählen Sie ein moderates Abrufintervall, da jede Box einzeln angefragt wird.
  • Externe Dienste im Editor: Die Adresssuche im Bearbeitungsdialog sendet den Suchbegriff direkt aus dem Browser an den Nominatim-Dienst von OpenStreetMap. Die Kartenbibliothek Leaflet wird von unpkg.com geladen. Beide Aufrufe finden nur beim Bearbeiten statt, nicht zur Laufzeit.
  • Admin-Endpunkt: Zum Laden der Boxenliste nutzt der Dialog den Endpunkt /opensensemap/boxes der Node-RED-Admin-API, der die Anfrage serverseitig an die openSenseMap-API weiterreicht (Zeitüberschreitung 30 Sekunden).
  • Zugriff nach Titel oder Typ: Das Objekt sensors ist nach Sensortitel indiziert und enthält alle Sensoren einer Box. Das Objekt measurements bietet einen Schnellzugriff auf die letzten Messwerte nach Sensortyp.
  • Personenbezogene Daten: Viele senseBoxen werden von Privatpersonen betrieben. Boxnamen, Gruppen-Tags und Standorte können Rückschlüsse auf Personen erlauben. Prüfen Sie vor der Weitergabe in einen Context Broker, ob diese Angaben veröffentlicht werden dürfen.
  • Einheiten: Die Einheiten stammen aus den Sensordefinitionen der jeweiligen Box (zum Beispiel °C, %, hPa, µg/m³) und werden unverändert übernommen.
  • Ausgabeformat: Der Node liefert ein flaches Box-Objekt, keine NGSI-LD-Entität. Für einen Context Broker formen Sie die Daten mit dem NGSI-LD Builder um.

Weiterführende Themen​

Referenzen​