Conceitos e status de comandos
Use os comandos do AWS IoT para enviar uma instrução da nuvem a um dispositivo conectado à AWS IoT. Para usar o recurso de comandos:
-
Primeiro, crie um recurso de comando com uma carga útil que contenha as configurações necessárias para executar o comando no dispositivo.
-
Especifique o dispositivo de destino que receberá a carga útil e executará as ações especificadas.
-
Execute o comando no dispositivo de destino e recupere as informações de status do dispositivo. Para solucionar qualquer problema, consulte os logs do CloudWatch.
Para obter mais informações sobre esse fluxo de trabalho, consulte Fluxo de trabalho de comandos de alto nível.
Conceitos de chaves de comandos
Veja a seguir alguns conceitos principais para usar o recurso de comandos.
- Comandos
-
Comandos são instruções enviadas da nuvem para seus dispositivos de IoT. Essas instruções (carga útil do comando) são enviadas aos dispositivos como mensagens do MQTT. Depois que os dispositivos receberem a carga útil do comando, eles poderão processar as instruções para realizar a ação correspondente. Exemplos dessas ações são a modificação das configurações do dispositivo, a transmissão de leituras do sensor ou o upload de logs. Os dispositivos podem então executar o comando e exibir o resultado para a nuvem. Isso permite monitorar e controlar remotamente os dispositivos conectados.
- Namespace
-
Ao usar o recurso de comandos, você pode especificar o namespace para o comando. Quando quiser criar um comando no AWS IoT Device Management, use o namespace padrão da
AWS-IoT. Ao usar esse namespace, você deve fornecer uma carga útil ao criar o comando. A carga útil será usada quando você executar o comando no dispositivo de destino. Se, em vez disso, quiser criar um comando para AWS IoT FleetWise, use o namespaceAWS-IoT-FleetWise. Para acessar mais informações, consulte Remote commands no Guia do desenvolvedor do AWS IoT FleetWise para comandos. - Carga
-
Ao criar o comando, você deve fornecer uma carga útil que defina as ações a serem realizadas pelo dispositivo. A carga útil pode usar qualquer formato de sua escolha. Para garantir que o dispositivo possa ler e entender corretamente as informações enviadas, recomendamos especificar o tipo de formato da carga útil no comando. Se seus dispositivos usam o MQTT5, eles podem seguir o padrão MQTT para identificar o formato da carga útil. Um indicador de formato para JSON ou CBOR estará disponível no tópico de solicitação de comandos.
- Target Device
-
Quando quiser executar o comando, você deverá especificar um dispositivo de destino que vai recebê-lo e realizar as ações. Se o seu dispositivo tiver sido registrado como uma coisa com AWS IoT, você pode usar o nome da coisa. Se o dispositivo não tiver sido registrado, você poderá usar o ID do cliente do MQTT. O ID do cliente é um identificador exclusivo para o dispositivo ou o cliente definido no protocolo MQTT. Ele pode ser usado para conectar seu dispositivo à AWS IoT.
- Execução de comandos
-
A execução de um comando é uma instância de um comando executado no dispositivo de destino. Quando você inicia a execução, o comando (carga útil) é entregue ao dispositivo de destino. Um ID exclusivo de execução de comando agora é gerado para o destino. O dispositivo pode então executar o comando e relatar seu andamento na AWS IoT. A lógica do lado do dispositivo determina como o comando será executado e como o status será publicado nos tópicos reservados.
- Tópicos de comandos
-
Antes de executar o comando, seu dispositivo deve ter assinado o tópico de solicitação de comandos. Quando você envia a solicitação à nuvem para executar o comando, a carga útil será enviada ao dispositivo no tópico de solicitação de comandos. Depois que o dispositivo executa o comando, ele pode publicar o resultado e o status da execução no tópico de resposta do comando. Para obter mais informações, consulte Tópicos de comandos.
Estados de comando
Um comando que você cria na Conta da AWS pode estar no estado Disponível, Suspenso ou Exclusão pendente.
- disponíveis
-
Depois de criar com êxito um recurso de comando, ele estará em um estado disponível. O comando agora pode ser usado para enviar uma execução de comando ao dispositivo.
- Preterido
-
Se você não pretende mais usar um comando, pode marcá-lo como suspenso. Nesse estado, você não pode enviar nenhuma nova execução do comando para seus dispositivos. Todas as execuções pendentes que já tenham sido iniciadas continuarão sendo executadas no dispositivo até serem concluídas. Para enviar novas execuções, você deve restaurar o comando para que ele fique disponível.
- Exclusão pendente
-
Quando você marca um comando para exclusão, se o comando permanecer suspenso por um período maior que o tempo limite máximo, ele será excluído automaticamente. Essa ação é permanente, portanto, não pode ser desfeita. Por padrão, o tempo limite máximo é de 12 horas. Se o comando não for suspenso ou permanecer suspenso por um período menor que o valor do tempo limite máximo, ele entrará no estado de exclusão pendente. O comando será removido automaticamente da sua conta após o tempo limite máximo.
Status de execução do comando
Quando você inicia a execução do comando no dispositivo de destino, ela entra no status CREATED. Depois, ele pode fazer a transição para qualquer outro status de execução de comando, dependendo do status relatado pelo dispositivo. Depois, você pode recuperar as informações de status e rastrear suas execuções de comandos.
nota
Para um dispositivo de destino específico, você pode executar vários comandos simultaneamente. Você pode usar o recurso de controle de simultaneidade para limitar o número máximo de execuções enviadas ao mesmo dispositivo, o que evita que ele seja sobrecarregado. Para ter informações sobre o número máximo de execuções simultâneas que você pode executar para cada dispositivo, consulte Cotas de comandos do AWS IoT Device Management.
A tabela a seguir mostra os diferentes status de uma execução de comando e como a execução do comando faz a transição entre os vários status, dependendo do andamento da execução.
| Status de execução do comando | Iniciado pelo dispositivo/nuvem? | Execução do terminal? | Transições de status permitidas |
|---|---|---|---|
CREATED |
Nuvem | Não |
|
IN_PROGRESS |
Dispositivo | Não |
|
TIMED_OUT |
Dispositivo e nuvem | Não |
|
SUCCEEDED |
Dispositivo | Sim | Não aplicável |
FAILED |
Dispositivo | Sim | Não aplicável |
REJECTED |
Dispositivo | Sim | Não aplicável |
Conforme seus dispositivos executam o comando, eles podem publicar atualizações do status e do resultado a qualquer momento na nuvem usando os comandos reservados aos tópicos do MQTT. Para fornecer contexto adicional sobre o status de cada execução de comando na nuvem, ela pode usar o reasonCode e a reasonDescription que estão contidos no objeto statusReason.
O diagrama a seguir mostra os vários status de execução do comando e como a transição ocorre entre eles.
nota
Quando a AWS IoT não detecta nenhuma resposta do dispositivo dentro do tempo limite, ele define TIMED_OUT como um status temporário que permite novas tentativas e alterações de estado. Se o seu dispositivo relatar explicitamente TIMED_OUT durante a execução do comando, isso se tornará um status terminal sem a possibilidade de mais transições. Consulte Execuções de comandos não terminais.
A seção a seguir descreve as execuções de comandos terminais e não terminais, os vários status de execução e como elas funcionam.
Execuções de comandos não terminais
A execução do comando não será terminal se a execução puder aceitar atualizações de dispositivos ou clientes. Uma execução em um status não terminal é considerada Ativa. Os seguintes status não são terminais.
-
CREATED
Quando você inicia uma execução de comando no console da AWS IoT ou usa a API
StartCommandExecutionpara enviar o comando ao seu dispositivo usando o tópico de solicitação de comandos. Se a solicitação for bem-sucedida, o status de execução do comando será alterado paraCREATED. A partir desse status, a execução do comando pode fazer a transição para qualquer outro status não terminal ou terminal. -
IN_PROGRESS
Depois de receber a carga útil do comando, seu dispositivo pode começar a executar as instruções na carga útil e realizar as ações especificadas. Ao executar o comando, o dispositivo pode publicar uma resposta no tópico de resposta de comandos e atualizar o status de execução do comando como
IN_PROGRESS. A partir do statusIN_PROGRESS, a execução do comando pode fazer a transição para qualquer outro status terminal ou não terminal diferente deCREATED.nota
A API
UpdateCommandExecutionpode ser invocada várias vezes com o status deIN_PROGRESS. Você pode especificar detalhes adicionais sobre a execução usando o objetostatusReason. -
TIMED_OUT
Esse status de execução do comando pode ser acionado tanto pela nuvem quanto pelo dispositivo. A execução no status
CREATEDouIN_PROGRESSpode mudar para o statusTIMED_OUTdevido aos motivos a seguir.-
Depois que o comando é enviado ao dispositivo, um cronômetro é iniciado. Se não houver resposta do dispositivo em um período especificado, a nuvem alterará o status de execução do comando para
TIMED_OUT. Nesse caso, a execução do comando não é terminal. -
O dispositivo pode substituir o status por qualquer um dos outros status terminal ou relatar que ocorreu um tempo limite ao executar o comando e definir o status como
TIMED_OUT. Nesse caso, o status de execução permanece emTIMED_OUT, mas os campos do objetoStatusReasonmudam dependendo das informações relatadas pelos dispositivos. A execução do comando agora se torna terminal.
Para obter mais informações, consulte Valor do tempo limite e status de execução TIMED_OUT.
-
Execuções de comandos terminais
A execução de um comando se tornará terminal se a execução não aceitar mais nenhuma atualização adicional dos dispositivos. Os status a seguir são terminais. Uma execução pode fazer a transição para os status terminais a partir de qualquer um dos status não terminais, CREATED, IN_PROGRESS ou TIMED_OUT.
-
SUCCEEDED
Se o dispositivo concluiu a execução do comando com êxito, ele poderá publicar uma resposta no tópico de resposta de comandos e atualizar o status de execução para
SUCCEEDED. -
COM FALHA
Quando seu dispositivo não consegue concluir a execução do comando, ele pode publicar uma resposta no tópico de resposta e atualizar o status de execução do comando para
FAILED. Você pode usar os camposreasonCodeereasonDescriptiondo objetostatusReasonou os logs do CloudWatch para investigar mais a fundo as falhas. -
REJEITADO
Quando seu dispositivo recebe uma solicitação inválida ou incompatível, ele deve invocar a API
UpdateCommandExecutioncom o status deREJECTED. Você pode usar os camposreasonCodeereasonDescriptiondo objetostatusReasonou os logs do CloudWatch, para investigar mais a fundo os problemas.