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.
Tópicos
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.
Tópicos
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 umrole-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 omandatory-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 oparameters
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 oname
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 docreate-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
evalue
com omandatory-parameters
campo que você especificou ao criar o comando usandocreate-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
evalue
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
, ouFAILED
REJECTED
, 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-arntarget-arn
\ --execution-timeout-seconds30
\ --endpoint-urlendpoint-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
com o identificador exclusivo do seu dispositivo de destino, que pode ser o nome <device-id>
VehicleId
ou a coisa, e
com o 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
/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 SUCCEEDED
FAILED
, 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 dostart-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-arntarget-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 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 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 ascompletedTimeFilter
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 osafter
camposbefore
e do objeto para listar as execuções de comandos que foram criadas ou concluídas em um período específico. -
Os
after
camposbefore
e não devem ser maiores que a hora atual. Por padrão, se você não especificar nenhum valor, obefore
campo será a hora atual e oafter
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:
-
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. Substituir
com o identificador da execução do comando que você está excluindo. <execution-id>
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.