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

  1. 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.json e, 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"
        }
      ]
    }
  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 que você deseja associar a esse modelo de gêmeo digital. Consulte o arquivo digital-twin-model.json criado 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:
    oci iot digital-twin-model create --iot-domain-id <iot-domain-OCID> --spec file://digital-twin-model.json
    Exemplo de resposta usando o arquivo digital-twin-model.json da 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

  1. Defina um envelope de entrada file://inbound-envelope.json para especificar como extrair metadados do payload do dispositivo. Para extrair o valor em $.time do JSON de entrada e mapeá-lo para o campo timeObserved no 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"
      }
    }
  2. Crie um arquivo file://inbound-routes.json para 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}"
        }
      }
    ]
  3. 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 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 --digital-twin-model-id com o <digital-twin-model-OCID> para o modelo de gêmeo digital que deseja associar a este adaptador de gêmeo digital.

    Consulte os arquivos file://inbound-enevelop.json e file://inbound-enevelop.json criados na etapa anterior.
    oci 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>
    Este exemplo de resposta mostra um mapeamento de payload personalizado definido nas opções --inbound-envelope e --inbound-routes, fazendo referência a arquivos json e 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.

Substitua o <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>
Este exemplo de resposta mostra o adaptador de gêmeo digital e o URI DTMI definidos para o modelo de gêmeo digital associado a esta instância de gêmeo digital.

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.

Dependendo do tipo de dados que você deseja enviar, use o seguinte exemplo para enviar telemetria:
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

Se você configurou acessar seus dados do IoT usando ORDS e tiver o token de autenticação necessário, poderá usar a API de Dados da Internet of Things para obter os dados que deseja monitorar.

Este exemplo usa HTTPs. Como alternativa, você pode usar MQTT e MQTT em WebSockets. Para obter exemplos específicos, consulte Cenários.

Substitua as variáveis pelos valores do seu ambiente:
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

Se você configurou o acesso para exibir seus dados diretamente no banco de dados ou se configurou o acesso para exibir seus dados no APEX, poderá usar esta instrução SQL para exibir dados de telemetria raw:
select * from <domain-short-id-from-device-host>__IOT.RAW_DATA where digital_twin_instance_id = '<iot-digital-twin-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 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>';
Ou use esta instrução SQL para exibir os dados de telemetria históricos. Substitua o <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>';