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.
Tareas
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
- 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
esfalse
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}$" }
-
- 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 archivodigital-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-uri
o 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>
{
"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
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íaraw
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
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>';
Observe que el nombre del esquema contiene dos caracteres de subrayado: __IOT
<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.