Zum Hauptinhalt springen
Data Operations · NGSI-LD und Stellio

NGSI-LD Builder

Der Node wandelt beliebige JSON-Objekte in normalisierte NGSI-LD-Entitäten um. Er lädt den JSON-LD-@context und das zugehörige Smart-Data-Model-Schema, bietet eine interaktive Feldzuordnung, erzeugt URN-IDs, erkennt GeoProperty und Relationship automatisch und kann das Ergebnis gegen das Schema validieren.

  • Transformation
  • Smart Data Models
  • NGSI-LD
Node-Typ
ngsi-builder
Paket
@htag/node-red-contrib-hypertegrity-ngsi-ld
Eingänge / Ausgänge
1 / 1
Ziel
Stellio Context Broker (NGSI-LD)

Wofür Sie den Node verwenden​

Die Data-Connector-Nodes der Bibliothek liefern flache Objekte, zum Beispiel ein NewsObserved- oder WeatherObserved-Objekt mit einfachen Schlüssel-Wert-Paaren. Ein NGSI-LD Context Broker wie Stellio erwartet dagegen die normalisierte NGSI-LD-Form: Jedes Attribut ist ein Objekt mit type (Property, GeoProperty oder Relationship), einem Wert und optional einem Zeitstempel observedAt. Der NGSI-LD Builder übernimmt genau diese Umformung und ergänzt die Entität um eine URN-ID und den @context.

Typische Einsatzfälle sind:

  • Connector-Ausgaben (RSS Feed, Wetter, Pegelstände, Parkplätze) in Smart-Data-Model-konforme Entitäten umformen und anschließend mit Post to Stellio veröffentlichen.
  • Fremde APIs oder CSV-Importe über das Beispiel-JSON und die interaktive Feldzuordnung schrittweise auf ein Datenmodell abbilden.
  • Geodaten aus getrennten Breiten- und Längengradfeldern oder aus Koordinaten-Arrays als GeoJSON-location erzeugen.
  • Datenqualität sichern, indem Pflichtfelder, Wertebereiche und Aufzählungen aus dem Schema geprüft werden, bevor die Daten den Broker erreichen.

So funktioniert der Node​

1

Auslösen

Eine eingehende Nachricht startet die Verarbeitung. Ein optionaler Themenfilter lässt nur passende msg.topic-Werte durch.

2

ID bilden

Aus Entitätstyp, optionalem ID-Segment und der Eingangs-ID entsteht die URN. Die Entität erhält type und @context.

3

Zuordnen

Je nach Modus (Smart, Einfach, Benutzerdefiniert) werden Eingangsfelder zu Property, GeoProperty oder Relationship.

4

Anpassen

Standort-Analyse, Transformations-Skript, globale Felder und Überschreibungen ergänzen oder ändern die Entität.

5

Prüfen und senden

Optional wird die Entität gegen das Smart-Data-Model-Schema geprüft. Das Ergebnis verlässt den Node als Array in msg.payload.

Ergebnis: Ein Array normalisierter NGSI-LD-Entitäten, das direkt an Post to Stellio übergeben werden kann.

Der Node ist nachrichtenbasiert: Er verarbeitet jede eingehende Nachricht sofort und fragt selbst keine Daten ab. Enthält msg.payload ein Array, wird jedes Element einzeln in eine Entität umgeformt; ein einzelnes Objekt ergibt ein Array mit einer Entität. Verschachtelte Arrays (Array aus Arrays) werden verworfen.

Beim Öffnen des Dialogs ruft der Node den @context und das Schema des Entitätstyps über einen Proxy des Node-RED-Servers ab. Beide werden eine Stunde lang zwischengespeichert; die Schaltfläche Cache leeren/erneuern erzwingt ein Neuladen.

Konfiguration​

Der Bearbeitungsdialog ist in fünf Registerkarten gegliedert. Beschriftungen entsprechen der deutschen Oberfläche.

Registerkarte Allgemein​

