Comandi, concetti e stato - AWS IoT Core

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

  1. Crea un comando con un payload contenente le configurazioni necessarie per l'esecuzione sul dispositivo.

  2. Specificate il dispositivo di destinazione che riceverà il payload ed eseguirà le azioni.

  3. 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-IoT nomi predefinito e fornite un payload o un payloadTemplate. Per AWS IoT FleetWise i comandi, utilizzate lo spazio dei nomi. AWS-IoT-FleetWise Per 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 specificato

  • NOT_EQUALS- Il valore non deve essere uguale al numero specificato

  • GREATER_THAN- Il valore deve essere maggiore del numero specificato

  • GREATER_THAN_EQUALS- Il valore deve essere maggiore o uguale al numero specificato

  • LESS_THAN- Il valore deve essere inferiore al numero specificato

  • LESS_THAN_EQUALS- Il valore deve essere inferiore o uguale al numero specificato

  • IN_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 specificati

  • NOT_IN_SET- Il valore non deve corrispondere a nessuno dei numeri specificati

Tipo di stringa (STRING)
  • EQUALS- Il valore deve essere uguale alla stringa specificata

  • NOT_EQUALS- Il valore non deve essere uguale alla stringa specificata

  • IN_SET- Il valore deve corrispondere a una delle stringhe specificate

  • NOT_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à:

  1. Parametri della richiesta di esecuzione: i valori forniti nella StartCommandExecution richiesta hanno la massima priorità

  2. Valori predefiniti del comando: se non viene fornito un parametro nella richiesta di esecuzione, defaultValue viene utilizzato quello del parametro

  3. Nessun 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 75

  • Se 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 e origine dell'esecuzione del comando
Stato di esecuzione del comando Avviato dal dispositivo/cloud? Esecuzione del terminale? Transizioni di stato consentite
CREATED Cloud No
  • IN_PROGRESS

  • RIUSCITA

  • NON RIUSCITO

  • REJECTED

  • TIMED_OUT

IN_PROGRESS Dispositivo No
  • IN_PROGRESS

  • RIUSCITA

  • NON RIUSCITO

  • REJECTED

  • TIME_OUT

TIMED_OUT Dispositivo e cloud No
  • RIUSCITA

  • NON RIUSCITO

  • REJECTED

  • TIME_OUT

SUCCEEDED Dispositivo Non applicabile
FAILED Dispositivo Non applicabile
REJECTED Dispositivo 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.

Immagine che mostra come lo stato di esecuzione di un comando passa da uno stato all'altro.
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. CREATED Da 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 aIN_PROGRESS. A partire daIN_PROGRESS, le esecuzioni possono passare a qualsiasi stato terminale o non terminale tranne. CREATED

    Nota

    L'UpdateCommandExecutionAPI può essere richiamata più volte con status. IN_PROGRESS Specificate 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 in CREATED TIMED_OUT per 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 inTIMED_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_OUT In questo caso, lo stato rimaneTIMED_OUT, ma i campi StatusReason dell'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 aFAILED. Utilizzate i reasonDescription campi reasonCode e 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. UpdateCommandExecution REJECTED Utilizza i reasonDescription campi reasonCode e nell'statusReasonoggetto o nei CloudWatch log per risolvere i problemi.