Zum Hauptinhalt springen
Daten prüfen · Fach-APIs

Kontext- und Sensordaten über APIs prüfen

Fragen Sie das Ergebnis dort ab, wo der Datenfluss es gespeichert hat: aktuelle Kontextobjekte in Stellio über NGSI-LD, einzelne Sensorbeobachtungen in FROST über die SensorThings API. Beide Zugänge laufen geschützt über APISIX.

Die Wahl richtet sich nicht nach dem Transport der Quelldaten. Eine MQTT-Nachricht kann nach der Verarbeitung sowohl zu einem aktuellen NGSI-LD-Objekt als auch zu einer SensorThings-Observation werden. Entscheidend ist das im Datenfluss konfigurierte Ziel.

Stellio

Aktuellen Objektzustand prüfen

NGSI-LD verwenden, wenn eine Entität mit Eigenschaften und Beziehungen aktualisiert werden sollte.

NGSI-LD prüfen
FROST

Beobachtungen prüfen

SensorThings verwenden, wenn einzelne Messwerte einem Datastream zugeordnet wurden.

SensorThings prüfen
Zugriff

Lesetoken verwenden

Das Access Token benötigt den Scope api:read; für Stellio zusätzlich den zugeordneten Datenraum.

Zugriff nachschlagen
Erwartung

Kennung und Zeitpunkt kennen

Entity-ID oder Datastream-ID sowie der erwartete Mess- beziehungsweise Änderungszeitpunkt stammen aus dem getesteten Datenfluss.

Zugriff vorbereiten

Verwenden Sie die von der Plattformadministration bereitgestellte API-Domain und ein aktuelles Access Token mit api:read. Die Tokenbeschaffung ist unter Authentifizierung und API-Zugriff beschrieben. Behandeln Sie das Token wie ein Geheimnis und speichern Sie es nicht in Skripten, Screenshots oder Repositories.

Die öffentlichen Plattformpfade sind:

ZielBasis-URLErforderliche Header
Stellio / NGSI-LDhttps://api.<DOMAIN>/stellio/api/ngsi-ld/v1/Authorization, NGSILD-Tenant, Accept: application/ld+json
FROST / SensorThingshttps://api.<DOMAIN>/frost-http/v1.1/Authorization, Accept: application/json

Verwenden Sie diese APISIX-Pfade und keine internen Dienstadressen.

Aktuellen Kontext in Stellio prüfen

Fragen Sie eine bekannte Entität über ihre vollständige ID im vorgesehenen Datenraum ab. Das folgende Beispiel prüft die Verkehrszählung aus Daten speichern:

curl --fail --show-error \
"https://api.<DOMAIN>/stellio/api/ngsi-ld/v1/entities/<ENTITY_ID>" \
--header "Authorization: Bearer $ACCESS_TOKEN" \
--header "NGSILD-Tenant: <DATENRAUM>" \
--header "Accept: application/ld+json"

Ersetzen Sie <ENTITY_ID> durch urn:ngsi-ld:TrafficCount:zaehlstelle-017 und <DATENRAUM> durch den für diese Integration vereinbarten Stellio-Tenant. Der Typ TrafficCount und sein JSON-LD-Kontext sind in diesem Beispiel projektspezifisch; bei einem anderen abgestimmten Modell verwenden Sie dessen ID, Typ und Attribute.

Prüfen Sie in der Antwort mindestens:

  • id ist urn:ngsi-ld:TrafficCount:zaehlstelle-017 und type ist TrafficCount;
  • der fachliche Messzeitpunkt in dateObserved ist 2026-08-19T08:00:00Z;
  • vehicleCount.value ist die Zahl 126;
  • dateObserved.value ist nicht nur vorhanden, sondern dem fachlichen Messzeitpunkt richtig zugeordnet.

Wenn die genaue Entity-ID noch nicht bekannt ist, suchen Sie zunächst begrenzt nach dem erwarteten Typ:

curl --fail --show-error --get \
"https://api.<DOMAIN>/stellio/api/ngsi-ld/v1/entities" \
--header "Authorization: Bearer $ACCESS_TOKEN" \
--header "NGSILD-Tenant: <DATENRAUM>" \
--header "Accept: application/ld+json" \
--data-urlencode "type=TrafficCount" \
--data-urlencode "limit=20"

Eine Antwort aus dem falschen Datenraum ist kein Nachweis für den getesteten Datenfluss. APISIX vergleicht NGSILD-Tenant mit dem tenants-Claim des Tokens; der Scope api:read allein genügt nicht.

Für die Referenzimplementierung Pegelstände gilt derselbe Abruf mit einer WaterObserved-Entity-ID im Datenraum ds_environment; dort werden insbesondere dateObserved, waterLevel und source verglichen.

Sensorbeobachtungen in FROST prüfen

Wenn der Datenfluss einzelne SensorThings-Observations schreibt, fragen Sie den erwarteten Datastream zusammen mit seinen jüngsten Messwerten ab:

curl --fail --show-error --get \
"https://api.<DOMAIN>/frost-http/v1.1/Datastreams(<DATASTREAM_ID>)" \
--header "Authorization: Bearer $ACCESS_TOKEN" \
--header "Accept: application/json" \
--data-urlencode '$expand=Thing,Sensor,ObservedProperty,Observations($orderby=phenomenonTime desc;$top=10)'

Prüfen Sie in der Antwort:

  • Datastream, Thing, Sensor und ObservedProperty beschreiben das erwartete Messsystem;
  • die neueste Observation besitzt den erwarteten Wert in result;
  • phenomenonTime entspricht dem Messzeitpunkt der Quelle und nicht nur dem Zeitpunkt der Verarbeitung;
  • die Observation ist dem richtigen Datastream zugeordnet und ältere Werte bleiben in zeitlich plausibler Reihenfolge erhalten.

FROST benötigt für diesen APISIX-Zugang ebenfalls api:read, aber keinen NGSILD-Tenant-Header. Ein leeres Observations-Ergebnis zeigt nur, dass der Datastream erreichbar ist; es bestätigt nicht, dass der Datenfluss einen Messwert gespeichert hat.

Im Verkehrszählungsbeispiel wurden zaehlstelle-017 dem vorbereiteten Datastream 42 und zaehlstelle-021 dem Datastream 43 zugeordnet. Datastream 42 muss eine Observation mit phenomenonTime = 2026-08-19T08:00:00Z und result = 126 enthalten; Datastream 43 zum selben Zeitpunkt den Wert 84.

Fach-API statt interner Datenbank

Prüfen Sie Stellio-Entitäten über NGSI-LD und FROST-Ressourcen über SensorThings. Die internen PostgreSQL-Schemata dieser Komponenten sind Implementierungsdetails, können sich ändern und umgehen das fachliche API-Modell. Sie sind deshalb weder Abnahmeweg noch alternative Benutzerschnittstelle.

Das Ergebnis bewerten

Ein erfolgreicher HTTP-Aufruf belegt zunächst nur, dass Route und Berechtigung funktionieren. Die Integration ist erst für diesen Testfall nachgewiesen, wenn Kennung, Zielsystem, fachlicher Zeitpunkt und die gemappten Werte mit der eingespeisten Testnachricht übereinstimmen.

BeobachtungBedeutung für die Prüfung
200 OK, aber alter ZeitstempelZiel ist erreichbar, der erwartete Datenlauf hat es jedoch nicht aktualisiert
200 OK, aber falsche ID oder falscher DatastreamDaten wurden gefunden, gehören aber nicht zum geprüften Ergebnis
401 UnauthorizedToken fehlt, ist abgelaufen oder kann nicht validiert werden
403 Forbiddenapi:read oder bei Stellio die Zuordnung zum Datenraum fehlt
404 Not FoundAPISIX-Pfad, optionale Komponente oder angefragte Ressource prüfen

Referenzen