FeldTypStandardBedeutung
NameTextleerAnzeigename des Nodes im Flow.
ThemenfilterTextleerExakter Vergleich mit msg.topic oder regulärer Ausdruck in Schrägstrichen, zum Beispiel /^sensor\//. Nicht passende Nachrichten werden verworfen.
Kontext-URLText (Pflicht)siehe untenURL des JSON-LD-@context. Platzhalter der Form ${VAR} werden beim Start des Nodes aus Umgebungsvariablen ersetzt. Die URL wird unverändert in das Feld @context jeder Entität geschrieben.
EntitätstypText (Pflicht)leerNGSI-LD-Zieltyp, zum Beispiel WeatherObserved. Der Typ muss im @context auf ein Schema verweisen, damit die Schema-Erkennung funktioniert.
Konfig ID-SegmentTextleerOptionales Namenssegment in der URN. Ergebnis: urn:ngsi-ld:<Typ>:[<Segment>:]<Eingangs-ID>.
Cache leeren/erneuernSchaltfläche–Löscht den serverseitigen Kontext- und Schema-Cache.
Debug-Modus aktivierenKontrollkästchenausGibt Eingabe, Konfiguration und Ergebnis als node.warn in der Debug-Seitenleiste aus.

Standardwerte der URL-Felder:

Kontext-URL: https://context.${DOMAIN}/main-context

Registerkarte Mapping​

FeldTypStandardBedeutung
Mapping-ModusAuswahl (Pflicht)leerSmart Modus, Einfacher Modus oder Benutzerdefinierter Modus, siehe unten.
Beispiel-JSON (Key-Value)TextfeldleerEin Beispielobjekt (oder Array) Ihrer Eingangsdaten. Nach Beispiel parsen stehen alle Schlüssel, auch verschachtelte in Punktschreibweise wie location.coordinates, in den Auswahllisten zur Verfügung.
Globales observedAt ÜberschreibenKontrollkästchenausAktiviert die Übernahme des Zeitstempels aus einem Eingangsfeld.
QuellfeldAuswahlleerEingangsfeld mit einem ISO-8601-Zeitstempel (muss ein T enthalten). Ist das Feld leer oder ungültig, wird die Systemzeit verwendet.
Erforderliche Felder ignorierenKontrollkästchenausErlaubt das Speichern ohne Zuordnung aller Pflichtfelder. Zur Laufzeit werden Elemente mit fehlenden Pflichtfeldern dann nicht mehr verworfen.
Schema laden/bearbeitenSchaltfläche–Lädt @context und Schema und zeigt alle Zielattribute des Datenmodells mit Beschreibung an. Pflichtfelder sind mit * markiert.
Felder suchenTextleerFiltert die Liste der Zielattribute nach Name oder Beschreibung.
Feld-MappingListeleerJe Zielattribut eine Auswahl des Quellfeldes sowie ein Uhr-Symbol, das observedAt für dieses Attribut ein- oder ausschaltet. Für das Attribut type gibt es den Eintrag « Entitätstyp aus Allgemein ».
Mappings anwendenSchaltfläche–Übernimmt die Zuordnung, prüft Pflichtfelder und blendet nicht zugeordnete Attribute aus. Wird location zugeordnet, aktiviert der Node automatisch die Standort-Analyse.
Benutzerdefiniertes MappingListeleerNur im benutzerdefinierten Modus: freie Paare aus Quellfeld, Ziel-Eigenschaftsname und Uhr-Symbol für observedAt.

Die drei Modi unterscheiden sich so:

  • Smart Modus: Die Zielattribute kommen aus dem Smart-Data-Model-Schema. Sie ordnen jedem Attribut ein Quellfeld zu. Fehlt zur Laufzeit ein Pflichtfeld, wird das Element verworfen (außer Erforderliche Felder ignorieren ist aktiv).
  • Einfacher Modus: Jeder Schlüssel des Eingangsobjekts wird 1:1 zu einem gleichnamigen Attribut. Die Schlüssel id, type, @context und observedAt werden übersprungen. Ein Feld location mit ungültigen Koordinaten wird ausgelassen.
  • Benutzerdefinierter Modus: Nur die Paare aus Benutzerdefiniertes Mapping werden übernommen. Ein Eingangsfeld location wird zusätzlich automatisch als GeoProperty übernommen, falls es nicht bereits gesetzt ist.
Smart Data Model auswählen

Tragen Sie zuerst die Kontext-URL und den Entitätstyp ein, zum Beispiel WeatherObserved. Der Node sucht den Typ im @context, folgt der dort hinterlegten Schema-URL, löst $ref- und allOf-Verweise auf und listet alle Attribute des Datenmodells mit Beschreibung und Pflichtkennzeichen auf. Fügen Sie dann ein Beispiel-JSON ein, klicken Sie auf Beispiel parsen und wählen Sie je Attribut das passende Quellfeld.

Registerkarte Standort​

