Scenario: invio di dati strutturati in un formato predefinito mediante HTTP

Utilizzare questo scenario per un dispositivo IoT che invia dati strutturati in formato predefinito alla piattaforma Internet of Things (IoT).

Questo scenario si applica a un dispositivo che può essere programmato per inviare dati in un formato previsto dalla piattaforma IoT. Questo scenario richiede la creazione di un modello digital twin, un adattatore digital twin, un'istanza digital twin e la configurazione del dispositivo fisico per l'invio di dati di telemetria nel formato definito dalla piattaforma IoT.

Un amministratore deve aggiungere un criterio alla tenancy e ai compartimenti che si desidera utilizzare. Per esempi di criteri e prerequisiti, vedere Dettagli criteri per la piattaforma Internet of Things (IoT) e IoT Prerequisiti.

Passo 1: creare un gruppo di domini IoT e un dominio IoT

Utilizzare un gruppo di domini IoT e un dominio IoT esistenti oppure creare un gruppo di domini IoT e creare un dominio IoT da utilizzare per questo scenario.

Dopo aver ottenuto il gruppo di domini IoT e il dominio IoT che si desidera utilizzare, attenersi alla procedura riportata di seguito per impostare le risorse digital twin per ricevere i dati strutturati in un formato predefinito da un dispositivo. Tutte le risorse IoT devono trovarsi nella stessa area.

Passo 2: Creare un modello Digital Twin

Uso dell'interfaccia CLI

  1. Salvare uno snippet di codice come file digital-twin-model.json. Fare riferimento a questo file nel passo successivo quando si crea un modello gemello digitale. Per ulteriori informazioni sui file di riferimento, vedere Utilizzo di un file JSON per l'input complesso.

    Per creare questo file, utilizzare il Digital Twins Definition Language (DTDL) per definire la semantica per il modello di gemello digitale. Un modello di gemello digitale utilizza un Digital Twin Model Identifier (DTMI) come identificativo univoco.

    Ad esempio:

    {
      "@context": [
        "dtmi:dtdl:context;3",
        "dtmi:dtdl:extension:historization;1",
        "dtmi:dtdl:extension:quantitativeTypes;1",
        "dtmi:com:oracle:dtdl:extension:validation;1"
      ],
      "@id": "dtmi:com:oracle:example:hvac;1",
      "@type": "Interface",
      "displayName": "HVAC",
      "description": "A digital twin model for HVAC",
      "contents": [
        {
          "@type": [
            "Telemetry",
            "Temperature"
          ],
          "name": "temperature",
          "schema": "integer",
          "unit": "degreeFahrenheit"
        },
        {
          "@type": [
            "Telemetry",
            "Historized",
            "Validated"
          ],
          "name": "humidity",
          "schema": "integer",
          "minimum": 0,
          "maximum": 100
        },
        {
          "@type": [
            "Property",
            "Historized"
          ],
          "name": "location",
          "schema": "point",
          "writable": false
        },
        {
          "@type": [
            "Property",
            "Validated"
          ],
          "name": "serialNumber",
          "schema": "string",
          "pattern": "^([0-9]){2}([0-9]){5}([0-9]){6}$"
        }
      ]
    }

    Lo snippet di codice sopra mostra un'interfaccia del modello HVAC DTDL con un contesto specifico e le estensioni che descrivono quanto segue:

    • dtmi:dtdl:context;3 indica che questo modello utilizza DTDL versione 3.
    • dtmi:dtdl:extension:historization;1: indica che questo modello utilizza i dati di cronologia, monitorando il modo in cui le proprietà e i dati di telemetria cambiano nel tempo.
    • dtmi:dtdl:extension:quantitativeTypes;1: indica che questo modello utilizza tipi quantitativi avanzati.
    • dtmi:com:oracle:dtdl:extension:validation;1: indica che questo modello utilizza la convalida dei dati.
    • dtmi:com:oracle:example:hvac;1 è l'identificativo univoco dell'unità HVAC.
    • "@type": "Interface": indica che questo modello utilizza una singola interfaccia.
    • contents: descrive la telemetria e le proprietà di questa unità HVAC.
    • Questo array descrive i dati di telemetria della temperatura delle serie temporali inviati nel tempo. Il numero intero è il tipo di dati e viene misurato in gradi Fahrenheit.
      {
        "@type": ["Telemetry", "Temperature"],
        "name": "temperature",
        "schema": "integer",
        "unit": "degreeFahrenheit"
      }
    • Questo array descrive i dati di telemetria dell'umidità storicizzati e il sistema convalida e applica l'intervallo di valori minimo e massimo.
      {
        "@type": [
          "Telemetry",
          "Historized",
          "Validated"
        ],
        "name": "humidity",
        "schema": "integer",
        "minimum": 0,
        "maximum": 100
      }
    • Questo array descrive la proprietà di posizione che è statica o che cambia lentamente nel tempo e che è dati storicizzati. Il punto del tipo di schema indica una posizione geografica. La proprietà writable è false e non è supportata in questa release:
      {
        "@type": [
          "Property",
          "Historized"
        ],
        "name": "location",
        "schema": "point",
        "writable": false
      }
    • Questo array descrive la proprietà del numero di serie per l'unità HVAC. Se il valore del numero di serie non corrisponde al pattern definito, il sistema rifiuterà il numero di serie.
      {
        "@type": [
          "Property",
          "Validated"
        ],
        "name": "serialNumber",
        "schema": "string",
        "pattern": "^([0-9]){2}([0-9]){5}([0-9]){6}$"
      }
  2. Utilizzare il comando oci iot digital-twin-model create con il parametro richiesto per creare un modello gemello digitale. Sostituire <iot-domain-OCID> con l'OCID per il dominio IoT che si desidera utilizzare, fare riferimento al file digital-twin-model.json con le specifiche riportate di seguito.
    oci iot digital-twin-model create --iot-domain-id <iot-domain-OCID> --spec file://digital-twin-model.json
    Questa risposta di esempio contiene <iot-digital-twin-model-OCID>, con il dominio IoT associato, l'URI DTMI per l'unità HVAC e mostra che è attiva:
    {
      "data": {
        "defined-tags": {
          "Oracle-Tags": {
            "CreatedBy": "default/user@oracle.com",
            "CreatedOn": "2025-08-05T17:43:00.438Z"
          }
        },
        "description": "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-10T17:43:00.508000+00:00",
        "time-updated": "2025-09-10T17:43:00.508000+00:00"
      },
      "etag": "<unique-id>"
    }
    

