Cenário: receber comandos e enviar respostas usando MQTTs
Use este cenário para receber comandos na nuvem e enviar respostas a um dispositivo usando o protocolo MQTTs para interagir com seus dispositivos da Internet of Things (IoT).
Tarefas
Para concluir as etapas abaixo, você pode usar um domínio IoT e um grupo de domínios IoT existentes ou criar um grupo de domínios IoT e um domínio IoT e, em seguida, concluir as etapas a seguir.
Etapa 1: Criar uma Instância Digital Twin
Usando a CLI
- Quando você cria uma instância de gêmeo digital, use um segredo ou um certificado para que a instância de gêmeo digital possa ser autenticada com segurança. Você deve criar um segredo ou criar um certificado para concluir este cenário. A Oracle recomenda usar um segredo para cada instância de gêmeo digital e, para produção, a instância de gêmeo digital deve usar um certificado mTLS para autenticação.
Use o comando
oci iot digital-twin-instance createe os parâmetros necessários para criar um gêmeo digital. O exemplo a seguir mostra o comando como usar o parâmetro ID de autenticação com o parâmetro de domínio IoT necessário para associar o domínio IoT à instância do gêmeo digital:oci iot digital-twin-instance create --auth-id <vault-secret-or-client-certificate-id> --iot-domain-id <iot-domain-OCID>Neste exemplo de resposta, observe o valor da chave externa. Use este valor de chave externa e observe a chave externa que é o nome de usuário do dispositivo que você pode usar na próxima etapa:
"external-key": "<unique-id>"{ "data": { "auth-id": "<vault-secret-or-certificate-OCID>", "defined-tags": { "Oracle-Tags": { "CreatedBy": "default/user@oracle.com", "CreatedOn": "2025-08-05T18:03:15.264Z" } }, "description": null, "digital-twin-adapter-id": null, "digital-twin-model-id": null, "digital-twin-model-spec-uri": null, "display-name": "HVAC-instance", "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-08-05T18:03:15.870000+00:00", "time-updated": "2025-08-05T18:03:15.870000+00:00" }, "etag": "<unique-id>" }
Etapa 2: Estabelecer a sessão MQTT usando credenciais do broker
- Faça download e configure o MQTTX, siga estas instruções. Consulte Conceitos Básicos do MQTTX. Abra o MQTTX.
- Selecione Mais de Nova Conexão para criar uma nova conexão. Insira um nome para a conexão, evitando inserir informações confidenciais.
- Informe o valor
<unique-id>da chave externa como o Nome do Usuário. Você pode encontrar a chave externa na respostaoci iot digital-twin-instance create, na Etapa 1: Criar uma Instância Digital Twin anterior:"external-key": "<unique-id>" - Insira a senha do dispositivo. Se você usar o segredo do vault, esse deverá ser o segredo de texto sem formatação ou poderá usar um certificado mTLS.
- Informe o Host. Selecione o protocolo
mqtts://na lista drop-down host e informe o host do dispositivo:<domain-short-id>.device.iot.<region>.oci.oraclecloud.comno domínio IoT. Consulte Obtendo Detalhes de um Domínio IoT. - Informe a porta. Por exemplo:
8883Observação
Atualmente, o MQTT Secure (MQTTS) só é suportado usando a porta8883. - Ative a opção SSL/TLS.
- Ative a opção SSL Secure.
- Para o Certificado, selecione a opção Certificado do servidor assinado pela CA.
- Ao configurar a conexão MQTTX, certifique-se de conectar usando:
clean session: Defina a opção de limpeza de sessão comotrue. Quando a sessão limpa é definida como verdadeira, o broker não retém nenhuma informação para o cliente e descarta qualquer estado anterior de qualquer sessão persistente. Todos os dados da sessão são excluídos assim que a conexão de rede é fechada.- Defina a opção
Last-Will-Retaincomofalsepara permitir que as assinaturas do cliente sejam mantidas se o dispositivo for desconectado brevemente.
- Defina o Último QoS como 1. Definir a confiabilidade da entrega "Pelo menos uma vez" para sua notificação de desconexão.
- Selecione Conexão.
Esta imagem mostra essas configurações no MQTTX, clique com o botão direito do mouse e abra em uma nova guia para ver uma captura de tela maior.


