

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Avvia e monitora le esecuzioni di comandi
<a name="send-monitor-remote-command-cli"></a>

**Importante**  
L'accesso a determinate FleetWise funzionalità AWS IoT è attualmente limitato. Per ulteriori informazioni, consulta [AWS Disponibilità di aree e funzionalità nell' AWS IoT FleetWise](fleetwise-regions.md).

Dopo aver creato una risorsa di comando, puoi avviare l'esecuzione di un comando sul veicolo di destinazione. Una volta che il veicolo inizia a eseguire il comando, può iniziare ad aggiornare il risultato dell'esecuzione del comando e pubblicare aggiornamenti sullo stato e informazioni sui risultati negli argomenti riservati MQTT. È quindi possibile recuperare lo stato dell'esecuzione del comando e monitorare lo stato delle esecuzioni nel proprio account.

Questo argomento mostra come inviare un comando al veicolo utilizzando la console AWS CLI o la FleetWise console AWS IoT. Inoltre, mostra come monitorare e aggiornare lo stato dell'esecuzione del comando.

**Topics**
+ [

## Aggiorna il risultato dell'esecuzione del comando
](#update-remote-command-execution-cli)
+ [

## Get (esecuzione del comando)
](#get-remote-command-execution-cli)
+ [

## Elenca le esecuzioni dei comandi nel tuo account
](#list-remote-command-execution-cli)
+ [

## Eliminare l'esecuzione di un comando
](#delete-remote-command-execution-cli)

## Invia un comando (console)
<a name="send-command-console"></a>

Per inviare un comando dalla console, vai alla pagina [Veicoli](https://console.aws.amazon.com/iotfleetwise/home#/vehicles) della FleetWise console AWS IoT ed esegui i seguenti passaggi.

1. Scegli il veicolo a cui desideri inviare un comando.

1. Seleziona **Esegui comando**.

1. Seleziona l'ID del comando.

1. Specificate il timeout di esecuzione del comando, quindi scegliete **Esegui comando**.

## Invia un comando ()AWS CLI
<a name="send-remote-command-cli"></a>

È possibile utilizzare l'operazione API del piano [https://docs.aws.amazon.com/iot/latest/apireference/API_iot_data_StartCommandExecution.html](https://docs.aws.amazon.com/iot/latest/apireference/API_iot_data_StartCommandExecution.html) AWS IoT dati per inviare un comando a un veicolo. Il veicolo inoltra quindi il comando a un servizio middleware automobilistico (ad esempio SOME/IP (Scalable Service-Oriented Middleware over IP)) o lo pubblica sulla rete di un veicolo (come un'interfaccia di dispositivo Controller Area Network (CAN)). Gli esempi seguenti utilizzano AWS CLI.

**Topics**
+ [

### Considerazioni sull'invio di un comando
](#send-remote-command-considerations)
+ [

### Ottieni un endpoint del piano dati specifico dell'account
](#send-remote-command-endpoint)
+ [

### Invia un esempio di comando
](#send-remote-command-example)

### Considerazioni sull'invio di un comando
<a name="send-remote-command-considerations"></a>

Quando si avvia l'esecuzione di un comando in AWS IoT FleetWise:
+ È necessario fornire qualsiasi AWS IoT cosa per il veicolo. Per ulteriori informazioni, consulta [Fornitura di FleetWise veicoli AWS IoT](provision-vehicles.md).
+ Devi aver già creato un comando con `AWS-IoT-FleetWise` come namespace e aver fornito un comando `role-Arn` che ti conceda l'autorizzazione a creare ed eseguire comandi in IoT. AWS FleetWise Per ulteriori informazioni, consulta [Crea una risorsa di comando](create-manage-remote-command-cli.md#create-remote-command-cli).
+ È possibile ignorare il `parameters` campo se si sceglie di utilizzare i valori predefiniti specificati per i parametri durante la creazione del comando. Se `mandatory-parameters` non è stato specificato al momento della creazione o se desideri sovrascrivere i valori predefiniti specificando i tuoi valori per i parametri, devi specificare il campo. `parameters` Per questi esempi aggiuntivi, vedere. [Scenari di utilizzo dei comandi](remote-command-use-cases.md)
+ È possibile specificare fino a tre coppie nome-valore per il `mandatory-parameters` campo. Tuttavia, quando si esegue il comando sul veicolo, viene accettata solo una coppia nome-valore e il `name` campo deve utilizzare il nome completo con il prefisso. `$actuatorPath.`

### Ottieni un endpoint del piano dati specifico dell'account
<a name="send-remote-command-endpoint"></a>

Prima di eseguire il comando API, è necessario ottenere l'URL dell'endpoint specifico dell'account per l'endpoint. `iot:Jobs` Ad esempio, se si esegue questo comando:

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

Restituirà l'URL dell'endpoint specifico dell'account, come mostrato nella risposta di esempio riportata di seguito.

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

### Invia un esempio di comando
<a name="send-remote-command-example"></a>

Per inviare un comando a un veicolo, esegui il comando seguente.
+ Sostituisci *command-arn* con l'ARN il comando che desideri eseguire. È possibile ottenere queste informazioni dalla risposta del comando `create-command` CLI.
+ Sostituisci *target-arn* con l'ARN per il dispositivo o l' AWS IoT oggetto di destinazione per cui desideri eseguire il comando.
**Nota**  
È possibile specificare l'ARN di destinazione di qualsiasi AWS IoT cosa ( FleetWise veicolo AWS IoT). I gruppi di oggetti e le flotte non sono attualmente supportati.
+ Sostituiscilo *endpoint-url* con l'endpoint specifico dell'account in cui hai ottenuto[Ottieni un endpoint del piano dati specifico dell'account](#send-remote-command-endpoint), preceduto, ad esempio, da`https://`. `https://123456789012abcd.jobs.iot.ap-south-1.amazonaws.com`
+ Sostituisci *name* e *value* con il `mandatory-parameters` campo specificato quando hai creato il comando utilizzando la `create-command` CLI.

  Il `name` campo è il nome completo definito nel catalogo dei segnali con `$actuatorPath.` come prefisso. Ad esempio, `name` può essere *\$1actuatorPath.Vehicle.Chassis.SteeringWheel.HandsOff.HandsOffSteeringMode* e `value` può essere un valore booleano che indica uno stato della modalità di guida come. *\$1"B": false\$1*
+ (Facoltativo) È inoltre possibile specificare un parametro aggiuntivo,. `executionTimeoutSeconds` Questo campo opzionale specifica il tempo in secondi entro il quale il dispositivo deve rispondere con il risultato dell'esecuzione. È possibile configurare il timeout su un valore massimo di 24 ore.

  Una volta creata l'esecuzione del comando, viene avviato un timer. Prima della scadenza del timer, se lo stato di esecuzione del comando non passa a uno stato tale da renderlo terminale, ad esempio `SUCCEEDED` o`FAILED`, lo stato cambia automaticamente in`TIMED_OUT`.
**Nota**  
Il dispositivo può anche segnalare uno `TIMED_OUT` stato o sostituirlo con uno stato come`SUCCEEDED`, o `FAILED``REJECTED`, e l'esecuzione del comando diventerà terminale. Per ulteriori informazioni, consulta [stato del timeout di esecuzione del comando](remote-command-concepts-states.md#remote-command-execution-status-timeout).

```
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
        }
   ]'
```

L'operazione `StartCommandExecution` API restituisce un ID di esecuzione del comando. È possibile utilizzare questo ID per interrogare lo stato di esecuzione del comando, i dettagli e la cronologia di esecuzione dei comandi.

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

Dopo aver eseguito il comando, i dispositivi riceveranno una notifica contenente le seguenti informazioni. Il `issued_timestamp_ms` campo corrisponde all'ora in cui l'`StartCommandExecution`API è stata richiamata. `timeout_ms`Corrisponde al valore di timeout configurato utilizzando il `executionTimeoutSeconds` parametro quando si richiama l'`StartCommandExecution`API.

```
timeout_ms: 9000000
issued_timestamp_ms: 1723847831317
```

## Aggiorna il risultato dell'esecuzione del comando
<a name="update-remote-command-execution-cli"></a>

Per aggiornare lo stato dell'esecuzione del comando, il dispositivo deve aver stabilito una connessione MQTT e aver sottoscritto il seguente argomento relativo alla richiesta dei comandi.

In questo esempio, *`<device-id>`* sostituiscilo con l'identificatore univoco del dispositivo di destinazione, che può essere il nome `VehicleId` o l'oggetto, e *`<execution-id>`* con l'identificatore per l'esecuzione del comando.

**Nota**  
Il payload deve utilizzare il formato protobuf.
È facoltativo per i dispositivi abbonarsi agli argomenti `/accepted` e `/rejected` rispondere. I tuoi dispositivi riceveranno questi messaggi di risposta anche se non li hanno sottoscritti in modo esplicito.

```
// 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
```

Il dispositivo può pubblicare un messaggio sull'argomento relativo alla risposta ai comandi. Dopo aver elaborato il comando, invia una risposta con codifica protobuf a questo argomento. Il *<DeviceID>* campo deve corrispondere al campo corrispondente nell'argomento della richiesta.

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

Dopo che il dispositivo ha pubblicato una risposta a questo argomento, puoi recuperare le informazioni sullo stato aggiornate utilizzando l'`GetCommandExecution`API. Lo stato di esecuzione di un comando può essere uno qualsiasi di quelli elencati qui. 
+ `IN_PROGRESS`
+ `SUCCEEDED`
+ `FAILED`
+ `REJECTED`
+ `TIMED_OUT`

Tieni presente che l'esecuzione di un comando in uno qualsiasi degli stati `SUCCEEDED` `REJECTED` è terminale e lo stato viene segnalato dal dispositivo. `FAILED` Quando l'esecuzione di un comando è terminale, ciò significa che non verranno apportati ulteriori aggiornamenti allo stato o ai campi correlati. Uno `TIMED_OUT` stato può essere segnalato dal dispositivo o dal cloud. Se segnalato dal cloud, il dispositivo potrebbe successivamente aggiornare il campo del motivo dello stato.

Ad esempio, quanto segue mostra un messaggio MQTT di esempio pubblicato dal dispositivo.

**Nota**  
Per quanto riguarda lo stato di esecuzione del comando, se i dispositivi utilizzano l'`statusReason`oggetto per pubblicare le informazioni sullo stato, è necessario assicurarsi che:  
`reasonCode`Utilizza lo schema `[A-Z0-9_-]+` e non supera i 64 caratteri di lunghezza.
La lunghezza `reasonDescription` non supera i 1.024 caratteri. Può utilizzare qualsiasi carattere tranne i caratteri di controllo come le nuove righe.

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

Per un esempio che mostra come utilizzare il client di test AWS IoT Core MQTT per sottoscrivere gli argomenti e visualizzare i messaggi di esecuzione dei comandi, vedere [Visualizzazione degli aggiornamenti dei comandi utilizzando il client di test MQTT nella guida](https://docs.aws.amazon.com/iot/latest/developerguide/iot-remote-command-execution-start-monitor.html#iot-remote-command-execution-update-mqtt) per gli *AWS IoT Core sviluppatori*.

## Get (esecuzione del comando)
<a name="get-remote-command-execution-cli"></a>

È possibile utilizzare l'operazione API del piano di [https://docs.aws.amazon.com/iot/latest/apireference/API_GetCommandExecution.html](https://docs.aws.amazon.com/iot/latest/apireference/API_GetCommandExecution.html) AWS IoT controllo per recuperare informazioni sull'esecuzione di un comando. È necessario aver già eseguito questo comando utilizzando l'operazione `StartCommandExecution` API.

Per recuperare i metadati di un comando eseguito, esegui il comando seguente.
+ Sostituisci *execution-id* con l'ID del comando. È possibile ottenere queste informazioni dalla risposta del comando `start-command-execution` CLI.
+ Sostituisci *target-arn* con l'ARN del veicolo o AWS IoT dell'oggetto bersaglio per cui desideri eseguire il comando.

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

L'operazione `GetCommandExecution` API restituisce una risposta che contiene informazioni sull'ARN dell'esecuzione del comando, sullo stato dell'esecuzione e sull'ora in cui il comando ha iniziato l'esecuzione e quando è stata completata. Il codice seguente mostra un esempio di risposta dalla richiesta API.

Per fornire un contesto aggiuntivo sullo stato di ogni esecuzione di comando, la funzionalità dei comandi fornisce un `statusReason` oggetto. L'oggetto contiene due campi `reasonCode` e`reasonDescription`. Utilizzando questi campi, i dispositivi possono fornire informazioni aggiuntive sullo stato dell'esecuzione di un comando. Queste informazioni avranno la precedenza su qualsiasi impostazione predefinita `reasonCode` e `reasonDescription` verranno riportate dal cloud.

Per segnalare queste informazioni, i dispositivi possono pubblicare le informazioni sullo stato aggiornate nel cloud. Quindi, quando recuperi lo stato di esecuzione del comando utilizzando l'`GetCommandExecution`API, vedrai i codici di stato più recenti.

**Nota**  
Il `completedAt` campo nella risposta di esecuzione corrisponde all'ora in cui il dispositivo segnala lo stato di un terminale al cloud. Nel caso dello `TIMED_OUT` status, questo campo verrà impostato solo quando il dispositivo segnala un timeout. Quando lo `TIMED_OUT` stato è impostato dal cloud, lo `TIMED_OUT` stato non viene aggiornato. Per ulteriori informazioni sul comportamento del timeout, consulta[stato del timeout di esecuzione del comando](remote-command-concepts-states.md#remote-command-execution-status-timeout).

```
{
    "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 }
    }' 
}
```

## Elenca le esecuzioni dei comandi nel tuo account
<a name="list-remote-command-execution-cli"></a>

Utilizza l'operazione API HTTP del piano di [https://docs.aws.amazon.com/iot/latest/apireference/API_ListCommandExecutions.html](https://docs.aws.amazon.com/iot/latest/apireference/API_ListCommandExecutions.html) AWS IoT Core controllo per elencare tutte le esecuzioni di comandi nel tuo account. Nell'esempio è utilizzato AWS CLI.

**Topics**
+ [

### Considerazioni sull'elenco delle esecuzioni dei comandi
](#list-remote-command-considerations)
+ [

### Esempio di esecuzioni di comandi di elenco
](#list-remote-command-example)

### Considerazioni sull'elenco delle esecuzioni dei comandi
<a name="list-remote-command-considerations"></a>

Di seguito sono riportate alcune considerazioni relative all'utilizzo dell'API. `ListCommandExecutions`
+ È necessario specificare almeno il `targetArn` o il `commandArn` a seconda che si desideri elencare le esecuzioni per un particolare comando o un veicolo di destinazione. La richiesta API non può essere vuota e non può contenere entrambi i campi nella stessa richiesta.
+ È necessario fornire solo le informazioni `startedTimeFilter` o le `completedTimeFilter` informazioni. La richiesta API non può essere vuota e non può contenere entrambi i campi nella stessa richiesta. È possibile utilizzare i `after` campi `before` e dell'oggetto per elencare le esecuzioni di comandi che sono state create o completate entro un periodo di tempo specifico.
+ Entrambi i `after` campi `before` e non devono superare l'ora corrente. Per impostazione predefinita, se non si specifica alcun valore, il `before` campo è l'ora corrente e il `after` campo è l'ora corrente, 6 mesi. Cioè, a seconda del filtro utilizzato, l'API elencherà tutte le esecuzioni create o completate negli ultimi sei mesi.
+ È possibile utilizzare il `sort-order` parametro per specificare se si desidera elencare le esecuzioni in ordine crescente. Per impostazione predefinita, le esecuzioni verranno elencate in ordine decrescente se non si specifica questo campo.
+ Non è possibile filtrare le esecuzioni di comandi in base al loro stato quando si elencano le esecuzioni di comandi per un ARN di comando.

### Esempio di esecuzioni di comandi di elenco
<a name="list-remote-command-example"></a>

L'esempio seguente mostra come elencare le esecuzioni di comandi in. Account AWS

Quando si esegue il comando, è necessario specificare se filtrare l'elenco per visualizzare solo le esecuzioni di comandi create per un particolare dispositivo utilizzando il`targetArn`, o le esecuzioni per un particolare comando specificato utilizzando. `commandArn`

In questo esempio, sostituisci:
+ *`<target-arn>`*con l'Amazon Resource Number (ARN) del dispositivo a cui stai indirizzando l'esecuzione, ad esempio. `arn:aws:iot:us-east-1:123456789012:thing/b8e4157c98f332cffb37627f`
+ *`<target-arn>`*con l'Amazon Resource Number (ARN) del dispositivo a cui stai indirizzando l'esecuzione, ad esempio. `arn:aws:iot:us-east-1:123456789012:thing/b8e4157c98f332cffb37627f`
+ *`<after>`*con il tempo dopo il quale desideri elencare le esecuzioni che sono state create, ad esempio. `2024-11-01T03:00`

```
aws iot list-command-executions \ 
--target-arn <target-arn> \ 
--started-time-filter '{after=<after>}' \
--sort-order "ASCENDING"
```

L'esecuzione di questo comando genera una risposta che contiene un elenco di esecuzioni di comandi create e l'ora in cui le esecuzioni hanno iniziato l'esecuzione e quando sono state completate. Fornisce inoltre informazioni sullo stato e l'`statusReason`oggetto che contiene informazioni aggiuntive sullo stato.

```
{
    "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"
        }
    ]
}
```

## Eliminare l'esecuzione di un comando
<a name="delete-remote-command-execution-cli"></a>

Se non desideri più utilizzare l'esecuzione di un comando, puoi rimuoverla definitivamente dal tuo account.

**Nota**  
L'esecuzione di un comando può essere eliminata solo se è entrato in uno stato di terminale`SUCCEEDED`, ad esempio`FAILED`, o`REJECTED`.

L'esempio seguente mostra come eliminare l'esecuzione di un comando utilizzando il `delete-command-execution` AWS CLI comando. Sostituiscilo *`<execution-id>`* con l'identificatore dell'esecuzione del comando che stai eliminando. 

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

Se la richiesta API ha esito positivo, l'esecuzione del comando genera un codice di stato pari a 200. Puoi utilizzare l'`GetCommandExecution`API per verificare che l'esecuzione del comando non esista più nel tuo account.