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á.
Iniciar e monitorar execuções de comando
Depois de criar um comando, inicie uma execução no dispositivo de destino. O dispositivo atualiza os resultados e publica o status nos tópicos reservados do MQTT. Recupere e monitore o status de execução da sua conta.
Inicie e monitore os comandos usando o AWS IoT console ou 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, certifique-se de que:
-
Você criou um Comando no AWS IoT namespace com as informações do Payload. Ao iniciar a execução, o dispositivo processa as instruções do Payload e executa ações especificadas. Consulte Criar um recurso de comando para criação de comandos.
-
Seu dispositivo se inscreveu no MQTT reservou Tópicos para Comandos. Ao iniciar a execução, as informações do Payload são publicadas nesta solicitação reservada do MQTT. Tópico:
<devices>podem ser clientes Things ou MQTT.<DeviceID>é o nome da coisa ou ID do cliente.<PayloadFormat>Valores suportados: JSON e CBOR. Para obter mais informações, consulte Tópicos de comandos.$aws/commands/<devices>/<DeviceID>/executions/+/request/<PayloadFormat>Para não JSON/CBOR
<PayloadFormat>, use este formato de tópico de comandos:$aws/commands/<devices>/<DeviceID>/executions/+/request
Especifique o dispositivo de destino para receber e executar o Comando. Use um nome Thing para dispositivos registrados ou uma ID de cliente para dispositivos não registrados. Depois de receber a carga, o dispositivo executa o comando e executa as ações especificadas.
AWS IoT coisa
Os dispositivos de destino podem ser coisas registradas no AWS IoT registro. As coisas simplificam a pesquisa e o gerenciamento de dispositivos.
Registre dispositivos como Coisas na página do dispositivo ConnectCreateThing. Encontre coisas existentes no Thing HubDescribeThing. Consulte Gerenciando coisas com o registro para obter detalhes do registro.
ID de cliente
Para dispositivos não registrados, use o ID do cliente.
O ID do cliente é um identificador exclusivo que você atribui aos dispositivos. Definido no protocolo MQTT, ele contém caracteres alfanuméricos, sublinhados ou traços. Cada dispositivo conectado AWS IoT precisa de um ID de cliente exclusivo.
nota
-
Para itens registrados, o ID do cliente pode corresponder ao nome do item.
-
Ao segmentar uma ID de cliente específica, os dispositivos devem se conectar AWS IoT usando essa ID de cliente para receber a carga.
A ID do cliente é a ID do cliente MQTT que os dispositivos usam quando se conectam a. AWS IoT Core AWS IoT usa essa ID para identificar dispositivos e gerenciar conexões e assinaturas.
O tempo limite especifica a duração (em segundos) para que os dispositivos forneçam resultados de execução.
Depois de criar uma execução, um cronômetro é iniciado. Se o dispositivo ficar off-line ou não reportar os resultados dentro do tempo limite, a Execução expirará com o statusTIMED_OUT.
Padrão: 10 segundos. Máximo: 12 horas.
Valor do tempo limite e status de execução TIMED_OUT
Tanto a nuvem quanto o dispositivo podem relatar o tempo limite.
Depois de enviar o Comando, um cronômetro é iniciado. Se nenhuma resposta do dispositivo chegar dentro do tempo limite, a nuvem definirá o status de execução como TIMED_OUT com o código do $NO_RESPONSE_FROM_DEVICE motivo.
Isso ocorre quando:
-
O dispositivo ficou off-line durante a execução.
-
O dispositivo falhou ao concluir a execução dentro do tempo limite.
-
O dispositivo falhou ao relatar o status dentro do 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 substitui o status de qualquer um dos status do terminal:SUCCEEDED,, FAILED ou. REJECTED A execução do comando então se torna terminal e não aceita mais atualizações.
Seu dispositivo também pode atualizar um TIMED_OUT status 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 emTIMED_OUT, mas o statusReason objeto é atualizado com base nas informações relatadas pelo dispositivo. A execução do comando então se torna terminal e nenhuma atualização adicional é aceita.
Usar sessões persistentes do MQTT
Você pode configurar sessões persistentes do MQTT para usar com o recurso de AWS IoT Device Management comandos. 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 para um valor que exceda essa duração, as execuções de comandos executadas por mais de 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, defina o sinalizador Clean Start como zero. Para acessar mais informações, consulte MQTT persistent sessions.
Para começar a executar o comando no console, acesse a página do Command Hub
-
Para executar o comando que você criou, escolha Executar comando.
-
Revise as informações sobre o comando que você criou, incluindo os tópicos reservados e os parâmetros do MQTT, se aplicável.
Para comandos dinâmicos, insira os valores dos parâmetros ou deixe-os com os padrões. Para parâmetros que não têm um valor padrão, você deve fornecer um valor a ser enviado como parte dessa execução.
-
Especifique o dispositivo de destino para receber e executar o Comando. O dispositivo pode ser especificado como uma AWS IoT coisa se tiver sido registrado 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 a duração pela qual você deseja que o comando seja executado 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 de aplicativo que você possui podem processar a mensagem de resposta e publicar o resultado em 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 não for JSON ou CBOR, o seguinte mostra o formato do tópico de solicitação de comandos.
$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, comoregionus-east-1. -
pelo número de sua Conta da AWS , comoaccount-id.123456789012 -
com um identificador exclusivo para seu AWS IoT comando, comocommand-id. Se quiser enviar mais de um comando, você poderá especificá-los na política do IAM.LockDoor -
comdevicesthingouclientdependendo se seus dispositivos foram registrados como AWS IoT itens ou especificados como clientes MQTT. -
com o seu 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" ] }
Para ver uma lista das chaves de condição suportadasStartCommandExecution, consulte Chaves de condição AWS IoT no Guia do usuário do IAM.
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 (IPv4e IPv6), use o. iot:Data-ATS O iot:Jobs endpoint é IPv4 apenas para. Por exemplo, se você executar este comando:
aws iot describe-endpoint --endpoint-type iot:Data-ATS
Ele retorna 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 o start-command-execution AWS CLI comando.
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.us-east-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 -
(Opcional) Para comandos dinâmicos, especifique os parâmetros e seus valores a serem usados para substituição. Você deve fornecer um valor para parâmetros que não tenham um DefaultValue definido na criação do comando. Se um parâmetro tiver um DefaultValue, o valor do parâmetro fornecido aqui terá precedência. Para parâmetros que têm ValueConditions definidas, o valor do parâmetro fornecido aqui deve satisfazer a condição.
Com base no exemplo de comando
Light_Power_Statusdinâmico: -
aws iot-jobs-data start-command-execution \ --command-arnarn:aws:iot:us-east-1:123456789012:command/Light_Power_Status\ --target-arnarn:aws:iot:us-east-1:123456789012:thing/exampleThing\ --endpoint<endpoint-url>\ --execution-timeout-seconds900\ --parameters"powerStatus={S=ON}"
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 exemplos adicionais de políticas do IAM que permitem que o usuário execute a ação do UpdateCommandExecution MQTT, consulteExemplos de política para conectar e publicar.
Neste exemplo, substitua:
-
com o seu Região da AWS, comoRegionus-east-1. -
pelo número de sua Conta da AWS , comoAccountID.123456789012 -
com o nome da AWS IoT coisa para a qual você está direcionando a execução do comando, comoThingName.myRegisteredThing -
ecommands-request-topiccom os nomes dos seus tópicos de solicitação e resposta de AWS IoT comandos. 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.
-
{ "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 .
-
{ "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, é o identificador exclusivo do dispositivo de destino, e <DeviceID> é o identificador da execução do comando no dispositivo de destino. Eles <execution-id><PayloadFormat> podem ser JSON ou CBOR.
nota
Se você não registrou seu dispositivo com AWS IoT, você pode 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
statusReasonobjeto opcional para fornecer informações adicionais sobre a execução. Se seus dispositivos fornecerem esse objeto, oreasonCodecampo do objeto será obrigatório, mas oreasonDescriptioncampo é opcional. -
Quando seus dispositivos usam o
statusReasonobjeto, elesreasonCodedevem usar o padrão[A-Z0-9_-]+e não exceder 64 caracteres de comprimento. Se você fornecer oreasonDescription, certifique-se de que ele não exceda 1.024 caracteres. Ele pode usar qualquer caractere, exceto caracteres 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. Certifique-se de que essas teclas estejam em minúsculas. -
Se você encontrar um erro ao executar a
UpdateCommandExecutionAPI, poderá ver o erro no grupo deAWSIoTLogsV2registros na Amazon CloudWatch. Para acessar informações sobre como habilitar o registro em log e visualizar os logs, consulte Configurar o AWS IoT registro.
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 do comando no AWS IoT console e usando o. 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 do Command Hub
do AWS IoT console e execute essas 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 AWS IoT algo como dispositivo de destino ao executar o comando, você pode ver os detalhes da execução na página Thing hub.
-
Acesse a página Thing Hub
no AWS IoT console 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 plano de GetCommandExecution AWS IoT Core controle para recuperar informações sobre a execução de um 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, comoregionus-east-1. -
pelo número de sua Conta da AWS , comoaccount-id.123456789012 -
com seu identificador de AWS IoT comando exclusivo, comocommand-id.LockDoor -
comdevicesthingouclientdependendo se seus dispositivos foram registrados como AWS IoT itens ou especificados como clientes MQTT. -
com o seu 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 que foi executado usando o start-command-execution AWS CLI comando. 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:us-east-1:123456789012:command/LockDoor", "targetArn": "arn:aws:iot:us-east-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 MQTT com AWS IoT, você poderá criar um comando, especificar a carga útil e executá-la no dispositivo. Quando você executa o comando, se seu dispositivo se inscreveu no tópico de solicitação reservada do MQTT para comandos, ele vê a mensagem de carga publicada nesse tópico.
O dispositivo então recebe as instruções de carga útil e executa as operações especificadas no AWS IoT dispositivo. Em seguida, ele usa a UpdateCommandExecution API 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. AWS IoT Device Management escuta atualizações sobre os tópicos de resposta, armazena as informações atualizadas e publica registros AWS CloudTrail na Amazon. CloudWatch Em seguida, você pode recuperar as informações mais recentes sobre a execução do comando no console ou usando a GetCommandExecution API.
As etapas a seguir mostram como usar o cliente de teste do MQTT para observar mensagens.
-
Abra o cliente de teste MQTT
no AWS IoT console. -
Na guia Inscrever-se, insira o tópico a seguir e escolha Inscrever-se, onde
<thingId>está o nome do dispositivo com o qual você se registrou AWS IoT.nota
Você pode encontrar o nome da coisa para o seu dispositivo na página Thing Hub
do AWS IoT console. Se você não registrou seu dispositivo como uma coisa, você pode registrar o dispositivo ao se conectar a AWS IoT partir da página Connect device . $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.
Liste as execuções de comandos em seu Conta da AWS
Depois de executar um comando, você pode recuperar informações sobre a execução do comando no AWS IoT console e usando o. 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 do Command Hub
do AWS IoT console e execute essas 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 AWS IoT algo como dispositivo de destino ao executar o comando e criou várias execuções de comando para um único dispositivo, você pode ver as execuções do dispositivo na página Thing hub.
-
Acesse a página Thing Hub
no AWS IoT console 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 plano de ListCommandExecutions AWS IoT Core controle 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, comoregionus-east-1. -
pelo número de sua Conta da AWS , comoaccount-id.123456789012 -
com seu identificador de AWS IoT comando exclusivo, 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 executada usando a AWS IoT Core API ou AWS CLI o. 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:
-
com o seu Região da AWS, comoRegionus-east-1. -
pelo número de sua Conta da AWS , comoAccountID.123456789012 -
pelo identificador do comando cuja execução você deseja excluir.CommandID -
comdevicesthingouclientdependendo se seus dispositivos foram registrados como AWS IoT itens ou especificados como clientes MQTT. -
com o seu 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 o delete-command AWS CLI comando. 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.