Utilizzo delle copie shadow nei dispositivi - 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à.

Utilizzo delle copie shadow nei dispositivi

Questa sezione descrive le comunicazioni dei dispositivi con le ombre tramite MQTT messaggi, il metodo preferito dai dispositivi per comunicare con il servizio AWS IoT Device Shadow.

Le comunicazioni shadow emulano un modello di richiesta/risposta utilizzando il modello di comunicazione pubblica/sottoscrizione di. MQTT Ogni operazione copia shadow è costituita da un argomento di richiesta, un argomento di risposta riuscita (accepted) e un argomento di risposta agli errori (rejected).

Se si desidera che app e servizi siano in grado di determinare se un dispositivo è connesso, consulta Rilevamento di un dispositivo connesso.

Importante

Poiché MQTT utilizza un modello di comunicazione di pubblicazione/sottoscrizione, è necessario sottoscrivere gli argomenti di risposta prima di pubblicare un argomento di richiesta. In caso contrario, non riceverai la risposta alla richiesta pubblicata.

Se usi un SDK per dispositivi AWS IoTper chiamare il servizio Device ShadowAPIs, questo viene gestito automaticamente.

Gli esempi di questa sezione utilizzano una forma abbreviata dell'argomento in cui ShadowTopicPrefix può fare riferimento a un'ombra con nome o senza nome, come descritto in questa tabella.

Le copie shadow possono essere con nome o senza nome (classiche). Gli argomenti utilizzati da ciascuno differiscono solo nel prefisso dell'argomento. Questa tabella mostra il prefisso dell'argomento utilizzato da ogni tipo di copia shadow.

ShadowTopicPrefix value Tipo di copia shadow
$aws/things/thingName/shadow Copia shadow senza nome (classica)
$aws/things/thingName/shadow/name/shadowName Copia shadow con nome
Importante

Assicurati che l'uso delle copie shadow da parte dell'app o del servizio sia coerente e supportato dalle implementazioni corrispondenti nei tuoi dispositivi. Considera ad esempio, come vengono create, aggiornate ed eliminate le copie shadow. Considera inoltre come vengono gestiti gli aggiornamenti nel dispositivo e nelle app o nei servizi che accedono al dispositivo tramite una copia shadow. La progettazione dovrebbe chiarire il modo in cui lo stato del dispositivo viene aggiornato e segnalato e il modo in cui le app e i servizi interagiscono con il dispositivo e le relative copie shadow.

Per creare un argomento completo, selezionare ShadowTopicPrefix per il tipo di copia shadow a cui si desidera fare riferimento, sostituire thingName e shadowName se applicabile, con i relativi valori corrispondenti, quindi aggiungerlo con lo stub dell'argomento, come illustrato nella tabella seguente. Ricorda che gli argomenti prevedono una distinzione tra lettere maiuscole e minuscole.

Consulta Argomenti copie shadow per ulteriori informazioni sugli argomenti riservati per le copie shadow.

Inizializzazione del dispositivo alla prima connessione a AWS IoT

Dopo la registrazione AWS IoT, il dispositivo dovrebbe abbonarsi a questi MQTT messaggi per gli shadows che supporta.

Argomento Significato Operazione che un dispositivo dovrebbe intraprendere quando riceve questo argomento

ShadowTopicPrefix/delete/accepted

La delete richiesta è stata accettata e l'ombra è stata AWS IoT eliminata.

Le operazioni necessarie per gestire la copia shadow eliminata, ad esempio interrompere la pubblicazione degli aggiornamenti.

ShadowTopicPrefix/delete/rejected

La delete richiesta è stata rifiutata AWS IoT e l'ombra non è stata eliminata. Il corpo del messaggio contiene le informazioni sull'errore.

Rispondere al messaggio di errore nel corpo del messaggio.

ShadowTopicPrefix/get/accepted

La get richiesta è stata accettata da AWS IoT e il corpo del messaggio contiene il documento shadow corrente.

Le operazioni necessarie per elaborare il documento di stato nel corpo del messaggio.

ShadowTopicPrefix/get/rejected

La get richiesta è stata rifiutata da AWS IoT e il corpo del messaggio contiene le informazioni sull'errore.

Rispondere al messaggio di errore nel corpo del messaggio.

ShadowTopicPrefix/update/accepted

La update richiesta è stata accettata da AWS IoT e il corpo del messaggio contiene il documento shadow corrente.

Verificare che i dati aggiornati nel corpo del messaggio corrispondano allo stato del dispositivo.

ShadowTopicPrefix/update/rejected

