

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

# Comandi
<a name="remote-commands"></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).  
Questa documentazione descrive come utilizzare la [funzionalità dei comandi per l' AWS IoT FleetWise](https://docs.aws.amazon.com/iot-fleetwise/latest/developerguide/remote-command-concepts-states.html#commands-iotfw-namespace). Per informazioni sull'utilizzo della funzionalità dei comandi in AWS IoT Device Management, consulta [i comandi](https://docs.aws.amazon.com/iot/latest/developerguide/iot-remote-command.html).  
L'utente è l'unico responsabile della distribuzione dei comandi in modo sicuro e conforme alle leggi applicabili. Per ulteriori informazioni sulle tue responsabilità, consulta i [Termini di AWS servizio per i servizi](https://aws.amazon.com/service-terms/). AWS IoT 

Utilizza la funzionalità dei comandi per eseguire comandi su un veicolo dal cloud. I comandi sono indirizzati a un dispositivo alla volta e possono essere utilizzati per applicazioni a bassa latenza e ad alto rendimento, ad esempio per recuperare i log lato dispositivo o per avviare una modifica dello stato del dispositivo.

*Il comando è una risorsa gestita da.* AWS IoT Device Management Contiene configurazioni riutilizzabili che vengono applicate quando si invia l'esecuzione di un comando al veicolo. È possibile predefinire un set di comandi per casi d'uso specifici o utilizzarli per creare configurazioni riutilizzabili per casi d'uso ricorrenti. Ad esempio, puoi configurare comandi che possono essere utilizzati da un'app per bloccare la portiera di un veicolo o per modificare la temperatura da remoto.

Utilizzando la funzionalità dei AWS IoT comandi, puoi:
+ Crea una risorsa di comando e riutilizza la configurazione per inviare più comandi al dispositivo di destinazione e quindi eseguirli sul dispositivo.
+ Controlla la granularità con cui desideri che ogni comando venga eseguito sul dispositivo. Ad esempio, è possibile predisporre un veicolo come AWS IoT oggetto e quindi inviare un comando per bloccare o sbloccare le portiere del veicolo.
+ Esegui più comandi contemporaneamente sul dispositivo di destinazione senza attendere il completamento di quello precedente.
+ Scegli di abilitare le notifiche per gli eventi dei comandi e recupera le informazioni sullo stato e sui risultati dal dispositivo mentre esegue il comando e una volta completato.

Negli argomenti seguenti viene illustrato come creare, inviare, ricevere e gestire i comandi.

**Topics**
+ [Concetti dei comandi](remote-command-concepts-states.md)
+ [Veicoli e comandi](remote-command-vehicles.md)
+ [Crea e gestisci i comandi](create-manage-remote-command-cli.md)
+ [Avvia e monitora le esecuzioni di comandi](send-monitor-remote-command-cli.md)
+ [Esempio: utilizzo dei comandi per controllare la modalità di sterzo di un veicolo (AWS CLI)](remote-command-tutorial.md)
+ [Scenari di utilizzo dei comandi](remote-command-use-cases.md)

# Concetti dei comandi
<a name="remote-command-concepts-states"></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).

I comandi sono istruzioni inviate dal cloud al dispositivo di destinazione. Il dispositivo bersaglio può essere un veicolo e deve essere registrato come *AWS IoT oggetto* nel registro degli oggetti. Il comando può contenere parametri che definiscono un'azione che gli attuatori del veicolo devono eseguire. Il veicolo analizza quindi il comando e i relativi parametri e li elabora per eseguire l'azione corrispondente. Quindi risponde all'applicazione cloud con lo stato dell'esecuzione del comando.

Per il flusso di lavoro dettagliato, vedere[Veicoli e comandi](remote-command-vehicles.md).

**Topics**
+ [Comandi, concetti chiave](#remote-command-concepts)
+ [Stato di esecuzione del comando](#remote-command-execution-status-codes)

## Comandi, concetti chiave
<a name="remote-command-concepts"></a>

Di seguito vengono illustrati alcuni concetti chiave per l'utilizzo della funzionalità dei comandi e il suo funzionamento con i modelli di stato dell'ultimo stato noto (LKS).

**Comando**  
Un comando è un'entità che è possibile utilizzare per inviare istruzioni a un veicolo fisico affinché esegua azioni come accendere il motore o modificare la posizione dei finestrini. È possibile predefinire un set di comandi per casi d'uso specifici o utilizzarli per creare configurazioni riutilizzabili per casi d'uso ricorrenti. Ad esempio, puoi configurare comandi che possono essere utilizzati da un'app per bloccare la portiera di un veicolo o per modificare la temperatura da remoto.

**Spazio dei nomi**  
Quando si utilizza la funzionalità dei comandi, è necessario specificare lo spazio dei nomi per il comando. Quando crei un comando in AWS IoT FleetWise, devi sceglierlo `AWS-IoT-FleetWise` come namespace. Quando si utilizza questo spazio dei nomi, è necessario fornire i parametri che verranno utilizzati per eseguire il comando sul veicolo. Se invece si desidera creare un comando in, è necessario utilizzare AWS IoT Device Management invece lo `AWS-IoT` spazio dei nomi. Per ulteriori informazioni, consulta [i comandi](https://docs.aws.amazon.com/iot/latest/developerguide/iot-remote-command.html) nella guida per *AWS IoT Device Management sviluppatori*.

**Stati dei comandi**  
I comandi creati saranno disponibili, il che significa che possono essere utilizzati per avviare l'esecuzione di un comando sul veicolo. Se un comando diventa obsoleto, è possibile renderlo obsoleto. Per un comando nello stato obsoleto, le esecuzioni di comandi esistenti verranno eseguite fino al completamento. Non è possibile aggiornare il comando o eseguire nuove esecuzioni. Per inviare nuove esecuzioni, è necessario ripristinare il comando in modo che diventi disponibile.  
Puoi anche eliminare un comando se non è più necessario. Quando contrassegni un comando per l'eliminazione, se il comando è stato dichiarato obsoleto per un periodo superiore al timeout massimo di 24 ore, il comando verrà eliminato immediatamente. Se il comando non è obsoleto o è stato deprecato per una durata inferiore al timeout massimo, il comando si troverà in uno stato di eliminazione in sospeso. Il comando verrà rimosso automaticamente dal tuo account dopo 24 ore.

**Parametri**  
Quando si crea un comando, è possibile specificare facoltativamente i parametri che si desidera che il veicolo di destinazione esegua durante l'esecuzione del comando. Il comando creato è una configurazione riutilizzabile e può essere utilizzato per inviare più esecuzioni di comandi al veicolo ed eseguirle contemporaneamente. In alternativa, puoi anche specificare i parametri solo in fase di esecuzione e scegliere di eseguire un'unica operazione di creazione di un comando e invio al veicolo.

**Veicolo bersaglio**  
Quando si desidera eseguire il comando, è necessario specificare un veicolo bersaglio che riceverà il comando ed eseguirà azioni specifiche. Il veicolo bersaglio deve essere già stato registrato come *oggetto* con AWS IoT. Dopo aver inviato il comando al veicolo, questo inizierà a eseguire un'istanza del comando in base ai parametri e ai valori specificati.

**Attuatori**  
Quando si desidera eseguire il comando, è necessario specificare gli attuatori sul veicolo che riceveranno il comando e i relativi valori che determinano le azioni da eseguire. Facoltativamente, è possibile configurare i valori predefiniti per gli attuatori per evitare l'invio di comandi imprecisi. Ad esempio, è possibile utilizzare il valore predefinito di un attuatore `LockDoor` per serrature in modo che il comando non sblocchi accidentalmente le porte. Per informazioni generali sugli attuatori, vedere. [Concetti chiave](how-iotfleetwise-works.md#key-concepts)

**Supporto per tipi di dati**  
I seguenti tipi di dati sono supportati per gli attuatori utilizzati per la funzionalità dei comandi.  
Gli array non sono supportati per i dati telematici, i comandi o l'ultimo stato noto (LKS). È possibile utilizzare il tipo di dati dell'array solo per i dati dei sistemi di visione.
+ Tipi a virgola mobile. Sono supportati i seguenti tipi.
  + Float (32 bit)
  + Doppio (64 bit)
+ Numero intero (con e senza segno). Sono supportati i seguenti tipi di numeri interi.
  + int8 e uint8
  + int16 e uint16
  + int32 e uint32
+ Lungo. Sono supportati i seguenti tipi lunghi.
  + Lungo (int64)
  + Long senza segno (uint64)
+ Stringa
+ Booleano

**Esecuzione del comando**  
L'esecuzione di un comando è un'istanza di un comando in esecuzione su un dispositivo di destinazione. Il veicolo esegue il comando utilizzando i parametri specificati al momento della creazione del comando o all'avvio dell'esecuzione del comando. Il veicolo esegue quindi le operazioni specificate e restituisce lo stato dell'esecuzione.  
Per un determinato veicolo, è possibile eseguire più comandi contemporaneamente. [Per informazioni sul numero massimo di esecuzioni simultanee che è possibile eseguire per ogni veicolo, consulta AWS IoT Device Management la sezione Commands Quotas.](https://docs.aws.amazon.com/general/latest/gr/iot_device_management.html#commands-limits)

**Modelli di stato Last Known State (LKS)**  
I modelli di stato forniscono ai proprietari dei veicoli un meccanismo per monitorare lo stato del veicolo. Per monitorare l'ultimo stato noto (LKS) dei veicoli quasi in tempo reale, è possibile creare modelli di stato e associarli ai veicoli.  
Utilizzando la funzionalità dei comandi, è possibile eseguire operazioni «On Demand» che possono essere utilizzate per la raccolta e l'elaborazione dei dati relativi allo stato. Ad esempio, puoi richiedere lo stato attuale del veicolo una sola volta (recupero) oppure attivare o disattivare i modelli di stato LKS precedentemente implementati per avviare o interrompere la segnalazione dei dati del veicolo. Per esempi che mostrano come utilizzare i comandi con i modelli di stato, vedi. [Scenari di utilizzo dei comandi](remote-command-use-cases.md)

## Stato di esecuzione del comando
<a name="remote-command-execution-status-codes"></a>

Dopo aver avviato l'esecuzione del comando, il veicolo può pubblicare lo stato dell'esecuzione e fornire i motivi dello stato come informazioni aggiuntive sull'esecuzione. Le sezioni seguenti descrivono i vari stati di esecuzione dei comandi e i codici di stato.

**Topics**
+ [Codice del motivo e descrizione dello stato di esecuzione del comando](#remote-command-execution-status-reason-codes)
+ [Stato di esecuzione dei comandi e codici di stato](#remote-command-execution-status-codes)
+ [stato del timeout di esecuzione del comando](#remote-command-execution-status-timeout)

### Codice del motivo e descrizione dello stato di esecuzione del comando
<a name="remote-command-execution-status-reason-codes"></a>

Per segnalare gli aggiornamenti allo stato di esecuzione del comando, i veicoli possono utilizzare l'`UpdateCommandExecution`API per pubblicare le informazioni aggiornate sullo stato nel cloud, utilizzando gli [argomenti riservati ai comandi](https://docs.aws.amazon.com/iot/latest/developerguide/reserved-topics.html#reserved-topics-commands) descritti nella *guida per gli AWS IoT Core sviluppatori*. Nel riportare le informazioni sullo stato, i dispositivi possono fornire un contesto aggiuntivo sullo stato di ogni esecuzione di comando utilizzando l'`StatusReason`oggetto `reasonCode` e `reasonDescription` i campi contenuti nell'oggetto.

### Stato di esecuzione dei comandi e codici di stato
<a name="remote-command-execution-status-codes"></a>

La tabella seguente mostra i vari codici di stato di esecuzione dei comandi e gli stati consentiti a cui può passare l'esecuzione di un comando. Mostra anche se l'esecuzione di un comando è «terminale» (ovvero, non sono previsti ulteriori aggiornamenti sullo stato), se la modifica viene avviata dal veicolo o dal cloud, i diversi codici di stato predefiniti e il modo in cui vengono mappati agli stati segnalati dal cloud.
+ Per informazioni su come AWS IoT FleetWise utilizza i codici di stato predefiniti e l'`statusReason`oggetto, vedere [Command status](https://github.com/aws/aws-iot-fleetwise-edge/blob/main/include/aws/iotfleetwise/ICommandDispatcher.h) nella *documentazione del FleetWise software Edge Agent for AWS IoT*.
+ *Per ulteriori informazioni sulle esecuzioni terminali e non terminali e sulle transizioni tra gli stati, consulta [Command execution status](https://docs.aws.amazon.com/iot/latest/developerguide/iot-remote-command-concepts.html#iot-command-execution-status) nella guida per sviluppatori.AWS IoT Core *


**Stato e origine dell'esecuzione dei comandi**  

| Stato di esecuzione del comando | Description | Avviato dal dispositivo/cloud? | Esecuzione del terminale? | Transizioni di stato consentite | Codici di stato predefiniti | 
| --- | --- | --- | --- | --- | --- | 
| CREATED | Quando la richiesta API per avviare l'esecuzione del comando (StartCommandExecutionAPI) ha esito positivo, lo stato di esecuzione del comando cambia inCREATED. | Cloud | No |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/iot-fleetwise/latest/developerguide/remote-command-concepts-states.html)  | Nessuno | 
| IN\$1PROGRESS | Quando il veicolo inizia a eseguire il comando, può pubblicare un messaggio sull'argomento della risposta a cui aggiornare lo statoIN\$1PROGRESS. | Dispositivo | No |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/iot-fleetwise/latest/developerguide/remote-command-concepts-states.html)  | COMMAND\$1STATUS\$1COMMAND\$1IN\$1PROGRESS | 
| SUCCEEDED | Quando il veicolo ha elaborato correttamente il comando e completato l'esecuzione, può pubblicare un messaggio nell'argomento di risposta a cui aggiornare lo stato. SUCCEEDED | Dispositivo | Sì | Non applicabile | COMMAND\$1STATUS\$1SUCCEEDED | 
| FAILED | Quando il veicolo non è riuscito a eseguire il comando, può pubblicare un messaggio nell'argomento di risposta a cui aggiornare lo statoFAILED. | Dispositivo | Sì | Non applicabile | COMMAND\$1STATUS\$1EXECUTION\$1FAILED | 
| REJECTED | Se il veicolo non accetta il comando, può pubblicare un messaggio nell'argomento di risposta a cui aggiornare lo statoREJECTED. | Dispositivo | Sì | Non applicabile | Nessuno | 
| TIMED\$1OUT |  Lo stato di esecuzione del comando può cambiare in `TIMED_OUT` causa di uno dei seguenti motivi. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/iot-fleetwise/latest/developerguide/remote-command-concepts-states.html) Per ulteriori informazioni su questo stato, vedere[stato del timeout di esecuzione del comando](#remote-command-execution-status-timeout).  | Dispositivo e cloud | No |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/iot-fleetwise/latest/developerguide/remote-command-concepts-states.html)  | COMMAND\$1STATUS\$1EXECUTION\$1TIMEOUT | 

### stato del timeout di esecuzione del comando
<a name="remote-command-execution-status-timeout"></a>

Un timeout di esecuzione del comando può essere segnalato sia dal cloud che dal dispositivo. Dopo l'invio del comando al dispositivo, viene avviato un timer. Se non è stata ricevuta alcuna risposta dal dispositivo entro la durata specificata, il cloud segnala uno `TIMED_OUT` stato. In questo caso, l'esecuzione del comando in `TIMED_OUT` status non è terminale.

Il dispositivo può sostituire questo stato impostando uno stato terminale, ad esempio `SUCCEEDED``FAILED`, o. `REJECTED` Può anche segnalare che si è verificato un timeout durante l'esecuzione del comando. In questo caso, lo stato di esecuzione del comando rimane invariato `TIMED_OUT` ma i campi dell'`StatusReason`oggetto vengono aggiornati in base alle informazioni riportate dal dispositivo. L'esecuzione del comando nello `TIMED_OUT` stato ora diventa terminale.

Per ulteriori informazioni, consulta [Considerazioni sul timeout di esecuzione dei comandi](https://docs.aws.amazon.com/iot/latest/developerguide/iot-remote-command-execution-start-monitor.html#iot-command-execution-timeout) nella guida per *AWS IoT Core sviluppatori*.

# Veicoli e comandi
<a name="remote-command-vehicles"></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).  
L'utente è l'unico responsabile della distribuzione dei comandi in modo sicuro e conforme alle leggi applicabili.

Per utilizzare la funzionalità dei comandi:

1. Innanzitutto, crea una risorsa di comando. Facoltativamente, specificare i parametri che contengono le informazioni necessarie per eseguire il comando.

1. Specificate il veicolo di destinazione che riceverà il comando ed eseguirà le azioni specificate.

1. Ora puoi eseguire il comando sul dispositivo di destinazione e controllare i dettagli di esecuzione del comando per recuperare lo stato e utilizzare CloudWatch i log per risolvere ulteriormente eventuali problemi.

Le sezioni seguenti mostrano il flusso di lavoro tra veicoli e comandi.

**Topics**
+ [Panoramica del flusso di lavoro](#remote-command-vehicles-overview)
+ [Workflow del veicolo](#iot-remote-command-devices-workflow)
+ [Workflow dei comandi](#iot-remote-command-commands-workflow)
+ [(Facoltativo) Comandi e notifiche](#remote-command-notifications)

## Panoramica del flusso di lavoro
<a name="remote-command-vehicles-overview"></a>

I passaggi seguenti forniscono una panoramica del flusso di lavoro dei comandi tra i veicoli e i comandi. Quando si utilizzano le operazioni dell'API HTTP dei comandi, la richiesta viene firmata utilizzando le credenziali Sigv4.

**Nota**  
Ad eccezione dell'operazione `StartCommandExecution` API, tutte le operazioni eseguite tramite il protocollo HTTP utilizzano l'endpoint del piano di controllo.

1. 

**Stabilisci una connessione MQTT e sottoscrivi gli argomenti relativi ai comandi**

   Per prepararsi al flusso di lavoro dei comandi, i dispositivi devono stabilire una connessione MQTT con l'`iot:Data-ATS`endpoint e sottoscrivere l'argomento di richiesta dei comandi menzionato sopra. Facoltativamente, i dispositivi possono anche sottoscrivere gli argomenti di risposta ai comandi accettati e rifiutati.

1. 

**Crea un modello di veicolo e una risorsa di comando**

   È ora possibile creare un veicolo e una risorsa di comando utilizzando le operazioni dell'API `CreateVehicle` e `CreateCommand` Control Plane. La risorsa di comando contiene le configurazioni da applicare quando il comando viene eseguito sul veicolo.

1. 

**Avvia l'esecuzione del comando sul dispositivo di destinazione**

   Avvia l'esecuzione del comando sul veicolo utilizzando l'API del piano `StartCommandExecution` dati con l'endpoint specifico dell'account`iot:Jobs`. L'API pubblica un messaggio di payload con codifica protobuf nell'argomento di richiesta dei comandi.

1. 

**Aggiorna il risultato dell'esecuzione del comando**

   Il veicolo elabora il comando e il payload ricevuto, quindi pubblica il risultato dell'esecuzione del comando nell'argomento di risposta utilizzando l'`UpdateCommandExecution`API. Se il veicolo ha sottoscritto gli argomenti di risposta ai comandi accettati e rifiutati, riceverà un messaggio che indica se la risposta è stata accettata o rifiutata dal servizio cloud.

1. 

**(Facoltativo) Recupera il risultato dell'esecuzione del comando**

   Per recuperare il risultato dell'esecuzione del comando, è possibile utilizzare l'operazione API del piano `GetCommandExecution` di controllo. Dopo che il veicolo avrà pubblicato il risultato dell'esecuzione del comando nell'argomento della risposta, questa API restituirà le informazioni aggiornate.

1. 

**(Opzionale) Sottoscrivi e gestisci gli eventi dei comandi**

   Per ricevere notifiche relative agli aggiornamenti dello stato di esecuzione dei comandi, è possibile sottoscrivere l'argomento sugli eventi dei comandi. Puoi quindi utilizzare l'API del piano di `CreateTopicRule` controllo per indirizzare i dati degli eventi dei comandi ad altre applicazioni come AWS Lambda funzioni o Amazon SQS e creare applicazioni su di essi.

## Workflow del veicolo
<a name="iot-remote-command-devices-workflow"></a>

I passaggi seguenti descrivono in dettaglio il flusso di lavoro del veicolo quando si utilizza la funzione dei comandi.

**Nota**  
Le operazioni descritte in questa sezione utilizzano il protocollo MQTT.

1. 

**Stabilire una connessione MQTT**

   Per preparare i veicoli all'utilizzo della funzionalità dei comandi, è necessario innanzitutto connettersi al broker di AWS IoT Core messaggi. Il veicolo deve essere autorizzato a eseguire l'`iot:Connect`azione di connessione AWS IoT Core e stabilire una connessione MQTT con il broker di messaggi. Per trovare l'endpoint del piano dati adatto al tuo Account AWS, usa l'`DescribeEndpoint`API o il comando `describe-endpoint` CLI come mostrato di seguito.

   ```
   aws iot describe-endpoint --endpoint-type iot:Data-ATS
   ```

   L'esecuzione di questo comando restituisce l'endpoint del piano dati specifico dell'account, come illustrato di seguito.

   ```
   account-specific-prefix.iot.region.amazonaws.com
   ```

1. 

**Sottoscrivi all'argomento relativo alla richiesta di comandi**

   Dopo aver stabilito una connessione, i dispositivi possono sottoscrivere l'argomento relativo alla richiesta di AWS IoT comandi MQTT. Quando si crea un comando e si avvia l'esecuzione del comando sul dispositivo di destinazione, un messaggio di payload codificato con protobuf verrà pubblicato sull'argomento della richiesta dal broker dei messaggi. Il dispositivo può quindi ricevere il messaggio di payload ed elaborare il comando. In questo esempio, sostituiscilo *`<DeviceID>`* con l'identificatore univoco del veicolo bersaglio. Questo ID può essere l'identificatore univoco del veicolo o il nome di un oggetto
**Nota**  
Il messaggio di payload inviato al dispositivo deve utilizzare il formato protobuf.

   ```
   $aws/commands/things/<DeviceID>/executions/+/request/protobuf
   ```

1. 

**(Facoltativo) Iscriviti agli argomenti di risposta ai comandi**

   Facoltativamente, puoi iscriverti agli argomenti di risposta a questi comandi per ricevere un messaggio che indica se il servizio cloud ha accettato o rifiutato la risposta dal dispositivo.
**Nota**  
È facoltativo che i veicoli si iscrivano agli argomenti `/accepted` e `/rejected` rispondano. I tuoi veicoli riceveranno automaticamente questi messaggi di risposta anche se non hanno sottoscritto esplicitamente questi argomenti.

   ```
   $aws/commands/things/<DeviceID>/executions/<ExecutionId>/response/protobuf/accepted
   $aws/commands/things/<DeviceID>/executions/<ExecutionId>/response/protobuf/rejected
   ```

1. 

**Aggiorna il risultato dell’esecuzione di un comando**

   Il veicolo bersaglio elabora quindi il comando. Quindi utilizza l'`UpdateCommandExecution`API per pubblicare il risultato dell'esecuzione nel seguente argomento di risposta MQTT.
**Nota**  
Per l'esecuzione di un determinato veicolo e comando, *<DeviceID>* devono corrispondere al campo corrispondente nell'argomento della richiesta a cui il dispositivo si è abbonato.

   ```
   $aws/commands/things/<DeviceID>/executions/<ExecutionId>/response/protobuf
   ```

   L'`UpdateCommandExecution`API è un'operazione API del piano dati su MQTT autenticata con TLS.
   + Se il servizio cloud ha elaborato correttamente il risultato dell'esecuzione del comando, viene pubblicato un messaggio nell'argomento MQTT accettato. L'argomento accettato utilizza il seguente formato.

     ```
     $aws/commands/things/<DeviceID>/executions/<ExecutionId>/response/protobuf/accepted
     ```
   + Se il servizio cloud non è riuscito a elaborare il risultato dell'esecuzione del comando, viene pubblicata una risposta all'argomento MQTT rifiutato. L'argomento rifiutato utilizza il seguente formato.

     ```
     $aws/commands/things/<DeviceID>/executions/<ExecutionId>/response/protobuf/rejected
     ```

   Per ulteriori informazioni su questa API e un esempio, consulta[Aggiorna il risultato dell'esecuzione del comando](send-monitor-remote-command-cli.md#update-remote-command-execution-cli).

## Workflow dei comandi
<a name="iot-remote-command-commands-workflow"></a>

I passaggi seguenti descrivono in dettaglio il flusso di lavoro dei comandi.

**Nota**  
Le operazioni descritte in questa sezione utilizzano il protocollo HTTP.

1. 

**Registra il tuo veicolo**

   Ora che hai preparato il veicolo all'uso della funzionalità dei comandi, puoi preparare la tua candidatura registrando il veicolo e quindi creando un comando che verrà inviato al veicolo. Per registrare il veicolo, crea un'istanza di un modello di veicolo (model manifest) utilizzando l'operazione API del piano di [https://docs.aws.amazon.com/iot-fleetwise/latest/APIReference/API_CreateVehicle.html](https://docs.aws.amazon.com/iot-fleetwise/latest/APIReference/API_CreateVehicle.html)controllo. Per ulteriori informazioni ed esempi, consulta [Creare un veicolo](https://docs.aws.amazon.com/iot-fleetwise/latest/developerguide/create-vehicle.html).

1. 

**Creare un comando**

   Utilizza l'operazione [https://docs.aws.amazon.com/iot/latest/apireference/API_CreateCommand.html](https://docs.aws.amazon.com/iot/latest/apireference/API_CreateCommand.html)HTTP Control Plane API per modellare i comandi applicabili al veicolo scelto come target. Specificate tutti i parametri e i valori predefiniti da utilizzare durante l'esecuzione del comando e assicuratevi che utilizzi lo `AWS-IoT-FleetWise` spazio dei nomi. Per ulteriori informazioni ed esempi sull'utilizzo di questa API, consulta. [Crea una risorsa di comando](create-manage-remote-command-cli.md#create-remote-command-cli)

1. 

**Avvia l'esecuzione del comando**

   Ora puoi eseguire il comando che hai creato sul veicolo utilizzando l'operazione API del piano [https://docs.aws.amazon.com/iot/latest/apireference/API_iotdata_StartCommandExecution.html](https://docs.aws.amazon.com/iot/latest/apireference/API_iotdata_StartCommandExecution.html)dati. AWS IoT Device Management recupera il comando e i parametri del comando e convalida la richiesta in arrivo. Quindi richiama l' AWS IoT FleetWise API con i parametri richiesti per generare il payload specifico del veicolo. Il payload viene quindi inviato al dispositivo tramite MQTT all'argomento AWS IoT Device Management di richiesta del comando a cui il dispositivo è abbonato. Per ulteriori informazioni ed esempi sull'utilizzo di questa API, consulta. [Invia un comando ()AWS CLI](send-monitor-remote-command-cli.md#send-remote-command-cli)

   ```
   $aws/commands/things/<DeviceID>/executions/+/request/protobuf
   ```
**Nota**  
Se il dispositivo era offline quando il comando è stato inviato dal cloud e sono in uso sessioni permanenti MQTT, il comando attende nel broker di messaggi. Se il dispositivo torna online prima della scadenza del timeout e se ha sottoscritto l'argomento relativo alla richiesta dei comandi, il dispositivo può quindi elaborare il comando e pubblicare il risultato nell'argomento di risposta. Se il dispositivo non torna online prima della scadenza del timeout, l'esecuzione del comando scadrà e il messaggio di payload scadrà.

1. 

**Recupera l'esecuzione del comando**

   Dopo aver eseguito il comando sul dispositivo, utilizzate 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)controllo per recuperare e monitorare il risultato dell'esecuzione del comando. Puoi anche utilizzare l'API per ottenere informazioni aggiuntive sui dati di esecuzione, ad esempio quando è stato aggiornato l'ultima volta, quando l'esecuzione è stata completata e i parametri specificati.
**Nota**  
Per recuperare le informazioni più recenti sullo stato, il dispositivo deve aver pubblicato il risultato dell’esecuzione del comando nell’argomento della risposta.

   Per ulteriori informazioni ed esempi sull'utilizzo di questa API, consulta[Get (esecuzione del comando)](send-monitor-remote-command-cli.md#get-remote-command-execution-cli).

## (Facoltativo) Comandi e notifiche
<a name="remote-command-notifications"></a>

È possibile sottoscrivere gli eventi dei comandi per ricevere notifiche quando lo stato di esecuzione di un comando cambia. I passaggi seguenti mostrano come sottoscrivere gli eventi dei comandi e quindi elaborarli.

1. 

**Creazione di una regola dell'argomento**

   È possibile sottoscrivere l'argomento Commands Events e ricevere notifiche quando lo stato di esecuzione di un comando cambia. È inoltre possibile creare una regola tematica per indirizzare i dati elaborati dal veicolo ad altre applicazioni, ad esempio le AWS Lambda funzioni. È possibile creare una regola tematica utilizzando la AWS IoT console o l'operazione API del piano di [https://docs.aws.amazon.com/iot/latest/apireference/API_CreateTopicRule.html](https://docs.aws.amazon.com/iot/latest/apireference/API_CreateTopicRule.html) AWS IoT Core controllo. Per ulteriori informazioni, consulta [Creazione e AWS IoT regola](https://docs.aws.amazon.com/iot/latest/developerguide/iot-create-rule.html).

   In questo esempio, sostituiscilo `<CommandID>` con l'identificatore del comando per il quale desideri ricevere notifiche e `<CommandExecutionStatus>` con lo stato dell'esecuzione del comando.

   ```
   $aws/events/commandExecution/<CommandID>/<CommandExecutionStatus>
   ```
**Nota**  
Per ricevere notifiche per tutti i comandi e gli stati di esecuzione dei comandi, è possibile utilizzare caratteri jolly e sottoscrivere il seguente argomento.

   ```
   $aws/events/commandExecution/+/#
   ```

1. 

**Ricevi ed elabora gli eventi dei comandi**

   Se hai creato una regola tematica nel passaggio precedente per sottoscrivere gli eventi dei comandi, puoi gestire le notifiche push dei comandi che ricevi. Opzionalmente, puoi anche creare applicazioni su di esso, ad esempio with, Amazon SQS AWS Lambda, Amazon SNS o Step AWS Functions utilizzando la regola tematica che hai creato.

Il codice seguente mostra un payload di esempio per i comandi, gli eventi e le notifiche che riceverai.

```
{
    "executionId": "2bd65c51-4cfd-49e4-9310-d5cbfdbc8554",
    "status":"FAILED",
    "statusReason": {
         "reasonCode": "4",
         "reasonDescription": ""
    },
    "eventType": "COMMAND_EXECUTION",
    "commandArn":"arn:aws:iot:us-east-1:123456789012:command/0b9d9ddf-e873-43a9-8e2c-9fe004a90086",
    "targetArn":"arn:aws:iot:us-east-1:123456789012:thing/5006c3fc-de96-4def-8427-7eee36c6f2bd",
    "timestamp":1717708862107
}
```

# Crea e gestisci i comandi
<a name="create-manage-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).

Puoi configurare azioni remote riutilizzabili o inviare istruzioni immediate e una tantum ai tuoi dispositivi. Quando si utilizza questa funzionalità, è possibile specificare le istruzioni che i dispositivi possono eseguire quasi in tempo reale. Un comando consente di configurare azioni remote riutilizzabili per il veicolo bersaglio. Dopo aver creato un comando, puoi avviare un'esecuzione di comando destinata a un veicolo specifico.

In questo argomento viene illustrato come creare e gestire una risorsa di comando utilizzando l' AWS IoT Core API o il AWS CLI. Viene illustrato come eseguire le seguenti azioni su una risorsa di comando.

**Topics**
+ [Crea una risorsa di comando](#create-remote-command-cli)
+ [Recupera informazioni su un comando](#get-remote-command-cli)
+ [Elenca i comandi nel tuo account](#list-remote-command-cli)
+ [Aggiorna o depreca una risorsa di comando](#update-remote-command-cli)
+ [Eliminare una risorsa di comando](#delete-remote-command-cli)

## Crea una risorsa di comando
<a name="create-remote-command-cli"></a>

È possibile utilizzare l'operazione API del piano di [https://docs.aws.amazon.com/iot/latest/apireference/API_CreateCommand.html](https://docs.aws.amazon.com/iot/latest/apireference/API_CreateCommand.html) AWS IoT Core controllo o la FleetWise console AWS IoT per creare un comando.

### Creare un comando (console)
<a name="create-command-console"></a>

Puoi usare la FleetWise console AWS IoT per creare un comando.

**Per creare un comando**

1. Apri la [ FleetWise console AWS IoT](https://console.aws.amazon.com/iotfleetwise).

1. Nel riquadro di navigazione, scegli **Comandi**.

1. Scegli il **comando Crea**.

1. Specificate un ID di comando univoco per aiutarvi a identificare il comando che desiderate eseguire sul veicolo.

1. (Facoltativo) Specificate un nome visualizzato e una descrizione opzionali.

1. (Facoltativo) Selezionate l'attuatore e il valore del parametro predefinito. I parametri specificano le azioni che il veicolo bersaglio può eseguire dopo aver ricevuto il comando. Se non aggiungi parametri, dovrai fornirli durante l’esecuzione del comando.

1. Scegli un ruolo IAM che conceda le autorizzazioni per generare il payload per i comandi. [Vedi Controllo dell'accesso.](https://docs.aws.amazon.com/iot-fleetwise/latest/developerguide/controlling-access.html#generate-command-payload)

1. Scegli il **comando Crea**.

### Crea un comando (AWS CLI)
<a name="create-remote-command-example"></a>

L'esempio seguente mostra come creare un comando con un parametro.

#### Considerazioni sulla creazione di un comando
<a name="create-remote-command-considerations"></a>

Quando si crea un comando in AWS IoT FleetWise:
+ Devi specificare `roleArn` quello che concede l'autorizzazione a creare ed eseguire comandi sul tuo veicolo. Per ulteriori informazioni e sulle politiche di esempio, tra cui l'attivazione delle chiavi KMS, consulta. [Concedi AWS IoT Device Management l'autorizzazione a generare il payload per i comandi con AWS IoT FleetWise](controlling-access.md#generate-command-payload)
+ È necessario specificare `AWS-IoT-FleetWise` come spazio dei nomi.
+ È possibile ignorare il `mandatory-parameters` campo e specificarli invece in fase di esecuzione. In alternativa, è possibile creare un comando con parametri e, facoltativamente, specificare i relativi valori predefiniti. Se sono stati specificati valori predefiniti, in fase di esecuzione è possibile utilizzare tali valori o sostituirli specificando valori personalizzati. 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.`
+ Sostituirlo *command-id* con un identificatore univoco per il comando. È possibile utilizzare UUID, caratteri alfanumerici, «-» e «\$1».
+ Sostituiscilo *role-arn* con il ruolo IAM che ti concede l'autorizzazione a creare ed eseguire comandi, ad esempio,. `"arn:aws:iam:accountId:role/FwCommandExecutionRole"`
+ (Facoltativo) Sostituiscilo *display-name* con un nome intuitivo per il comando e *description* con una descrizione significativa del comando.
+ Sostituisci *name* e *value* dell'`mandatory-parameters`oggetto con le informazioni richieste per il comando in fase di creazione. 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*

```
aws iot create-command --command-id command-id \ 
    --role-arn role-arn \
    --description description \
    --display-name display-name \     
    --namespace "AWS-IoT-FleetWise" \
    --mandatory-parameters '[
        {
            "name": name, 
            "value": value
        }
   ]'
```

L'operazione `CreateCommand` API restituisce una risposta che contiene l'ID e l'ARN (Amazon Resource Name) del comando.

```
{
    "commandId": "HandsOffSteeringMode",
    "commandArn": "arn:aws:iot:ap-south-1:123456789012:command/HandsOffSteeringMode"
}
```

## Recupera informazioni su un comando
<a name="get-remote-command-cli"></a>

È possibile utilizzare l'operazione API del piano di [https://docs.aws.amazon.com/iot/latest/apireference/API_GetCommand.html](https://docs.aws.amazon.com/iot/latest/apireference/API_GetCommand.html) AWS IoT Core controllo per recuperare informazioni su una risorsa di comando.

Per ottenere informazioni su una risorsa di comando, esegui il comando seguente. Sostituisci *command-id* con l'identificatore utilizzato durante la creazione del comando.

```
aws iot get-command --command-id command-id
```

L'operazione `GetCommand` API restituisce una risposta che contiene le seguenti informazioni.
+ L'ID e l'ARN (Amazon Resource Name) del comando.
+ La data e l'ora in cui il comando è stato creato e aggiornato l'ultima volta.
+ Lo stato del comando che indica se è disponibile per l'esecuzione sul veicolo.
+ Qualsiasi parametro specificato durante la creazione del comando.

```
{
    "commandId": "HandsOffSteeringMode",
    "commandArn": "arn:aws:iot:ap-south-1:123456789012:command/HandsOffSteeringMode"",
    "namespace": "AWS-IoT-FleetWise",
    "mandatoryParameters":[
        {
            "name": "$actuatorPath.Vehicle.Chassis.SteeringWheel.HandsOff.HandsOffSteeringMode",
            "value": {"B": false }
        }
    ],
    "createdAt": "2024-03-23T11:24:14.919000-07:00",
    "lastUpdatedAt": "2024-03-23T11:24:14.919000-07:00",
    "deprecated": false,
    "pendingDeletion": false
}
```

## Elenca i comandi nel tuo account
<a name="list-remote-command-cli"></a>

Puoi utilizzare l'operazione API del piano di [https://docs.aws.amazon.com/iot/latest/apireference/API_ListCommands.html](https://docs.aws.amazon.com/iot/latest/apireference/API_ListCommands.html) AWS IoT Core controllo per elencare tutti i comandi dell'account che hai creato.

Per elencare i comandi nel tuo account, esegui il comando seguente. Per impostazione predefinita, l'API restituisce i comandi creati per entrambi i namespace. Per filtrare l'elenco in modo da visualizzare solo i comandi per cui sono stati creati AWS IoT FleetWise, esegui il comando seguente.

**Nota**  
È inoltre possibile ordinare l'elenco in ordine crescente o decrescente oppure filtrare l'elenco per visualizzare solo i comandi con un nome di parametro di comando specifico.

```
aws iot list-commands --namespace "AWS-IoT-FleetWise"
```

L'operazione `ListCommands` API restituisce una risposta che contiene le seguenti informazioni.
+ L'ID e l'ARN (Amazon Resource Name) dei comandi.
+ La data e l'ora in cui il comando è stato creato e aggiornato l'ultima volta.
+ Lo stato del comando che indica se i comandi sono disponibili per l'esecuzione sul veicolo.

## Aggiorna o depreca una risorsa di comando
<a name="update-remote-command-cli"></a>

È possibile utilizzare l'operazione API del piano di [https://docs.aws.amazon.com/iot/latest/apireference/API_UpdateCommand.html](https://docs.aws.amazon.com/iot/latest/apireference/API_UpdateCommand.html) AWS IoT Core controllo o la FleetWise console AWS IoT per aggiornare una risorsa di comando. È possibile aggiornare il nome visualizzato e la descrizione di un comando. È inoltre possibile rendere obsoleto un comando se non è attualmente in uso.

**Nota**  
Non è possibile modificare le informazioni sullo spazio dei nomi o i parametri da utilizzare durante l'esecuzione del comando.

### Aggiornare un comando (console)
<a name="update-command-console"></a>

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

1. Scegli il comando che desideri aggiornare, quindi scegli **Modifica**.

1. Modifica i dettagli del comando, quindi scegli **Salva modifiche**.

**Deprecate un comando**  
Per rendere obsoleto un comando dalla console, vai alla pagina [Comandi](https://console.aws.amazon.com/iotfleetwise/home#/commands) della FleetWise console AWS IoT ed esegui i seguenti passaggi.

1. **Scegli il comando che desideri rendere obsoleto, quindi scegli Deprecate.**

1. **Conferma la deprecazione, quindi scegli Deprecate.**

### Aggiorna un comando ()AWS CLI
<a name="update-command-cli"></a>

**Aggiornare un comando**  
Per aggiornare una risorsa di comando, esegui il comando seguente. Sostituiscila *command-id* con l'identificatore del comando che desideri aggiornare e fornisci la versione aggiornata *display-name* e*description*.

```
aws iot update-command \ 
    --command-id command-id \ 
    --display-name display-name \ 
    --description description
```

L'operazione `UpdateCommand` API restituisce la seguente risposta.

```
{
    "commandId": "HandsOffSteeringMode",
    "deprecated": false,
    "lastUpdatedAt": "2024-05-09T23:16:51.370000-07:00"
}
```

**Deprecare un comando**  
Si considera obsoleto un comando quando si intende non continuare a utilizzarlo per il dispositivo o quando è obsoleto. L'esempio seguente mostra come rendere obsoleto un comando.

```
aws iot update-command \ 
    --command-id command-id \ 
    --deprecated
```

L'operazione `UpdateCommand` API restituisce una risposta che contiene l'ID e l'ARN (Amazon Resource Name) del comando.

```
{
    "commandId": "HandsOffSteeringMode",
    "deprecated": true,
    "lastUpdatedAt": "2024-05-09T23:16:51.370000-07:00"
}
```

Una volta che un comando è diventato obsoleto, le esecuzioni di comandi esistenti continueranno a essere eseguite sul veicolo fino a quando non diventeranno terminali. Per eseguire nuove esecuzioni di comandi, è necessario utilizzare l'`UpdateCommand`API per ripristinare il comando in modo che diventi disponibile. *Per ulteriori informazioni sulla deprecazione e il ripristino di un comando e relative considerazioni, consulta [Deprecare](https://docs.aws.amazon.com/iot/latest/developerguide/iot-remote-command-deprecate) una risorsa di comando nella Developer Guide.AWS IoT Core *

## Eliminare una risorsa di comando
<a name="delete-remote-command-cli"></a>

È possibile utilizzare l'operazione API del piano di [https://docs.aws.amazon.com/iot/latest/apireference/API_DeleteCommand.html](https://docs.aws.amazon.com/iot/latest/apireference/API_DeleteCommand.html) AWS IoT Core controllo o la FleetWise console AWS IoT per eliminare una risorsa di comando.

**Nota**  
Le operazioni di eliminazione sono permanenti e non possono essere annullate. Il comando verrà rimosso definitivamente dal tuo account.

### Eliminare un comando (console)
<a name="delete-command-console"></a>

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

1. Scegli il comando che desideri eliminare, quindi scegli **Elimina**.

1. Confermate di voler eliminare il comando, quindi scegliete **Elimina**.

### Eliminare un comando (AWS CLI)
<a name="delete-command-cli"></a>

Per eliminare una risorsa di comando, esegui il comando seguente. Sostituisci *command-id* con l'identificatore del comando che desideri eliminare. L'esempio seguente mostra come eliminare una risorsa di comando.

```
aws iot delete-command --command-id command-id
```

Se la richiesta di eliminazione ha esito positivo:
+ Se il comando è obsoleto per una durata superiore al timeout massimo di 24 ore, il comando verrà eliminato immediatamente e verrà visualizzato un HTTP di 204. `statusCode`
+ Se il comando non è obsoleto o è stato obsoleto per una durata inferiore al timeout massimo, il comando sarà in uno stato e verrà visualizzato un HTTP di 202. `pending deletion` `statusCode` Il comando verrà rimosso automaticamente dal tuo account dopo il timeout massimo di 24 ore.

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

# Esempio: utilizzo dei comandi per controllare la modalità di sterzo di un veicolo (AWS CLI)
<a name="remote-command-tutorial"></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).

L'esempio seguente mostra come utilizzare la funzionalità dei comandi utilizzando. AWS CLI Questo esempio utilizza un AWS IoT FleetWise veicolo come dispositivo di destinazione per mostrare come inviare un comando per controllare a distanza la modalità di sterzo.

**Topics**
+ [Panoramica dell'esempio della modalità di sterzo del veicolo](#iot-remote-command-tutorial-overview)
+ [Prerequisiti](#iot-remote-command-tutorial-prereq)
+ [Politica IAM per l'utilizzo dei comandi remoti](#remote-command-policy)
+ [Esegui AWS IoT comandi (AWS CLI)](#iot-remote-command-tutorial-run)
+ [Pulizia](#remote-command-tutorial-clean)

## Panoramica dell'esempio della modalità di sterzo del veicolo
<a name="iot-remote-command-tutorial-overview"></a>

In questo esempio, potrai:

1. Crea una risorsa di comando per l'operazione utilizzando `create-command` AWS CLI per modificare la modalità di sterzo del veicolo.

1. Recupera informazioni sul comando, ad esempio l'ora in cui è stato creato o l'ultimo aggiornamento utilizzando il `get-command` AWS CLI.

1. Invia il comando al veicolo utilizzando la modalità `start-command-execution` AWS CLI con lo sterzo come parametro obbligatorio, che verrà quindi eseguito sul dispositivo.

1. Ottieni il risultato dell'esecuzione del comando utilizzando `get-command-execution` AWS CLI. È possibile verificare quando l'esecuzione è stata completata e recuperare dettagli aggiuntivi come il risultato dell'esecuzione e il tempo impiegato per completare l'esecuzione del comando.

1. Esegui attività di pulizia rimuovendo tutti i comandi e le esecuzioni di comandi che non desideri più utilizzare.

## Prerequisiti
<a name="iot-remote-command-tutorial-prereq"></a>

Prima di eseguire questo esempio:
+ Inserisci il tuo AWS IoT FleetWise AWS IoT veicolo nel AWS IoT registro. Devi anche aggiungere un certificato al tuo dispositivo, attivarlo e allegare una politica al tuo programma. Il dispositivo può quindi connettersi al cloud ed eseguire i comandi. Per ulteriori informazioni, consulta [Fornitura di veicoli](https://docs.aws.amazon.com/iot-fleetwise/latest/developerguide/provision-vehicles.html).
+ Crea un utente IAM e una policy IAM che ti conceda l'autorizzazione a eseguire le operazioni API per l'utilizzo dei comandi, come mostrato in[Politica IAM per l'utilizzo dei comandi remoti](#remote-command-policy).

## Politica IAM per l'utilizzo dei comandi remoti
<a name="remote-command-policy"></a>

La tabella seguente mostra un esempio di policy IAM che concede l'accesso a tutte le operazioni API del piano di controllo e del piano dati per la funzionalità dei comandi. L'utente dell'applicazione disporrà delle autorizzazioni per eseguire tutte le operazioni dell'API di comando remoto, come mostrato nella tabella.


**Operazione API**  

| Azione API | Piano di controllo/dati | Protocollo | Description | Risorsa | 
| --- | --- | --- | --- | --- | 
| CreateCommand | Piano di controllo | HTTP | Crea una risorsa di comando |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/iot-fleetwise/latest/developerguide/remote-command-tutorial.html)  | 
| GetCommand | Piano di controllo | HTTP | Recupera informazioni su un comando |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/iot-fleetwise/latest/developerguide/remote-command-tutorial.html)  | 
| UpdateCommand | Piano di controllo | HTTP | Aggiorna le informazioni su un comando o lo rende obsoleto |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/iot-fleetwise/latest/developerguide/remote-command-tutorial.html)  | 
| ListCommands | Piano di controllo | HTTP | Elenca i comandi presenti nel tuo account |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/iot-fleetwise/latest/developerguide/remote-command-tutorial.html)  | 
| DeleteCommand | Piano di controllo | HTTP | Elimina un comando |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/iot-fleetwise/latest/developerguide/remote-command-tutorial.html)  | 
| StartCommandExecution | Piano dati | HTTP | Inizia l'esecuzione di un comando |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/iot-fleetwise/latest/developerguide/remote-command-tutorial.html)  | 
| UpdateCommandExecution | Piano dati | MQTT | Aggiorna l'esecuzione di un comando |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/iot-fleetwise/latest/developerguide/remote-command-tutorial.html)  | 
| GetCommandExecution | Piano di controllo | HTTP | Recupera informazioni sull'esecuzione di un comando |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/iot-fleetwise/latest/developerguide/remote-command-tutorial.html)  | 
| ListCommandExecutions | Piano di controllo | HTTP | Elenca le esecuzioni di comandi nel tuo account |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/iot-fleetwise/latest/developerguide/remote-command-tutorial.html)  | 
| DeleteCommandExecution | Piano di controllo | HTTP | Elimina l'esecuzione di un comando |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/iot-fleetwise/latest/developerguide/remote-command-tutorial.html)  | 

In questo esempio, sostituisci:
+ `us-east-1`con il tuo Regione AWS, ad esempio`ap-south-1`.
+ `111122223333`con il tuo Account AWS numero, ad esempio`57EXAMPLE833`.
+ `command-id``command-id1`, e `command-id2` con il tuo identificatore di comando univoco, ad esempio `LockDoor` o`TurnOffAC`.
+ `thing-name`con il nome dell' AWS IoT oggetto, ad esempio`my_car`.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Action": [
                "iot:CreateCommand",
                "iot:GetCommand",
                "iot:ListCommands",
                "iot:UpdateCommand",
                "iot:DeleteCommand"
            ],
            "Effect": "Allow",
            "Resource": [
                "arn:aws:iot:us-east-1:111122223333:command/command-id1",
                "arn:aws:iot:us-east-1:111122223333:command/command-id2"
            ]
        },
        {
            "Action": [
                "iot:GetCommandExecution",
                "iot:ListCommandExecutions",
                "iot:DeleteCommandExecution"
            ],
            "Effect": "Allow",
            "Resource": [
                "arn:aws:iot:us-east-1:111122223333:command/command-id",
                "arn:aws:iot:us-east-1:111122223333:thing/thing-name"
            ]
        },
        {
            "Action": "iot:StartCommandExecution",
            "Effect": "Allow",
            "Resource": [
                "arn:aws:iot:us-east-1:111122223333:command/command-id",
                "arn:aws:iot:us-east-1:111122223333:thing/thing-name"
            ]
        }
    ]
}
```

------

## Esegui AWS IoT comandi (AWS CLI)
<a name="iot-remote-command-tutorial-run"></a>

Di seguito viene illustrato come utilizzare i comandi AWS CLI per eseguire operazioni e modificare la modalità di sterzo del veicolo.

1. 

**Crea una risorsa di comando per il funzionamento in modalità sterzo**

   Crea il comando che desideri inviare al tuo dispositivo utilizzando la `create-command` CLI. In questo esempio, specifica:
   + `command-id` come *`TurnOffSteeringMode`*
   + `role-arn`as `"arn:aws:iam:accountId:role/FwCommandExecutionRole"` `role-arn` Deve essere fornito, in quanto è il ruolo IAM che concede le autorizzazioni per creare ed eseguire comandi sul veicolo. Per ulteriori informazioni, consulta [Concedi AWS IoT Device Management l'autorizzazione a generare il payload per i comandi con AWS IoT FleetWise](controlling-access.md#generate-command-payload).
   + `display-name`come "» *`Turn off steering mode`*
   + `namespace`deve essere `AWS-IoT-FleetWise`
   + `mandatory-parameters`come coppia nome-valore, con "*\$1actuatorPath.Vehicle.Chassis.SteeringWheel.TurnOffSteeringMode*" e defaultValue `name` come `{ "S": "true" }`
**Nota**  
È inoltre possibile creare un comando senza specificare alcun parametro obbligatorio. È quindi necessario specificare i parametri da utilizzare durante l'esecuzione del comando utilizzando la `start-command-execution` CLI. Per vedere un esempio, consulta [Scenari di utilizzo dei comandi](remote-command-use-cases.md).
**Importante**  
Quando si utilizza lo spazio dei `AWS-IoT-FleetWise` nomi, è necessario assicurarsi che il `Name` campo specificato come parte del prefisso `mandatory-parameters` utilizzi il `$actuatorPath.` prefisso e che il `Value` campo utilizzi il tipo di dati stringa.

   ```
   aws iot create-command \ 
       --command-id TurnOffSteeringMode \ 
       --role-arn "arn:aws:iam:accountId:role/FwCommandExecutionRole" \
       --display-name "Turn off steering mode" \ 
       --namespace AWS-IoT-FleetWise \
       --mandatory-parameters '[
         {
           "name": "$actuatorPath.Vehicle.Chassis.SteeringWheel.TurnOffSteeringMode",
           "defaultValue": { "S": "true" }
         }
       ]'
   ```

   L'output seguente mostra una risposta di esempio dalla CLI, dove `ap-south-1` e `123456789012` sono esempi di Regione AWS and Account AWS ID.

   ```
   {
       "commandId": "TurnOffSteeringMode",
       "commandArn": "arn:aws:iot:ap-south-1:123456789012:command/TurnOffSteeringMode"
   }
   ```

   Per ulteriori esempi sull'utilizzo di questo comando, vedere[Crea una risorsa di comando](create-manage-remote-command-cli.md#create-remote-command-cli).

1. 

**Recuperare informazioni sul comando**

   Esegui il comando seguente per recuperare informazioni sul comando, `command-id` dov'è l'ID del comando nell'output dell'`create-command`operazione dall'alto.
**Nota**  
Se crei più di un comando, puoi utilizzare l'`ListCommands`API per elencare tutti i comandi del tuo account e quindi utilizzare l'`GetCommand`API per ottenere informazioni aggiuntive su un comando specifico. Per ulteriori informazioni, consulta [Elenca i comandi nel tuo account](create-manage-remote-command-cli.md#list-remote-command-cli).

   ```
   aws iot get-command --command-id TurnOffSteeringMode
   ```

   L'esecuzione di questo comando genera la seguente risposta. Vedrai l'ora in cui il comando è stato creato e quando è stato aggiornato l'ultima volta, i parametri specificati e se il comando è disponibile per l'esecuzione sul dispositivo.

   ```
   {
       "commandId": "TurnOffSteeringMode",
       "commandArn": "arn:aws:iot:ap-south-1:123456789012:command/TurnOffSteeringMode",
       "namespace": "AWS-IoT-FleetWise",
       "mandatoryParameters":[
           {
               "name": "$actuatorPath.Vehicle.Chassis.SteeringWheel.TurnOffSteeringMode",
               "defaultValue": {"S": "true" }
           }
       ],
       "createdAt": "2024-03-23T00:50:10.095000-07:00",
       "lastUpdatedAt": "2024-03-23T00:50:10.095000-07:00",
       "deprecated": false
   }
   ```

   Per ulteriori esempi sull'utilizzo di questo comando, vedere[Recupera informazioni su un comando](create-manage-remote-command-cli.md#get-remote-command-cli).

1. 

**Avviare l'esecuzione del comando**

   Esegui il comando seguente per iniziare l'esecuzione del comando, dove `command-arn` è il comando ARN nell'output dell'`get-command`operazione dall'alto. `target-arn`È l'ARN del dispositivo di destinazione per il quale si sta eseguendo il comando, ad esempio,. *`myVehicle`*

   In questo esempio, poiché hai fornito valori predefiniti per i parametri durante la creazione del comando, la `start-command-execution` CLI può utilizzare questi valori durante l'esecuzione del comando. Puoi anche scegliere di sovrascrivere il valore predefinito specificando un valore diverso per i parametri quando usi la CLI.

   ```
   aws iot-data start-command-execution \    
       --command-arn arn:aws:iot:ap-south-1:123456789012:command/TurnOffSteeringMode \
       --target-arn arn:aws:iot:ap-south-1:123456789012:thing/myVehicle
   ```

   L'esecuzione di questo comando 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"
   }
   ```

   Per ulteriori esempi sull'utilizzo della CLI, vedere. [Invia un comando ()AWS CLI](send-monitor-remote-command-cli.md#send-remote-command-cli)

1. 

**Recuperare informazioni sull'esecuzione del comando**

   Esegui il comando seguente per recuperare informazioni sul comando che hai eseguito sul dispositivo di destinazione. Specificate il`execution-id`, che avete ottenuto come output dell'`start-command-execution`operazione dall'alto, e il`target-arn`, che è l'ARN del dispositivo a cui state puntando.
**Nota**  
Per ottenere le informazioni più recenti sullo stato, i dispositivi devono aver pubblicato le informazioni di stato aggiornate nell'argomento di risposta riservato MQTT per i comandi che utilizzano l'`UpdateCommandExecution`API MQTT. Per ulteriori informazioni, consulta [Aggiorna il risultato dell'esecuzione del comando](send-monitor-remote-command-cli.md#update-remote-command-execution-cli).
Se si avvia più di un'esecuzione di comandi, è possibile utilizzare l'`ListCommandExecutions`API per elencare tutte le esecuzioni di comandi nell'account e quindi utilizzare l'`GetCommandExecution`API per ottenere informazioni aggiuntive su un'esecuzione specifica. Per ulteriori informazioni, consulta [Elenca le esecuzioni dei comandi nel tuo account](send-monitor-remote-command-cli.md#list-remote-command-execution-cli).

   ```
   aws iot get-command-execution \    
       --execution-id <"07e4b780-7eca-4ffd-b772-b76358da5542"> \ 
       --target-arn arn:aws:iot:us-east-1:<account>:thing/myVehicle
   ```

   L'esecuzione di questo comando restituisce informazioni sull'esecuzione del comando, sullo stato dell'esecuzione, sull'ora in cui ha iniziato l'esecuzione e l'ora in cui è stata completata. Ad esempio, la risposta seguente mostra che l'esecuzione del comando è riuscita sul dispositivo di destinazione e la modalità di guida è stata disattivata.

   ```
   {
       "executionId": "07e4b780-7eca-4ffd-b772-b76358da5542",
       "commandArn": "arn:aws:iot:ap-south-1:123456789012:command/TurnOffSteeringMode",
       "targetArn": "arn:aws:iot:ap-south-1:123456789012:thing/myVehicle",
       "result": "SUCCEEDED",
        "statusReason": {
           "reasonCode": "65536",
           "reasonDescription": "SUCCESS"
       },
       "result": {
           "KeyName": {
               "S": "",
               "B": true,
               "BIN": null
           }
       },
       "createdAt": "2024-03-23T00:50:10.095000-07:00",
       "completedAt": "2024-03-23T00:50:10.095000-07:00",
       "parameters": '{
            "$actuatorPath.Vehicle.Chassis.SteeringWheel.TurnOffSteeringMode":
            { "S": "true" }
       }' 
   }
   ```

## Pulizia
<a name="remote-command-tutorial-clean"></a>

Ora che avete creato un comando e lo avete eseguito sul dispositivo, se non intendete più utilizzare questo comando, potete eliminarlo. Tutte le esecuzioni di comandi in sospeso in corso continueranno a essere eseguite senza essere influenzate dalla richiesta di eliminazione.

**Nota**  
In alternativa, puoi anche rendere obsoleto un comando se è obsoleto e potresti doverlo utilizzare in un secondo momento per eseguirlo sul dispositivo di destinazione.

1. 

**(Facoltativo) Deprecate la risorsa del comando**

   Eseguite il comando seguente per rendere obsoleto il comando, `command-id` dov'è l'ID del comando nell'output dell'`get-command`operazione riportata sopra.

   ```
   aws iot update-command \    
      --command-id TurnOffSteeringMode \    
      --deprecated
   ```

   L'esecuzione di questo comando restituisce un output che indica che il comando è obsoleto. È inoltre possibile utilizzare la CLI per ripristinare il comando. 
**Nota**  
È inoltre possibile utilizzare la `update-command` CLI per aggiornare il nome visualizzato e la descrizione di un comando. Per ulteriori informazioni, consulta [Aggiorna o depreca una risorsa di comando](create-manage-remote-command-cli.md#update-remote-command-cli).

   ```
   {
       "commandId": "TurnOffSteeringMode",
       "deprecated": true,
       "lastUpdatedAt": "2024-05-09T23:16:51.370000-07:00"
   }
   ```

1. 

**Eliminare il comando**

   Esegui il comando seguente per eliminare il comando, specificato da`command-id`.
**Nota**  
L'azione di eliminazione è permanente e non può essere annullata.

   ```
   aws iot delete-command --command-id TurnOffSteeringMode
   ```

   Se la richiesta di eliminazione ha esito positivo, verrà visualizzato un HTTP `statusCode` pari a 202 o 204 a seconda che il comando sia stato contrassegnato come obsoleto e quando è diventato obsoleto. Per ulteriori informazioni e un esempio, consulta [Eliminare una risorsa di comando](create-manage-remote-command-cli.md#delete-remote-command-cli).

   Puoi utilizzare la `get-command` CLI per verificare che il comando sia stato rimosso dal tuo account.

1. 

**(Facoltativo) Eliminare le esecuzioni dei comandi**

   Per impostazione predefinita, tutte le esecuzioni di comandi verranno eliminate entro sei mesi dalla data di creazione. È possibile visualizzare queste informazioni utilizzando il `timeToLive` parametro dell'`GetCommandExecution`API.

   In alternativa, se l'esecuzione del comando è diventata terminale, ad esempio quando lo stato di esecuzione è uno di `SUCCEEDED``FAILED`, oppure`REJECTED`, è possibile eliminare l'esecuzione del comando. Esegui il comando seguente per eliminare l'esecuzione, `execution-id` dov'è l'ID di esecuzione nell'output dell'`get-command-execution`operazione dall'alto.

   ```
   aws iot delete-command-execution \ 
               --execution-id "07e4b780-7eca-4ffd-b772-b76358da5542"
   ```

   Puoi utilizzare la `get-command-execution` CLI per verificare che l'esecuzione del comando sia stata rimossa dal tuo account.

# Scenari di utilizzo dei comandi
<a name="remote-command-use-cases"></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).

Quando si utilizza la funzionalità dei comandi, è possibile creare ed eseguire comandi nei seguenti scenari:
+ È possibile omettere i parametri durante la creazione e specificare solo l'ID del comando. In questo caso, è necessario specificare i parametri da utilizzare quando si esegue il comando sul dispositivo di destinazione.
+ È possibile specificare uno o più parametri e configurarne i valori predefiniti durante la creazione del comando. L'immissione di valori predefiniti ti aiuterà a proteggerti dall'invio di comandi imprecisi.
+ È possibile specificare uno o più parametri e configurarne i valori durante la creazione del comando. È possibile fornire più di un parametro, ma solo uno di essi verrà eseguito e il `Name` campo di questo parametro deve utilizzare il `$actuatorPath` prefisso.

Questa sezione fornisce alcuni scenari di utilizzo per `CreateCommand` e l'`StartCommandExecution`API e l'utilizzo dei parametri. Vengono inoltre mostrati alcuni esempi di utilizzo dei comandi con modelli di stato.

**Topics**
+ [Creazione di un comando senza parametri](#remote-command-use-case1)
+ [Creazione di un comando con valori predefiniti per i parametri](#remote-command-use-case2)
+ [Creazione di un comando con valori di parametro](#remote-command-use-case3)
+ [Utilizzo di comandi con modelli di stato](#remote-command-use-cases-templates)

## Creazione di un comando senza parametri
<a name="remote-command-use-case1"></a>

Il seguente caso d'uso mostra come utilizzare l'`CreateCommand`API o la `create-command` CLI per creare un comando senza parametri. Quando si crea un comando, è sufficiente fornire un ID di comando e un ARN del ruolo.

Questo caso d'uso è particolarmente utile nei casi d'uso ricorrenti, ad esempio quando si desidera inviare lo stesso comando più volte a un veicolo. In questo caso, il comando non è legato a un attuatore specifico e offre la flessibilità di eseguire il comando su qualsiasi attuatore. È invece necessario specificare i parametri in fase di esecuzione quando si esegue il comando utilizzando l'`StartCommandExecution`API o la `start-command-execution` CLI, che include gli attuatori e i valori del segnale fisico.

### Creazione di un comando senza input `mandatory-parameters`
<a name="remote-command-use-case1-create"></a>

Questo caso d'uso mostra come creare un comando senza l'immissione di parametri obbligatori.

```
aws iot create-command \
    --command-id "UserJourney1" \
    --role-arn "arn:aws:iam:accountId:role/FwCommandExecutionRole" \
    --description "UserJourney1 - No mandatory parameters" \
    --namespace "AWS-IoT-FleetWise"
```

### Esecuzione di un comando creato senza `mandatory-parameters` input
<a name="remote-command-use-case1-start"></a>

In questo primo esempio, il comando creato sopra consente di eseguire un comando su qualsiasi attuatore senza restrizioni. Per impostare un valore pari `actuator1` a 10, esegui:

```
aws iot-jobs-data start-command-execution \
    --command-arn arn:aws:iot:region:111122223333:command/UserJourney1 \
    --target-arn arn:aws:iot:region:111122223333:thing/target-vehicle \
    --parameters '{
        "$actuatorPath.Vehicle.actuator1": {"S": "10"}
    }'
```

Allo stesso modo, puoi eseguire un comando che imposta `actuator3` un valore di`true`.

```
aws iot-jobs-data start-command-execution \
    --command-arn arn:aws:iot:region:111122223333:command/UserJourney1 \
    --target-arn arn:aws:iot:region:111122223333:thing/target-vehicle \
    --parameters '{
        "$actuatorPath.Vehicle.actuator3": {"S": "true"}
    }'
```

## Creazione di un comando con valori predefiniti per i parametri
<a name="remote-command-use-case2"></a>

Questo comando consente solo di eseguire un comando sull'attuatore specificato. L'immissione di valori predefiniti contribuirà a proteggere l'utente dall'invio di comandi imprecisi. Ad esempio, un `LockDoor` comando che blocca e sblocca le porte può essere configurato con un valore predefinito per evitare che il comando sblocchi accidentalmente le porte.

Questo caso d'uso è particolarmente utile quando si desidera inviare lo stesso comando più volte ed eseguire azioni diverse sullo stesso attuatore, come bloccare e sbloccare le portiere di un veicolo. Se si desidera impostare l'attuatore sul valore predefinito, non è necessario passarlo `parameters` alla `start-command-execution` CLI. Se si specifica un valore diverso per la `parameters` nella `start-command-execution` CLI, questo sovrascriverà il valore predefinito.

### Creazione di un comando con valori predefiniti per `mandatory-parameters`
<a name="remote-command-use-case2-create"></a>

Il comando seguente mostra come fornire un valore predefinito per actuator1.

```
aws iot create-command \
    --command-id "UserJourney2" \
    --namespace "AWS-IoT-FleetWise" \
    --role-arn "arn:aws:iam:accountId:role/FwCommandExecutionRole" \
    --mandatory-parameters '[
        {
            "name": "$actuatorPath.Vehicle.actuator1",
            "defaultValue": {"S": "0"}
        }
    ]'
```

### Esecuzione di un comando creato con valori predefiniti per `mandatory-parameters`
<a name="remote-command-use-case2-start"></a>

Il comando `UserJourney2` consente di eseguire un comando senza la necessità di passare un valore di input durante l'esecuzione. In questo caso, l'esecuzione in fase di esecuzione utilizzerà i valori predefiniti specificati durante la creazione.

```
aws iot-data start-command-execution \
    --command-arn arn:aws:iot:region:111122223333:command/UserJourney3 \
    --target-arn arn:aws:iot:region:111122223333:thing/target-vehicle
```

È inoltre possibile passare un valore diverso per lo stesso attuatore, actuator1, durante l'esecuzione, il che sostituirà il valore predefinito.

```
aws iot-jobs-data start-command-execution \
    --command-arn arn:aws:iot:region:111122223333:command/UserJourney3 \
    --target-arn arn:aws:iot:region:111122223333:thing/target-vehicle \
    --parameters '{
        "$actuatorPath.Vehicle.actuator1": {"S": "139"}
    }'
```

## Creazione di un comando con valori di parametro
<a name="remote-command-use-case3"></a>

Questo comando consente solo di eseguire un comando sull'attuatore specificato. Inoltre, obbliga a impostare un valore per l'attuatore durante l'esecuzione.

Questo caso d'uso è particolarmente utile quando si desidera che l'utente finale esegua solo determinate azioni specifiche su alcuni attuatori durante il funzionamento del veicolo.

**Nota**  
È possibile avere più di coppie nome-valore per l'`mandatory-parameters`input, con valori predefiniti per alcune o tutte. In fase di esecuzione, è quindi possibile determinare il parametro da utilizzare durante l'esecuzione sull'attuatore, a condizione che il nome dell'attuatore utilizzi il nome completo con il prefisso. `$actuatorPath.`

### Creazione di un comando senza valori predefiniti per `mandatory-parameters`
<a name="remote-command-use-case3-create"></a>

Questo comando consente solo di eseguire un comando sull'attuatore specificato. Inoltre, obbliga a impostare un valore per l'attuatore durante l'esecuzione.

```
aws iot create-command \
    --command-id "UserJourney2" \
    --namespace "AWS-IoT-FleetWise" \
    --role-arn "arn:aws:iam:accountId:role/FwCommandExecutionRole" \
    --mandatory-parameters '[
        {
            "name": "$actuatorPath.Vehicle.actuator1"
        }
    ]'
```

### Esecuzione di un comando creato senza valori predefiniti per `mandatory-parameters`
<a name="remote-command-use-case3-start"></a>

Quando si esegue il comando, in questo caso, è necessario specificare un valore per actuator1. L'esecuzione del comando mostrata di seguito imposterà correttamente il valore di `actuator1` to. `10`

```
aws iot-data start-command-execution \    
    --command-arn arn:aws:iot:region:111122223333:command/UserJourney2 \
    --target-arn arn:aws:iot:region:111122223333:thing/target-vehicle \
    --parameters '{
        "$actuatorPath.Vehicle.actuator1": {"S": "10"}
    }'
```

## Utilizzo di comandi con modelli di stato
<a name="remote-command-use-cases-templates"></a>

Puoi anche utilizzare le operazioni dell'API dei comandi per la raccolta e l'elaborazione dei dati statali. Ad esempio, è possibile recuperare un'istantanea monouso dello stato o attivare o disattivare i modelli di stato per avviare o interrompere la raccolta dei dati sullo stato del veicolo. Gli esempi seguenti mostrano come utilizzare la funzionalità dei comandi con i modelli di stato. Per ulteriori informazioni, consulta [Operazioni relative ai modelli di stato per la raccolta e l’elaborazione dei dati](state-template-api-operations.md)

**Nota**  
Il campo Nome specificato come parte dell'`mandatory-parameters`input deve utilizzare il `$stateTemplate` prefisso.

### Esempio 1: creazione di comandi per modelli di stato con valori predefiniti
<a name="remote-command-use-cases-template-ex1"></a>

Questo esempio mostra come utilizzare la `create-command` CLI per attivare i modelli di stato.

```
aws iot create-command \
    --command-id <COMMAND_ID> \
    --display-name "Activate State Template" \
    --namespace AWS-IoT-FleetWise \    
    --mandatory-parameters '[
      {
          "name": "$stateTemplate.name"
      },
      {
          "name": "$stateTemplate.operation",
          "defaultValue": {"S": "activate"}
      }
    ]'
```

Analogamente, il comando seguente mostra un esempio di come è possibile utilizzare la `start-command-execution` CLI per i modelli di stato.

```
aws iot-data start-command-execution \
    --command-arn arn:aws:iot:region:111122223333:command/<COMMAND_ID> \
    --target-arn arn:aws:iot:region:111122223333:thing/<VEHICLE_NAME> \
    --parameters '{
       "$stateTemplate.name": {"S": "ST345"}
    }'
```

### Esempio 2: creazione di comandi per modelli di stato senza valori predefiniti
<a name="remote-command-use-cases-template-ex2"></a>

Il comando seguente crea più modelli di stato senza valori predefiniti per nessuno dei parametri. Ti obbliga a eseguire il comando con questi parametri e i relativi valori.

```
aws iot create-command \
    --command-id <COMMAND_ID> \
    --display-name "Activate State Template" \
    --namespace AWS-IoT-FleetWise \
    --mandatory-parameters '[
      {
          "name": "$stateTemplate.name",
          "defaultValue": {"S": "ST123"}
      },
      {
          "name": "$stateTemplate.operation",
          "defaultValue": {"S": "activate"}
      },
      {
          "name": "$stateTemplate.deactivateAfterSeconds",
          "defaultValue": {"L": "120"}
      } 
    ]'
```

Il comando seguente mostra come utilizzare la `start-command-execution` CLI per l'esempio precedente.

```
aws iot-data start-command-execution \
    --command-arn arn:aws:iot:region:111122223333:command/<COMMAND_ID> \
    --target-arn arn:aws:iot:region:111122223333:thing/<VEHICLE_NAME> \
    --parameters '{
        "$stateTemplate.name": {"S": "ST345"},
        "$stateTemplate.operation": {"S": "activate"},
        "$stateTemplate.deactivateAfterSeconds" : {"L": "120"}
```