FeldTypStandardBedeutung
Erweiterte Standort-Analyse aktivierenKontrollkästchenausErzeugt aus den folgenden Feldern eine GeoProperty location. Ist sie aktiv, haben Mapping-Einträge auf location keine Wirkung mehr.
Geo-TypAuswahlPunktPunkt, Linienzug, Polygon, MultiPunkt, MultiLinienzug oder MultiPolygon.
PositionsformatAuswahlSeparate Felder (Breite, Länge)Nur bei Punkt: getrennte Felder oder ein Array [x, y].
Breitengrad / LängengradAuswahlleerQuellfelder bei getrennten Feldern. Werte werden als Dezimalzahl gelesen.
Koordinaten-Array FeldAuswahlleerQuellfeld bei Array-Format für Punkt.
Polygon-Array FeldTextleerQuellfeld mit dem GeoJSON-coordinates-Array für Linienzug, Polygon und Multi-Typen.
Koordinaten-ReihenfolgeAuswahlLänge, Breite (GeoJSON Standard)Reihenfolge innerhalb der Arrays. Bei Breite, Länge tauscht der Node alle Paare rekursiv in GeoJSON-Reihenfolge.

Eine Kartenvorschau zeigt die aus dem Beispiel-JSON ermittelte Geometrie an. Ungültige Koordinaten (Breite außerhalb −90 bis 90, Länge außerhalb −180 bis 180) werden als Fehler unter der Karte gemeldet.

Registerkarte Logik​

FeldTypStandardBedeutung
Benutzerdefinierte TransformationslogikKontrollkästchenausAktiviert das Skript.
Transformations-Skript (JavaScript)Code-EditorleerLäuft nach dem Mapping in einer Sandbox. Verfügbar sind entity (die bisher erzeugte Entität, direkt änderbar), item (das Eingangsobjekt), msg (Kopie der Nachricht mit payload = item), console, setTimeout und die Hilfsfunktion formatProperty(key, value, observedAt, includeObservedAt).

Die Feldreferenz unter dem Editor listet alle aktuell gemappten Attribute; ein Klick fügt entity.<Attribut>.value = an der Cursorposition ein. Mit dem Skript lassen sich auch Metadaten ergänzen, die der Builder nicht automatisch setzt, zum Beispiel entity.temperature.unitCode = "CEL";.

Registerkarte Erweitert​

FeldTypStandardBedeutung
Globale Wert-ÜberschreibungenListe (Feld, Wert, Typ)leerStatische Werte für jede Entität. Typen: string, number, boolean, object, array. Das Feld id ersetzt die komplette URN, type den Entitätstyp; andere Felder werden als Property gesetzt.
Datenmodell-Validierung aktivierenKontrollkästchenanPrüft die fertige Entität gegen das Schema. Fehlende Pflichtfelder führen immer zum Verwerfen der Entität.
Zusätzliche Felder außerhalb des KontextsKontrollkästchenausAttribute, die nicht im Schema stehen, gelten als ungültig.
Fehlende optionale FelderKontrollkästchenausOptionale Schemafelder ohne Wert gelten als ungültig.
Ungültige Werte (Typ, Bereich, Enum)KontrollkästchenausPrüft value jedes Attributs auf Typ, enum, minimum/maximum, minLength / maxLength und pattern.
Ungültige optionale Felder verarbeitenAuswahlUngültige Eigenschaft überspringenUngültige Eigenschaft überspringen entfernt nur das betroffene Attribut, Entität entfernen verwirft die ganze Entität, Ignorieren (nur Warnung) gibt sie unverändert aus.
Globale benutzerdefinierte FelderListe (Quelle, Ziel)leerZusätzliche Eingangsfelder, die in allen Modi auf ein Zielattribut abgebildet werden. Ein Ziel id liefert die Eingangs-ID für die URN-Bildung.

Eingang​

EigenschaftTypBedeutung
msg.payloadObjekt oder Array von ObjektenDie umzuformenden Datensätze. Jedes Element wird zu genau einer Entität. Elemente, die keine Objekte sind, werden übersprungen. Ein Array aus Arrays wird komplett verworfen.
msg.topicTextWird nur ausgewertet, wenn ein Themenfilter konfiguriert ist.
msg.payload[].idTextDient als Eingangs-ID, wenn weder Überschreibung, benutzerdefiniertes Feld noch Mapping eine ID liefern. Beginnt der Wert mit urn:, wird er unverändert als id übernommen.
msg.payload[].<Quellfeld>beliebigQuellfelder gemäß Mapping, Standort-Analyse und observedAt-Quellfeld. Punktschreibweise und Array-Indizes wie data.items[0].value werden unterstützt.
msg (gesamt)ObjektSteht dem Transformations-Skript als msg zur Verfügung.

