Iniciar e monitorar execuções de comando - AWS IoT Core

Iniciar e monitorar execuções de comando

Depois de criar um recurso de comando, você pode iniciar uma execução dele no dispositivo de destino. Depois que o dispositivo começar a executar o comando, ele poderá começar a atualizar o resultado da execução e publicar atualizações de status e informações do resultado nos tópicos reservados do MQTT. Depois, você pode recuperar o status da execução do comando e monitorar o status das execuções em sua conta.

Esta seção mostra como você pode iniciar e monitorar comandos usando o console da AWS IoT e a AWS CLI.

Iniciar uma execução de comando

Importante

Você é o único responsável por implantar comandos de forma segura e compatível com as leis aplicáveis.

Antes de iniciar uma execução de comando, você deve garantir o seguinte:

  • Você criou um comando no namespace AWS IoT e forneceu as informações da carga útil. Quando você começar a executar o comando, o dispositivo processará as instruções na carga útil e realizará as ações especificadas. Para acessar informações sobre como criar comandos, consulte Criar um recurso de comando.

  • Seu dispositivo assinou os tópicos reservados do MQTT para comandos. Quando você iniciar a execução do comando, as informações da carga útil serão publicadas no tópico reservado de solicitação do MQTT a seguir.

    Nesse caso, os <devices> podem ser coisas da IoT ou clientes do MQTT, e <DeviceID> pode ser o nome da coisa ou o ID do cliente. Os tipos de <PayloadFormat> aceitos são JSON e CBOR. Para acessar mais informações sobre tópicos de comandos, consulte Tópicos de comandos.

    $aws/commands/<devices>/<DeviceID>/executions/+/request/<PayloadFormat>

    Se o <PayloadFormat> não for JSON nem CBOR, o formato do tópico dos comandos será mostrado a seguir.

    $aws/commands/<devices>/<DeviceID>/executions/+/request

Quando quiser executar o comando, você deverá especificar o dispositivo de destino que o receberá e seguir as instruções especificadas. O dispositivo de destino poderá ser uma coisa da AWS IoT ou o ID do cliente se o dispositivo não tiver sido registrado na AWS IoT. Depois de receber a carga útil do comando, o dispositivo pode começar a executá-lo e realizar as ações especificadas.

AWS IoTCoisa do

O dispositivo de destino para o comando pode ser uma coisa da AWS IoT que você tenha especificado no registro de coisas da AWS IoT. Coisas na AWS IoT facilitam a pesquisa e o gerenciamento de seus dispositivos.

Você pode registrar seu dispositivo como uma coisa ao conectá-lo à AWS IoT na página Conectar dispositivo ou usando a API CreateThing. Você pode encontrar uma coisa existente para a qual deseja executar o comando na página Hub de coisas do console da AWS IoT ou usando a API DescribeThing. Para acessar informações sobre como registrar o dispositivo como uma coisa da AWS IoT, consulte Managing things with the registry.

ID de cliente

Se o dispositivo não tiver sido registrado como uma coisa na AWS IoT, você poderá usar o ID do cliente.

O ID do cliente é um identificador exclusivo atribuído ao dispositivo ou ao cliente. O ID do cliente é definido no protocolo MQTT e pode conter caracteres alfanuméricos, sublinhados ou traços. Ele deve ser exclusivo para cada dispositivo que se conecta à AWS IoT.

nota
  • Se o seu dispositivo foi definido como uma coisa no registro da AWS IoT, o ID do cliente pode ser igual ao nome da coisa.

  • Se a execução do comando for direcionada a um ID de cliente do MQTT específico, para receber a carga útil do comando do tópico de comandos baseados no ID do cliente, seu dispositivo deverá se conectar à AWS IoT usando o mesmo ID do cliente.

O ID do cliente geralmente é o ID do cliente do MQTT que seus dispositivos podem usar ao se conectar ao AWS IoT Core. Esse ID é usado pela AWS IoT para identificar cada dispositivo específico e gerenciar conexões e assinaturas.

O tempo limite indica a duração em segundos na qual o dispositivo deve fornecer o resultado da execução do comando.

Depois de criar uma execução de comando, um temporizador é iniciado. Se o dispositivo ficar offline ou não relatar o resultado da execução dentro do tempo limite, a execução do comando atingirá o tempo limite e o status da execução será relatado como TIMED_OUT.

Esse campo é opcional e terá como padrão 10 segundos se você não especificar nenhum valor. Também é possível configurar o tempo limite como um valor máximo de 12 horas.

Valor do tempo limite e status de execução TIMED_OUT

Um tempo limite pode ser informado pela nuvem e pelo dispositivo.

