Conceitos e status de comandos - AWS IoT Core

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:

  1. Primeiro, crie um recurso de comando com uma carga útil que contenha as configurações necessárias para executar o comando no dispositivo.

  2. Especifique o dispositivo de destino que receberá a carga útil e executará as ações especificadas.

  3. 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 namespace AWS-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 e origem da execução do comando
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

  • SUCCEEDED

  • COM FALHA

  • REJEITADO

  • TIMED_OUT

IN_PROGRESS Dispositivo Não
  • IN_PROGRESS

  • SUCCEEDED

  • COM FALHA

  • REJEITADO

  • TIMED_OUT

TIMED_OUT Dispositivo e nuvem Não
  • SUCCEEDED

  • COM FALHA

  • REJEITADO

  • TIMED_OUT

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.

Imagem mostrando como o status de execução de um comando muda entre vários status.
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 StartCommandExecution para 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 para CREATED. 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 status IN_PROGRESS, a execução do comando pode fazer a transição para qualquer outro status terminal ou não terminal diferente de CREATED.

    nota

    A API UpdateCommandExecution pode ser invocada várias vezes com o status de IN_PROGRESS. Você pode especificar detalhes adicionais sobre a execução usando o objeto statusReason.

  • TIMED_OUT

    Esse status de execução do comando pode ser acionado tanto pela nuvem quanto pelo dispositivo. A execução no status CREATED ou IN_PROGRESS pode mudar para o status TIMED_OUT devido 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 em TIMED_OUT, mas os campos do objeto StatusReason mudam 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 campos reasonCode e reasonDescription do objeto statusReason ou 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 UpdateCommandExecution com o status de REJECTED. Você pode usar os campos reasonCode e reasonDescription do objeto statusReason ou os logs do CloudWatch, para investigar mais a fundo os problemas.