Cenário: Enviando Dados Estruturados em um Formato Padrão usando HTTPs
Use esse cenário para um dispositivo IoT que envia dados estruturados em um formato padrão para a plataforma Internet of Things (IoT).
Esse cenário se aplica a um dispositivo que pode ser programado para enviar dados em um formato esperado pela plataforma IoT. Esse cenário requer a criação de um modelo de gêmeo digital, um adaptador de gêmeo digital, uma instância de gêmeo digital e a configuração do dispositivo físico para enviar dados de telemetria no formato definido 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.
Tarefas
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 padrão de um dispositivo. Todos os recursos do IoT devem estar na mesma região.
Etapa 2: Criar um Modelo Digital Twin
Usando a CLI
- Salve um trecho de código como um arquivo digital-twin-model.json. Consulte esse arquivo na próxima etapa ao criar um modelo de gêmeo digital. Para obter mais informações sobre como referenciar arquivos, consulte Usando um Arquivo JSON para Entrada Complexa.Para criar esse arquivo, use a Digital Twins Definition Language (DTDL) para definir a semântica do modelo de gêmeo digital. Um modelo de gêmeo digital usa um Digital Twin Model Identifier (DTMI) como um identificador exclusivo. Por exemplo: { "@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}$" } ] }O trecho de código acima mostra uma interface de modelo HVAC DTDL com um contexto e extensões específicos que descreve o seguinte: -  dtmi:dtdl:context;3indica que este modelo usa DTDL versão 3.
- dtmi:dtdl:extension:historization;1: indica que esse modelo usa dados de historização, rastreando como as propriedades e os dados de telemetria mudam com o tempo.
- dtmi:dtdl:extension:quantitativeTypes;1: indica que esse modelo usa tipos quantitativos avançados.
- dtmi:com:oracle:dtdl:extension:validation;1: indica que este modelo usa validação de dados.
- dtmi:com:oracle:example:hvac;1é o identificador exclusivo da unidade HVAC.
- "@type": "Interface": indica que esse modelo usa uma única interface.
- contents: descreve a telemetria e as propriedades desta unidade HVAC.
- Esta matriz descreve os dados de telemetria de temperatura da série temporal enviados com o tempo. Inteiro é o tipo de dados e é medido em graus Fahrenheit.{ "@type": ["Telemetry", "Temperature"], "name": "temperature", "schema": "integer", "unit": "degreeFahrenheit" }
- Esse array descreve os dados de telemetria de umidade historiados e o sistema valida e impõe o intervalo de valores mínimo e máximo.{ "@type": [ "Telemetry", "Historized", "Validated" ], "name": "humidity", "schema": "integer", "minimum": 0, "maximum": 100 }
- Esta matriz descreve a propriedade de localização que está estática ou muda lentamente ao longo do tempo, e é dados historizados. O ponto do tipo de esquema indica uma localização geográfica. A propriedade writableéfalsee não é suportada nesta versão:{ "@type": [ "Property", "Historized" ], "name": "location", "schema": "point", "writable": false }
- Esta matriz descreve a propriedade de número de série da unidade HVAC. Se o valor do número de série não corresponder ao padrão definido, o sistema rejeitará o número de série. { "@type": [ "Property", "Validated" ], "name": "serialNumber", "schema": "string", "pattern": "^([0-9]){2}([0-9]){5}([0-9]){6}$" }
 