Depois que o comando é enviado ao dispositivo, um temporizador é iniciado. Se não houve resposta recebida do dispositivo na duração do tempo limite especificado, conforme descrito acima. Nesse caso, a nuvem define o status de execução do comando como TIMED_OUT com o código do motivo como $NO_RESPONSE_FROM_DEVICE.

Isso pode ocorrer em qualquer um dos casos a seguir.

  • O dispositivo ficou offline durante a execução do comando.

  • O dispositivo não conseguiu concluir a execução do comando na duração especificada.

  • O dispositivo não conseguiu relatar as informações de status atualizadas no tempo limite.

Nesse caso, quando o status de execução de TIMED_OUT é relatado na nuvem, a execução do comando não é terminal. Seu dispositivo pode publicar uma resposta que substitua o status em qualquer um dos status terminais, SUCCEEDED, FAILED ou REJECTED. A execução do comando agora se torna terminal e não aceita mais atualizações.

Seu dispositivo também pode atualizar um status TIMED_OUT iniciado pela nuvem relatando que ocorreu um tempo limite quando ele estava executando o comando. Nesse caso, o status de execução do comando permanece como TIMED_OUT, mas o objeto statusReason é atualizado com base nas informações relatadas pelo dispositivo. A execução do comando agora se tornará terminal e nenhuma atualização adicional será aceita.

Usar sessões persistentes do MQTT

É possível configurar as sessões persistentes do MQTT para usar com o recurso de comandos do AWS IoT Device Management. Esse recurso é especialmente útil quando, por exemplo, o dispositivo fica offline e você deseja garantir que o dispositivo ainda receba o comando quando voltar a ficar on-line antes do tempo limite e execute as instruções especificadas.

Por padrão, a expiração da sessão persistente do MQTT é definida como 60 minutos. Se o tempo limite de execução do comando estiver configurado como um valor que exceda essa duração, as execuções que excederem 60 minutos poderão ser rejeitadas pelo agente de mensagens e falhar. Para executar comandos com mais de 60 minutos de duração, você pode solicitar um aumento no tempo de expiração da sessão persistente.

nota

Para garantir que você esteja usando o recurso de sessões persistentes do MQTT corretamente, verifique se o sinalizador Clean Start está definido como zero. Para acessar mais informações, consulte MQTT persistent sessions.

Para começar a executar um comando no console, acesse a página Hub de comandos do console da AWS IoT e execute as etapas a seguir.

  1. Para executar o comando que você criou, escolha Executar comando.

  2. Analise as informações sobre o comando que você criou, o arquivo de carga útil e o tipo de formato, bem como os tópicos reservados do MQTT.

  3. Especifique o dispositivo de destino para o qual você deseja executar o comando. O dispositivo pode ser especificado como uma coisa da AWS IoT se tiver sido registrado na AWS IoT ou usando o ID do cliente se o dispositivo ainda não tiver sido registrado. Para obter mais informações, consulte . Considerações sobre dispositivos de destino

  4. (Opcional) Configure um valor de tempo limite para o comando que determine o tempo de execução desejada do comando antes que ele atinja o tempo limite. Se seu comando precisar ser executado por mais de 60 minutos, talvez seja necessário aumentar o tempo de expiração das sessões persistentes do MQTT. Para obter mais informações, consulte Considerações sobre tempo limite de execução de comandos.

  5. Selecione Run command.

Use a operação da API do plano de dados HTTP StartCommandExecution para iniciar uma execução de comando. A solicitação e a resposta da API são correlacionadas pelo ID de execução do comando. Depois que o dispositivo concluir a execução do comando, ele poderá relatar o status e o resultado da execução para a nuvem publicando uma mensagem no tópico de resposta dos comandos. Para um código de resposta personalizado, os códigos da aplicação que você tem podem processar a mensagem de resposta e publicar o resultado na AWS IoT.

Se seus dispositivos assinaram o tópico de solicitação de comandos, a API StartCommandExecution publicará a mensagem de carga útil no tópico. A carga útil pode usar qualquer formato de sua escolha. Para obter mais informações, consulte Carga útil do comando.

$aws/commands/<devices>/<DeviceID>/executions/+/request/<PayloadFormat>

Se o formato da carga útil não for JSON nem CBOR, o formato do tópico de solicitação de comandos será mostrado a seguir.

$aws/commands/<devices>/<DeviceID>/executions/+/request

Exemplo de política do IAM

Antes de usar essa operação de API, garanta que sua política do IAM autorize você a realizar essa ação no dispositivo. O exemplo a seguir mostra uma política do IAM que permite ao usuário realizar a ação StartCommandExecution.

