Conceitos e status de comandos - AWS IoT Core

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á.

Conceitos e status de comandos

Use AWS IoT Comandos para enviar instruções da nuvem para dispositivos conectados. Para usar esse atributo:

  1. Crie um comando com uma carga contendo as configurações necessárias para execução no dispositivo.

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

  3. Execute o comando no dispositivo de destino e recupere as informações de status. Para solucionar problemas, consulte CloudWatch os registros.

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

Os conceitos-chave a seguir ajudam você a entender o recurso Comandos. Os termos são usados de forma consistente em toda esta documentação:

  • Comando - Um modelo reutilizável que define as instruções do dispositivo

  • Execução - Uma instância de um comando em execução em um dispositivo

  • Nome da coisa - Identificador para dispositivos registrados no registro de IoT

  • ID do cliente - identificador MQTT para dispositivos não registrados

  • Carga útil - Os dados da instrução enviados aos dispositivos

  • Tópico - Canal MQTT para comunicação de comando

Comandos

Os comandos são instruções enviadas da nuvem para seus dispositivos de IoT como mensagens MQTT. Depois de receber a carga, os dispositivos processam as instruções e realizam as ações correspondentes, como modificar as configurações, transmitir leituras do sensor ou carregar registros. Os dispositivos então retornam os resultados para a nuvem, permitindo monitoramento e controle remotos.

Namespace

Ao criar um comando, especifique seu namespace. Para AWS IoT Device Management comandos, use o AWS-IoT namespace padrão e forneça uma carga ou um payloadTemplate. Para AWS IoT FleetWise comandos, use o AWS-IoT-FleetWise namespace. Para obter mais informações, consulte Comandos remotos no Guia do AWS IoT FleetWise desenvolvedor.

Carga útil

Ao criar um comando, forneça uma carga estática que defina as ações que o dispositivo deve realizar. A carga pode usar qualquer formato compatível. Para garantir que os dispositivos interpretem corretamente a carga, recomendamos especificar o tipo de formato da carga útil. Os dispositivos que usam o MQTT5 protocolo podem seguir o padrão MQTT para identificar o formato. Os indicadores de formato para JSON ou CBOR estão disponíveis no tópico de solicitação de comandos.

Modelo de carga

Um modelo de carga útil define uma carga de comando com espaços reservados que geram cargas diferentes em tempo de execução com base nos valores de parâmetros fornecidos por você. Por exemplo, em vez de criar cargas separadas para diferentes valores de temperatura, crie um modelo com um espaço reservado de temperatura e especifique o valor durante a execução. Isso elimina a manutenção de várias cargas úteis semelhantes.

Dispositivo de destino

Para executar um comando, especifique um dispositivo de destino usando o nome do item (para dispositivos registrados com AWS IoT) ou o ID do cliente MQTT (para dispositivos não registrados). O ID do cliente é um identificador exclusivo definido no MQTT protocolo usado para conectar dispositivos AWS IoT a. Para obter detalhes, consulte Considerações sobre dispositivos de destino.

Tópicos de comandos

Antes de executar um comando, os dispositivos devem se inscrever no tópico de solicitação de comandos. Quando você executa um comando, a carga útil é enviada para o dispositivo neste tópico. Após a execução, os dispositivos publicam os resultados e o status no tópico de resposta dos comandos. Para obter mais informações, consulte Tópicos de comandos.

Execução de comandos

Uma execução é uma instância de um comando em execução em um dispositivo de destino. Quando você inicia uma execução, a carga é entregue ao dispositivo e uma ID de execução exclusiva é gerada. O dispositivo executa o comando e relata o progresso para AWS IoT. A lógica do lado do dispositivo determina o comportamento de execução e os relatórios de status para tópicos reservados.

Condições de valor do parâmetro

Ao criar comandos com modelos de carga útil, defina condições de valor para validar os valores dos parâmetros antes da execução. As condições de valor garantem que os parâmetros atendam aos requisitos, evitando execuções inválidas.

Operadores suportados por CommandParameterValuetipo