So entsteht die URN-ID​

Die ID wird in dieser Reihenfolge bestimmt:

  1. Globale Wert-Überschreibung mit Feld id: Der Wert ist die endgültige ID.
  2. Globales benutzerdefiniertes Feld mit Ziel id: Der Wert des Quellfeldes ist die Eingangs-ID.
  3. Mapping (Smart oder benutzerdefiniert) mit Ziel id: Der Wert des Quellfeldes ist die Eingangs-ID.
  4. Eingangsfeld id des Datensatzes.
  5. Zufällige UUID in der Form Entity-<uuid>, wenn nichts davon zutrifft.

Beginnt die Eingangs-ID bereits mit urn:, wird sie unverändert verwendet. Sonst bildet der Node urn:ngsi-ld:<Entitätstyp>:<Konfig ID-Segment>:<Eingangs-ID>; das Segment entfällt, wenn es leer ist.

So werden Attribute typisiert​

EingangswertErgebnis
Text, der mit urn: beginntRelationship mit object
Zielattribut location oder Objekt mit GeoJSON-type (Point, LineString, Polygon, MultiPoint, MultiLineString, MultiPolygon)GeoProperty mit value
alles andere (Zahl, Text, Boolean, Objekt, Array)Property mit value

Ist observedAt für das Attribut aktiv, wird der Zeitstempel ergänzt (Quellfeld oder Systemzeit). Zielnamen in Punktschreibweise wie address.streetAddress erzeugen eine Property address, deren value ein Objekt mit dem Unterfeld ist. Einen unitCode setzt der Node nicht automatisch; ergänzen Sie ihn bei Bedarf im Transformations-Skript.

Ausgang​

msg.payload enthält immer ein Array von Entitäten, auch wenn nur ein Objekt eingegangen ist. Alle übrigen Nachrichteneigenschaften bleiben erhalten.

Beispiel: Ein Wetter-Connector liefert folgendes flaches Objekt. Konfiguriert sind der Entitätstyp WeatherObserved, das Konfig-ID-Segment beispielstadt, das observedAt-Quellfeld dateObserved, die Standort-Analyse als Punkt aus den Feldern lat und lon sowie ein Smart-Mapping für dateObserved, temperature, relativeHumidity und refDevice.

{
"id": "station-042",
"dateObserved": "2026-10-01T06:00:00Z",
"temperature": 14.2,
"relativeHumidity": 0.81,
"lat": 50.3315,
"lon": 7.3322,
"refDevice": "urn:ngsi-ld:Device:station-042"
}

Daraus erzeugt der Node:

[
{
"id": "urn:ngsi-ld:WeatherObserved:beispielstadt:station-042",
"type": "WeatherObserved",
"@context": ["https://context.beispielstadt.example/main-context"],
"location": {
"type": "GeoProperty",
"value": {"type": "Point", "coordinates": [7.3322, 50.3315]},
"observedAt": "2026-10-01T06:00:00.000Z"
},
"dateObserved": {
"type": "Property",
"value": "2026-10-01T06:00:00Z",
"observedAt": "2026-10-01T06:00:00.000Z"
},
"temperature": {
"type": "Property",
"value": 14.2,
"observedAt": "2026-10-01T06:00:00.000Z"
},
"relativeHumidity": {
"type": "Property",
"value": 0.81,
"observedAt": "2026-10-01T06:00:00.000Z"
},
"refDevice": {
"type": "Relationship",
"object": "urn:ngsi-ld:Device:station-042",
"observedAt": "2026-10-01T06:00:00.000Z"
}
}
]
FeldBedeutung
idURN aus Entitätstyp, Konfig-ID-Segment und Eingangs-ID.
typeDer konfigurierte Entitätstyp (im Smart-Modus optional aus einem Eingangsfeld).
@contextArray mit der konfigurierten Kontext-URL (Platzhalter bereits ersetzt).
locationGeoProperty aus der Standort-Analyse; Koordinaten stets in GeoJSON-Reihenfolge Länge, Breite.
<Attribut>.typeProperty, GeoProperty oder Relationship gemäß Erkennung.
<Attribut>.value / .objectWert beziehungsweise Ziel-URN der Beziehung.
<Attribut>.observedAtISO-8601-Zeitstempel in UTC, wenn für das Attribut aktiv.