Neste exemplo, substitua:

  • region por sua Região da AWS, como ap-south-1.

  • account-id pelo número de sua Conta da AWS, como 123456789012.

  • command-id por um identificador exclusivo do seu comando da AWS IoT, como LockDoor. Se quiser enviar mais de um comando, você poderá especificá-los na política do IAM.

  • devices por thing ou client dependendo de seus dispositivos terem sido registrados como coisas da AWS IoT ou especificados como clientes do MQTT.

  • device-id por AWS IoT thing-name ou client-id.

{ "Effect": "Allow", "Action": [ "iot:StartCommandExecution" ], "Resource": [ "arn:aws:iot:region:account-id:command/command-id", "arn:aws:iot:region:account-id:devices/device-id" ] }

Acessar o endpoint do plano de dados específico da conta

Antes de executar o comando da API, você deve acessar o URL do endpoint específico da conta. Se você estiver usando endpoints de pilha dupla (IPv4 e IPv6), use o iot:Data-ATS. O endpoint iot:Jobs é somente para IPv4. Por exemplo, se você executar este comando:

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

Ele exibirá o URL do endpoint específico da conta, conforme mostrado no exemplo de resposta abaixo.

{ "endpointAddress": "<account-specific-prefix>-ats.iot.<region>.api.com" }

Iniciar um exemplo de execução de comando (AWS CLI)

O exemplo a seguir mostra como começar a executar um comando usando start-command-execution da AWS CLI.

Neste exemplo, substitua:

  • <command-arn> pelo ARN do comando que você deseja executar. Você pode acessar essas informações na resposta do comando create-command da CLI. Por exemplo, se você estiver executando o comando para alterar o modo do volante, use arn:aws:iot:region:account-id:command/SetComfortSteeringMode.

  • <target-arn> pelo ARN da coisa do dispositivo de destino, que pode ser uma coisa da IoT ou um cliente do MQTT, para o qual você deseja executar o comando. Por exemplo, se você estiver executando o comando para o dispositivo de destino myRegisteredThing, use arn:aws:iot:region:account-id:thing/myRegisteredThing.

  • <endpoint-url> pelo endpoint específico da conta que você acessou em Acessar o endpoint do plano de dados específico da conta, com o prefixo https://. Por exemplo, https://123456789012abcd.jobs.iot.ap-south-1.amazonaws.com.

  • (Opcional) Você também pode especificar um parâmetro adicional, executionTimeoutSeconds, ao realizar a operação da API StartCommandExecution. Esse campo opcional especifica o tempo em segundos em que o dispositivo deve concluir a execução do comando. O valor padrão é de 10 segundos. Quando o status de execução do comando é CREATED, um cronômetro é iniciado. Se o resultado da execução do comando não for recebido antes que o cronômetro expire, o status mudará automaticamente para TIMED_OUT.

aws iot-jobs-data start-command-execution \ --command-arn <command-arn> \ --target-arn <target-arn> \ --endpoint <endpoint-url> \ --execution-timeout-seconds 900

A execução desse comando exibe um ID de execução. Você pode usar esse ID para consultar o status, os detalhes e o histórico da execução do comando.

nota

Se o comando estiver suspenso, a solicitação da API StartCommandExecution falhará com uma exceção de validação. Para corrigir esse erro, primeiro restaure o comando usando a API UpdateCommand e, depois, execute a solicitação StartCommandExecution.

{ "executionId": "07e4b780-7eca-4ffd-b772-b76358da5542" }

Atualizar o resultado de uma execução de comando

Use a operação da API do plano de dados do MQTT UpdateCommandExecution para atualizar o status ou o resultado de uma execução de comando.

nota

Antes de usar essa API:

  • Seu dispositivo deve ter estabelecido uma conexão do MQTT e assinado os tópicos de solicitação e resposta de comandos. Para obter mais informações, consulte Fluxo de trabalho de comandos de alto nível.

  • Você já deve ter executado esse comando usando a operação da API StartCommandExecution.

Antes de usar essa operação da API, verifique se sua política do IAM autoriza seu dispositivo a realizar essas ações. Veja a seguir um exemplo de política que autoriza seu dispositivo a realizar a ação. Para ver exemplos adicionais de políticas do IAM que permitem ao usuário realizar a ação UpdateCommandExecution, consulte Exemplos de política para conectar e publicar.

Neste exemplo, substitua:

  • Region por sua Região da AWS, como ap-south-1.

  • AccountID pelo número de sua Conta da AWS, como 123456789012.

  • ThingName pelo nome da sua coisa da AWS IoT para a qual você planeja a execução do comando, como myRegisteredThing.

  • commands-request-topic e commands-response-topic pelos nomes dos seus tópicos de solicitação e resposta de comandos da AWS IoT. Para obter mais informações, consulte Fluxo de trabalho de comandos de alto nível.

Exemplo de política do IAM para o ID do cliente do MQTT