Tipos numéricos (INTEGER, LONG, DOUBLE, UNSIGNEDLONG)
  • EQUALS- O valor deve ser igual ao número especificado

  • NOT_EQUALS- O valor não deve ser igual ao número especificado

  • GREATER_THAN- O valor deve ser maior que o número especificado

  • GREATER_THAN_EQUALS- O valor deve ser maior ou igual ao número especificado

  • LESS_THAN- O valor deve ser menor que o número especificado

  • LESS_THAN_EQUALS- O valor deve ser menor ou igual ao número especificado

  • IN_RANGE- O valor deve estar dentro do intervalo especificado (inclusive)

  • NOT_IN_RANGE- O valor deve estar fora do intervalo especificado (inclusive)

  • IN_SET- O valor deve corresponder a um dos números especificados

  • NOT_IN_SET- O valor não deve corresponder a nenhum dos números especificados

Tipo de string (STRING)
  • EQUALS- O valor deve ser igual à string especificada

  • NOT_EQUALS- O valor não deve ser igual à string especificada

  • IN_SET- O valor deve corresponder a uma das cadeias de caracteres especificadas

  • NOT_IN_SET- O valor não deve corresponder a nenhuma das strings especificadas

Tipo booleano
  • As condições de valor não são suportadas

Tipo binário
  • As condições de valor não são suportadas

Exemplo: comando de controle de temperatura

{ "commandId": "SetTemperature", "namespace": "AWS-IoT", "payloadTemplate": "{\"temperature\": \"${aws:iot:commandexecution::parameter:temperature}\"}", "parameters": [ { "name": "temperature", "type": "INTEGER", "valueConditions": [ { "comparisonOperator": "IN_RANGE", "operand": { "numberRange": { "min": "60", "max": "80" } } } ] } ] }

Neste exemplo, o temperature parâmetro deve estar entre 60 e 80 (inclusive). Solicitações de execução com valores fora desse intervalo falham na validação.

nota

As condições de valor são avaliadas na invocação da StartCommandExecution API. As validações com falha retornam um erro e impedem a criação da execução.

Prioridade e avaliação do valor do parâmetro

Ao iniciar as execuções de comandos com modelos de carga útil, os valores dos parâmetros são resolvidos usando a seguinte prioridade:

  1. Parâmetros da solicitação de execução - Os valores fornecidos na StartCommandExecution solicitação têm a maior prioridade

  2. Valores padrão do comando - Se um parâmetro não for fornecido na solicitação de execução, o parâmetro defaultValue será usado

  3. Sem valor - Se nenhum for fornecido, a execução falhará como parâmetro necessário para gerar a solicitação de execução

As condições de valor são avaliadas no valor final do parâmetro derivado acima na prioridade e antes da criação da execução. Se a validação falhar, a solicitação de execução retornará um erro.

Exemplo: SetTemperature comando com defaultValue

{ "parameters": [ { "name": "temperature", "type": "INTEGER", "defaultValue": {"I": 72}, "valueConditions": [ { "comparisonOperator": "IN_RANGE", "operand": {"numberRange": {"min": "60", "max": "80"}} } ] } ] }

Ao iniciar a execução:

  • Se você fornecer "temperature": {"I": 75} na solicitação, 75 será usado

  • Se você omitir o parâmetro de temperatura, o valor padrão 72 será usado

  • Ambos os valores são validados em relação à condição de intervalo [60,80]

Estados de comando

Os comandos no seu Conta da AWS podem estar em um dos três estados: Disponível, Obsoleto ou Exclusão pendente.

Disponível

Após a criação bem-sucedida, um comando fica no estado Disponível e pode ser executado em dispositivos.

Preterido

Marque comandos para suspensão de uso quando não forem mais necessários. Comandos obsoletos não podem iniciar novas execuções, mas as execuções pendentes continuam sendo concluídas. Para habilitar novas execuções, restaure o comando para o estado Disponível.

Exclusão pendente

Quando você marca um comando para exclusão, ele é excluído automaticamente se for descontinuado por mais tempo do que o tempo limite máximo (padrão: 12 horas). Essa ação é permanente. Se não for preterido ou for preterido por menos do que o tempo limite, o comando entrará no estado de exclusão pendente e será removido após o tempo limite expirar.

Status de execução do comando

Quando você inicia uma execução em um dispositivo de destino, ela entra no CREATED status e pode fazer a transição para outros status com base nos relatórios do dispositivo. Você pode recuperar informações de status e acompanhar as execuções.

nota

