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 do resultado nos tópicos reservados do MQTT. 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 o console de IoT AWS CLI ou AWS IoT FleetWise . Também mostra como monitorar e atualizar o status da execução do comando.
Tópicos
Para enviar um comando do console, acesse a página Veículos
-
Escolha o veículo para o qual você deseja enviar um comando.
Selecione Run command.
Selecione o ID do comando.
Especifique o tempo limite de execução do comando e escolha Executar comando.
Você pode usar a operação da API 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.
Tópicos
Considerações ao enviar um comando
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-FleetWisecomo namespace e fornecido umrole-Arnque 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
parameterscampo se optar por usar qualquer valor padrão que tenha sido especificado para os parâmetros ao criar o comando. Se omandatory-parametersnã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 oparameterscampo. Para ver esses exemplos adicionais, consulteCenários de uso de comandos. -
Você pode especificar até três pares de nome-valor para o
mandatory-parameterscampo. No entanto, ao executar o comando no veículo, somente um par nome-valor é aceito, e onamecampo 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 comando da API, você deve obter o URL do endpoint específico da conta para o endpoint. iot:Jobs Por exemplo, se você executar este comando:
aws iot describe-endpoint --endpoint-type iot:Jobs
Ele retornará o URL do endpoint específico da conta, conforme mostrado no exemplo de resposta abaixo.
{ "endpointAddress": "<account-specific-prefix>.jobs.iot.<region>.amazonaws.com" }
Envie um exemplo de comando
Para enviar um comando para um veículo, execute o comando a seguir.
-
command-arnSubstitua pelo ARN do comando que você deseja executar. Você pode obter essas informações da resposta do comandocreate-commandCLI. -
target-arnSubstitua pelo ARN do dispositivo ou AWS IoT objeto de destino para o qual você deseja executar o comando.nota
Você pode especificar o ARN de destino de uma AWS IoT coisa (veículo de AWS IoT) FleetWise . Atualmente, não há suporte para grupos e frotas de coisas.
-
endpoint-urlSubstitua pelo endpoint específico da conta que você obteve emObtenha o endpoint do plano de dados específico da conta, prefixado por, por exemplohttps://,.https://123456789012abcd.jobs.iot.ap-south-1.amazonaws.com -
valueSubstituanamee pelomandatory-parameterscampo que você especificou ao criar o comando usando acreate-commandCLI.O
namecampo é o nome totalmente qualificado, conforme definido no catálogo de sinais com$actuatorPath.o prefixo. Por exemplo,namepode ser$actuatorPath.Vehicle.Chassis.SteeringWheel.HandsOff.HandsOffSteeringModeevaluepode 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
SUCCEEDEDouFAILED, o status mudará automaticamente para.TIMED_OUTnota
O dispositivo também pode relatar um
TIMED_OUTstatus ou substituir esse status por um status comoSUCCEEDED, ouFAILEDREJECTED, 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-arncommand-arn\ --target-arntarget-arn\ --execution-timeout-seconds30\ --endpoint-urlendpoint-url\ --parameters '[ { "name":name, "value":value} ]'
A operação StartCommandExecution da API 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 a StartCommandExecution API foi invocada. O timeout_ms corresponde ao valor de tempo limite configurado usando o executionTimeoutSeconds parâmetro ao invocar a StartCommandExecution API.
timeout_ms:9000000issued_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 conexão MQTT e inscrito no seguinte tópico de solicitação de comandos.
Neste exemplo, substitua pelo identificador exclusivo do dispositivo de destino, que pode ser o nome <device-id>VehicleId ou a coisa, e pelo identificador para a execução do comando.<execution-id>
nota
-
A carga deve usar o formato protobuf.
-
É opcional que seus dispositivos se inscrevam nos tópicos
/acceptede/rejectedrespondam. 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. O <DeviceID> 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 a 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 mensagem MQTT 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
reasonCodeusa o padrão[A-Z0-9_-]+e não excede 64 caracteres de comprimento. -
O
reasonDescriptioncomprimento 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 teste AWS IoT Core MQTT 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 teste MQTT no guia do AWS IoT Core desenvolvedor.
Obtenha a execução do comando
Você pode usar a operação da API 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 operação StartCommandExecution da API.
Para recuperar os metadados de um comando executado, execute o comando a seguir.
-
execution-idSubstitua pelo ID do comando. Você pode obter essas informações da resposta do comandostart-command-executionCLI. -
target-arnSubstitua pelo ARN do veículo ou AWS IoT objeto alvo para o qual você deseja executar o comando.
aws iot get-command-execution --execution-idexecution-id\ --target-arntarget-arn
A operação da GetCommandExecution API retorna 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 o comando começou a ser executado e quando foi concluído. O código a seguir mostra um exemplo de resposta da solicitação da API.
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 a GetCommandExecution API, 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 operação da API HTTP 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
Veja a seguir algumas considerações ao usar a ListCommandExecutions API.
-
Você deve especificar pelo menos o
targetArnou o,commandArndependendo se deseja listar as execuções de um comando específico ou de um veículo-alvo. A solicitação de API não pode estar vazia e não pode conter os dois campos na mesma solicitação. -
Você deve fornecer somente as
startedTimeFilterou ascompletedTimeFilterinformações. A solicitação de API não pode estar vazia e não pode conter os dois campos na mesma solicitação. Você pode usar osaftercamposbeforee do objeto para listar as execuções de comandos que foram criadas ou concluídas em um período específico. -
Os
aftercamposbeforee não devem ser maiores que a hora atual. Por padrão, se você não especificar nenhum valor, obeforecampo será a hora atual e oaftercampo será a hora atual - 6 meses. Ou seja, dependendo do filtro que você usa, a API listará todas as execuções que foram criadas ou concluídas nos últimos seis meses. -
Você pode usar o
sort-orderparâ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 para um ARN de comando.
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:
-
com o Amazon Resource Number (ARN) do dispositivo para o qual você está direcionando a execução, como.<target-arn>arn:aws:iot:us-east-1:123456789012:thing/b8e4157c98f332cffb37627f -
com o Amazon Resource Number (ARN) do dispositivo para o qual você está direcionando a execução, como.<target-arn>arn:aws:iot:us-east-1:123456789012:thing/b8e4157c98f332cffb37627f -
com o tempo após o qual você deseja listar as execuções que foram 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 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. Substitua pelo identificador da execução do comando que você está excluindo. <execution-id>
aws iot delete-command-execution --execution-id<execution-id>
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 GetCommandExecution API para verificar se a execução do comando não existe mais na sua conta.