Attribute, deren Wert nach allen Schritten undefined ist, werden vor der Ausgabe entfernt.

Beispiel-Flow​

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

Schritt 1

Inject und Function

Ein Inject-Node startet einen Function-Node, der ein Array von Luftqualitäts-Datensätzen (AirQualityObserved) erzeugt.

Schritt 2

Split und Delay

Das Array wird in Pakete zu fünf Datensätzen geteilt und auf eine Nachricht alle zwei Sekunden gedrosselt.

Schritt 3

NGSI Builder und Debug

Der Builder im Smart-Modus formt jedes Paket in AirQualityObserved-Entitäten um; ein Debug-Node zeigt das Ergebnis.

Beispiel-Flow als JSON anzeigen
[
{"id": "tab1", "type": "tab", "label": "DataOps", "disabled": false, "info": ""},
{"id": "inject1", "type": "inject", "z": "tab1", "name": "", "props": [{"p": "payload"}], "repeat": "", "once": false, "payload": "", "payloadType": "date", "x": 200, "y": 160, "wires": [["func1"]]},
{"id": "func1", "type": "function", "z": "tab1", "name": "Luftqualität", "func": "msg.payload = [\n {\"id\": \"urn:ngsi-ld:AirQualityObserved:beispielkreis:2026-09-30\", \"type\": \"AirQualityObserved\", \"dateObserved\": \"2026-09-30T00:00:00Z\", \"location\": {\"type\": \"Point\", \"coordinates\": [7.3322, 50.3315]}, \"areaServed\": \"Beispielkreis\", \"temperature\": 9.8, \"no2\": 0.000067, \"o3\": 0.1239}\n];\nreturn msg;", "outputs": 1, "x": 390, "y": 160, "wires": [["split1"]]},
{"id": "split1", "type": "split", "z": "tab1", "name": "", "splt": "\\n", "spltType": "str", "arraySplt": "5", "arraySpltType": "len", "stream": false, "property": "payload", "x": 610, "y": 160, "wires": [["delay1"]]},
{"id": "delay1", "type": "delay", "z": "tab1", "name": "", "pauseType": "rate", "timeout": "5", "timeoutUnits": "seconds", "rate": "1", "nbRateUnits": "2", "rateUnits": "second", "drop": false, "x": 180, "y": 280, "wires": [["builder1"]]},
{"id": "builder1", "type": "ngsi-builder", "z": "tab1", "name": "", "contextUrl": "https://context.${DOMAIN}/main-context", "entityType": "AirQualityObserved", "mode": "smart", "entityId": "", "addObservedAt": true,
"mappings": [
{"target": "id", "source": "id", "addObservedAt": true, "required": true},
{"target": "type", "source": "type", "addObservedAt": true, "required": true},
{"target": "dateObserved", "source": "dateObserved", "addObservedAt": true, "required": true},
{"target": "location", "source": "location.coordinates", "addObservedAt": true, "required": true},
{"target": "areaServed", "source": "areaServed", "addObservedAt": true, "required": false},
{"target": "temperature", "source": "temperature", "addObservedAt": true, "required": false},
{"target": "no2", "source": "no2", "addObservedAt": true, "required": false},
{"target": "o3", "source": "o3", "addObservedAt": true, "required": false}
],
"customFields": [], "customMappings": [], "overwrites": [], "debugMode": false, "useTransformation": false, "transformationScript": "", "topicFilter": "", "useObservedAtOverwrite": false, "observedAtField": "", "ignoreRequired": false, "enableValidation": true, "invalidExtraFields": false, "invalidMissingOptional": false, "invalidValue": false, "invalidOptionalAction": "skip",
"locationConfig": {"enabled": true, "type": "Point", "posType": "array", "latField": "", "lonField": "", "arrayField": "location.coordinates", "polyField": "", "order": "lonlat"},
"x": 420, "y": 280, "wires": [["debug1"]]},
{"id": "debug1", "type": "debug", "z": "tab1", "name": "Air Quality", "active": true, "tosidebar": true, "complete": "payload", "targetType": "msg", "x": 610, "y": 280, "wires": []}
]