O código a seguir mostra um exemplo de política de dispositivos ao usar o ID do cliente do MQTT.

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "iot:Publish", "Resource": [ "arn:aws:iot:us-east-1:123456789012:topic/$aws/commands/clients/${iot:ClientId}/executions/*/response", "arn:aws:iot:us-east-1:123456789012:topic/$aws/commands/clients/${iot:ClientId}/executions/*/response/json" ] }, { "Effect": "Allow", "Action": "iot:Receive", "Resource": [ "arn:aws:iot:us-east-1:123456789012:topic/$aws/commands/clients/${iot:ClientId}/executions/*/request", "arn:aws:iot:us-east-1:123456789012:topic/$aws/commands/clients/${iot:ClientId}/executions/*/response/accepted", "arn:aws:iot:us-east-1:123456789012:topic/$aws/commands/clients/${iot:ClientId}/executions/*/response/rejected", "arn:aws:iot:us-east-1:123456789012:topic/$aws/commands/clients/${iot:ClientId}/executions/*/request/json", "arn:aws:iot:us-east-1:123456789012:topic/$aws/commands/clients/${iot:ClientId}/executions/*/response/accepted/json", "arn:aws:iot:us-east-1:123456789012:topic/$aws/commands/clients/${iot:ClientId}/executions/*/response/rejected/json" ] }, { "Effect": "Allow", "Action": "iot:Subscribe", "Resource": [ "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/commands/clients/${iot:ClientId}/executions/+/request", "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/commands/clients/${iot:ClientId}/executions/+/response/accepted", "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/commands/clients/${iot:ClientId}/executions/+/response/rejected", "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/commands/clients/${iot:ClientId}/executions/+/request/json", "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/commands/clients/${iot:ClientId}/executions/+/response/accepted/json", "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/commands/clients/${iot:ClientId}/executions/+/response/rejected/json" ] }, { "Effect": "Allow", "Action": "iot:Connect", "Resource": "arn:aws:iot:us-east-1:123456789012:client/${iot:ClientId}" } ] }

Exemplo de política do IAM para uma coisa da IoT

O código a seguir mostra um exemplo de política de dispositivos ao usar uma coisa da AWS IoT.

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "iot:Publish", "Resource": "arn:aws:iot:us-east-1:123456789012:topic/$aws/commands/things/${iot:Connection.Thing.ThingName}/executions/*/response" }, { "Effect": "Allow", "Action": "iot:Receive", "Resource": [ "arn:aws:iot:us-east-1:123456789012:topic/$aws/commands/things/${iot:Connection.Thing.ThingName}/executions/*/request", "arn:aws:iot:us-east-1:123456789012:topic/$aws/commands/things/${iot:Connection.Thing.ThingName}/executions/*/response/accepted", "arn:aws:iot:us-east-1:123456789012:topic/$aws/commands/things/${iot:Connection.Thing.ThingName}/executions/*/response/rejected", "arn:aws:iot:us-east-1:123456789012:topic/$aws/commands/things/${iot:Connection.Thing.ThingName}/executions/*/request/json", "arn:aws:iot:us-east-1:123456789012:topic/$aws/commands/things/${iot:Connection.Thing.ThingName}/executions/*/response/accepted/json", "arn:aws:iot:us-east-1:123456789012:topic/$aws/commands/things/${iot:Connection.Thing.ThingName}/executions/*/response/rejected/json" ] }, { "Effect": "Allow", "Action": "iot:Subscribe", "Resource": [ "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/commands/things/${iot:Connection.Thing.ThingName}/executions/+/request", "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/commands/things/${iot:Connection.Thing.ThingName}/executions/+/response/accepted", "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/commands/things/${iot:Connection.Thing.ThingName}/executions/+/response/rejected", "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/commands/things/${iot:Connection.Thing.ThingName}/executions/+/request/json", "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/commands/things/${iot:Connection.Thing.ThingName}/executions/+/response/accepted/json", "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/commands/things/${iot:Connection.Thing.ThingName}/executions/+/response/rejected/json" ] }, { "Effect": "Allow", "Action": "iot:Connect", "Resource": "arn:aws:iot:us-east-1:123456789012:client/${iot:ClientId}" } ] }

Depois que a execução do comando é recebida no tópico da solicitação, o dispositivo processa o comando. Depois, ele usa a API UpdateCommandExecution para atualizar o status e o resultado da execução do comando para o tópico de resposta a seguir.

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

Neste exemplo, <DeviceID> é o identificador exclusivo do dispositivo de destino, e <execution-id> é o identificador da execução do comando no dispositivo de destino. O <PayloadFormat> pode ser JSON ou CBOR.

nota

Se você não registrou seu dispositivo na AWS IoT, poderá usar o ID do cliente como seu identificador em vez de um nome de coisa.

