View a markdown version of this page

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 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-IoT nomi predefinito e fornite un payload o un PayloadTemplate. Per AWS IoT FleetWise i comandi, utilizzate il namespace. AWS-IoT-FleetWise Per 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 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 minore 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 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à:

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

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

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

  • Se 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 e origine dell'esecuzione del comando
Stato di esecuzione del comando Iniziato da device/cloud? Esecuzione 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

  • SCADUTO

TIMED_OUT Dispositivo e cloud No
  • RIUSCITA

  • NON RIUSCITO

  • REJECTED

  • TIMED_OUT

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.

L'immagine 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 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. 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 le risposte all'argomento delle risposte ai comandi e aggiornarne IN_PROGRESS lo stato. A partire dalIN_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 Specifica dettagli di esecuzione aggiuntivi utilizzando l'statusReasonoggetto.

  • TIMED_OUT

    Sia il cloud che il dispositivo possono attivare questo stato. Le esecuzioni in CREATED o IN_PROGRESS lo stato possono cambiare 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ò sovrascrivere lo stato impostando uno stato del terminale o segnalare un timeout e impostare lo stato su. TIMED_OUT In questo caso, lo stato rimaneTIMED_OUT, ma i campi StatusReason oggetto 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 FAILED lo stato su. Utilizza i reasonDescription campi reasonCode e 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. UpdateCommandExecution REJECTED Utilizza i reasonDescription campi reasonCode e nell'statusReasonoggetto o nei CloudWatch log per risolvere i problemi.