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.

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

  1. 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;3 indica 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 é false e 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}$"
      }
  2. Use o comando oci iot digital-twin-model create com 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 arquivo digital-twin-model.json com suas especificações:
    oci iot digital-twin-model create --iot-domain-id <iot-domain-OCID> --spec file://digital-twin-model.json
    Este 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"
Ou este exemplo mostra como usar o comando com o parâmetro --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>
Quando você trabalha com dados estruturados no formato padrão do dispositivo, não especifica os parâmetros --inbound-envelope <file://inbound-enevelop.json> ou --inbound-routes <file://inbound-routes.json>. Como resultado, este exemplo de resposta gera a carga útil e o mapeamento para o adaptador 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>"
}

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>

Este exemplo de resposta mostra o modelo de gêmeo digital, o adaptador, os OCIDs da instância e o ID da chave externa da instância de gêmeo 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>"
}

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

Se quiser exibir seus dados IoT, use a API de Dados da Internet of Things (IoT) para fazer isso, conclua as etapas para configurar o acesso aos seus dados no ORDS. Depois de concluir a configuração, você poderá usar a API de Dados para obter os dados que deseja monitorar. Os tipos de dados suportados incluem: 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 telemetria raw 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

Se você configurou o acesso à view de seus dados diretamente no banco de dados ou se configurou o acesso para exibir seus dados no APEX, poderá usar essas instruções SQL diretamente no banco de dados ou no APEX para exibir seus 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>';
Observação

Observe que o nome do esquema contém dois sublinhados: __IOT
Ou use esta instrução SQL para exibir os dados de telemetria históricos. Substitua o <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>';

Use esta instrução SQL para consumir dados de telemetria 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.