Inicie e monitore as execuções de comandos - AWS IoT FleetWise

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

Inicie e monitore as execuções de comandos

Importante

O acesso a determinados FleetWise recursos de AWS IoT está atualmente bloqueado. Para obter mais informações, consulte AWS Disponibilidade de regiões e recursos na AWS IoT FleetWise.

Depois de criar um recurso de comando, você pode iniciar a execução de um comando no veículo de destino. Depois que o veículo começa a executar o comando, ele pode começar a atualizar o resultado da execução do comando e publicar atualizações de status e informações sobre os resultados nos tópicos MQTT reservados. Em seguida, você pode recuperar o status da execução do comando e monitorar o status das execuções em sua conta.

Este tópico mostra como você pode enviar um comando para seu veículo usando AWS CLI o. Também mostra como monitorar e atualizar o status da execução do comando.

Enviar um comando remoto

Você pode usar a API operação do plano de StartCommandExecution AWS IoT dados para enviar um comando para um veículo. O veículo então encaminha o comando para um serviço de middleware automotivo (como SOME /IP (Scalable Service-Oriented Middleware over IP)) ou o publica em uma rede veicular (como uma interface de dispositivo de rede de área controladora ()). CAN O exemplo a seguir usa a AWS CLI.

Considerações ao enviar um comando remoto

Quando você inicia a execução de um comando em AWS IoT FleetWise:

  • Você deve provisionar qualquer AWS IoT coisa para o veículo. Para obter mais informações, consulte Provisionar AWS veículos de IoT FleetWise .

  • Você já deve ter criado um comando com AWS-IoT-FleetWise como namespace e fornecido um role-Arn que conceda permissão para criar e executar comandos na IoT AWS . FleetWise Para obter mais informações, consulte Crie um recurso de comando.

  • Você pode ignorar o parameters campo se optar por usar qualquer valor padrão que tenha sido especificado para os parâmetros ao criar o comando. Se o mandatory-parameters não foi especificado no momento da criação, ou se você quiser substituir qualquer valor padrão especificando seus próprios valores para os parâmetros, você deverá especificar o parameters campo. Para ver esses exemplos adicionais, consulteCenários de uso de comandos remotos.

  • Você pode especificar até três pares de nome-valor para o mandatory-parameters campo. No entanto, ao executar o comando no veículo, somente um par nome-valor é aceito, e o name campo deve usar o nome totalmente qualificado com o prefixo. $actuatorPath.

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

Antes de executar o API comando, você deve obter o endpoint específico da conta URL para o endpoint. iot:Jobs Por exemplo, se você executar este comando:

aws iot describe-endpoint --endpoint-type iot:Jobs

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

{ "endpointAddress": "<account-specific-prefix>.jobs.iot.<region>.amazonaws.com" }

Enviar um exemplo de comando remoto

Para enviar um comando remoto para um veículo, execute o comando a seguir.

  • Substituir command-arn com o ARN para o comando que você deseja executar. Você pode obter essas informações na resposta do create-command CLI comando.

  • Substituir target-arn com o ARN para o dispositivo de destino, ou AWS IoT coisa, para a qual você deseja executar o comando.

  • Substituir endpoint-url com o endpoint específico da conta que você obteveObtenha o endpoint do plano de dados específico da conta, prefixado por, por exemplohttps://,. https://123456789012abcd.jobs.iot.ap-south-1.amazonaws.com

  • Substituir name e value com o mandatory-parameters campo que você especificou ao criar o comando usando create-command CLI o.

    O name campo é o nome totalmente qualificado, conforme definido no catálogo de sinais com $actuatorPath. o prefixo. Por exemplo, name pode ser $actuatorPath.Vehicle.Chassis.SteeringWheel.HandsOff.HandsOffSteeringMode e value pode ser um booleano que indica um status do modo de direção, como {"B": false}.

  • (Opcional) Você também pode especificar um parâmetro adicional,executionTimeoutSeconds. Esse campo opcional especifica o tempo em segundos em que o dispositivo deve responder com o resultado da execução. Você pode configurar o tempo limite para um valor máximo de 24 horas.

    Quando a execução do comando é criada, um cronômetro é iniciado. Antes que o cronômetro expire, se o status de execução do comando não mudar para um status que o torne terminal, como SUCCEEDED ouFAILED, o status mudará automaticamente para. TIMED_OUT

    nota

    O dispositivo também pode relatar um TIMED_OUT status ou substituir esse status por um status comoSUCCEEDED, ou FAILEDREJECTED, e a execução do comando se tornará terminal. Para obter mais informações, consulte Status do tempo limite de execução do comando.