$aws/commands/clients/<ClientID>/executions/<ExecutionId>/response/<PayloadFormat>

O dispositivo relatou atualizações no status de execução

Seus dispositivos podem usar a API para relatar qualquer uma das atualizações de status a seguir na execução do comando. Para acessar mais informações sobre esses status, consulte Status de execução do comando.

  • IN_PROGRESS: quando o dispositivo começa a executar o comando, ele pode atualizar o status para IN_PROGRESS.

  • SUCCEEDED: quando o dispositivo processa com êxito o comando e conclui sua execução, ele pode publicar uma mensagem no tópico de resposta como SUCCEEDED.

  • FAILED: se o dispositivo não conseguir executar o comando, ele poderá publicar uma mensagem no tópico de resposta como FAILED.

  • REJECTED: se o dispositivo falhar ao aceitar o comando, ele poderá publicar uma mensagem no tópico de resposta como REJECTED.

  • TIMED_OUT: o status de execução do comando pode mudar para TIMED_OUT devido a qualquer um dos motivos a seguir.

    • O resultado da execução do comando não foi recebido. Isso pode acontecer porque a execução não foi concluída no período especificado ou se o dispositivo não conseguiu publicar as informações de status no tópico de resposta.

    • O dispositivo relata que ocorreu um tempo limite ao tentar executar o comando.

Para acessar mais informações sobre o status TIMED_OUT, consulte Valor do tempo limite e status de execução TIMED_OUT.

Considerações ao usar a API UpdateCommandExecution

Veja a seguir algumas considerações importantes ao usar a API UpdateCommandExecution.

  • Seus dispositivos podem usar um objeto statusReason opcional, que pode ser utilizado para fornecer informações adicionais sobre a execução. Caso seus dispositivos forneçam esse objeto, o campo reasonCode do objeto é obrigatório, mas reasonDescription é opcional.

  • Quando seus dispositivos usam o objeto statusReason, o reasonCode deve usar o padrão [A-Z0-9_-]+ e ele não excede 64 caracteres. Se você fornecer a reasonDescription, verifique se ela não excede 1.024 caracteres. Ela pode usar qualquer caractere, exceto de controle, como novas linhas.

  • Seus dispositivos podem usar um objeto result opcional para fornecer informações sobre o resultado da execução do comando, como o valor de retorno de uma chamada de função remota. Se você fornecer o result, ele deverá exigir pelo menos uma entrada.

  • No campo result, você especifica as entradas como pares de chave-valor. Para cada entrada, você deve especificar as informações do tipo de dados como string, booliano ou binário. Um tipo de dados de string deve usar a chave s, um tipo booliano usa a chave b e um binário deve usar a chave bin. Você deve garantir que esses tipos de dados sejam mencionados como minúsculas.

  • Se você encontrar um erro ao executar a API UpdateCommandExecution, poderá visualizá-lo no grupo de logs do AWSIoTLogsV2 no Amazon CloudWatch. Para acessar informações sobre como habilitar o registro em log e visualizar os logs, consulte Configurar registro em log da AWS IoT.

Exemplo de API UpdateCommandExecution

O código a seguir mostra um exemplo de como seu dispositivo pode usar a API UpdateCommandExecution para relatar o status da execução, o campo statusReason para fornecer informações adicionais sobre o status e o campo de resultados para fornecer informações sobre o resultado da execução, como a porcentagem da bateria do carro, nesse caso.

{ "status": "IN_PROGRESS", "statusReason": { "reasonCode": "200", "reasonDescription": "Execution_in_progress" }, "result": { "car_battery": { "s": "car battery at 50 percent" } } }

Recuperar uma execução de comando

Depois de executar um comando, você pode recuperar informações sobre a execução no console da AWS IoT e usando a AWS CLI. Você pode acessar as informações a seguir.

nota

Para recuperar o status mais recente de execução do comando, seu dispositivo deve publicar as informações de status no tópico de resposta usando a API UpdateCommandExecution do MQTT, conforme descrito abaixo. Até que o dispositivo publique neste tópico, a API GetCommandExecution relatará o status como CREATED ou TIMED_OUT.

Cada execução de comando que você criar terá:

  • Um ID de execução, que é um identificador exclusivo da execução do comando.

  • O status da execução do comando. Quando você executa o comando no dispositivo de destino, a execução entra no estado CREATED. Depois, ele pode fazer a transição para outros status de execução, conforme descrito abaixo.

  • O resultado da execução do comando.

  • O ID de comando exclusivo e o dispositivo de destino para o qual as execuções foram criadas.

  • A Data de início, que mostra a hora em que a execução do comando foi criada.