Etapa 3: Inscrever-se em um Tópico para Receber Respostas no MQTTX
Quando um sistema externo ou um dispositivo IoT publica uma mensagem no tópico inscrito, no MQTTX, você exibe as mensagens de entrada nesse tópico. Se você estiver aguardando uma resposta de um comando anterior, certifique-se de estar inscrito no tópico de resposta correto.
Defina o responseEndpoint na próxima etapa quando definir o comando em um arquivo JSON. A string "responseEndpoint": "/endpoints/4321" representa o caminho do tópico ou do ponto final em que o dispositivo deve publicar sua resposta. Escolha qualquer caminho de ponto final lógico para suas rotas de gêmeos digitais. Use o mesmo caminho no lado da nuvem (ao enviar o comando) e no lado do dispositivo (ao publicar a resposta).
- No MQTTX, selecione + Nova Assinatura.
- Informe o ponto final como o Tópico.
- No menu suspenso QoS, selecione 1 Pelo menos uma vez.
- Selecione Confirmar.
- ID do Cliente: your-client-ID
- Username: ID Externo.
- Senha: Informe a senha do dispositivo.
- Digite
mqtts://com o host do dispositivo do domínio IoT e usando o número de porta 8883:mqtts://<iot-domain-short-id>.device.iot.<region>.oci.oraclecloud.com:8883
.
Etapa 4: Definir o Comando em um arquivo JSON
Você pode definir os detalhes do comando em um arquivo JSON e usar esse arquivo na próxima etapa para Chamar um Comando JSON Bruto em um Dispositivo.
Para este exemplo, salve este trecho de código em um arquivo command.json para que você possa usá-lo para chamar o comando e processar a resposta de acordo com as instruções no arquivo.
{
"requestEndpoint": "/endpoints/1234",
"requestDuration": "PT3M",
"requestDataFormat": "JSON",
"requestData": {
"temp": 33
},
"requestDataContentType": "application/json",
"responseEndpoint": "/endpoints/4321",
"responseDuration": "PT3M"
}requestEndpoint: O caminho do URL/endpoints/1234para o qual a solicitação será enviada. Em geral, esse é um ponto final de API ou um endereço no qual a Plataforma IoT faz listening dos comandos.Se você já tiver um ponto final dedicado a respostas, por exemplo:
/endpoints/<external-id>/responseuse esse caminho emresponseEndpoint.Ou crie um novo
endpoint/routepara a instância do gêmeo digital nas regras de roteamento de entrada do adaptador do gêmeo digital para as quais o dispositivo pode publicar. Faça referência a esse caminho no arquivocommand.json. Mantenha o caminho do ponto final consistente. Qualquer caminho definido emresponseEndpointse tornará o tópico MQTT que seu cliente deverá se inscrever na Etapa 3 para que você possa ver a resposta do comando.requestDuration: A duração permitida ou solicitada para a solicitação ser concluída, no formato de duração ISO 8601. Por exemplo,PT3Mé igual a 3 minutos.requestDataFormat: Especifica o formato de data dos dados enviados na solicitação JSON.requestData: O payload JSON que é enviado com um par de valores de chave para definir um valor de temperatura no dispositivo:"temp": 33
Etapa 5: Chamar um Comando JSON Bruto em um Dispositivo
Você pode usar a CLI ou a API para chamar um comando em um dispositivo. O exemplo a seguir usa a CLI.
Usando a CLI
Use o comando oci iot digital-twin-instance invoke-raw-json-command e os parâmetros para chamar um comando JSON bruto em um dispositivo.
- Substitua o <digital-twin-instance-OCID> pelo OCID da instância do gêmeo digital na Etapa 1: Criar uma Instância do Digital Twin.
- Use o arquivo
command.jsonda Etapa 2 anterior: Definir o Comando em um arquivo JSON. - Substitua
/endpoints/1234pelo valor definido no arquivocommand.jsonpara o parâmetro--request-endpoint.
oci iot digital-twin-instance invoke-raw-json-command --digital-twin-instance-id <digital-twin-instance-OCID> --request-endpoint "/endpoints/1234" --from-json file://command.jsonEtapa 6: Verificar no MQTTX
{
"temp": 33
}Para ver uma captura de tela maior, clique com o botão direito do mouse e abra em uma nova aba.


| Cenário | Estado do Dispositivo | Estado de Comando Esperado | Comentários |
|---|---|---|---|
| Não Conectado | Não conectado inscrito | RECUSADO | A entrega do comando falha imediatamente |
| Conectado mas não inscrito | Conectado | RECUSADO | Dispositivo on-line, mas não recebe comando |
| Inscrito, mas não conectado | Inscrito somente | PENDENTE → EXPIRADO | O comando aguarda; expira após o timeout |
| Inscrito, mas não conectado inicialmente e é conectado antes do timeout | Inicialmente off-line | PENDENTE → ENVIADO | Comando Recebido |
| Conectado e inscrito | Conectado e inscrito | Enviado | Comando Recebido |
| Comando Unidirecional (Nenhuma resposta esperada) | Conectado e inscrito | CONCLUÍDO | A resposta não é esperada e rastreada |
| Comando bidirecional (Nenhuma resposta recebida) | Conectado e inscrito | NOT_RESPONDED | O dispositivo não responde dentro do tempo limite de duração da resposta |
| Comando bidirecional (resposta recebida) | Conectado e inscrito | CONCLUÍDO | O dispositivo envia dados dentro do tempo limite de resposta e conclui o fluxo |
Etapa 7: Monitorar o Status de Entrega do Comando no APEX
Para exibir seus dados IoT no APEX, é necessário configurar o acesso aos seus dados. Após a conclusão dessa configuração, você poderá usar o APEX para trabalhar com seus dados IoT.
- No APEX, faça log-in no Espaço de Trabalho do domínio IoT específico usando o seguinte como nome do espaço de trabalho e nome do usuário do banco de dados. Observe os dois sublinhados no nome do esquema do banco de dados:Vá para SQL Workshop e selecione SQL Commands para consultar os dados IoT.
<domain-short-id-from-device-host>__IOT - Digite o seguinte comando, substitua
<digital-twin-instance-OCID>pelo OCID do gêmeo digital e selecione Executar para consultar os dados do comando bruto:select * from raw_command_data where digital_twin_instance_id='<digital-twin-instance-OCID>' - Em Resultados, exiba o RESPONSE_DATA:
{"test":1}
