Escenario: Envío de datos estructurados en un formato por defecto mediante HTTP

Utilice este escenario para un dispositivo IoT que envía datos estructurados en un formato predeterminado a la plataforma de Internet of Things (IoT).

Este escenario se aplica a un dispositivo que se puede programar para enviar datos en un formato esperado por la plataforma IoT. Este escenario requiere crear un modelo de gemelo digital, un adaptador de gemelo digital, una instancia de gemelo digital y configurar el dispositivo físico para enviar datos de telemetría en el formato definido por la plataforma IoT.

Un administrador debe agregar una política a su arrendamiento y a los compartimentos que desea utilizar. Para ver ejemplos de políticas y requisitos previos, consulte Policy Details for the Internet of Things (IoT) Platform y IoT Prerequisites.

Paso 1: Crear un grupo de dominios IoT y un dominio IoT

Utilice un grupo de dominios IoT y un dominio IoT existentes o cree un grupo de dominios IoT y cree un dominio IoT para utilizarlo en este escenario.

Después de tener el grupo de dominios IoT y el dominio IoT que desea trabajar, siga estos pasos para configurar recursos de gemelos digitales para recibir datos estructurados en un formato predeterminado de un dispositivo. Todos los recursos IoT deben estar en la misma región.

Paso 2: Crear un modelo gemelo digital

Uso de la CLI

  1. Guarde un fragmento de código como archivo digital-twin-model.json. Haga referencia a este archivo en el siguiente paso cuando cree un modelo de gemelo digital. Para obtener más información sobre la referencia a archivos, consulte Uso de un archivo de JSON para una entrada compleja.

    Para crear este archivo, utilice el lenguaje de definición de gemelos digitales (DTDL) para definir la semántica del modelo de gemelos digitales. Un modelo gemelo digital utiliza un identificador de modelo gemelo digital (DTMI) como identificador único.

    Por ejemplo:

    {
      "@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}$"
        }
      ]
    }

    El fragmento de código anterior muestra una interfaz de modelo DTDL de HVAC con un contexto específico y extensiones que describen lo siguiente:

    • dtmi:dtdl:context;3 indica que este modelo utiliza la versión 3 de DTDL.
    • dtmi:dtdl:extension:historization;1: indica que este modelo utiliza datos de historización, realizando un seguimiento de cómo cambian las propiedades y los datos de telemetría a lo largo del tiempo.
    • dtmi:dtdl:extension:quantitativeTypes;1: indica que este modelo utiliza tipos cuantitativos avanzados.
    • dtmi:com:oracle:dtdl:extension:validation;1: indica que este modelo utiliza la validación de datos.
    • dtmi:com:oracle:example:hvac;1 es el identificador único de la unidad de climatización.
    • "@type": "Interface": indica que este modelo utiliza una única interfaz.
    • contents: describe la telemetría y las propiedades de esta unidad de HVAC.
    • Esta matriz describe los datos de telemetría de temperatura de serie temporal enviados a lo largo del tiempo. El número entero es el tipo de dato y se mide en grados Fahrenheit.
      {
        "@type": ["Telemetry", "Temperature"],
        "name": "temperature",
        "schema": "integer",
        "unit": "degreeFahrenheit"
      }
    • Esta matriz describe los datos de telemetría de humedad historizados y el sistema valida y aplica el rango de valores mínimo y máximo.
      {
        "@type": [
          "Telemetry",
          "Historized",
          "Validated"
        ],
        "name": "humidity",
        "schema": "integer",
        "minimum": 0,
        "maximum": 100
      }
    • Esta matriz describe la propiedad de ubicación que está estática o cambia lentamente con el tiempo y que es datos históricos. El punto de tipo de esquema indica una ubicación geográfica. La propiedad writable es false y no está soportada en esta versión:
      {
        "@type": [
          "Property",
          "Historized"
        ],
        "name": "location",
        "schema": "point",
        "writable": false
      }
    • Esta matriz describe la propiedad de número de serie para la unidad HVAC. Si el valor del número de serie no coincide con el patrón definido, el sistema rechazará el número de serie.
      {
        "@type": [
          "Property",
          "Validated"
        ],
        "name": "serialNumber",
        "schema": "string",
        "pattern": "^([0-9]){2}([0-9]){5}([0-9]){6}$"
      }
  2. Utilice el comando oci iot digital-twin-model create con el parámetro necesario para crear un modelo de gemelo digital. Sustituya <iot-domain-OCID> por el OCID del dominio IoT con el que desea trabajar, haga referencia al archivo digital-twin-model.json con sus especificaciones:
    oci iot digital-twin-model create --iot-domain-id <iot-domain-OCID> --spec file://digital-twin-model.json
    Esta respuesta de ejemplo contiene <iot-digital-twin-model-OCID>, con el dominio IoT asociado, el URI de DTMI para la unidad de HVAC y muestra que está activo:
    {
      "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>"
    }
    

Paso 3: Crear un adaptador gemelo digital

Al crear un adaptador de gemelos digitales, puede forzar al sistema a crear una carga útil y una asignación por defecto sin especificar las opciones inbound-envelope o inbound-routes. Como resultado, la respuesta contendrá la carga útil del dispositivo.

Si no se especifica la asignación de sobre y contiene un valor timeObserved, receivedTime se utiliza como valor timeObserved.

Uso de la CLI

