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

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

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 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 Connect ou usando CreateThing. Encontre coisas existentes no Thing Hub ou usando DescribeThing. 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 do AWS IoT console e execute as etapas a seguir.

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

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

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

  4. (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.

  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 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:

  • region por sua Região da AWS, como us-east-1.

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

  • command-idcom um identificador exclusivo para seu AWS IoT comando, comoLockDoor. Se quiser enviar mais de um comando, você poderá especificá-los na política do IAM.

  • devicescom thing ou client dependendo se seus dispositivos foram registrados como AWS IoT itens ou especificados como clientes MQTT.

  • device-idcom o seu AWS IoT thing-name ouclient-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:

  • <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.us-east-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
  • (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_Status dinâmico:

  • aws iot-jobs-data start-command-execution \ --command-arn arn:aws:iot:us-east-1:123456789012:command/Light_Power_Status \ --target-arn arn:aws:iot:us-east-1:123456789012:thing/exampleThing \ --endpoint <endpoint-url> \ --execution-timeout-seconds 900 \ --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:

  • Regioncom o seu Região da AWS, comous-east-1.

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

  • ThingNamecom o nome da AWS IoT coisa para a qual você está direcionando a execução do comando, comomyRegisteredThing.

  • commands-request-topice commands-response-topic com 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.

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, <DeviceID> é o identificador exclusivo do dispositivo de destino, e <execution-id> é o identificador da execução do comando no dispositivo de destino. Eles <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 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 statusReason objeto opcional para fornecer informações adicionais sobre a execução. Se seus dispositivos fornecerem esse objeto, o reasonCode campo do objeto será obrigatório, mas o reasonDescription campo é opcional.

  • Quando seus dispositivos usam o statusReason objeto, eles reasonCode devem 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 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. Certifique-se de que essas teclas estejam em minúsculas.

  • Se você encontrar um erro ao executar a UpdateCommandExecution API, poderá ver o erro no grupo de AWSIoTLogsV2 registros 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.

    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 AWS IoT algo como dispositivo de destino ao executar o comando, você pode ver os detalhes da execução na página Thing hub.

    1. Acesse a página Thing Hub no AWS IoT console 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 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:

  • region por sua Região da AWS, como us-east-1.

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

  • command-idcom seu identificador de AWS IoT comando exclusivo, comoLockDoor.

  • devicescom thing ou client dependendo se seus dispositivos foram registrados como AWS IoT itens ou especificados como clientes MQTT.

  • device-idcom o seu AWS IoT thing-name ouclient-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:

  • <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: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.

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

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

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.

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

    1. Acesse a página Thing Hub no AWS IoT console 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 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:

  • region por sua Região da AWS, como us-east-1.

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

  • command-idcom seu identificador de AWS IoT comando exclusivo, comoLockDoor.

{ "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 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:

  • Regioncom o seu Região da AWS, comous-east-1.

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

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

  • devicescom thing ou client dependendo se seus dispositivos foram registrados como AWS IoT itens ou especificados como clientes MQTT.

  • device-idcom o seu AWS IoT thing-name ouclient-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 <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.