Szenario: Strukturierte Daten mit HTTPs in einem benutzerdefinierten Format senden
Verwenden Sie dieses Szenario, um strukturierte Daten von einem Gerät in einem benutzerdefinierten Format zu senden und zu überwachen. Wenn ein Gerät Daten in einem benutzerdefinierten Format sendet, kann das Gerät nicht programmiert werden, um seine Ausgabe zu ändern.
Definieren Sie in diesem Fall das benutzerdefinierte Mapping des digitalen Zwillingsadapters, um die eingehenden Daten in ein von der IoT-Plattform erkanntes Format zu übersetzen.
Ein Administrator muss Ihrem Mandanten und den Compartments, die Sie verwenden möchten, eine Policy hinzufügen. Policy-Beispiele und -Voraussetzungen finden Sie unter Policy-Details für die Internet of Things-(IoT-)Plattform und IoT-Voraussetzungen.
Schritt 1: Domaingruppe IoT und Domain IoT erstellen
Verwenden Sie eine vorhandene IoT-Domaingruppe und eine IoT-Domain, oder erstellen Sie eine IoT-Domaingruppe, und erstellen Sie eine IoT-Domain, die für dieses Szenario verwendet werden soll.
Nachdem Sie die Domaingruppe IoT und die Domain IoT haben, die Sie arbeiten möchten, führen Sie die folgenden Schritte aus, um digitale Zwillingsressourcen einzurichten, um strukturierte Daten in einem benutzerdefinierten Format von einem Gerät zu empfangen. Alle IoT-Ressourcen müssen sich in derselben Region befinden.
Um die <domain-short-id-from-device-host>
für die IoT-Domain abzurufen oder die IoT-Domain-OCID abzurufen, können Sie die Details für die IoT-Domain abrufen, mit der Sie arbeiten möchten.
Schritt 2: Erstellen eines digitalen Zwillingsmodells
- Erstellen Sie Spezifikationen mit der Digital Twins Definition Language (DTDL) für Ihr digitales Zwillingsmodell, ähnlich wie in diesem Beispiel, mit den Daten, die Sie erfassen möchten.
Um dieses Beispiel zu verwenden, speichern Sie dieses Code-Snippet als Datei
digital-twin-model.json
, und referenzieren Sie diese Datei dann im nächsten Schritt, wenn Sie ein digitales Zwillingsmodell erstellen.Für ein digitales Zwillingsmodell ist ein Digital Twin Model Identifier (DTMI) als eindeutige ID erforderlich. Beispiel:
dtmi:com:oracle:example:hvac;1
{ "@context": [ "dtmi:dtdl:context;3" ], "@id": "dtmi:com:oracle:example:hvac;1", "@type": "Interface", "displayName": "HVAC", "description": "A digital twin model for HVAC", "contents": [ { "@type": "Telemetry", "name": "temperature", "schema": "integer" }, { "@type": "Telemetry", "name": "humidity", "schema": "integer" }, { "@type": "Property", "name": "power", "schema": "boolean" }, { "@type": "Property", "name": "batteryLevel", "schema": "integer" } ] }
- Verwenden Sie den Befehl
oci iot digital-twin-model create
mit dem erforderlichen Parameter, um ein digitales Zwillingsmodell zu erstellen. Ersetzen Sie<iot-domain-OCID>
durch die OCID für die Domain IoT, die Sie mit diesem digitalen Zwillingsmodell verknüpfen möchten. Referenzieren Sie die Dateidigital-twin-model.json
, die im vorherigen Schritt erstellt wurde, oder eine Spezifikationsdatei für Ihr bestimmtes Szenario. Weitere Informationen zum Referenzieren von Dateien finden Sie unter JSON-Datei für komplexe Eingaben nutzen:
Beispielantwort mit der Dateioci iot digital-twin-model create --iot-domain-id <iot-domain-OCID> --spec file://digital-twin-model.json
digital-twin-model.json
aus dem vorherigen Schritt. Diese Beispielantwort zeigt die DTMI-URI und die OCID des digitalen Zwillingsmodells IoT:{ "data": { "defined-tags": { "Oracle-Tags": { "CreatedBy": "default/user@oracle.com", "CreatedOn": "2025-09-11T05:56:50.514Z" } }, "description": "A digital twin model for HVAC", "display-name": "HVAC", "freeform-tags": {}, "id": "<iot-digital-twin-model-OCID>", "iot-domain-id": "<iot-domain-OCID>", "lifecycle-state": "ACTIVE", "spec-uri": "dtmi:com:oracle:example:hvac;1", "system-tags": {}, "time-created": "2025-09-11T05:56:50.587000+00:00", "time-updated": "2025-09-11T05:56:50.587000+00:00" }, "etag": "<unique-id>" }
Schritt 3: Erstellen eines digitalen Twin-Adapters für ein benutzerdefiniertes Format
Wenn ein Gerät Daten in einem benutzerdefinierten Format sendet, kann das Gerät nicht programmiert werden, um seine Ausgabe zu ändern. Definieren Sie in diesem Fall das benutzerdefinierte Format in der digitalen Zwillingsadapterzuordnung,
Definieren Sie dazu inbound-envelope
und inbound-routes
in einem JSON
-Format, um die Daten in ein Format zu konvertieren, mit dem Sie in Oracle-Services und -Anwendungen arbeiten möchten, damit Sie eine Verbindung herstellen können, um Ihre IoT-Daten anzuzeigen, und zwar in verschiedenen Systemen.
CLI verwenden
- Definieren Sie einen eingehenden Envelope
file://inbound-envelope.json
, um anzugeben, wie Metadaten aus der Payload des Geräts extrahiert werden sollen. So extrahieren Sie den Wert unter$.time
aus der eingehenden JSON, und ordnen Sie ihn dem FeldtimeObserved
im digitalen Zwillingsmodell zu. Mit diesen Mappings können Sie bestimmte Metadaten wie Zeitstempel mit JQ-Ausdrücken extrahieren.Dieses Beispiel zeigt den Geräteendpunkt, eine Beispiel-Payload und eine eingehende Envelope-Zuordnung, die JQ-Ausdrücke zum Extrahieren oder Umformen der Daten anwendet.
{ "reference-endpoint": "telemetry/health", "reference-payload": { "dataFormat": "JSON", "data": { "time": "<timestamp>", "data": { "temp": 0, "hum": 0, "power": false, "batteryLevel": 0 } } }, "envelope-mapping": { "timeObserved": "$.time" } }
- Erstellen Sie eine
file://inbound-routes.json
-Datei, um zu definieren, wie bestimmte Payload-Daten aus Gerätenachrichten zugeordnet und an die Instanz des digitalen Zwillings weitergeleitet werden.Jede Route enthält eine Bedingung, die mit dem Endpunkt übereinstimmt, eine Referenz-Payload-Struktur und Zuordnungsanweisungen zum Übertragen oder Transformieren von Werten.
Dieses Beispiel zeigt 2 definierte Payload-Bedingungen.Hinweis
Die maximal zulässige Anzahl an eingehenden Routen beträgt 128.[ { "condition": "${endpoint(2) == \"heartbeat\"}", "reference-payload": { "data": { "temp": 75, "hum": 62 } }, "payload-mapping": { "$.temperature": "$.data.temp", "$.humidity": "${.data.hum - 5}" } }, { "condition": "${endpoint(2) == \"health\"}", "reference-payload": { "data": { "power": false, "batteryLevel": 60 } }, "payload-mapping": { "$.power": "$.data.power", "$.batteryLevel": "${.data.batteryLevel - 5}" } } ]
- Verwenden Sie den Befehl
oci iot digital-twin-adapter create
, um einen digitalen Zwillingsadapter zu erstellen. Ersetzen Sie<iot-domain-OCID>
durch die OCID für die IoT-Domain, und ersetzen Sie<dtmi:com:oracle:example:hvac>
durch die DTMI-URI durch die DTMI-URI für das digitale Zwillingsmodell, das Sie mit diesem digitalen Zwillingsadapter verknüpfen möchten.Im folgenden Beispiel wird der DTMI-URI-Parameter verwendet, um das digitale Zwillingsmodell zu verknüpfen. Alternativ können Sie den Parameter
Referenzieren Sie die Dateien--digital-twin-model-id
mit der<digital-twin-model-OCID>
für das digitale Zwillingsmodell verwenden, das Sie diesem digitalen Zwillingsadapter zuordnen möchten.file://inbound-enevelop.json
undfile://inbound-enevelop.json
, die im vorherigen Schritt erstellt wurden.
Diese Beispielantwort zeigt eine benutzerdefinierte Payload-Zuordnung, die in den Optionenoci iot digital-twin-adapter create --iot-domain-id <iot-domain-OCID> --digital-twin-model-spec-uri 'dtmi:com:oracle:example:hvac;1' --inbound-envelope <file://inbound-enevelop.json> --inbound-routes <file://inbound-routes.json>
--inbound-envelope
und--inbound-routes
definiert ist, indem siejson
-Dateien referenziert, sowie eine bestimmte OCID des digitalen Zwillingsadapters, die mit einem bestimmten digitalen Zwillingsmodell mit einer eindeutigen DTMI-URI und einer eindeutigen Modell-OCID des digitalen Zwillings verknüpft ist:dtmi:com:oracle:example:core:hvac:sp;1
{ "data": { "defined-tags": { "Oracle-Tags": { "CreatedBy": "default/user@oracle.com", "CreatedOn": "2025-09-11T06:09:27.323Z" } }, "description": null, "digital-twin-model-id": "<iot-digital-twin-model-OCID>", "digital-twin-model-spec-uri": "dtmi:com:oracle:example:hvac;1", "display-name": "<digital-twin-adapter-display-name>", "freeform-tags": {}, "id": "<iot-digital-twin-adapter-OCID>", "inbound-envelope": { "envelope-mapping": { "time-observed": "$.time" }, "reference-endpoint": "telemetry/health", "reference-payload": { "data": { "time": "2025-09-11T06:09:27.878106Z" }, "data-format": "JSON" } }, "inbound-routes": [ { "condition": "${endpoint(2) == \"heartbeat\"}", "description": null, "payload-mapping": { "$.humidity": "${.hum-1}", "$.temperature": "$.temp" }, "reference-payload": { "data": { "hum": 62, "temp": 75 }, "data-format": "JSON" } }, { "condition": "${endpoint(2) == \"health\"}", "description": null, "payload-mapping": {}, "reference-payload": { "data": { "batteryPercentage": 60, "on": false }, "data-format": "JSON" } } ], "iot-domain-id": "<iot-domain-OCID>", "lifecycle-state": "ACTIVE", "system-tags": {}, "time-created": "2025-09-30T19:55:36.293000+00:00", "time-updated": "2025-09-30T19:55:36.293000+00:00" }, "etag": "<unique-id>" }
Schritt 4: Erstellen einer digitalen Zwillingsinstanz mit dem Adapter
CLI verwenden
Verwenden Sie die Parameter oci iot digital-twin-instance create
, <iot-domain-OCID>
und <certificate-or-secret-OCID>
, um eine digitale Zwillingsinstanz zu erstellen. Ersetzen Sie <certificate-or-secret-OCID>
durch die gewünschte Vault-Secret-OCID, und ersetzen Sie <iot-domain-OCID>
durch die OCID für die IoT-Domain für Ihre Umgebung.
Wenn die digitale Zwillingsinstanz für den Empfang von Gerätedaten eingerichtet ist, müssen Sie den Parameter für die Authentifizierungs-ID mit einem Vault Secret oder einer Zertifikats-OCID verwenden, damit sich der digitale Zwilling authentifizieren kann. Dazu erstellen Sie ein Secret oder erstellen Sie ein Zertifikat in derselben Region und demselben Mandanten wie alle anderen zugehörigen IoT-Ressourcen.
In diesem Beispiel wird die Option --display-name
verwendet. Ersetzen Sie <your-digital-twin-instance-name>
durch einen benutzerfreundlichen Namen für die Instanz des digitalen Zwillings.
<digital-twin-adapter-OCID>
durch den digitalen Zwillingsadapter, der im vorherigen Schritt erstellt wurde. oci iot digital-twin-instance create --iot-domain-id <iot-domain-OCID> --display-name <your-digital-twin-instance-name> --auth-id <certificate-or-secret-OCID> --digital-twin-adapter-id <digital-twin-adapter-OCID>
Diese Beispielantwort zeigt den digitalen Zwillingsadapter und den DTMI-URI, die für das digitale Zwillingsmodell definiert sind, das dieser digitalen Zwillingsinstanz zugeordnet ist.dtmi:com:oracle:example:hvac;1
{
"data": {
"auth-id": "<vault-secret-OCID>",
"defined-tags": {
"Oracle-Tags": {
"CreatedBy": "default/user@oracle.com",
"CreatedOn": "2025-08-14T17:41:11.973Z"
}
},
"description": null,
"digital-twin-adapter-id": "<iot-digital-twin-adapter-OCID>",
"digital-twin-model-id": "<digital-twin-model-OCID>",
"digital-twin-model-spec-uri": "dtmi:com:oracle:example:hvac;1",
"display-name": "<your-digital-twin-instance-name>",
"external-key": "<digital-twin-instance-external-key>",
"freeform-tags": {},
"id": "<digital-twin-instance-OCID>",
"iot-domain-id": "<iot-domain-OCID>",
"lifecycle-state": "ACTIVE",
"system-tags": {},
"time-created": "2025-08-14T17:41:13.638000+00:00",
"time-updated": "2025-08-14T17:41:13.638000+00:00"
},
"etag": "<unique-id>"
}
Schritt 5: Telemetriedaten senden
Verwenden Sie den folgenden Befehl curl
und <digital-twin-instance-external-key>
, um Daten zu senden oder zu posten. Weitere Informationen finden Sie unter cURL verwenden.
curl -u 'digital-twin-instance-external-key:device-password' -H "content-type: application/json" https://<domain-short-id-from-device-host>.device.iot.<region>.oci.oraclecloud.com/telemetry/heartbeat -d '{"temp": 70, "hum": 55}'
Accepted%
curl -i -X POST \
-u "<digital-twin-instance-external-key>:<device-password>" \
-H "Content-Type: application/json" \
"https://<domain-short-id-from-device-host>.device.iot.<region>.oci.oraclecloud.com/telemetry/heartbeat" \
-d '{
"digital_twin_instance_id": "<iot-digital-twin-instance-OCID>",
"received_at": "2024-08-14T06:01:30.432829Z",
"endpoint": "telemetry/heartbeat",
"content_type": "application/json",
"content": {
"time": "<time>",
"data": {
"temp": 70,
"hum": 65
}
}
}'
Schritt 6: Telemetriedaten anzeigen
Mit der Daten-API für das Internet of Things die Daten abrufen
In diesem Beispiel werden HTTPs verwendet. Alternativ können Sie MQTT und MQTT über WebSockets verwenden. Spezielle Beispiele finden Sie unter Szenarios.
curl -H "Authorization: Bearer <token>" \
-X GET "https://<domain-group-short-id>.data.iot.<region>.oci.oraclecloud.com/ords/<domain-short-id>/20250531/rawData?q={\"$and\":[{\"digital_twin_instance_id\":\"<iot-digital-twin-OCID>\"}]}"
Daten mit SQL-Anweisungen anzeigen
raw
-Telemetriedaten anzeigen:select * from <domain-short-id-from-device-host>__IOT.RAW_DATA where digital_twin_instance_id = '<iot-digital-twin-OCID>';
Beachten Sie, dass der Schemaname zwei Unterstriche enthält: __IOT
Oder verwenden Sie diese SQL-Anweisung, um die Telemetriedaten rejected
anzuzeigen. Ersetzen Sie <domain-short-id-from-device-host>
durch die Domainkurz-ID für Ihre IoT-Domain und <iot-digital-twin-OCID>
durch die OCID des digitalen Zwillings, von der Sie abgelehnte Daten anzeigen möchten:
select * from <domain-short-id-from-device-host>__IOT.REJECTED_DATA where digital_twin_instance_id = '<iot-digital-twin-OCID>';
Oder verwenden Sie diese SQL-Anweisung, um die historisierten Telemetriedaten anzuzeigen. Ersetzen Sie <domain-short-id-from-device-host>
durch die Domainkurz-ID für Ihre IoT-Domain und <iot-digital-twin-OCID>
durch die OCID für den digitalen Zwilling, von dem Sie abgelehnte Daten anzeigen möchten:select * from <domain-short-id>__IOT.DIGITAL_TWIN_HISTORIZED_DATA where digital_twin_id = '<digital-twin-OCID>';