Der mitgelieferte Flow enthält im Function-Node mehrere tausend Tagesdatensätze eines Satellitendienstes; die Darstellung oben ist auf einen Datensatz gekürzt.

Status und Fehler​

AnzeigeBedeutung
Grüner Punkt „bereit“Konfiguration ist vollständig; die letzte Nachricht wurde verarbeitet.
Gelber Ring „übersprungen (Topic)“msg.topic passt nicht zum Themenfilter. Die Nachricht wird verworfen.
Roter Ring „Konfiguration fehlt“Entitätstyp oder Mapping-Modus ist leer. Zusätzlich wird ein Fehler ausgelöst.
Gelber Punkt „übersprungen (fehlende oder ungültige Felder)“Kein Element ergab eine gültige Entität, zum Beispiel wegen fehlender Pflichtfelder oder fehlgeschlagener Validierung. Es wird keine Nachricht gesendet.
Roter Punkt „error“ mit Fehler „[NGSI-LD Builder] Interner Fehler: …“Unerwarteter Fehler bei der Verarbeitung der Nachricht.
Fehler „Ungültiger Themenfilter Regex: …“Der reguläre Ausdruck im Themenfilter ist fehlerhaft.
Fehler „[NGSI-LD Builder] Standort-Analyse-Fehler: …“Die Geodaten konnten nicht gelesen werden; die Entität wird ohne location weiterverarbeitet.
Fehler „[NGSI-LD Builder] Skript-Fehler: …“Das Transformations-Skript hat eine Ausnahme ausgelöst; die Entität wird ohne die Skriptänderungen weiterverarbeitet.
Fehler „[NGSI-LD Builder] Kritischer Verarbeitungsfehler: …“Ein Element konnte nicht verarbeitet werden und wird übersprungen.
Warnung „[Zeitstempel Validierung] Ungültiges Format in Feld '…'“Das observedAt-Quellfeld enthält keinen ISO-8601-Zeitstempel; die Systemzeit wird verwendet.
Warnung „[Validierung] Entität … verworfen (ungültig): …“Ein Pflichtfeld des Schemas fehlt; die Entität wird verworfen.
Warnung „[Validierung] Entität … ist ungültig (Warnung): …“Optionale Felder sind ungültig; die Behandlung folgt der Einstellung Ungültige optionale Felder verarbeiten.

Im Debug-Modus erscheinen zusätzlich die Warnungen „Verarbeite Eingabe“, „Ergebnis erstellt“, „Element ist kein Objekt, überspringe.“ und „Element verworfen wegen fehlender Pflichtfelder: …“. Fehler werden über node.error gemeldet und können mit einem Catch-Node abgefangen werden.

Hinweise​

  • Netzwerkzugriff beim Konfigurieren: Kontext und Schema werden vom Node-RED-Server über die Admin-Endpunkte /ngsi-builder/proxy und /ngsi-builder/flush-cache geladen. Der Server benötigt dafür Zugriff auf die Kontext-URL und auf die Schema-URLs der Smart Data Models (häufig GitHub). Hinter einem Proxy müssen die üblichen Umgebungsvariablen gesetzt sein.
  • Validierung: Ohne erreichbaren Kontext oder erreichbares Schema findet zur Laufzeit keine Validierung statt. Kontext und Schema werden eine Stunde zwischengespeichert.
  • Zeitstempel: observedAt wird immer in UTC mit Millisekunden ausgegeben. Ohne Quellfeld entspricht er dem Verarbeitungszeitpunkt, nicht dem Messzeitpunkt.
  • Koordinaten: Die Ausgabe folgt GeoJSON, also Längengrad vor Breitengrad. Stellen Sie die Koordinaten-Reihenfolge passend zu Ihren Eingangsdaten ein.
  • Einheiten: Der Node übernimmt Werte unverändert und setzt keinen unitCode. Konvertieren Sie vorab in metrische Einheiten (°C, mm, m³/s, km/h, µg/m³) und ergänzen Sie den unitCode bei Bedarf im Transformations-Skript.
  • Transformations-Skript: Das Skript läuft mit den Rechten des Node-RED-Prozesses. Beschränken Sie den Zugriff auf den Editor entsprechend.
  • Personenbezogene Daten: Der Node entfernt keine Inhalte. Enthalten Eingangsdaten Namen, Adressen oder Fahrzeugkennzeichen, prüfen Sie vor der Veröffentlichung im Context Broker, ob diese Daten übertragen werden dürfen.

Weiterführende Themen​

Referenzen​