Cenário: Enviando Dados Estruturados em um Formato Personalizado usando HTTPs
Use este cenário para enviar e monitorar dados estruturados de um dispositivo em um formato personalizado. Se um dispositivo envia dados em um formato personalizado, isso significa que o dispositivo não pode ser programado para alterar sua saída.
Nesse caso, defina o mapeamento do adaptador de gêmeo digital personalizado, para converter os dados de entrada em um formato reconhecido pela Plataforma IoT.
Um administrador deve adicionar uma política à sua tenancy e aos compartimentos que você deseja usar. Para obter exemplos de política e pré-requisitos, consulte Detalhes da Política da Plataforma Internet of Things (IoT) e Pré-requisitos do IoT.
Etapa 1: Criar um Grupo de Domínios IoT e um Domínio IoT
Use um grupo de domínios IoT e um domínio IoT ou crie um grupo de domínios IoT e crie um domínio IoT para usar para esse cenário.
Depois de ter o grupo de domínios IoT e o domínio IoT que você deseja trabalhar, siga estas etapas para configurar recursos de gêmeos digitais para receber dados estruturados em um formato personalizado de um dispositivo. Todos os recursos do IoT devem estar na mesma região.
Para obter o <domain-short-id-from-device-host> do domínio IoT ou o OCID do domínio IoT, você pode obter os detalhes do domínio IoT com o qual deseja trabalhar.
Etapa 2: Criar um Modelo Digital Twin
- Crie especificações usando a Digital Twins Definition Language (DTDL) para seu modelo de gêmeo digital semelhante a este exemplo com os dados que você deseja coletar. Para usar esse exemplo, salve esse trecho de código como um arquivo digital-twin-model.jsone, em seguida, faça referência a esse arquivo na próxima etapa ao criar um modelo de gêmeo digital.Um modelo de gêmeo digital requer um Digital Twin Model Identifier (DTMI) como um identificador exclusivo. Por exemplo: 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" } ] }
- Use o comandooci iot digital-twin-model createcom o parâmetro necessário para criar um modelo de gêmeo digital. Substitua o<iot-domain-OCID>pelo OCID do domínio IoT que você deseja associar a esse modelo de gêmeo digital. Consulte o arquivodigital-twin-model.jsoncriado na etapa anterior ou um arquivo de especificações para seu cenário específico. Para obter mais informações sobre como fazer referência a arquivos, consulte Usando um Arquivo JSON para Entrada Complexa:
 Exemplo de resposta usando o arquivooci iot digital-twin-model create --iot-domain-id <iot-domain-OCID> --spec file://digital-twin-model.jsondigital-twin-model.jsonda etapa anterior. Este exemplo de resposta mostra o URI DTMI e o OCID do modelo de gêmeo digital 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>" }
Etapa 3: Criar um Adaptador Digital Twin para um Formato Personalizado
Se um dispositivo envia dados em um formato personalizado, isso significa que o dispositivo não pode ser programado para alterar sua saída. Nesse caso, defina o formato personalizado no mapeamento do adaptador de gêmeo digital,
Para fazer isso, defina o inbound-envelope e o inbound-routes em um formato JSON para converter os dados em um formato com o qual você deseja trabalhar nos serviços e aplicativos Oracle para que possa estabelecer conexão para exibir seus dados IoT em diferentes sistemas. 
Usando a CLI
- Defina um envelope de entrada file://inbound-envelope.jsonpara especificar como extrair metadados do payload do dispositivo. Para extrair o valor em$.timedo JSON de entrada e mapeá-lo para o campotimeObservedno modelo de gêmeo digital. Esses mapeamentos permitem extrair metadados específicos, como timestamps, usando expressões de JQ.Este exemplo mostra o ponto final do dispositivo, um payload de amostra e um mapeamento de envelope de entrada que aplica expressões JQ para extrair ou remodelar os dados. { "reference-endpoint": "telemetry/health", "reference-payload": { "dataFormat": "JSON", "data": { "time": "<timestamp>", "data": { "temp": 0, "hum": 0, "power": false, "batteryLevel": 0 } } }, "envelope-mapping": { "timeObserved": "$.time" } }
- Crie um arquivo file://inbound-routes.jsonpara definir como os dados de payload específicos das mensagens do dispositivo são mapeados e roteados para sua instância de gêmeo digital.Cada rota inclui uma condição que corresponde ao ponto final, uma estrutura de payload de referência e instruções de mapeamento para transferir ou transformar valores. Este exemplo mostra 2 condições de carga útil definidas.Observação
 O máximo de rotas de entrada permitidas é 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}" } } ]