La update richiesta è stata rifiutata da AWS IoT e il corpo del messaggio contiene le informazioni sull'errore.

Rispondere al messaggio di errore nel corpo del messaggio.

ShadowTopicPrefix/update/delta

Il documento ombra è stato aggiornato tramite una richiesta a AWS IoT e il corpo del messaggio contiene le modifiche richieste.

Aggiornare lo stato del dispositivo in modo che corrisponda allo stato desiderato nel corpo del messaggio.

ShadowTopicPrefix/update/documents

Recentemente è stato completato un aggiornamento alla copia shadow e il corpo del messaggio contiene il documento shadow corrente.

Verificare che lo stato aggiornato nel corpo del messaggio corrisponda allo stato del dispositivo.

Dopo aver sottoscritto i messaggi nella tabella precedente per ogni copia shadow, il dispositivo deve verificare se le copie shadow supportate sono già state create pubblicando un argomento /get per ogni copia shadow. Se viene ricevuto un messaggio /get/accepted, il corpo del messaggio contiene il documento shadow, che il dispositivo può utilizzare per inizializzare il suo stato. Se viene ricevuto un messaggio /get/rejected, la copia shadow deve essere creata pubblicando un messaggio /update con lo stato corrente del dispositivo.

Supponiamo ad esempio che tu abbia un oggetto My_IoT_Thing che non ha copie shadow classiche o con nome. Se ora pubblichi una richiesta /get sull'argomento riservato $aws/things/My_IoT_Thing/shadow/get, restituisce un errore sull'argomento $aws/things/My_IoT_Thing/shadow/get/rejected perché l'oggetto non ha copie shadow. Per risolvere questo errore, prima pubblica un messaggio /update utilizzando l'argomento $aws/things/My_IoT_Thing/shadow/update con lo stato attuale del dispositivo, ad esempio il seguente payload.

{ "state": { "reported": { "welcome": "aws-iot", "color": "yellow" } } }

Ora viene creata una copia shadow classica per l'oggetto e il messaggio viene pubblicato sull'argomento $aws/things/My_IoT_Thing/shadow/update/accepted. Se pubblichi sull'argomento $aws/things/My_IoT_Thing/shadow/get, restituisce una risposta all'argomento $aws/things/My_IoT_Thing/shadow/get/accepted con lo stato del dispositivo.

Per le copie shadow con nome, innanzitutto devi creare la copia shadow con nome o pubblicare un aggiornamento con il nome della copia shadow prima di utilizzare la richiesta get. Ad esempio, per creare una copia shadow con nome namedShadow1, prima pubblica le informazioni sullo stato del dispositivo sull'argomento $aws/things/My_IoT_Thing/shadow/name/namedShadow1/update. Per recuperare le informazioni sullo stato, utilizza la richiesta /get per la copia shadow con nome $aws/things/My_IoT_Thing/shadow/name/namedShadow1/get.

Elaborazione dei messaggi mentre il dispositivo è connesso a AWS IoT

Mentre un dispositivo è connesso AWS IoT, può ricevere messaggi /update/delta e dovrebbe mantenere lo stato del dispositivo corrispondente ai cambiamenti nelle sue ombre mediante:

  1. Lettura di tutti i messaggi /update/delta ricevuti e sincronizzazione dello stato del dispositivo in modo che corrisponda.

  2. Pubblicazione di un messaggio /update con un corpo del messaggio reported con lo stato corrente del dispositivo, ogni volta che lo stato del dispositivo cambia.

Quando un dispositivo è connesso, dovrebbe pubblicare questi messaggi quando indicato.

Indicazione Argomento Payload

Lo stato del dispositivo è cambiato.

ShadowTopicPrefix/update

Un documento shadow con la proprietà reported.

Il dispositivo potrebbe non essere sincronizzato con la copia shadow.

ShadowTopicPrefix/get

(vuoto)

Un'operazione sul dispositivo indica che una copia shadow non sarà più supportata dal dispositivo, ad esempio quando il dispositivo viene rimosso o sostituito.

ShadowTopicPrefix/delete

(vuoto)

Elaborazione dei messaggi quando il dispositivo si riconnette a AWS IoT

Quando un dispositivo con una o più ombre si connette AWS IoT, dovrebbe sincronizzare il suo stato con quello di tutte le ombre supportate mediante:

  1. Lettura di tutti i messaggi /update/delta ricevuti e sincronizzazione dello stato del dispositivo in modo che corrisponda.

  2. Pubblicazione di un messaggio /update con un corpo del messaggio reported con lo stato corrente del dispositivo.