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 e monitorar operações de comandos
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 dispositivoCreateThing. Você pode encontrar uma coisa existente para a qual deseja executar o comando na página Hub de coisasDescribeThing. 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
-
Para executar o comando que você criou, escolha Executar comando.
-
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.
-
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
-
(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.
-
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:
-
por sua Região da AWS, comoregionap-south-1. -
pelo número de sua Conta da AWS, comoaccount-id.123456789012 -
por um identificador exclusivo do seu comando da AWS IoT, comocommand-id. Se quiser enviar mais de um comando, você poderá especificá-los na política do IAM.LockDoor -
pordevicesthingouclientdependendo de seus dispositivos terem sido registrados como coisas da AWS IoT ou especificados como clientes do MQTT. -
por AWS IoTdevice-idthing-nameouclient-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:
-
pelo ARN do comando que você deseja executar. Você pode acessar essas informações na resposta do comando<command-arn>create-commandda CLI. Por exemplo, se você estiver executando o comando para alterar o modo do volante, usearn:aws:iot:.region:account-id:command/SetComfortSteeringMode -
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<target-arn>myRegisteredThing, usearn:aws:iot:.region:account-id:thing/myRegisteredThing -
pelo endpoint específico da conta que você acessou em Acessar o endpoint do plano de dados específico da conta, com o prefixo<endpoint-url>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 APIStartCommandExecution. 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 paraTIMED_OUT.
aws iot-jobs-data start-command-execution \ --command-arn<command-arn>\ --target-arn<target-arn>\ --endpoint<endpoint-url>\ --execution-timeout-seconds900
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:
-
por sua Região da AWS, comoRegionap-south-1. -
pelo número de sua Conta da AWS, comoAccountID.123456789012 -
pelo nome da sua coisa da AWS IoT para a qual você planeja a execução do comando, comoThingName.myRegisteredThing -
ecommands-request-topicpelos 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.commands-response-topic
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.
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.
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, é o identificador exclusivo do dispositivo de destino, e <DeviceID> é o identificador da execução do comando no dispositivo de destino. O <execution-id><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 paraIN_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 comoSUCCEEDED. -
FAILED: se o dispositivo não conseguir executar o comando, ele poderá publicar uma mensagem no tópico de resposta comoFAILED. -
REJECTED: se o dispositivo falhar ao aceitar o comando, ele poderá publicar uma mensagem no tópico de resposta comoREJECTED. -
TIMED_OUT: o status de execução do comando pode mudar paraTIMED_OUTdevido 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
statusReasonopcional, que pode ser utilizado para fornecer informações adicionais sobre a execução. Caso seus dispositivos forneçam esse objeto, o camporeasonCodedo objeto é obrigatório, masreasonDescriptioné opcional. -
Quando seus dispositivos usam o objeto
statusReason, oreasonCodedeve usar o padrão[A-Z0-9_-]+e ele não excede 64 caracteres. Se você fornecer areasonDescription, 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
resultopcional 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 oresult, 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 chaves, um tipo booliano usa a chavebe um binário deve usar a chavebin. 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 doAWSIoTLogsV2no 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. -
Escolha o comando para o qual você criou uma execução no dispositivo de destino.
-
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.
-
Se seus dispositivos usaram a API
UpdateCommandExecutionpara 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.
-
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. -
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.
-
Se seus dispositivos usaram a API
UpdateCommandExecutionpara 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:
-
por sua Região da AWS, comoregionap-south-1. -
pelo número de sua Conta da AWS, comoaccount-id.123456789012 -
pelo seu identificador de comando exclusivo da AWS IoT, comocommand-id.LockDoor -
pordevicesthingouclientdependendo se seus dispositivos foram registrados como coisas da AWS IoT ou especificados como clientes do MQTT. -
por AWS IoTdevice-idthing-nameouclient-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:
-
pelo identificador da execução do comando cujas informações você deseja recuperar.<execution-id> -
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<target-arn>start-command-executionda CLI. -
Opcionalmente, se seus dispositivos usaram a API
UpdateCommandExectionpara fornecer o resultado da execução, você poderá especificar se deseja incluir o resultado da execução do comando na resposta da APIGetCommandExecutionusando a APIGetCommandExecution.
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.
-
Abra o cliente de teste MQTT
no console do AWS IoT. -
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 -
(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 -
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/. 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.<thingId>/executions/+/request -
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/jsonPor 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. -
Escolha o comando para o qual você criou uma execução no dispositivo de destino.
-
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.
-
Acesse a página Hub de coisas
no console da AWS IoT e escolha a coisa para a qual você criou as execuções. -
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:
-
por sua Região da AWS, comoregionap-south-1. -
pelo número de sua Conta da AWS, comoaccount-id.123456789012 -
pelo seu identificador de comando exclusivo da AWS IoT, comocommand-id.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:
-
pelo nome do recurso da Amazon (ARN) do dispositivo no qual pretende realizar a execução, como<target-arn>arn:aws:iot:.us-east-1:123456789012:thing/b8e4157c98f332cffb37627f -
pelo nome do recurso da Amazon (ARN) do dispositivo no qual você planeja a execução, como<target-arn>arn:aws:iot:.us-east-1:123456789012:thing/b8e4157c98f332cffb37627f -
pelo tempo após o qual você deseja listar as execuções criadas, por exemplo,<after>2024-11-01T03:00.
aws iot list-command-executions \ --target-arn\ --started-time-filter '{after=<target-arn>}' \ --sort-order "ASCENDING"<after>
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,FAILEDouREJECTED. -
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:
-
por sua Região da AWS, comoRegionap-south-1. -
pelo número de sua Conta da AWS, comoAccountID.123456789012 -
pelo identificador do comando cuja execução você deseja excluir.CommandID -
pordevicesthingouclientdependendo se seus dispositivos foram registrados como coisas da AWS IoT ou especificados como clientes do MQTT. -
por AWS IoTdevice-idthing-nameouclient-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 pelo identificador da execução do comando que você está excluindo e <execution-id> pelo ARN do dispositivo de destino. <target-arn>
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.