Passaggio 3: creare un adattatore Digital Twin

Quando si crea un adattatore digital twin, è possibile forzare il sistema a creare un payload e un mapping predefiniti non specificando le opzioni inbound-envelope o inbound-routes. Di conseguenza, la risposta conterrà il payload del dispositivo.

Se il mapping dell'envelope non viene specificato e contiene un valore timeObserved, receivedTime viene utilizzato come valore timeObserved.

Uso dell'interfaccia CLI

Utilizzare il comando oci iot digital-twin-adapter create per creare un adattatore digital twin. Sostituire <iot-domain-OCID> con l'OCID del dominio IoT. Per associare il modello gemello digitale, utilizzare il parametro URI DTMI --digital-twin-model-spec-urio il parametro OCID --digital-twin-model-id del gemello digitale per associare il modello gemello digitale a questo adattatore gemello digitale.

In questo esempio viene utilizzato il comando con il parametro --digital-twin-model-spec-uri. Sostituire dtmi:com:oracle:example:hvac;1 con l'URI DTMI per il modello gemello digitale che si desidera associare a questo adattatore gemello digitale:

oci iot digital-twin-adapter create --iot-domain-id <iot-domain-OCID> --digital-twin-model-spec-uri "dtmi:com:oracle:example:hvac;1"
In alternativa, questo esempio mostra l'uso del comando con il parametro --digital-twin-model-id. Sostituire <digital-twin-model-OCID> con l'OCID digital twin per il modello digital twin che si desidera associare a questo adattatore digital twin:
oci iot digital-twin-adapter create --iot-domain-id <iot-domain-OCID> --digital-twin-model-id <digital-twin-model-OCID>
Quando si utilizzano i dati strutturati nel formato predefinito dal dispositivo, non si specificano i parametri --inbound-envelope <file://inbound-enevelop.json> o --inbound-routes <file://inbound-routes.json>. Di conseguenza, questa risposta di esempio genera il payload e il mapping per l'adattatore digital twin:
{
  "data": {
    "defined-tags": {
      "Oracle-Tags": {
        "CreatedBy": "default/user",
        "CreatedOn": "2025-09-10T17:45:41.318Z"
      }
    },
    "description": null,
    "digital-twin-model-id": "<digital-twin-model-OCID>",
    "digital-twin-model-spec-uri": "dtmi:com:oracle:example:hvac;1",
    "display-name": "<your-digital-twin-adapter-name>",
    "freeform-tags": {},
    "id": "<digital-twin-adapter-OCID>",
    "inbound-envelope": {
      "envelope-mapping": {
        "time-observed": "$.time"
      },
      "reference-endpoint": "/",
      "reference-payload": {
        "data": {
          "humidity": 0,
          "location": {
            "coordinates": [0.0, 0.0],
            "type": "Point"
          },
          "temperature": 0,
          "time": "2025-09-10T17:45:41.387069258Z"
        },
        "data-format": "JSON"
      }
    },
    "inbound-routes": [
      {
        "condition": "*",
        "description": "Default condition",
        "payload-mapping": {
          "$.humidity": "$.humidity",
          "$.location": "$.location",
          "$.temperature": "$.temperature"
        },
        "reference-payload": null
      }
    ],
    "iot-domain-id": "<iot-domain-OCID>",
    "lifecycle-state": "ACTIVE",
    "system-tags": {},
    "time-created": "2025-09-10T17:45:41.389000+00:00",
    "time-updated": "2025-09-10T17:45:41.389000+00:00"
  },
  "etag": "<unique-id>"
}

