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, concetti e stato
Usa AWS IoT i comandi per inviare istruzioni dal cloud ai dispositivi connessi. Per utilizzare questa funzionalità:
-
Crea un comando con un payload contenente le configurazioni necessarie per l'esecuzione sul dispositivo.
-
Specificate il dispositivo di destinazione che riceverà il payload ed eseguirà le azioni.
-
Esegui il comando sul dispositivo di destinazione e recupera le informazioni sullo stato. Per risolvere i problemi, consulta i log. CloudWatch
Per ulteriori informazioni su questo flusso di lavoro, consulta Flusso di lavoro dei comandi di alto livello.
Comandi, concetti chiave
I seguenti concetti chiave aiutano a comprendere la funzionalità Comandi. I termini vengono utilizzati in modo coerente in tutta la presente documentazione:
Comando: un modello riutilizzabile che definisce le istruzioni del dispositivo
Esecuzione: istanza di un comando in esecuzione su un dispositivo
Nome dell'oggetto: identificatore per i dispositivi registrati nel registro IoT
Client ID: identificatore MQTT per dispositivi non registrati
Payload: i dati delle istruzioni inviati ai dispositivi
Argomento - Canale MQTT per la comunicazione dei comandi
- Comandi
-
I comandi sono istruzioni inviate dal cloud ai dispositivi IoT come messaggi MQTT. Dopo aver ricevuto il payload, i dispositivi elaborano le istruzioni e intraprendono le azioni corrispondenti, come la modifica delle impostazioni di configurazione, la trasmissione delle letture dei sensori o il caricamento dei log. I dispositivi restituiscono quindi i risultati al cloud, abilitando il monitoraggio e il controllo remoti.
- Spazio dei nomi
-
Quando crei un comando, specifica il relativo namespace. Per AWS IoT Device Management i comandi, utilizzate lo spazio dei
AWS-IoTnomi predefinito e fornite un payload o un payloadTemplate. Per AWS IoT FleetWise i comandi, utilizzate lo spazio dei nomi.AWS-IoT-FleetWisePer ulteriori informazioni, consulta Comandi remoti nella Guida per gli AWS IoT FleetWise sviluppatori. - Carico utile
-
Quando create un comando, fornite un payload statico che definisca le azioni che il dispositivo deve eseguire. Il payload può utilizzare qualsiasi formato supportato. Per garantire che i dispositivi interpretino correttamente il payload, consigliamo di specificare il tipo di formato del payload. I dispositivi che utilizzano il MQTT5 protocollo possono seguire lo standard MQTT per identificare il formato. Gli indicatori di formato per JSON o CBOR sono disponibili nell'argomento relativo alla richiesta dei comandi.
- Modello di payload
-
Un modello di payload definisce un payload di comandi con segnaposti che generano payload diversi in fase di esecuzione in base ai valori dei parametri forniti dall'utente. Ad esempio, anziché creare payload separati per valori di temperatura diversi, create un modello con un segnaposto di temperatura e specificate il valore durante l'esecuzione. Ciò elimina il mantenimento di più payload simili.
- Dispositivo bersaglio
-
Per eseguire un comando, specificate un dispositivo di destinazione utilizzando il nome dell'oggetto (per i dispositivi registrati con AWS IoT) o l'ID client MQTT (per i dispositivi non registrati). L'ID client è un identificatore univoco definito nel MQTT protocollo utilizzato per connettere i dispositivi a. AWS IoT Per informazioni dettagliate, vedi Considerazioni sul dispositivo di destinazione.
- Argomenti sui comandi
-
Prima di eseguire un comando, i dispositivi devono sottoscrivere l'argomento relativo alla richiesta dei comandi. Quando si esegue un comando, il payload viene inviato al dispositivo su questo argomento. Dopo l'esecuzione, i dispositivi pubblicano i risultati e lo stato nell'argomento di risposta ai comandi. Per ulteriori informazioni, consulta Argomenti sui comandi.
- Esecuzione dei comandi
-
Un'esecuzione è un'istanza di un comando in esecuzione su un dispositivo di destinazione. Quando si avvia un'esecuzione, il payload viene consegnato al dispositivo e viene generato un ID di esecuzione univoco. Il dispositivo esegue il comando e segnala l'avanzamento a. AWS IoT La logica lato dispositivo determina il comportamento di esecuzione e la segnalazione dello stato su argomenti riservati.
Condizioni relative al valore dei parametri
Quando create comandi con modelli di payload, definite le condizioni di valore per convalidare i valori dei parametri prima dell'esecuzione. Le condizioni di valore garantiscono che i parametri soddisfino i requisiti, impedendo esecuzioni non valide.
Operatori supportati per tipo CommandParameterValue
- Tipi numerici (INTEGER, LONG, DOUBLE, UNSIGNEDLONG)
-
EQUALS- Il valore deve essere uguale al numero specificatoNOT_EQUALS- Il valore non deve essere uguale al numero specificatoGREATER_THAN- Il valore deve essere maggiore del numero specificatoGREATER_THAN_EQUALS- Il valore deve essere maggiore o uguale al numero specificatoLESS_THAN- Il valore deve essere inferiore al numero specificatoLESS_THAN_EQUALS- Il valore deve essere inferiore o uguale al numero specificatoIN_RANGE- Il valore deve rientrare nell'intervallo specificato (incluso)NOT_IN_RANGE- Il valore deve essere al di fuori dell'intervallo specificato (incluso)IN_SET- Il valore deve corrispondere a uno dei numeri specificatiNOT_IN_SET- Il valore non deve corrispondere a nessuno dei numeri specificati
- Tipo di stringa (STRING)
-
EQUALS- Il valore deve essere uguale alla stringa specificataNOT_EQUALS- Il valore non deve essere uguale alla stringa specificataIN_SET- Il valore deve corrispondere a una delle stringhe specificateNOT_IN_SET- Il valore non deve corrispondere a nessuna delle stringhe specificate
- Tipo booleano
-
Le condizioni relative ai valori non sono supportate
- Tipo binario
-
Le condizioni relative ai valori non sono supportate
Esempio: comando di controllo della temperatura
{ "commandId": "SetTemperature", "namespace": "AWS-IoT", "payloadTemplate": "{\"temperature\": \"${aws:iot:commandexecution::parameter:temperature}\"}", "parameters": [ { "name": "temperature", "type": "INTEGER", "valueConditions": [ { "comparisonOperator": "IN_RANGE", "operand": { "numberRange": { "min": "60", "max": "80" } } } ] } ] }
In questo esempio, il temperature parametro deve essere compreso tra 60 e 80 (inclusi). Le richieste di esecuzione con valori al di fuori di questo intervallo non vengono convalidate.
Nota
Le condizioni di valore vengono valutate al richiamo dell'API. StartCommandExecution Le convalide non riuscite restituiscono un errore e impediscono la creazione dell'esecuzione.
Valore dei parametri, priorità e valutazione
Quando si avviano le esecuzioni dei comandi con modelli di payload, i valori dei parametri vengono risolti utilizzando la seguente priorità:
Parametri della richiesta di esecuzione: i valori forniti nella
StartCommandExecutionrichiesta hanno la massima prioritàValori predefiniti del comando: se non viene fornito un parametro nella richiesta di esecuzione,
defaultValueviene utilizzato quello del parametroNessun valore: se non viene fornito nessuno dei due, l'esecuzione fallisce come parametro richiesto per generare la richiesta di esecuzione
Le condizioni di valore vengono valutate in base al valore finale del parametro derivato in precedenza, sulla priorità e prima della creazione dell'esecuzione. Se la convalida fallisce, la richiesta di esecuzione restituisce un errore.
Esempio: SetTemperature comando con defaultValue
{ "parameters": [ { "name": "temperature", "type": "INTEGER", "defaultValue": {"I": 72}, "valueConditions": [ { "comparisonOperator": "IN_RANGE", "operand": {"numberRange": {"min": "60", "max": "80"}} } ] } ] }
All'avvio dell'esecuzione:
Se si fornisce
"temperature": {"I": 75}nella richiesta, viene utilizzato 75Se si omette il parametro di temperatura, viene utilizzato il valore predefinito 72
Entrambi i valori vengono convalidati rispetto alla condizione dell'intervallo [60,80]
Stati dei comandi
I comandi Account AWS possono trovarsi in uno dei tre stati seguenti: Disponibile, Obsoleto o In attesa di eliminazione.
- Disponibilità
-
Una volta completata la creazione, un comando si trova nello stato Disponibile e può essere eseguito sui dispositivi.
- Deprecated
-
Contrassegna i comandi come obsoleti quando non sono più necessari. I comandi obsoleti non possono avviare nuove esecuzioni, ma le esecuzioni in sospeso continuano fino al completamento. Per abilitare nuove esecuzioni, ripristina lo stato Disponibile del comando.
- In attesa di eliminazione
-
Quando contrassegni un comando per l'eliminazione, questo viene eliminato automaticamente se è obsoleto per un periodo superiore al timeout massimo (impostazione predefinita: 12 ore). Questa azione è permanente. Se non è obsoleto o obsoleto per un periodo inferiore al timeout, il comando entra nello stato In attesa di eliminazione e viene rimosso dopo la scadenza del timeout.
Stato di esecuzione del comando
Quando si avvia un'esecuzione su un dispositivo di destinazione, il dispositivo entra in CREATED stato e può passare ad altri stati in base ai report del dispositivo. È possibile recuperare informazioni sullo stato e tenere traccia delle esecuzioni.
Nota
È possibile eseguire più comandi contemporaneamente su un dispositivo. Utilizza il controllo della concorrenza per limitare le esecuzioni per dispositivo e prevenire il sovraccarico. Per il numero massimo di esecuzioni simultanee per dispositivo, consulta le quote dei comandi.AWS IoT Device Management
La tabella seguente mostra gli stati di esecuzione e le relative transizioni in base all'avanzamento dell'esecuzione.
| Stato di esecuzione del comando | Avviato dal dispositivo/cloud? | Esecuzione del terminale? | Transizioni di stato consentite |
|---|---|---|---|
CREATED |
Cloud | No |
|
IN_PROGRESS |
Dispositivo | No |
|
TIMED_OUT |
Dispositivo e cloud | No |
|
SUCCEEDED |
Dispositivo | Sì | Non applicabile |
FAILED |
Dispositivo | Sì | Non applicabile |
REJECTED |
Dispositivo | Sì | Non applicabile |
I dispositivi possono pubblicare aggiornamenti sullo stato e sui risultati in qualsiasi momento utilizzando i comandi riservati agli argomenti MQTT. Per fornire un contesto aggiuntivo, i dispositivi possono utilizzare reasonDescription i campi reasonCode e nell'statusReasonoggetto.
Il diagramma seguente mostra le transizioni dello stato di esecuzione.
Nota
Quando non AWS IoT rileva alcuna risposta del dispositivo entro il periodo di timeout, viene impostato TIMED_OUT uno stato temporaneo che consente nuovi tentativi e modifiche dello stato. Se il dispositivo segnala esplicitamenteTIMED_OUT, questo diventa uno stato del terminale senza ulteriori transizioni. Per ulteriori informazioni, consulta Esecuzioni di comandi non terminali.
Le sezioni seguenti descrivono le esecuzioni terminali e non terminali e i relativi stati.
Esecuzioni di comandi non terminali
Un'esecuzione non è terminale se può accettare aggiornamenti dai dispositivi. Le esecuzioni non terminali sono considerate attive. I seguenti stati non sono terminali:
-
created
Quando si avvia un'esecuzione dalla AWS IoT console o si utilizza l'
StartCommandExecutionAPI, le richieste riuscite modificano lo stato in.CREATEDDa questo stato, le esecuzioni possono passare a qualsiasi altro stato non terminale o terminale. -
IN_PROGRESS
Dopo aver ricevuto il payload, i dispositivi possono iniziare a eseguire istruzioni ed eseguire azioni specifiche. Durante l'esecuzione, i dispositivi possono pubblicare risposte all'argomento relativo alla risposta ai comandi e aggiornare lo stato a
IN_PROGRESS. A partire daIN_PROGRESS, le esecuzioni possono passare a qualsiasi stato terminale o non terminale tranne.CREATEDNota
L'
UpdateCommandExecutionAPI può essere richiamata più volte con status.IN_PROGRESSSpecificate ulteriori dettagli di esecuzione utilizzando l'statusReasonoggetto. -
TIMED_OUT
Sia il cloud che il dispositivo possono attivare questo stato.
IN_PROGRESSLo stato delle esecuzioni può cambiare inCREATEDTIMED_OUTper i seguenti motivi:-
Dopo l'invio del comando, viene avviato un timer. Se il dispositivo non risponde entro la durata specificata, il cloud cambia stato in
TIMED_OUT. In questo caso, l'esecuzione non è terminale. -
Il dispositivo può sostituire lo stato di qualsiasi terminale o segnalare un timeout e impostare lo stato su.
TIMED_OUTIn questo caso, lo stato rimaneTIMED_OUT, ma i campiStatusReasondell'oggetto cambiano in base alle informazioni sul dispositivo. L'esecuzione diventa terminale.
Per ulteriori informazioni, consulta Valore del timeout e stato di TIMED_OUT esecuzione.
-
Esecuzioni di comandi da terminale
Un'esecuzione diventa terminale quando non accetta più aggiornamenti dai dispositivi. I seguenti stati sono terminali. Le esecuzioni possono passare allo stato di terminale da qualsiasi stato non terminale:CREATED,, o. IN_PROGRESS TIMED_OUT
-
RIUSCITA
Se il dispositivo completa correttamente l'esecuzione, può pubblicare una risposta all'argomento relativo alla risposta ai comandi e aggiornare lo stato su.
SUCCEEDED -
NON RIUSCITO
Quando un dispositivo non riesce a completare l'esecuzione, può pubblicare una risposta all'argomento di risposta ai comandi e aggiornare lo stato a
FAILED. Utilizzate ireasonDescriptioncampireasonCodee nell'statusReasonoggetto, o nei CloudWatch registri, per risolvere gli errori. -
REJECTED
Quando un dispositivo riceve una richiesta non valida o incompatibile, può richiamare l'API con status.
UpdateCommandExecutionREJECTEDUtilizza ireasonDescriptioncampireasonCodee nell'statusReasonoggetto o nei CloudWatch log per risolvere i problemi.