Você pode recuperar uma execução de comando do console usando qualquer um dos métodos a seguir.

  • Na página Hub de comandos

    Acesse a página Hub de comandos do console da AWS IoT e execute estas etapas.

    1. Escolha o comando para o qual você criou uma execução no dispositivo de destino.

    2. Na página de detalhes do comando, na guia Histórico de comandos, você verá as execuções criadas. Escolha a execução cujas informações você deseja recuperar.

    3. Se seus dispositivos usaram a API UpdateCommandExecution para fornecer as informações do resultado, você poderá encontrá-las na guia Resultados desta página.

  • Na página Hub de coisas

    Se você escolheu uma coisa da AWS IoT como dispositivo de destino ao executar o comando, poderá ver os detalhes da execução na página Hub de coisas.

    1. Acesse a página Hub de coisas no console da AWS IoT e escolha a coisa para a qual você criou a execução do comando.

    2. Na página de detalhes da coisa, no histórico de comandos, você verá as execuções criadas. Escolha a execução cujas informações você deseja recuperar.

    3. Se seus dispositivos usaram a API UpdateCommandExecution para fornecer as informações do resultado, você poderá encontrar essas informações na guia Resultados desta página.

Use a operação da API HTTP do ambiente de gerenciamento GetCommandExecution do AWS IoT Core para recuperar informações sobre uma execução de comando. Você já deve ter executado esse comando usando a operação da API StartCommandExecution.

Exemplo de política do IAM

Antes de usar essa operação de API, garanta que sua política do IAM autorize você a realizar essa ação no dispositivo. O exemplo a seguir mostra uma política do IAM que permite ao usuário realizar a ação GetCommandExecution.

Neste exemplo, substitua:

  • region por sua Região da AWS, como ap-south-1.

  • account-id pelo número de sua Conta da AWS, como 123456789012.

  • command-id pelo seu identificador de comando exclusivo da AWS IoT, como LockDoor.

  • devices por thing ou client dependendo se seus dispositivos foram registrados como coisas da AWS IoT ou especificados como clientes do MQTT.

  • device-id por AWS IoT thing-name ou client-id.

{ "Effect": "Allow", "Action": [ "iot:GetCommandExecution" ], "Resource": [ "arn:aws:iot:region:account-id:command/command-id", "arn:aws:iot:region:account-id:devices/device-id" ] }

Exemplo de como recuperar uma execução de comando

O exemplo a seguir mostra como recuperar informações sobre um comando executado usando start-command-execution da AWS CLI. O exemplo a seguir mostra como recuperar informações sobre um comando executado para desativar o modo do volante.

Neste exemplo, substitua:

  • <execution-id> pelo identificador da execução do comando cujas informações você deseja recuperar.

  • <target-arn> pelo nome do recurso da Amazon (ARN) do dispositivo para o qual você planeja a execução. Você pode acessar essas informações na resposta do comando start-command-execution da CLI.

  • Opcionalmente, se seus dispositivos usaram a API UpdateCommandExection para fornecer o resultado da execução, você poderá especificar se deseja incluir o resultado da execução do comando na resposta da API GetCommandExecution usando a API GetCommandExecution.

aws iot get-command-execution --execution-id <execution-id> \ --target-arn <target-arn> \ --include-result

A execução desse comando gera uma resposta que contém informações sobre o ARN da execução do comando, o status da execução e a hora em que ela foi iniciada e concluída. Ela também fornece um objeto statusReason que contém informações adicionais sobre o status. Para acessar mais informações sobre os diferentes status e os respectivos motivos, consulte Status de execução do comando.

O código a seguir mostra um exemplo de resposta da solicitação da API.

nota

O campo completedAt na resposta de execução corresponde ao momento em que o dispositivo relata o status terminal para a nuvem. No caso do status TIMED_OUT, esse campo será definido somente quando o dispositivo informar um tempo limite. Quando o status TIMED_OUT é definido pela nuvem, o status TIMED_OUT não é atualizado. Para acessar mais informações sobre o comportamento do tempo limite, consulte Considerações sobre tempo limite de execução de comandos.

{ "executionId": "07e4b780-7eca-4ffd-b772-b76358da5542", "commandArn": "arn:aws:iot:ap-south-1:123456789012:command/LockDoor", "targetArn": "arn:aws:iot:ap-south-1:123456789012:thing/myRegisteredThing", "status": "SUCCEEDED", "statusReason": { "reasonCode": "DEVICE_SUCCESSFULLY_EXECUTED", "reasonDescription": "SUCCESS" }, "result": { "sn": { "s": "ABC-001" }, "digital": { "b": true } }, "createdAt": "2024-03-23T00:50:10.095000-07:00", "completedAt": "2024-03-23T00:50:10.095000-07:00" }

Visualizar atualizações de comandos usando o cliente de teste do MQTT