aws iot-jobs-data start-command-execution \ --command-arn command-arn \ --target-arn target-arn \ --execution-timeout-seconds 30 \ --endpoint-url endpoint-url \ --parameters '[ { "name": name, "value": value } ]'

A StartCommandExecution API operação retorna um ID de execução do comando. Você pode usar esse ID para consultar o status de execução do comando, os detalhes e o histórico de execução do comando.

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

Depois de executar o comando, seus dispositivos receberão uma notificação contendo as seguintes informações. O issued_timestamp_ms campo corresponde à hora em que StartCommandExecution API foi invocado. O timeout_ms corresponde ao valor de tempo limite configurado usando o executionTimeoutSeconds parâmetro ao invocar o. StartCommandExecution API

timeout_ms: 9000000 issued_timestamp_ms: 1723847831317

Atualizar o resultado da execução do comando

Para atualizar o status da execução do comando, seu dispositivo deve ter estabelecido uma MQTT conexão e se inscrito no seguinte tópico de solicitação de comandos.

Neste exemplo, substitua <device-id> com o identificador exclusivo do seu dispositivo de destino, que pode ser o nome VehicleId ou a coisa, e <execution-id> com o identificador para a execução do comando.

nota
  • A carga deve usar o formato protobuf.

  • É opcional que seus dispositivos se inscrevam nos tópicos /accepted e /rejected respondam. Seus dispositivos receberão essas mensagens de resposta mesmo que não tenham se inscrito explicitamente nelas.

// Request topic $aws/devices/<DeviceID>/command_executions/+/request/protobuf // Response topics (Optional) $aws/devices/<DeviceID>/command_executions/<ExecutionId>/response/accepted/protobuf $aws/devices/<DeviceID>/command_executions/<ExecutionId>/response/rejected/protobuf

Seu dispositivo pode publicar uma mensagem no tópico de resposta dos comandos. Depois de processar o comando, ele envia uma resposta codificada em protobuf para esse tópico. A ferramenta <DeviceID> o campo deve corresponder ao campo correspondente no tópico da solicitação.

$aws/devices/<DeviceID>/command_executions/<ExecutionId>/response/<PayloadFormat>

Depois que seu dispositivo publicar uma resposta a esse tópico, você poderá recuperar as informações de status atualizadas usando o. GetCommandExecution API O status da execução de um comando pode ser qualquer um dos listados aqui.

  • IN_PROGRESS

  • SUCCEEDED

  • FAILED

  • REJECTED

  • TIMED_OUT

Observe que a execução de um comando em qualquer um dos status SUCCEEDEDFAILED, e REJECTED é terminal, e o status é relatado pelo dispositivo. Quando a execução de um comando é terminal, isso significa que nenhuma atualização adicional será feita em seu status ou campos relacionados. Um TIMED_OUT status pode ser relatado pelo dispositivo ou pela nuvem. Se relatado pela nuvem, uma atualização do campo de motivo do status poderá ser feita posteriormente pelo dispositivo.

Por exemplo, o exemplo a seguir mostra um exemplo de MQTT mensagem publicada pelo dispositivo.

nota

Para o status de execução do comando, se seus dispositivos usarem o statusReason objeto para publicar as informações de status, você deverá se certificar de que:

  • O reasonCode usa [A-Z0-9_-]+ o padrão e não excede 64 caracteres.

  • O reasonDescription comprimento não excede 1.024 caracteres. Ele pode usar qualquer caractere, exceto caracteres de controle, como novas linhas.

{ "deviceId": "", "executionId": "", "status": "CREATED", "statusReason": { "reasonCode": "", "reasonDescription": "" } }

Para ver um exemplo que mostra como você pode usar o cliente de AWS IoT Core MQTT teste para assinar os tópicos e ver as mensagens de execução do comando, consulte Visualização de atualizações de comandos usando o cliente de MQTT teste no guia do AWS IoT Core desenvolvedor.

Obtenha a execução remota de comandos

Você pode usar a API operação do plano de GetCommandExecution AWS IoT controle para recuperar informações sobre a execução de um comando. Você já deve ter executado esse comando usando a StartCommandExecution API operação.