Você pode executar vários comandos simultaneamente em um dispositivo. Use o controle de concorrência para limitar as execuções por dispositivo e evitar sobrecargas. Para obter o máximo de execuções simultâneas por dispositivo, consulte cotas de AWS IoT Device Management comandos.

A tabela a seguir mostra os status de execução e suas transições com base no progresso 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

  • FAILED

  • REJEITADA

  • TEMPORIZADO_LIMITE

IN_PROGRESS Dispositivo Não
  • IN_PROGRESS

  • SUCCEEDED

  • FAILED

  • REJEITADA

  • TEMPORIZADO_LIMITE

TIMED_OUT Dispositivo e nuvem Não
  • SUCCEEDED

  • FAILED

  • REJEITADA

  • TEMPORIZADO_LIMITE

SUCCEEDED Dispositivo Sim Não aplicável
FAILED Dispositivo Sim Não aplicável
REJECTED Dispositivo Sim Não aplicável

Os dispositivos podem publicar atualizações de status e resultados a qualquer momento usando comandos reservados aos tópicos do MQTT. Para fornecer contexto adicional, os dispositivos podem usar reasonCode reasonDescription campos no statusReason objeto.

O diagrama a seguir mostra as transições de status de execução.

Imagem mostrando como o status de execução de um comando muda entre vários status.
nota

Quando não AWS IoT detecta nenhuma resposta do dispositivo dentro do período de tempo limite, ele é definido TIMED_OUT como um status temporário, permitindo novas tentativas e alterações de estado. Se o seu dispositivo reportar explicitamenteTIMED_OUT, isso se tornará um status de terminal sem mais transições. Para obter mais informações, consulte Execuções de comandos não terminais.

As seções a seguir descrevem as execuções terminais e não terminais e seus status.

Execuções de comandos não terminais

Uma execução não é terminal se puder aceitar atualizações de dispositivos. As execuções não terminais são consideradas ativas. Os seguintes status não são terminais:

  • CREATED

    Quando você inicia uma execução no AWS IoT console ou usa a StartCommandExecution API, as solicitações bem-sucedidas mudam o status paraCREATED. A partir desse status, as execuções podem passar para qualquer outro status não terminal ou terminal.

  • IN_PROGRESS

    Depois de receber a carga, os dispositivos podem começar a executar instruções e realizar ações especificadas. Durante a execução, os dispositivos podem publicar respostas ao tópico de resposta dos comandos e atualizar o status paraIN_PROGRESS. A partir deIN_PROGRESS, as execuções podem fazer a transição para qualquer status terminal ou não terminal, exceto. CREATED

    nota

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

  • TEMPORIZADO_LIMITE

    Tanto a nuvem quanto o dispositivo podem acionar esse status. As execuções CREATED ou IN_PROGRESS o status podem mudar TIMED_OUT para pelos seguintes motivos:

    • Depois de enviar o comando, um cronômetro é iniciado. Se o dispositivo não responder dentro do período especificado, o status da nuvem mudará paraTIMED_OUT. Nesse caso, a execução não é terminal.

    • O dispositivo pode substituir o status de qualquer terminal ou relatar um tempo limite e definir o status como. TIMED_OUT Nesse caso, o status permaneceTIMED_OUT, mas os campos do StatusReason objeto mudam com base nas informações do dispositivo. A execução 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

Uma execução se torna terminal quando não aceita mais atualizações de dispositivos. Os status a seguir são terminais. As execuções podem fazer a transição para status de terminal a partir de qualquer status que não seja terminal:CREATED,, IN_PROGRESS ou. TIMED_OUT

  • SUCCEEDED

    Se o dispositivo concluir com êxito a execução, ele poderá publicar uma resposta ao tópico de resposta do comando e atualizar o status paraSUCCEEDED.

  • FAILED

    Quando um dispositivo não consegue concluir a execução, ele pode publicar uma resposta ao tópico de resposta do comando e atualizar o status paraFAILED. Use os reasonDescription campos reasonCode e no statusReason objeto, ou CloudWatch registros, para solucionar falhas.

  • REJEITADA

    Quando um dispositivo recebe uma solicitação inválida ou incompatível, ele pode invocar a UpdateCommandExecution API com status. REJECTED Use os reasonDescription campos reasonCode e no statusReason objeto, ou CloudWatch registros, para solucionar problemas.