Passo 4: Creare un'istanza Digital Twin con un adattatore Digital Twin

Uso dell'interfaccia CLI

Utilizzare oci iot digital-twin-instance create e <iot-domain-OCID>, <vault-secret-OCID> e i parametri richiesti <digital-twin--adapter-OCID> per creare un'istanza gemella digitale per i dati strutturati.

Sostituire <iot-domain-OCID> con l'OCID per il dominio IoT che si desidera aggiornare. Facoltativamente, è possibile includere il parametro di visualizzazione e sostituire <display-name> con un nome intuitivo per l'istanza gemella digitale.

Sostituire <digital-twin--adapter-OCID> con l'OCID dell'adattatore gemello digitale creato nel passo precedente. Sostituisci <vault-secret-OCID> con un segreto che si trova nella stessa area delle altre risorse digital twin. Oracle consiglia di utilizzare un segreto univoco per ogni istanza di gemello digitale. Per ulteriori informazioni, vedere Creazione di un segreto.

oci iot digital-twin-instance create --iot-domain-id <iot-domain-OCID> --display-name <display_name> --auth-id <vault-secret-OCID> --digital-twin-adapter-id <digital-twin-adapter-OCID>

Questa risposta di esempio mostra il modello gemello digitale, l'adattatore, gli OCID istanza e l'ID chiave esterna per l'istanza gemello digitale:
{
  "data": {
    "auth-id": "<vault-secret-OCID>",
    "defined-tags": {
      "Oracle-Tags": {
        "CreatedBy": "default/user@oracle.com",
        "CreatedOn": "2025-09-11T06:12:43.393Z"
      }
    },
    "description": null,
    "digital-twin-adapter-id": "<iot-digital-twin-adapter-OCID>",
    "digital-twin-model-id": "<iot-digital-twin-model-OCID>",
    "digital-twin-model-spec-uri": "dtmi:com:oracle:example:hvac;1",
    "display-name": "your display name",
    "external-key": "<unique-id>",
    "freeform-tags": {},
    "id": "<iot-digital-twin-instance-OCID>",
    "iot-domain-id": "<iot-domain-OCID>",
    "lifecycle-state": "ACTIVE",
    "system-tags": {},
    "time-created": "2025-09-11T06:12:44.178000+00:00",
    "time-updated": "2025-09-11T06:12:44.178000+00:00"
  },
  "etag": "<unique-id>"
}