É possível usar o cliente de teste do MQTT para visualizar a troca de mensagens pelo MQTT ao usar o recurso de comandos. Depois que seu dispositivo estabelecer uma conexão do MQTT com a AWS IoT, você poderá criar um comando, especificar a carga útil e executá-lo no dispositivo. Ao executar o comando, se seu dispositivo tiver assinado o tópico de solicitação reservada do MQTT para comandos, ele verá a mensagem de carga útil publicada nesse tópico.

Depois, o dispositivo recebe as instruções de carga útil e executa as operações especificadas no dispositivo de IoT. Então, ele usa a API UpdateCommandExecution para publicar o resultado da execução do comando e as informações de status nos tópicos de resposta reservados do MQTT para comandos. O AWS IoT Device Management recebe as atualizações sobre os tópicos da resposta, armazena as informações atualizadas e publica logs no AWS CloudTrail e no Amazon CloudWatch. Depois, você pode recuperar as informações mais recentes sobre a execução do comando no console ou usando a API GetCommandExecution.

As etapas a seguir mostram como usar o cliente de teste do MQTT para observar mensagens.

  1. Abra o cliente de teste MQTT no console do AWS IoT.

  2. Na guia Assinar, insira o tópico a seguir e escolha Assinar, em que <thingId> é o nome da coisa do dispositivo que você registrou na AWS IoT.

    nota

    Você pode encontrar o nome da coisa para o seu dispositivo na página Hub de coisas do console da AWS IoT ou, se não tiver registrado seu dispositivo como uma coisa, poderá registrá-lo ao se conectar à AWS IoT na página Conectar dispositivo.

    $aws/commands/things/<thingId>/executions/+/request
  3. (Opcional) Na guia Assinar, você também pode inserir os tópicos a seguir e escolher Assinar.

    $aws/commands/things/+/executions/+/response/accepted/json $aws/commands/things/+/executions/+/response/rejected/json
  4. Depois de iniciar uma execução de comando, a carga útil de mensagem será enviada ao dispositivo usando o tópico de solicitação assinado pelo dispositivo, ou seja, $aws/commands/things/<thingId>/executions/+/request. No cliente de teste do MQTT, você deve ver a carga útil que contém as instruções para que o dispositivo processe o comando.

  5. Depois que o dispositivo começar a executar o comando, ele poderá publicar atualizações de status no tópico de resposta reservada do MQTT a seguir.

    $aws/commands/<devices>/<device-id>/executions/<executionId>/response/json

    Por exemplo, pense em um comando que você executou para ligar o ar condicionado do seu carro a fim de reduzir a temperatura até o valor desejado. O JSON a seguir mostra um exemplo de mensagem que o veículo publicou no tópico de resposta que mostra que ele não executou o comando.

    { "deviceId": "My_Car", "executionId": "07e4b780-7eca-4ffd-b772-b76358da5542", "status": "FAILED", "statusReason": { "reasonCode": "CAR_LOW_ON_BATTERY", "reasonDescription": "Car battery is lower than 5 percent" } }

    Nesse caso, você pode carregar a bateria do carro e executar o comando novamente.

Listar as execuções de comandos na Conta da AWS

Depois de executar um comando, você pode recuperar informações sobre a execução no console da AWS IoT e usando a AWS CLI. Você pode acessar as informações a seguir.

  • Um ID de execução, que é um identificador exclusivo da execução do comando.

  • O status da execução do comando. Quando você executa o comando no dispositivo de destino, a execução entra no estado CREATED. Depois, ele pode fazer a transição para outros status de execução, conforme descrito abaixo.

  • O ID de comando exclusivo e o dispositivo de destino para o qual as execuções foram criadas.

  • A Data de início, que mostra a hora em que a execução do comando foi criada.

Você pode recuperar todas as execuções de comandos do console usando qualquer um dos métodos a seguir.

  • Na página Hub de comandos

    Acesse a página Hub de comandos do console da AWS IoT e execute estas etapas.

    1. Escolha o comando para o qual você criou uma execução no dispositivo de destino.

    2. Na página de detalhes do comando, acesse a guia Histórico de comandos. Você verá uma lista das execuções criadas.

  • Na página Hub de coisas

    Se você escolheu uma coisa da AWS IoT como dispositivo de destino ao executar o comando e criou várias execuções para um único dispositivo, poderá ver as execuções para o dispositivo na página Hub de coisas.

    1. Acesse a página Hub de coisas no console da AWS IoT e escolha a coisa para a qual você criou as execuções.

    2. Na página de detalhes da coisa, no histórico de comandos, você verá a lista de execuções criadas para o dispositivo.

Use a operação da API HTTP do ambiente de gerenciamento ListCommandExecutionsAWS IoT Core para listar todas as execuções de comandos em sua conta.

