Cenário: Enviando Dados Não Estruturados Usando HTTPs
Este cenário explica como usar a Plataforma Internet of Things para conectar um dispositivo e enviar dados de telemetria não estruturados para a nuvem usando HTTPs e como exibir os dados no APEX.
- Criar um grupo de domínios IoT
- Criar um domínio IoT
- Criar uma instância de gêmeo digital
- Enviar dados
- Configurar o domínio IoT para acessar o APEX
- Acessar dados do IoT no APEX
Antes de Começar
Certifique-se de ter as permissões necessárias. Um administrador concede acesso criando as políticas necessárias. Para obter mais informações, consulte Pré-requisitos para obter as políticas necessárias para certificados e Detalhes da Política da Plataforma Internet of Things (IoT) para obter as políticas necessárias para recursos do IoT.
Para cada dispositivo que deseja conectar à sua Internet of Things, execute as seguintes etapas:
Etapa 1: Criar um Grupo de Domínios IoT
Use o comando oci iot domain-group create, o <compartment-OCID> e os parâmetros necessários do <domain-group-name> para criar um grupo de domínios do IoT em um compartimento específico. Substitua a <compartment-OCID> pelo OCID do compartimento no qual você deseja criar o grupo de domínios. Substitua a <domain-group-name> pelo nome do grupo de domínios e, opcionalmente, substitua a <your-sample-description> por uma descrição:
oci iot domain-group create --compartment-id <compartment-OCID> --display-name <domain-group-name> --description <your-sample-description>A criação de um grupo de domínios IoT pode levar alguns minutos. Este exemplo de resposta mostra que o grupo de domínios está criando e usa este URL do host de dados:
wtmn2xs4ifkba.data.iot.us-phoenix-1.oci.oraclecloud.com
id curto do grupo de domínios: wtmn2xs4ifkba
data-host:<domain-group-short-id>.data.iot.<region>.oci.oraclecloud.com
{
"data": {
"compartment-id": "<compartment-OCID>",
"data-host": "domain-group-short-id.data.iot.<region>.oci.oraclecloud.com",
"db-allow-listed-vcn-ids": null,
"db-connection-string": null,
"db-token-scope": null,
"defined-tags": {
"Oracle-Tags": {
"CreatedBy": "default/user@oracle.com",
"CreatedOn": "2025-08-14T16:43:02.950Z"
}
},
"description": "<your-domain-group-description>",
"display-name": "<your-domain-group-name>",
"freeform-tags": {},
"id": "<domain-group-OCID>",
"lifecycle-state": "CREATING",
"system-tags": {},
"time-created": "2025-08-14T16:43:03.307000+00:00",
"time-updated": "2025-08-14T16:43:03.307000+00:00"
},
"etag": "<unique-id>",
"opc-work-request-id": "<work-request-OCID>"
}
oci iot work-request get e o parâmetro necessário para obter as atualizações da solicitação de serviço para o processo de criação de um grupo de domínios. Substitua o <work-request-id> pelo OCID da solicitação de serviço da criação de uma resposta do grupo de domínios IoT:oci iot work-request get --work-request-id <work-request-OCID>Este exemplo de resposta mostra que a criação de uma operação de grupo de domínios está em andamento.
{
"data": {
"compartment-id": "<compartment-OCID>",
"id": "<work-request-OCID>",
"operation-type": "CREATE_IOT_DOMAIN_GROUP",
"percent-complete": 50.0,
"resources": [
{
"action-type": "IN_PROGRESS",
"entity-type": "iotDomainGroup",
"entity-uri": "/20250531/iotDomainGroups/<iot-domain-group-OCID>",
"identifier": "<work-request-OCID>",
"metadata": null
}
],
"status": "ACCEPTED",
"time-accepted": "2025-08-14T16:43:03.327000+00:00",
"time-finished": null,
"time-started": null,
"time-updated": "2025-08-14T16:43:22.121000+00:00"
},
"etag": "<unique-id>"
}
oci iot work-request list-errors e o parâmetro necessário para listar quaisquer erros de solicitações de serviço para o processo de criação de um grupo de domínios:oci iot work-request list-errors --work-request-id <work-request-OCID>{
"data": {
"items": []
}
}oci iot work-request list-logs e o parâmetro necessário para listar entradas de log da solicitação de serviço:oci iot work-request list-logs --work-request-id <work-request-OCID>Este exemplo de resposta mostra as etapas para criar o grupo de domínios IoT e que ele está sendo finalizado:
{
"data": {
"items": [
{
"message": "Generating database credentials",
"timestamp": "2025-08-14T16:43:12.150000+00:00"
},
{
"message": "Creating database",
"timestamp": "2025-08-14T16:43:18.156000+00:00"
},
{
"message": "Provisioning database",
"timestamp": "2025-08-14T16:43:22.121000+00:00"
},
{
"message": "Enabling data guard",
"timestamp": "2025-08-14T16:48:25.138000+00:00"
},
{
"message": "Configuring admin secret rotation ",
"timestamp": "2025-08-14T16:53:59.878000+00:00"
},
{
"message": "Generating DNS record(s)",
"timestamp": "2025-08-14T16:54:05.318000+00:00"
},
{
"message": "Configuring routing policy",
"timestamp": "2025-08-14T16:54:06.455000+00:00"
},
{
"message": "Finishing work request",
"timestamp": "2025-08-14T16:54:58.139000+00:00"
}
]
}
}
- Opcional. Use o comando
oci iot work-request gete o parâmetro necessário para obter a atualização da solicitação de serviço para o grupo de domínios. Substitua o <work-request-id> pelo OCID da solicitação de serviço:oci iot work-request get --work-request-id <work-request-OCID>Este exemplo de resposta mostra que a criação do grupo de domínios IoT foi bem-sucedida.
{ "data": { "compartment-id": "<compartment-OCID>", "id": "<work-request-OCID>", "operation-type": "CREATE_IOT_DOMAIN_GROUP", "percent-complete": 100.0, "resources": [ { "action-type": "CREATED", "entity-type": "iotDomainGroup", "entity-uri": "/20250531/iotDomainGroups/<domain-group-OCID>", "identifier": "<domain-group-OCID>", "metadata": null } ], "status": "SUCCEEDED", "time-accepted": "2025-08-14T16:43:03.327000+00:00", "time-finished": "2025-08-14T16:54:58.139000+00:00", "time-started": "2025-08-14T16:43:12.131000+00:00", "time-updated": "2025-08-14T16:54:58.139000+00:00" }, "etag": "<unique-id>" }
Etapa Opcional: Obter os Detalhes do Grupo de Domínios IoT
Use o comando oci iot domain-group get e o parâmetro necessário para obter os detalhes do grupo de domínios IoT, incluindo os detalhes de conexão do banco de dados do grupo de domínios, se configurado. Substitua o <iot-domain-group-OCID> pelo OCID do seu grupo de domínios IoT:
oci iot domain-group get --iot-domain-group-id <iot-domain-group-OCID>"lifecycleState": "ACTIVE" e usa o seguinte host de dados: wtmn2xs4ifkba.data.iot.us-phoenix-1.oci.oraclecloud.com. Neste exemplo, o wtmn2xs4ifkba é o IoT id curto do grupo de domínios. {
"data": {
"compartment-id": "<compartment-OCID>",
"data-host": "wtmn2xs4ifkba.data.iot.<region>.oci.oraclecloud.com",
"db-allow-listed-vcn-ids": null,
"db-connection-string": null,
"db-token-scope": null,
"defined-tags": {
"Oracle-Tags": {
"CreatedBy": "default/user@oracle.com",
"CreatedOn": "2025-08-14T16:43:02.950Z"
}
},
"description": "This is a sample domain group",
"display-name": "Sample Domain Group",
"freeform-tags": {},
"id": "<iot-domain-group-OCID>",
"lifecycle-state": "ACTIVE",
"system-tags": {},
"time-created": "2025-08-14T16:43:03.307000+00:00",
"time-updated": "2025-08-14T16:54:58.187000+00:00"
},
"etag": "<unique-id>"
}Etapa 2: Criar um Domínio IoT
Use o comando oci iot domain create e os parâmetros <domain-group-OCID> e <compartment-OCID> necessários para criar um domínio do Internet of Things. Substitua o <domain-group-OCID> pelo OCID do grupo de domínios que você deseja associar a esse domínio IoT. Substitua <your-sample-description> por uma descrição para seu domínio IoT.
oci iot domain create --compartment-id <compartment-OCID> --iot-domain-group-id <domain-group-OCID> --display-name <your-iot-domain-name> --description <your-iot-domain-description>A criação de um domínio pode levar alguns minutos. Neste exemplo de resposta, você vê a URL do host do dispositivo com o id curto do domínio:
"device-host": "cuay2mrhlgrrg.device.iot.<region>.oci.oraclecloud.com"
id curto do domínio: cuay2mrhlgrrg
"device-host": "<domain-short-id>.device.iot.<region>.oci.oraclecloud.com"
{
"data": {
"compartment-id": "<compartment-OCID>",
"data-retention-periods-in-days": {
"historized-data": 30,
"raw-command-data": 16,
"raw-data": 16,
"rejected-data": 16
},
"db-allow-listed-identity-group-names": null,
"db-allowed-identity-domain-host": null,
"defined-tags": {
"Oracle-Tags": {
"CreatedBy": "default/user@oracle.com",
"CreatedOn": "2025-08-14T16:57:03.140Z"
}
},
"description": "<your-iot-domain-description>",
"device-host": "cuay2mrhlgrrg.device.iot.<region>.oci.oraclecloud.com",
"display-name": "<your-iot-domain-name>",
"freeform-tags": {},
"id": "<iot-domain-OCID>",
"iot-domain-group-id": "<iot-domain-group-OCID>",
"lifecycle-state": "CREATING",
"system-tags": {},
"time-created": "2025-08-14T16:57:03.384000+00:00",
"time-updated": "2025-08-14T16:57:03.384000+00:00"
},
"etag": "<unique-id>",
"opc-work-request-id": "<work-request-OCID>"
}
Opcional. Durante o tempo necessário para criar o domínio, use o comando oci iot work-request get e o parâmetro necessário para obter a atualização da solicitação de serviço para criar o domínio. Substitua o <work-request-id> pelo id da solicitação de serviço da resposta anterior:
oci iot work-request get --work-request-id <work-request-OCID>O exemplo de resposta mostra que a criação de um domínio IoT foi aceita e está em andamento.
{
"data": {
"compartment-id": "<iot-domain-OCID>",
"id": "<work-request-OCID>",
"operation-type": "CREATE_IOT_DOMAIN",
"percent-complete": 50.0,
"resources": [
{
"action-type": "IN_PROGRESS",
"entity-type": "iotDomain",
"entity-uri": "/20250531/iotDomains/<iot-domain-OCID>",
"identifier": "<iot-domain-OCID>",
"metadata": null
}
],
"status": "ACCEPTED",
"time-accepted": "2025-08-14T16:57:03.413000+00:00",
"time-finished": null,
"time-started": null,
"time-updated": "2025-08-14T16:57:23.124000+00:00"
},
"etag": "<unique-id>"
}
oci iot work-request list-logs e o parâmetro necessário para listar entradas de log para a criação de uma solicitação de serviço de domínio IoT:oci iot work-request list-logs --work-request-id <work-request-OCID>Este exemplo de resposta mostra as etapas para criar o domínio IoT e que ele está sendo finalizado:
{
"data": {
"items": [
{
"message": "Generating DNS record(s)",
"timestamp": "2025-08-14T16:57:22.148000+00:00"
},
{
"message": "Onboarding domain schema(s)",
"timestamp": "2025-08-14T16:57:23.124000+00:00"
},
{
"message": "Successfully onboarded domain schemas",
"timestamp": "2025-08-14T16:58:43.508000+00:00"
},
{
"message": "Finishing work request",
"timestamp": "2025-08-14T16:58:43.771000+00:00"
}
]
}
}
oci iot work-request get e os parâmetros necessários para obter a atualização da solicitação de serviço para criar o domínio. Substitua o <work-request-id> pelo OCID da solicitação de serviço:oci iot work-request get --work-request-id <work-request-OCID>Este exemplo de resposta mostra a criação bem-sucedida do domínio IoT.
"status": "SUCCEEDED",
{
"data": {
"compartment-id": "<compartment-OCID>",
"id": "<work-request-OCID>",
"operation-type": "CREATE_IOT_DOMAIN",
"percent-complete": 100.0,
"resources": [
{
"action-type": "CREATED",
"entity-type": "iotDomain",
"entity-uri": "/20250531/iotDomains/<iot-domain-OCID>",
"identifier": "<iot-domain-OCID>",
"metadata": null
}
],
"status": "SUCCEEDED",
"time-accepted": "2025-08-14T16:57:03.413000+00:00",
"time-finished": "2025-08-14T16:58:43.771000+00:00",
"time-started": "2025-08-14T16:57:22.147000+00:00",
"time-updated": "2025-08-14T16:58:43.771000+00:00"
},
"etag": "<unique-id>"
}
Etapa Opcional: Obtenha os Detalhes do Domínio IoT para exibir o URL do Host do Dispositivo
oci iot domain get e o parâmetro necessário para obter os detalhes de um domínio. Substitua o <iot-domain-OCID> pelo OCID do seu domínio IoT.oci iot domain get --iot-domain-id <iot-domain-OCID>Este exemplo de resposta mostra que o domínio está ativo: "lifecycle-state": "ACTIVE" e a URL do host do dispositivo com o id curto do domínio:
<domain-short-id>.device.iot.<region>.oci.oraclecloud.com
{
"data": {
"compartment-id": "<compartment-OCID>",
"data-retention-periods-in-days": {
"historized-data": 30,
"raw-command-data": 16,
"raw-data": 16,
"rejected-data": 16
},
"db-allow-listed-identity-group-names": null,
"db-allowed-identity-domain-host": null,
"defined-tags": {
"Oracle-Tags": {
"CreatedBy": "default/user@oracle.com",
"CreatedOn": "2025-08-14T16:57:03.140Z"
}
},
"description": "<your-iot-domain-description>",
"device-host": "<domain-short-id>.device.iot.<region>.oci.oraclecloud.com",
"display-name": "<your-iot-domain-name>",
"freeform-tags": {},
"id": "<iot-domain-OCID>",
"iot-domain-group-id": "<iot-domain-group-OCID>",
"lifecycle-state": "ACTIVE",
"system-tags": {},
"time-created": "2025-08-14T16:57:03.384000+00:00",
"time-updated": "2025-08-14T16:58:43.789000+00:00"
},
"etag": "<unique-id>"
}
Etapa 3: Criar uma Instância Digital Twin
Use o comando oci iot digital-twin-instance create e o parâmetro <iot-domain-OCID> necessário para criar uma instância de gêmeo digital para um domínio IoT associado.
Quando você cria uma instância de gêmeo digital que não tem um modelo de gêmeo digital, a instância de gêmeo digital requer um ID de autenticação. Use um certificado mTLS ou um segredo. Consulte Criando um Segredo.
<iot-domain-OCID> pelo OCID do domínio IoT que você deseja associar à instância do gêmeo digital. Este exemplo de comando inclui o nome para exibição opcional. Substitua <display-name> por um nome amigável para sua instância de gêmeo digital. Este exemplo não usa o parâmetro --external-key opcional; portanto, a resposta contém um id exclusivo gerado como a chave externa. oci iot digital-twin-instance create --iot-domain-id <iot-domain-OCID> --auth-id <vault-secret-OCID-or-certificate-OCID> --display-name <display-name>Exemplo de resposta com uma chave externa gerada. Use a chave externa da instância do gêmeo digital na próxima etapa:{
"data": {
"auth-id": "<vault-secret-OCID>",
"defined-tags": {
"Oracle-Tags": {
"CreatedBy": "default/user@oracle.com",
"CreatedOn": "2025-08-14T06: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:core:Space:sp;1",
"display-name": "device for conference room 103",
"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 4: Enviar Dados
Envie dados usando o URL do host do dispositivo da etapa anterior.
Você pode enviar quantos dados quiser. Este exemplo mostra o envio de 2 mensagens de dados de texto simples. Para obter mais informações, consulte Usando cURL.
curl inclui o URL do host do dispositivo com um tópico e dados de amostra como uma mensagem de texto sem formatação como sample data 1 e também mostra como usar um segredo do vault para autenticação. Para produção, use um certificado mTLS para a instância de gêmeo digital --auth-id.- Substitua o
<iot-domain-short-id>e o<region>pelos valores do seu ambiente - Substitua o
<digital-twin-instance-external-key>pela chave externa da resposta de criação de instância de gêmeo digital da etapa 3 anterior, Criar Instância Gêmea Digital. - Se você usar o segredo do vault para a instância do gêmeo digital
--auth-id, use o conteúdo do segredo de texto simples para a senha do dispositivo.
curl -i -X POST \
-u '<digital-twin-instance-external-key>:<secret-contents>' \
-H 'Content-Type: plain-text' \
https://<iot-domain-short-id>.device.iot.region.oci.oraclecloud.com/sampletopic \
-d "sample data 1"Este exemplo de comando curl mostra uma mensagem de texto sem formatação como sample data 2 como um tópico de amostra:curl -u '<digital-twin-instance-external-key>:<secret-contents>' https://<iot-domain-short-id>.device.iot.<region>.oci.oraclecloud.com/sampletopic -H 'Content-Type: plain-text' -d "sample data 2"
Etapa 5: Configurar o Acesso do Domínio IoT ao APEX
Para exibir seus dados no APEX, é necessário configurar o acesso para exibir seus dados IoT no APEX. Uma etapa desse processo usa o comando a seguir para adicionar a senha do APEX ao domínio IoT para que ele possa acessar o APEX.
oci iot domain configure-apex-data-access e os parâmetros necessários para configurar o acesso de um domínio IoT ao APEX. Substitua o <your-initial-apex-password> e o <iot-domain-OCID> pelos valores do seu ambiente:oci iot domain configure-apex-data-access --iot-domain-id <iot-domain-OCID> --db-workspace-admin-initial-password <your-inital-apex-password>Opcional. Durante o tempo necessário para configurar o acesso ao APEX, use o comando oci iot work-request get e o parâmetro necessário para obter a atualização da solicitação de serviço. Substitua o <work-request-id> pelo id da solicitação de serviço da resposta anterior:
oci iot work-request get --work-request-id <work-request-OCID>Exemplo de resposta:
{
"data": {
"compartment-id": "<compartment-OCID>",
"id": "<work-request-OCID>",
"operation-type": "CONFIGURE_DOMAIN_DATA_ACCESS",
"percent-complete": 0.0,
"resources": [
{
"action-type": "IN_PROGRESS",
"entity-type": "iotDomain",
"entity-uri": "/20250531/iotDomains/<iot-domain-OCID>",
"identifier": "<iot-domain-OCID>",
"metadata": null
}
],
"status": "ACCEPTED",
"time-accepted": "2025-08-14T17:44:44.716000+00:00",
"time-finished": null,
"time-started": null,
"time-updated": "2025-08-14T17:44:44.716000+00:00"
},
"etag": "<unique-id>"
}
oci iot work-request list-logs e o parâmetro necessário para listar as entradas de log da solicitação de serviço:oci iot work-request list-logs --work-request-id <work-request-OCID>Este exemplo de resposta mostra que o acesso ao APEX para o domínio está em andamento e que ele está sendo concluído:
{
"data": {
"items": [
{
"message": "Configuring domain data access is in Progress",
"timestamp": "2025-08-14T17:45:19.708000+00:00"
},
{
"message": "Finishing work request",
"timestamp": "2025-08-14T17:45:19.978000+00:00"
}
]
}
}
oci iot work-request list-errors e o parâmetro necessário para listar erros de solicitações de serviço:oci iot work-request list-errors --work-request-id <work-request-OCID>{
"data": {
"items": []
}
}oci iot work-request get e o parâmetro necessário para obter a solicitação de serviço. Substitua o <work-request-id> pelo ID da Solicitação de Serviço:oci iot work-request get --work-request-id <work-request-OCID>Este exemplo de resposta mostra que a configuração do acesso ao APEX para o domínio IoT foi atualizada:
"status": "SUCCEEDED"
{
"data": {
"compartment-id": "<compartment-OCID>",
"id": "<work-request-OCID>",
"operation-type": "CONFIGURE_DOMAIN_DATA_ACCESS",
"percent-complete": 100.0,
"resources": [
{
"action-type": "UPDATED",
"entity-type": "iotDomain",
"entity-uri": "/20250531/iotDomains/<iot-domain-OCID>",
"identifier": "<iot-domain-OCID>",
"metadata": null
}
],
"status": "SUCCEEDED",
"time-accepted": "2025-08-14T17:44:44.716000+00:00",
"time-finished": "2025-08-14T17:45:19.978000+00:00",
"time-started": "2025-08-14T17:45:19.708000+00:00",
"time-updated": "2025-08-14T17:45:19.978000+00:00"
},
"etag": "<unique-id>"
}
Etapa 6: Acessar Dados IoT no APEX
- Vá para o URL do APEX em IoT:
https://<domain-group-data-host>/ords/apex/No APEX, faça log-in usando:
Use o id short de domínio proveniente do host do dispositivo para fazer log-in no APEX:
Por exemplo:
device-host:<domain-short-id>.device.iot.<region>.oci.oraclecloud.com- Espaço de trabalho:
<domain-short-id-from-device-host>__WKSP - Nome de usuário:
<domain-short-id-from-device-host>__WKSP - Senha inicial definida quando você usou o comando da CLI para configurar o acesso aos dados de um domínio IoT para o APEX:
<initial-apex-password>
Observação
Observe os dois sublinhados:__WKSPe__IOT. - Espaço de trabalho:
- Para consultar os dados do IoT, selecione o esquema do
<domain-short-id-from-device-host>__IOT. Selecione SQL Workshop e, em seguida, Object Browser.URL do SQL workshop:
https://<domain-group-data-host>/ords/apex/sql-workshop - Consulte os dados IoT informando e executando um comando SQL. Confirme se você selecionou o esquema correto que deseja consultar, execute o seguinte comando:
select * from RAW_DATAAgora, você pode ver as views de banco de dados, esquemas e dados brutos do seu dispositivo conectado à Internet of Things.
Para ver uma captura de tela maior, clique com o botão direito do mouse e abra a imagem em uma nova janela do navegador.