- Use o comando oci iot digital-twin-adapter createpara criar um adaptador de gêmeo digital. Substitua o<iot-domain-OCID>pelo OCID do seu domínio IoT e substitua o<dtmi:com:oracle:example:hvac>pelo URI DTMI pelo URI DTMI do modelo de gêmeo digital que você deseja associar a este adaptador de gêmeo digital.O exemplo a seguir usa o parâmetro DTMI URI para associar o modelo de gêmeo digital. Como alternativa, você pode usar o parâmetro Consulte os arquivos--digital-twin-model-idcom o<digital-twin-model-OCID>para o modelo de gêmeo digital que deseja associar a este adaptador de gêmeo digital.file://inbound-enevelop.jsonefile://inbound-enevelop.jsoncriados na etapa anterior.
 Este exemplo de resposta mostra um mapeamento de payload personalizado definido nas opçõesoci 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-envelopee--inbound-routes, fazendo referência a arquivosjsone a um OCID de adaptador de gêmeo digital específico associado a um modelo de gêmeo digital específico com um URI DTMI exclusivo e um OCID de modelo de gêmeo digital exclusivo: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>" }
Etapa 4: Criar uma Instância Digital Twin com o Adaptador
Usando a CLI
Use os parâmetros necessários oci iot digital-twin-instance create, <iot-domain-OCID> e <certificate-or-secret-OCID> para criar uma instância de gêmeo digital. Substitua o <certificate-or-secret-OCID> pelo OCID do segredo do vault que você deseja usar e substitua o <iot-domain-OCID> pelo OCID do domínio IoT do seu ambiente. 
Se a instância do gêmeo digital estiver configurada para receber dados do dispositivo, use o parâmetro de ID de autenticação com um segredo de vault ou OCID de certificado para que o gêmeo digital possa se autenticar. Para fazer isso, crie um segredo ou crie um certificado na mesma região e tenancy que qualquer outro recurso relacionado do IoT.
Este exemplo usa a opção --display-name, substitua <your-digital-twin-instance-name> por um nome amigável para sua instância de gêmeo digital.
<digital-twin-adapter-OCID> pelo adaptador de gêmeo digital criado na etapa anterior. 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>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>"
}
Etapa 5: Enviar Dados de Telemetria
Use o seguinte comando curl e o <digital-twin-instance-external-key> para enviar ou publicar dados. Para obter mais informações, consulte Usando cURL.
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
             }
           }
         }'Etapa 6: Exibir Dados de Telemetria
Usar a API de Dados da Internet of Things para Obter os Dados
Este exemplo usa HTTPs. Como alternativa, você pode usar MQTT e MQTT em WebSockets. Para obter exemplos específicos, consulte Cenários.
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>\"}]}"Usar instruções SQL para Exibir seus Dados
raw:select * from <domain-short-id-from-device-host>__IOT.RAW_DATA where digital_twin_instance_id = '<iot-digital-twin-OCID>';Observe que o nome do esquema contém dois sublinhados: __IOT
Ou use esta instrução SQL para exibir os dados de telemetria rejected. Substitua o <domain-short-id-from-device-host> pelo ID abreviado do domínio do domínio IoT e o <iot-digital-twin-OCID> pelo OCID do gêmeo digital do qual você deseja exibir dados rejeitados:
select * from <domain-short-id-from-device-host>__IOT.REJECTED_DATA where digital_twin_instance_id = '<digital-twin-OCID>';<domain-short-id-from-device-host> pelo ID abreviado do domínio do seu domínio IoT e o <iot-digital-twin-OCID> pelo OCID do gêmeo digital do qual você deseja exibir dados rejeitados:select * from <domain-short-id-from-device-host>__IOT.HISTORIZED_DATA where digital_twin_id = '<digital-twin-OCID>';