Passo 5: Invia dati telemetria

In questo esempio viene utilizzato HTTP per inviare i dati, in alternativa è possibile utilizzare MQTT e MQTT su WebSockets. Per esempi specifici, vedere Scenari.

HTTP POST data
curl -i -X POST -u '<digital-twin-external-key>:<vault-secret>' -H "Content-Type:application/json" 'https://<domain-short-id-from-device-host>.device-iot.<region>.oci.oraclecloud.com/telemetry' -d '{
            "temperature": 72,
            "humidity": 60,
            "location": {
                "type": "point",
                "coordinates": [40.759010, -73.984474]
            },
            "serialNumber": "5099627036043"
        }'

Passo 6: visualizzazione dei dati di telemetria

A seconda della posizione in cui si desidera visualizzare i dati IoT, ogni sistema richiede una configurazione specifica per connettere e visualizzare i dati IoT.

Utilizzare l'API dati IoT per visualizzare i dati

Per visualizzare i dati IoT, utilizzare l'API dati di Internet of Things (IoT) per eseguire questa operazione, è necessario completare la procedura per configurare l'accesso ai dati in ORDS. Dopo aver completato la configurazione, è possibile utilizzare l'API dati per ottenere i dati che si desidera monitorare. I tipi di dati supportati includono: dati raw, rejected o historized.

Per ulteriori informazioni, consultare la documentazione dell'API dei dati di Internet of Things (IoT).

Questa richiesta di esempio mostra come ottenere i dati di telemetria raw dall'host dati del gruppo di domini.
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>\"}]}"

In questo esempio vengono utilizzati i protocolli HTTP. In alternativa, è possibile utilizzare MQTT e MQTT su WebSockets. Per esempi specifici, vedere Scenari.

Utilizzare le istruzioni SQL per visualizzare i dati in APEX o nel database

Se si accede configurato alla vista dei dati direttamente nel database o si accede configurato per visualizzare i dati in APEX, è possibile utilizzare queste istruzioni SQL direttamente nel database o in APEX per visualizzare i dati.

Utilizzare questa istruzione SQL per visualizzare i dati di telemetria rejected. Sostituire <domain-short-id-from-device-host> con l'ID breve del dominio dall'host del dispositivo e sostituire <digital-twin-OCID> con l'OCID del gemello digitale da cui si desidera visualizzare i dati rifiutati:

select * from <domain-short-id-from-device-host>__IOT.REJECTED_DATA where digital_twin_instance_id = '<digital-twin-instance-OCID>';
Nota

Si noti che il nome dello schema contiene due caratteri di sottolineatura: __IOT
In alternativa, utilizzare questa istruzione SQL per visualizzare i dati di telemetria storicizzati. Sostituire <domain-short-id-from-device-host> con l'ID breve del dominio e sostituire <digital-twin-instance-OCID> con l'OCID per l'istanza digital twin per la quale si desidera visualizzare i dati rifiutati per:
select * from <domain-short-id-from-device-host>__IOT.DIGITAL_TWIN_HISTORIZED_DATA where digital_twin_instance_id = '<digital-twin-instance-OCID>';

Utilizzare questa istruzione SQL per utilizzare i dati di telemetria raw:
select * from <domain-short-id-from-device-host>__IOT.RAW_DATA where digital_twin_instance_id = '<digital-twin-instance-OCID>';

Per ottenere il valore <domain-short-id-from-device-host> per il dominio IoT, ottenere i dettagli per il dominio IoT da utilizzare.