Exemplo de política do IAM

Antes de usar essa operação de API, garanta que sua política do IAM autorize você a realizar essa ação no dispositivo. O exemplo a seguir mostra uma política do IAM que permite ao usuário realizar a ação ListCommandExecutions.

Neste exemplo, substitua:

  • region por sua Região da AWS, como ap-south-1.

  • account-id pelo número de sua Conta da AWS, como 123456789012.

  • command-id pelo seu identificador de comando exclusivo da AWS IoT, como LockDoor.

{ "Effect": "Allow", "Action": "iot:ListCommandExecutions", "Resource": * }

Exemplo de como listar as execuções de comandos

O exemplo a seguir mostra como listar as execuções de comandos na Conta da AWS.

Ao executar o comando, você deve especificar se deseja filtrar a lista para exibir somente execuções de comandos que foram criadas para um dispositivo específico usando o targetArn ou execuções para um comando especificado usando o commandArn.

Neste exemplo, substitua:

  • <target-arn> pelo nome do recurso da Amazon (ARN) do dispositivo no qual pretende realizar a execução, como arn:aws:iot:us-east-1:123456789012:thing/b8e4157c98f332cffb37627f.

  • <target-arn> pelo nome do recurso da Amazon (ARN) do dispositivo no qual você planeja a execução, como arn:aws:iot:us-east-1:123456789012:thing/b8e4157c98f332cffb37627f.

  • <after> pelo tempo após o qual você deseja listar as execuções criadas, por exemplo, 2024-11-01T03:00.

aws iot list-command-executions \ --target-arn <target-arn> \ --started-time-filter '{after=<after>}' \ --sort-order "ASCENDING"

A execução desse comando gera uma resposta com uma lista das execuções de comando criadas, a hora em que elas começaram a ser realizadas e quando foram concluídas. Ela também fornece informações de status e o objeto statusReason que contém informações adicionais sobre o status.

{ "commandExecutions": [ { "commandArn": "arn:aws:iot:us-east-1:123456789012:command/TestMe002", "executionId": "b2b654ca-1a71-427f-9669-e74ae9d92d24", "targetArn": "arn:aws:iot:us-east-1:123456789012:thing/b8e4157c98f332cffb37627f", "status": "TIMED_OUT", "createdAt": "2024-11-24T14:39:25.791000-08:00", "startedAt": "2024-11-24T14:39:25.791000-08:00" }, { "commandArn": "arn:aws:iot:us-east-1:123456789012:command/TestMe002", "executionId": "34bf015f-ef0f-4453-acd0-9cca2d42a48f", "targetArn": "arn:aws:iot:us-east-1:123456789012:thing/b8e4157c98f332cffb37627f", "status": "IN_PROGRESS", "createdAt": "2024-11-24T14:05:36.021000-08:00", "startedAt": "2024-11-24T14:05:36.021000-08:00" } ] }

Para acessar mais informações sobre os diferentes status e os respectivos motivos, consulte Status de execução do comando.

Excluir uma execução de comando

Se você não quiser mais usar uma execução de comando, poderá removê-la permanentemente da sua conta.

nota
  • A execução de um comando só poderá ser excluída se tiver entrado em um status terminal, como SUCCEEDED, FAILED ou REJECTED.

  • Essa operação só pode ser realizada usando a API do AWS IoT Core ou a AWS CLI. Essa opção não está disponível no console.

Antes de usar essa operação da API, verifique se sua política do IAM autoriza seu dispositivo a realizar essas ações. Veja a seguir um exemplo de política que autoriza seu dispositivo a realizar a ação.

Neste exemplo, substitua:

  • Region por sua Região da AWS, como ap-south-1.

  • AccountID pelo número de sua Conta da AWS, como 123456789012.

  • CommandID pelo identificador do comando cuja execução você deseja excluir.

  • devices por thing ou client dependendo se seus dispositivos foram registrados como coisas da AWS IoT ou especificados como clientes do MQTT.

  • device-id por AWS IoT thing-name ou client-id.

{ "Effect": "Allow", "Action": [ "iot:DeleteCommandExecution" ], "Resource": [ "arn:aws:iot:region:account-id:command/command-id", "arn:aws:iot:region:account-id:devices/device-id" ] }

O exemplo a seguir mostra como excluir um comando usando delete-command da AWS CLI. Dependendo da sua aplicação, substitua <execution-id> pelo identificador da execução do comando que você está excluindo e <target-arn> pelo ARN do dispositivo de destino.

aws iot delete-command-execution \ --execution-id <execution-id> \ --target-arn <target-arn>

Se a solicitação da API for bem-sucedida, a execução do comando gerará um código de status de 200. Você pode usar a API GetCommandExecution para verificar se a execução do comando não existe mais na sua conta.