-  
- Use o comando oci 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 com o qual você deseja trabalhar. Consulte o arquivodigital-twin-model.jsoncom suas especificações:oci iot digital-twin-model create --iot-domain-id <iot-domain-OCID> --spec file://digital-twin-model.jsonEste exemplo de resposta contém o<iot-digital-twin-model-OCID>, com o domínio IoT associado, o URI DTMI para a unidade HVAC e mostra que ele está ativo:{ "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>" }
Etapa 3: Criar um Adaptador Digital Twin
Ao criar um adaptador de gêmeo digital, você pode forçar o sistema a criar uma carga útil e um mapeamento padrão não especificando as opções inbound-envelope ou inbound-routes. Como resultado, a resposta conterá o payload do dispositivo.
Se o mapeamento de envelope não for especificado e contiver um timeObserved, receivedTime será usado como valor timeObserved. 
Usando a CLI
Use o comando oci iot digital-twin-adapter create para criar um adaptador de gêmeo digital. Substitua o <iot-domain-OCID> pelo OCID do domínio IoT. Para associar o modelo de gêmeo digital, use o parâmetro --digital-twin-model-spec-uri do URI do DTMI ou o parâmetro --digital-twin-model-id do OCID do gêmeo digital para associar o modelo de gêmeo digital a este adaptador de gêmeo digital.
Este exemplo usa o comando com o parâmetro --digital-twin-model-spec-uri. Substitua o dtmi:com:oracle:example:hvac;1 pelo URI DTMI do modelo de gêmeo digital que você deseja associar a este adaptador de gêmeo digital:
oci iot digital-twin-adapter create --iot-domain-id <iot-domain-OCID> --digital-twin-model-spec-uri "dtmi:com:oracle:example:hvac;1"--digital-twin-model-id. Substitua o <digital-twin-model-OCID> pelo OCID do gêmeo digital do modelo de gêmeo digital que você deseja associar a este adaptador de gêmeo 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>"
}Etapa 4: Criar uma Instância Digital Twin com um Adaptador Digital Twin
Usando a CLI
Use os parâmetros necessários oci iot digital-twin-instance create e <iot-domain-OCID>, <vault-secret-OCID> e <digital-twin--adapter-OCID> para criar uma instância de gêmeo digital para dados estruturados. 
Substitua o <iot-domain-OCID> pelo OCID do domínio IoT que você deseja atualizar. Opcionalmente, você pode incluir o parâmetro de exibição e substituir o <display-name> por um nome amigável para a instância de gêmeo digital. 
Substitua o <digital-twin--adapter-OCID> pelo OCID do adaptador de gêmeo digital criado na etapa anterior. Substitua o <vault-secret-OCID> por um segredo que esteja na mesma região que seus outros recursos de gêmeos digitais. A Oracle recomenda o uso de um segredo exclusivo para cada instância de gêmeo digital. Para obter mais informações, consulte Criando um Segredo. 
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>{
  "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>"
}
Etapa 5: Enviar Dados de Telemetria
Este exemplo usa HTTP para postar dados. Como alternativa, você pode usar MQTT e MQTT em WebSockets. Para obter exemplos específicos, consulte Cenários.
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"
        }'Etapa 6: Exibir Dados de Telemetria
Dependendo de onde você deseja exibir seus dados do IoT, cada sistema requer uma configuração específica para conectar e exibir seus dados do IoT.
Usar a API de Dados IoT para Exibir Seus Dados
raw, rejected ou historized.Para obter mais informações, consulte a documentação da Internet of Things (IoT) Data API.
Esta solicitação de exemplo mostra como obter dados de telemetriaraw do host de dados do grupo de domínios.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>\"}]}"Este exemplo usa HTTPs. Como alternativa, você pode usar MQTT e MQTT em WebSockets. Para obter exemplos específicos, consulte Cenários.
Usar Instruções SQL para Exibir Seus Dados no APEX ou no Banco de Dados
Use esta instrução SQL para exibir os dados de telemetria rejected. Substitua o <domain-short-id-from-device-host> pelo id curto do domínio do host do dispositivo e substitua o <digital-twin-OCID> pelo OCID do gêmeo digital do qual você deseja exibir os dados rejeitados:
select * from <domain-short-id-from-device-host>__IOT.REJECTED_DATA where digital_twin_instance_id = '<digital-twin-instance-OCID>';Observe que o nome do esquema contém dois sublinhados: __IOT
<domain-short-id-from-device-host> pelo id curto do domínio e substitua o <digital-twin-instance-OCID> pelo OCID da instância do gêmeo digital cujos dados rejeitados você deseja exibir:select * from <domain-short-id-from-device-host>__IOT.DIGITAL_TWIN_HISTORIZED_DATA where digital_twin_instance_id = '<digital-twin-instance-OCID>';raw:select * from <domain-short-id-from-device-host>__IOT.RAW_DATA where digital_twin_instance_id = '<digital-twin-instance-OCID>';Para obter o <domain-short-id-from-device-host> do domínio IoT, obtenha os detalhes do domínio IoT com o qual você deseja trabalhar.