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

  1. 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"
        }
      ]
    }
  2. 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 Datei digital-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:
    oci iot digital-twin-model create --iot-domain-id <iot-domain-OCID> --spec file://digital-twin-model.json
    Beispielantwort mit der Datei 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

  1. 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 Feld timeObserved 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"
      }
    }
  2. 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}"
        }
      }
    ]
  3. 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 --digital-twin-model-id mit der <digital-twin-model-OCID> für das digitale Zwillingsmodell verwenden, das Sie diesem digitalen Zwillingsadapter zuordnen möchten.

    Referenzieren Sie die Dateien file://inbound-enevelop.json und file://inbound-enevelop.json, die im vorherigen Schritt erstellt wurden.
    oci 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>
    Diese Beispielantwort zeigt eine benutzerdefinierte Payload-Zuordnung, die in den Optionen --inbound-envelope und --inbound-routes definiert ist, indem sie json-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.

Ersetzen Sie <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.

Je nach Datentyp, den Sie senden möchten, verwenden Sie das folgende Beispiel, um Telemetrie zu senden:
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

Wenn Sie den konfigurierten Zugriff auf Ihre IoT-Daten mit ORDS und das erforderliche Authentifizierungstoken haben, können Sie die zu überwachenden Daten mit der Internet of Things-Daten-API abrufen.

In diesem Beispiel werden HTTPs verwendet. Alternativ können Sie MQTT und MQTT über WebSockets verwenden. Spezielle Beispiele finden Sie unter Szenarios.

Ersetzen Sie die Variablen durch die Werte für Ihre Umgebung:
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

Wenn Sie direkt in der Datenbank auf Ihre Daten zugreifen oder konfigurierten Zugriff zum Anzeigen Ihrer Daten in APEX haben, können Sie mit dieser SQL-Anweisung raw-Telemetriedaten anzeigen:
select * from <domain-short-id-from-device-host>__IOT.RAW_DATA where digital_twin_instance_id = '<iot-digital-twin-OCID>';
Hinweis

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>';