

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Fluxo de trabalho de comandos de alto nível
<a name="iot-remote-command-workflow"></a>

Esse fluxo de trabalho mostra como os dispositivos interagem com AWS IoT Device Management os comandos. Todas as solicitações da API HTTP usam [credenciais Sigv4](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_sigv.html) para assinatura.

![\[Visão geral do fluxo de trabalho de alto nível do comando do AWS IoT Device Management dispositivo.\]](http://docs.aws.amazon.com/pt_br/iot/latest/developerguide/images/device-command-workflow.png)


**Topics**
+ [Criar e gerenciar comandos](#command-create-command)
+ [Escolher o dispositivo de destino para os comandos e assinar os tópicos do MQTT](#command-choose-target)
+ [Iniciar e monitorar as execuções de comando para o dispositivo de destino](#command-command-executions)
+ [(Opcional) Habilitar notificações para eventos de comandos](#iot-remote-command-commands-notifications)

## Criar e gerenciar comandos
<a name="command-create-command"></a>

Para criar e gerenciar comandos para seus dispositivos, realize as etapas a seguir.

1. 

**Criar um recurso de comando**

   Crie um [comando no Command Hub](https://console.aws.amazon.com/iot/home#/commandHub) ou usando a [https://docs.aws.amazon.com/iot/latest/apireference/API_CreateCommand.html](https://docs.aws.amazon.com/iot/latest/apireference/API_CreateCommand.html)API.

1. 

**Especificar a carga útil**

   Forneça uma carga em qualquer formato. Especifique o tipo de conteúdo para garantir a interpretação correta do dispositivo.

   Para comandos dinâmicos com modelos de carga útil, a carga útil final é gerada em tempo de execução usando os parâmetros fornecidos. Os modelos oferecem suporte somente ao formato JSON, mas a carga gerada pode ser enviada como JSON ou CBOR.

1. 

**(Opcional) Gerenciar os comandos criados**

   Atualize o nome de exibição e a descrição após a criação. Marque os comandos como obsoletos quando não forem mais necessários ou exclua-os permanentemente. Para modificar as informações do Payload, crie um novo Comando.

## Escolher o dispositivo de destino para os comandos e assinar os tópicos do MQTT
<a name="command-choose-target"></a>

Escolha seu dispositivo de destino e configure os tópicos do MQTT para receber comandos e publicar respostas.

1. 

**Escolher o dispositivo de destino para o comando**

   Escolha um dispositivo de destino para receber e executar o Comando. Use um nome Thing para dispositivos registrados ou uma ID de cliente para dispositivos não registrados. Para obter mais informações, consulte [Considerações sobre dispositivos de destino](iot-remote-command-execution-start-monitor.md#iot-command-execution-target).

1. 

**Configurar a política AWS IoT do dispositivo**

   Configure uma política do IAM concedendo permissões para receber execuções e publicar atualizações. Consulte [Exemplo de política do IAM](iot-remote-command-execution-start-monitor.md#iot-remote-command-execution-update-policy) para obter exemplos de políticas.

1. 

**Estabelecer uma conexão do MQTT**

   Conecte dispositivos ao agente de mensagens e assine os tópicos de solicitação e resposta. Os dispositivos precisam de `iot:Connect` permissão. Encontre seu endpoint do plano de dados usando o comando da `DescribeEndpoint` API ou da `describe-endpoint` CLI:

   ```
   aws iot describe-endpoint --endpoint-type iot:Data-ATS
   ```

   A execução desse comando exibe o endpoint do plano de dados específico da conta, conforme mostrado abaixo.

   ```
   account-specific-prefix.iot.region.amazonaws.com
   ```

1. 

**Inscreva-se nos tópicos de comandos**

   Inscreva-se no tópico de solicitação de comandos. Quando você inicia uma execução, o agente de mensagens publica a carga neste tópico. Seu dispositivo recebe e processa o Comando.

   (Opcional) Inscreva-se nos tópicos de resposta (`accepted`ou`rejected`) para receber a confirmação se o serviço de nuvem aceitou ou rejeitou a resposta do dispositivo.

   Neste exemplo, substitua:
   + *`<device>`* por `thing` ou `client` dependendo de o dispositivo que você está considerando ter sido registrado como uma coisa da IoT ou especificado como um cliente do MQTT.
   + *`<DeviceID>`* pelo identificador exclusivo do seu dispositivo de destino. Esse ID pode ser o exclusivo do cliente do MQTT ou o nome de uma coisa.
**nota**  
Se o tipo de carga não for JSON ou CBOR, o *<PayloadFormat>* campo pode não estar presente no tópico de solicitação de comandos. Para obter o formato da carga útil, recomendamos que você use MQTT5 para obter as informações de formato dos cabeçalhos das mensagens do MQTT. Para obter mais informações, consulte [Tópicos de comandos](reserved-topics.md#reserved-topics-commands).

   ```
   $aws/commands/<devices>/<DeviceID>/executions/+/request/<PayloadFormat>
   $aws/commands/<devices>/<DeviceID>/executions/+/response/accepted/<PayloadFormat>
   $aws/commands/<devices>/<DeviceID>/executions/+/response/rejected/<PayloadFormat>
   ```

## Iniciar e monitorar as execuções de comando para o dispositivo de destino
<a name="command-command-executions"></a>

Depois de criar os comandos e especificar os destinos deles, você pode iniciar a execução no dispositivo de destino realizando as etapas a seguir.

1. 

**Iniciar a execução do comando no dispositivo de destino**

   Inicie a execução no [Command Hub](https://console.aws.amazon.com/iot/home#/commandHub) ou usando a `StartCommandExecution` API com o endpoint específico da sua conta. Use `iot:Data-ATS` para pilha dupla (IPv4/IPv6) ou `iot:Jobs` somente para. IPv4 

   A API publica a carga no tópico de solicitação de comandos.
**nota**  
Se o dispositivo estiver off-line e usar sessões persistentes do MQTT, o Comando aguarda no agente de mensagens. Quando o dispositivo se reconecta antes do tempo limite, ele pode processar o Comando e publicar os resultados. Se o tempo limite expirar, a execução expirará e a carga será descartada.

1. 

**Atualizar o resultado da execução do comando**

   O dispositivo recebe a carga, processa o comando, executa as ações especificadas e publica os resultados no tópico de resposta dos comandos usando a API baseada em `UpdateCommandExecution` MQTT. Se estiver inscrito em tópicos aceitos e rejeitados, o dispositivo receberá a confirmação se o serviço de nuvem aceitou ou rejeitou a resposta.

   Dependendo do que você especificou no tópico da solicitação, *<devices>* podem ser coisas ou clientes, e *<DeviceID>* pode ser o nome do seu AWS IoT item ou o ID do cliente MQTT.
**nota**  
Só *<PayloadFormat>* pode ser JSON ou CBOR no tópico de resposta dos comandos.

   ```
   $aws/commands/<devices>/<DeviceID>/executions/<ExecutionId>/response/<PayloadFormat>
   ```

1. 

**(Opcional) Recuperar o resultado da execução do comando**

   Recupere os resultados da execução do AWS IoT console ou usando`GetCommandExecution`. O dispositivo deve publicar os resultados no tópico de resposta dos comandos para obter as informações mais recentes. Veja detalhes adicionais, incluindo hora da última atualização, resultado e hora de conclusão.

## (Opcional) Habilitar notificações para eventos de comandos
<a name="iot-remote-command-commands-notifications"></a>

Inscreva-se nos eventos de Commands para receber notificações quando o status de execução mudar. Para obter informações detalhadas sobre eventos de execução de comandos, incluindo o formato da mensagem do evento e os atributos da carga útil, consulte[Eventos de execução de comandos](command-events.md).

1. 

**Criar uma regra de tópico**

   Inscreva-se no tópico de eventos de Comandos para receber notificações de mudança de status. Crie uma regra de tópico para rotear dados do dispositivo para outros AWS IoT serviços AWS Lambda, como Amazon SQS e AWS Step Functions, usando o AWS IoT console ou. [Criação de uma AWS IoT regra](iot-create-rule.md)

   Neste exemplo, substitua `<CommandID>` pelo identificador do comando para o qual você deseja receber notificações e `<CommandExecutionStatus>` pelo status da execução do comando.

   ```
   $aws/events/commandExecution/<CommandID>/<CommandExecutionStatus>
   ```
**nota**  
Para receber notificações de todos os comandos e os status de execução deles, você pode usar caracteres curinga e assinar o tópico a seguir.

   ```
   $aws/events/commandExecution/+/#
   ```

1. 

**Receber e processar eventos de comandos**

   Gerencie as notificações push de comandos e crie aplicativos usando os eventos inscritos.

O código a seguir mostra um exemplo de carga útil para as notificações de eventos de comandos que você receberá.

```
{
    "executionId": "2bd65c51-4cfd-49e4-9310-d5cbfdbc8554",
    "status":"FAILED",
    "statusReason": {
         "reasonCode": "DEVICE_TOO_BUSY",
         "reasonDescription": ""
    },
    "eventType": "COMMAND_EXECUTION",
    "commandArn":"arn:aws:iot:us-east-1:123456789012:command/0b9d9ddf-e873-43a9-8e2c-9fe004a90086",
    "targetArn":"arn:aws:iot:us-east-1:123456789012:thing/5006c3fc-de96-4def-8427-7eee36c6f2bd",
    "timestamp":1717708862107
}
```