Utilice el comando oci iot digital-twin-adapter create para crear un adaptador gemelo digital. Sustituya <iot-domain-OCID> por el OCID del dominio IoT. Para asociar el modelo de gemelo digital, utilice el parámetro URI de DTMI --digital-twin-model-spec-urio el parámetro OCID --digital-twin-model-id de gemelo digital para asociar el modelo de gemelo digital a este adaptador de gemelo digital.

En este ejemplo se utiliza el comando con el parámetro --digital-twin-model-spec-uri. Sustituya dtmi:com:oracle:example:hvac;1 por el URI de DTMI para el modelo de gemelo digital que desea asociar a este adaptador de gemelo digital:

oci iot digital-twin-adapter create --iot-domain-id <iot-domain-OCID> --digital-twin-model-spec-uri "dtmi:com:oracle:example:hvac;1"
O en este ejemplo se muestra el uso del comando con el parámetro --digital-twin-model-id. Sustituya <digital-twin-model-OCID> por el OCID de gemelo digital para el modelo de gemelo digital que desea asociar a este adaptador de gemelo digital:
oci iot digital-twin-adapter create --iot-domain-id <iot-domain-OCID> --digital-twin-model-id <digital-twin-model-OCID>
Al trabajar con datos estructurados en el formato por defecto del dispositivo, no especifica los parámetros --inbound-envelope <file://inbound-enevelop.json> ni --inbound-routes <file://inbound-routes.json>. Como resultado, esta respuesta de ejemplo genera la carga útil y la asignación para el adaptador de gemelo digital:
{
  "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>"
}

Paso 4: Crear una instancia gemela digital con un adaptador gemelo digital

Uso de la CLI

Utilice los parámetros necesarios oci iot digital-twin-instance create y <iot-domain-OCID>, <vault-secret-OCID> y <digital-twin--adapter-OCID> para crear una instancia de gemelo digital para los datos estructurados.

Sustituya <iot-domain-OCID> por el OCID del dominio IoT que desea actualizar. Opcionalmente, puede incluir el parámetro de visualización y sustituir <display-name> por un nombre fácil de recordar para la instancia de gemelo digital.

Sustituya <digital-twin--adapter-OCID> por el OCID del adaptador de gemelo digital creado en el paso anterior. Sustituya <vault-secret-OCID> por un secreto que se encuentre en la misma región que sus otros recursos de gemelos digitales. Oracle recomienda utilizar un secreto único para cada instancia de gemelo digital. Para obtener más información, consulte Crear un secreto.

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>

En este ejemplo de respuesta se muestra el modelo de gemelo digital, el adaptador, los OCID de instancia y el ID de clave externa para la instancia de gemelo digital:
{
  "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>"
}

Paso 5: Enviar datos de telemetría

En este ejemplo se utiliza HTTP para publicar datos, como alternativa, puede utilizar MQTT y MQTT en WebSockets. Para ver ejemplos específicos, consulte Escenarios.

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"
        }'

Paso 6: Ver datos de telemetría

En función de dónde desee ver los datos IoT, cada sistema necesita una configuración específica para conectar y ver los datos IoT.

Uso de la API de datos IoT para ver los datos

Si desea ver los datos de IoT, utilice la API de datos de Internet of Things (IoT) para hacerlo, debe completar los pasos para configurar el acceso a los datos en ORDS. Después de completar la configuración, puede utilizar la API de datos para obtener los datos que desea supervisar. Los tipos de dato soportados son: raw, rejected o historized.

Para obtener más información, consulte la documentación de la API de datos de Internet of Things (IoT).

En esta solicitud de ejemplo, se muestra cómo obtener datos de telemetría raw del host de datos del grupo de dominios.
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>\"}]}"

En este ejemplo se utilizan HTTP. También puede utilizar MQTT y MQTT en WebSockets. Para ver ejemplos específicos, consulte Escenarios.

Uso de sentencias SQL para ver los datos en APEX o en la base de datos

Si configuró el acceso a la vista de los datos directamente en la base de datos o si configuró el acceso para ver los datos en APEX, puede utilizar estas sentencias SQL directamente en la base de datos o en APEX para ver los datos.

Utilice esta sentencia SQL para ver los datos de telemetría rejected. Sustituya <domain-short-id-from-device-host> por el ID corto de dominio del host de dispositivo y sustituya <digital-twin-OCID> por el OCID del gemelo digital desde el que desea ver los datos rechazados:

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

Observe que el nombre del esquema contiene dos caracteres de subrayado: __IOT
O bien, utilice esta sentencia SQL para ver los datos de telemetría historizados. Sustituya <domain-short-id-from-device-host> por el ID corto del dominio y sustituya <digital-twin-instance-OCID> por el OCID de la instancia de gemelo digital para la que desea ver los datos rechazados:
select * from <domain-short-id-from-device-host>__IOT.DIGITAL_TWIN_HISTORIZED_DATA where digital_twin_instance_id = '<digital-twin-instance-OCID>';

Utilice esta sentencia SQL para consumir datos de telemetría raw:
select * from <domain-short-id-from-device-host>__IOT.RAW_DATA where digital_twin_instance_id = '<digital-twin-instance-OCID>';

Para obtener el valor <domain-short-id-from-device-host> para el dominio IoT, obtenga los detalles del dominio IoT con el que desea trabajar.