Para recuperar os metadados de um comando executado, execute o comando a seguir.

  • Substituir execution-id com o ID do comando. Você pode obter essas informações na resposta do start-command-execution CLI comando.

  • Substituir target-arn com o ARN para o veículo alvo, ou AWS IoT coisa, para a qual você deseja executar o comando.

aws iot get-command-execution --execution-id execution-id \ --target-arn target-arn

A GetCommandExecution API operação retorna uma resposta que contém informações sobre a execução ARN do comando, o status da execução e a hora em que o comando começou a ser executado e quando foi concluído. O código a seguir mostra um exemplo de resposta da API solicitação.

Para fornecer contexto adicional sobre o status de cada execução de comando, o recurso de comandos fornece um statusReason objeto. O objeto contém dois campos reasonCode reasonDescription e. Usando esses campos, seus dispositivos podem fornecer informações adicionais sobre o status da execução de um comando. Essas informações substituirão qualquer padrão reasonCode e reasonDescription isso será relatado na nuvem.

Para relatar essas informações, seus dispositivos podem publicar as informações de status atualizadas na nuvem. Então, ao recuperar o status de execução do comando usando o GetCommandExecutionAPI, você verá os códigos de status mais recentes.

nota

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

{ "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/myFrontDoor", "status": "SUCCEEDED", "statusReason": { "reasonCode": "65536", "reasonDescription": "SUCCESS" }, "createdAt": "2024-03-23T00:50:10.095000-07:00", "completedAt": "2024-03-23T00:50:10.095000-07:00", "Parameters": '{ "$actuatorPath.Vehicle.Chassis.SteeringWheel.HandsOff.HandsOffSteeringMode": { "B": true } }' }

Listar as execuções de comandos em sua conta

Use a HTTP API operação do plano de ListCommandExecutions AWS IoT Core controle para listar todas as execuções de comandos em sua conta. O exemplo usa AWS CLI.

Considerações ao listar as execuções de comandos

A seguir estão algumas considerações ao usar o. ListCommandExecutions API

  • Você deve especificar pelo menos o targetArn ou o, commandArn dependendo se deseja listar as execuções de um comando específico ou de um veículo-alvo. A API solicitação não pode estar vazia e não pode conter os dois campos na mesma solicitação.

  • Você deve fornecer somente as startedTimeFilter ou as completedTimeFilter informações. A API solicitação não pode estar vazia e não pode conter os dois campos na mesma solicitação. Você pode usar os after campos before e do objeto para listar as execuções de comandos que foram criadas ou concluídas em um período específico.

  • Os after campos before e não devem ser maiores que a hora atual. Por padrão, se você não especificar nenhum valor, o before campo será a hora atual e o after campo será a hora atual - 6 meses. Ou seja, dependendo do filtro usado, ele API listará todas as execuções que foram criadas ou concluídas nos últimos seis meses.

  • Você pode usar o sort-order parâmetro para especificar se deseja listar as execuções na ordem crescente. Por padrão, as execuções serão listadas em ordem decrescente se você não especificar esse campo.

  • Você não pode filtrar as execuções de comandos com base em seu status ao listar as execuções de comandos de um comando. ARN

Exemplo de execução de comandos de lista

O exemplo a seguir mostra como listar as execuções de comandos em seu 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 determinado dispositivo usando o. targetArn ou execuções para um determinado comando especificado usando o. commandArn

Neste exemplo, substitua:

  • <target-arn> com o Amazon Resource Number (ARN) do dispositivo para o qual você está direcionando a execução, comoarn:aws:iot:us-east-1:123456789012:thing/b8e4157c98f332cffb37627f.

  • <target-arn> com o Amazon Resource Number (ARN) do dispositivo para o qual você está direcionando a execução, comoarn:aws:iot:us-east-1:123456789012:thing/b8e4157c98f332cffb37627f.

  • <after> com o tempo após o qual você deseja listar as execuções que foram 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 que contém uma lista das execuções de comando que você criou e a hora em que as execuções começaram a ser executadas e quando foram concluídas. Ele também fornece informações de status e o statusReason objeto 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" } ] }

Excluir uma execução de comando

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

nota

A execução de um comando só pode ser excluída se tiver inserido um status de terminalSUCCEEDED, comoFAILED, ouREJECTED.

O exemplo a seguir mostra como excluir a execução de um comando usando o delete-command-execution AWS CLI comando. Substituir <execution-id> com o identificador da execução do comando que você está excluindo.

aws iot delete-command-execution --execution-id <execution-id>

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