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.
Aktuellen Objektzustand prüfen
NGSI-LD verwenden, wenn eine Entität mit Eigenschaften und Beziehungen aktualisiert werden sollte.
NGSI-LD prüfenBeobachtungen prüfen
SensorThings verwenden, wenn einzelne Messwerte einem Datastream zugeordnet wurden.
SensorThings prüfenLesetoken verwenden
Das Access Token benötigt den Scope api:read; für Stellio zusätzlich den zugeordneten Datenraum.
Zugriff nachschlagenKennung 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:
| Ziel | Basis-URL | Erforderliche Header |
|---|---|---|
| Stellio / NGSI-LD | https://api.<DOMAIN>/stellio/api/ngsi-ld/v1/ | Authorization, NGSILD-Tenant, Accept: application/ld+json |
| FROST / SensorThings | https://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:
idisturn:ngsi-ld:TrafficCount:zaehlstelle-017undtypeistTrafficCount;- der fachliche Messzeitpunkt in
dateObservedist2026-08-19T08:00:00Z; vehicleCount.valueist die Zahl126;dateObserved.valueist 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,SensorundObservedPropertybeschreiben das erwartete Messsystem; - die neueste
Observationbesitzt den erwarteten Wert inresult; phenomenonTimeentspricht 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.
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.
| Beobachtung | Bedeutung für die Prüfung |
|---|---|
200 OK, aber alter Zeitstempel | Ziel ist erreichbar, der erwartete Datenlauf hat es jedoch nicht aktualisiert |
200 OK, aber falsche ID oder falscher Datastream | Daten wurden gefunden, gehören aber nicht zum geprüften Ergebnis |
401 Unauthorized | Token fehlt, ist abgelaufen oder kann nicht validiert werden |
403 Forbidden | api:read oder bei Stellio die Zuordnung zum Datenraum fehlt |
404 Not Found | APISIX-Pfad, optionale Komponente oder angefragte Ressource prüfen |