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 High-level flusso di lavoro dei comandi.
Concetti chiave dei comandi
I seguenti concetti chiave aiutano a comprendere la funzionalità Comandi. I termini vengono utilizzati in modo coerente in questa documentazione:
Comando: un modello riutilizzabile che definisce le istruzioni del dispositivo
Esecuzione: un'istanza di un comando in esecuzione su un dispositivo
Nome dell'oggetto: identificatore per i dispositivi registrati nel registro IoT
ID client: 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, consentendo il monitoraggio e il controllo remoti.
- Spazio dei nomi
-
Quando crei un comando, specificane lo spazio dei nomi. 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 il namespace.AWS-IoT-FleetWisePer ulteriori informazioni, consulta Remote Commands nella AWS IoT FleetWise Developer Guide. - Payload
-
Quando crei un comando, fornisci 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 protocollo MQTT5 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 comando con segnaposto che generano payload diversi in fase di esecuzione in base ai valori dei parametri forniti. Ad esempio, invece di creare payload separati per diversi valori di temperatura, 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 dei 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 dei 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 inviato al dispositivo e viene generato un ID di esecuzione univoco. Il dispositivo esegue il comando e segnala lo stato di avanzamento a. AWS IoT Device-side la logica determina il comportamento di esecuzione e la segnalazione dello stato degli argomenti riservati.
Condizioni relative ai valori dei parametri
Quando crei comandi con modelli di payload, definisci le condizioni di valore per convalidare i valori dei parametri prima dell'esecuzione. Le condizioni di valore assicurano 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 minore 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 superano la convalida.
Nota
Le condizioni di valore vengono valutate al momento della chiamata dell'API. StartCommandExecution Le convalide non riuscite restituiscono un errore e impediscono la creazione dell'esecuzione.
Priorità e valutazione dei valori dei parametri
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 nella richiesta di esecuzione non viene fornito un parametro,
defaultValueviene utilizzato quello del parametroNessun valore: se non viene fornito nessuno dei due, l'esecuzione ha esito negativo in quanto parametro richiesto per generare la richiesta di esecuzione
Le condizioni di valore vengono valutate in base al valore finale del parametro derivato sopra, 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 fornisci
"temperature": {"I": 75}nella richiesta, viene utilizzato 75Se si omette il parametro della temperatura, viene utilizzato il valore predefinito 72
Entrambi i valori sono convalidati rispetto alla condizione dell'intervallo [60,80]
Stati dei comandi
I comandi in your Account AWS possono essere in uno dei tre stati: Disponibile, Obsoleto o In attesa di eliminazione.
- Disponibilità
-
Una volta creato con successo, un comando è 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 il comando allo stato Disponibile.
- In attesa di eliminazione
-
Quando si contrassegna 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 di eliminazione in sospeso e viene rimosso alla scadenza del timeout.
Stato di esecuzione del comando
Quando si avvia un'esecuzione su un dispositivo di destinazione, questo 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. Usa il controllo della concorrenza per limitare le esecuzioni per dispositivo e prevenire il sovraccarico. Per il numero massimo di esecuzioni simultanee per dispositivo, vedi 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 | Iniziato da device/cloud? | Esecuzione 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 di stato e risultati in qualsiasi momento utilizzando comandi e argomenti MQTT riservati. Per fornire un contesto aggiuntivo, i dispositivi possono utilizzare i reasonDescription campi reasonCode e nell'oggetto. statusReason
Il diagramma seguente mostra le transizioni tra gli stati di esecuzione.
Nota
Quando non AWS IoT rileva alcuna risposta del dispositivo entro il periodo di timeout, viene impostato TIMED_OUT come stato temporaneo, consentendo nuovi tentativi e modifiche di stato. Se il dispositivo segnala esplicitamenteTIMED_OUT, questo diventa uno stato del terminale senza ulteriori transizioni. Per ulteriori informazioni, consulta Non-terminal esecuzioni di comandi.
Le sezioni seguenti descrivono le esecuzioni terminali e non terminali e i relativi stati.
Non-terminal esecuzioni di comandi
Un'esecuzione non è terminale se può accettare aggiornamenti dai dispositivi. Non-terminal le esecuzioni sono considerate attive. I seguenti stati non sono terminali:
-
created
Quando si avvia un'esecuzione dalla AWS IoT console o si utilizza l'
StartCommandExecutionAPI, lo stato delle richieste riuscite cambia 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 le risposte all'argomento delle risposte ai comandi e aggiornarne
IN_PROGRESSlo stato. A partire dalIN_PROGRESS, le esecuzioni possono passare a qualsiasi stato terminale o non terminale tranne.CREATEDNota
L'
UpdateCommandExecutionAPI può essere richiamata più volte con status.IN_PROGRESSSpecifica dettagli di esecuzione aggiuntivi utilizzando l'statusReasonoggetto. -
TIMED_OUT
Sia il cloud che il dispositivo possono attivare questo stato. Le esecuzioni in
CREATEDoIN_PROGRESSlo stato possono cambiareTIMED_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ò sovrascrivere lo stato impostando uno stato del terminale o segnalare un timeout e impostare lo stato su.
TIMED_OUTIn questo caso, lo stato rimaneTIMED_OUT, ma i campiStatusReasonoggetto cambiano in base alle informazioni sul dispositivo. L'esecuzione diventa terminale.
Per ulteriori informazioni, consulta Valore di timeout e stato di esecuzione TIMED_OUT.
-
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 agli stati 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 di risposta ai comandi e aggiornare lo stato in.
SUCCEEDED -
NON RIUSCITO
Quando un dispositivo non riesce a completare l'esecuzione, può pubblicare una risposta all'argomento di risposta ai comandi e aggiornare
FAILEDlo stato su. Utilizza ireasonDescriptioncampireasonCodee nell'statusReasonoggetto o nei CloudWatch log per risolvere i problemi. -
REJECTED
Quando un dispositivo riceve una richiesta non valida o incompatibile, può richiamare l'API con lo stato.
UpdateCommandExecutionREJECTEDUtilizza ireasonDescriptioncampireasonCodee nell'statusReasonoggetto o nei CloudWatch log per risolvere i problemi.