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/ |
Copia shadow senza nome (classica) |
$aws/things/ |
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
per il tipo di copia shadow a cui si desidera fare riferimento, sostituire ShadowTopicPrefix
e thingName
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.shadowName
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 |
---|---|---|
|
La |
Le operazioni necessarie per gestire la copia shadow eliminata, ad esempio interrompere la pubblicazione degli aggiornamenti. |
|
La |
Rispondere al messaggio di errore nel corpo del messaggio. |
|
La |
Le operazioni necessarie per elaborare il documento di stato nel corpo del messaggio. |
|
La |
Rispondere al messaggio di errore nel corpo del messaggio. |
|
La |
Verificare che i dati aggiornati nel corpo del messaggio corrispondano allo stato del dispositivo. |
|
La |
Rispondere al messaggio di errore nel corpo del messaggio. |
|
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. |
|
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:
-
Lettura di tutti i messaggi /update/delta ricevuti e sincronizzazione dello stato del dispositivo in modo che corrisponda.
-
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. |
|
Un documento shadow con la proprietà |
Il dispositivo potrebbe non essere sincronizzato con la copia shadow. |
|
(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. |
|
(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:
-
Lettura di tutti i messaggi /update/delta ricevuti e sincronizzazione dello stato del dispositivo in modo che corrisponda.
-
Pubblicazione di un messaggio /update con un corpo del messaggio
reported
con lo stato corrente del dispositivo.