AWS IoT Servizio Device Shadow - 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à.

AWS IoT Servizio Device Shadow

Il servizio AWS IoT Device Shadow aggiunge ombre agli oggetti AWS IoT oggetto. Le ombre possono rendere disponibile lo stato di un dispositivo ad app e altri servizi, indipendentemente dal fatto che il dispositivo sia connesso AWS IoT o meno. AWS IoT gli oggetti thing possono avere più ombre denominate in modo che la soluzione IoT abbia più opzioni per connettere i dispositivi ad altre app e servizi.

AWS IoT gli oggetti thing non hanno ombre finché non vengono creati esplicitamente. Le ombre possono essere create, aggiornate ed eliminate utilizzando la console. AWS IoT Dispositivi, altri client web e servizi possono creare, aggiornare ed eliminare copie shadow utilizzando MQTT e gli argomenti MQTT riservati, HTTP utilizzando l'API REST Device Shadow e AWS CLI per AWS IoT. Poiché le ombre vengono archiviate AWS nel cloud, possono raccogliere e segnalare dati sullo stato del dispositivo da app e altri servizi cloud, indipendentemente dal fatto che il dispositivo sia connesso o meno.

Uso delle copie shadow

Le copie shadow forniscono uno store dati affidabile per dispositivi, app e altri servizi cloud per condividere i dati. Consentono a dispositivi, app e altri servizi cloud di connettersi e disconnettersi senza perdere lo stato di un dispositivo.

Mentre i dispositivi, le app e gli altri servizi cloud sono connessi AWS IoT, possono accedere e controllare lo stato corrente di un dispositivo attraverso le sue ombre. Ad esempio, un'app può richiedere una modifica dello stato di un dispositivo aggiornando un'ombra. AWS IoT pubblica un messaggio che indica la modifica apportata al dispositivo. Il dispositivo riceve questo messaggio, aggiorna lo stato in modo che corrisponda e pubblica un messaggio con lo stato aggiornato. Il servizio Device Shadow riflette questo stato aggiornato nella copia shadow corrispondente. L'app può sottoscrivere l'aggiornamento della copia shadow oppure può interrogare la copia shadow per il suo stato corrente.

Quando un dispositivo va offline, un'app può continuare a comunicare con le ombre del dispositivo AWS IoT e con le ombre del dispositivo. Quando il dispositivo si riconnette, riceve lo stato corrente delle sue copie shadow in modo che possa aggiornarne lo stato affinché corrisponda a quello delle sue copie shadow, quindi pubblicare un messaggio con il relativo stato aggiornato. Allo stesso modo, quando un'app non è in linea e lo stato del dispositivo cambia mentre è offline, il dispositivo mantiene aggiornata la copia shadow in modo che l'app possa interrogare le copie shadow per il suo stato corrente quando si riconnette.

Se i tuoi dispositivi sono spesso offline e desideri configurarli in modo che ricevano messaggi delta dopo la riconnessione, puoi utilizzare la funzione di sessione persistente. Per ulteriori informazioni sul periodo di scadenza della sessione persistente, consulta la sezione Periodo di scadenza della sessione persistente.

Scelta di utilizzare copie shadow con nome o senza nome

Il servizio Device Shadow supporta le copie shadow con nome e senza nome o classiche. Un oggetto può avere più copie shadow con nome e non più di una copia shadow senza nome. L'oggetto può anche avere una copia shadow con nome riservata, che funziona in modo simile a una copia shadow con nome, tranne che non è possibile aggiornare il nome. Per ulteriori informazioni, consulta Copia shadow con nome riservata.

Un oggetto può avere copie shadow con nome e senza nome allo stesso tempo; tuttavia, l'API utilizzata per accedere a ciascuna è leggermente diversa, quindi sarebbe opportuno stabilire quale tipo di copia shadow funzionerebbe meglio per la soluzione e utilizzare solo quel tipo. Per ulteriori informazioni sull'API per accedere alle copie shadow, consulta Argomenti copie shadow.

Con le copie shadow con nome, è possibile creare diverse viste dello stato di un oggetto. Ad esempio, è possibile dividere un oggetto con molte proprietà in copie shadow con gruppi logici di proprietà, ognuno identificato dal nome shadow. È inoltre possibile limitare l'accesso alle proprietà raggruppandole in copie shadow diverse e utilizzando le policy per controllare l'accesso. Per ulteriori informazioni sulle policy da utilizzare con le device shadow, consulta Operazioni, risorse e chiavi di condizione per AWS IoT e Policy AWS IoT Core.

Le copie shadow classiche senza nome sono più semplici, ma un po' più limitate rispetto alle copie shadow con nome. Ogni AWS IoT oggetto può avere solo un'ombra senza nome. Se si prevede che la soluzione IoT abbia una necessità limitata di dati di copie shadow, questo potrebbe essere il modo in cui iniziare a utilizzare le copie shadow. Tuttavia, se si pensa di voler aggiungere altre copie shadow in futuro, prendere in considerazione l'utilizzo di copie shadow con nome fin dall'inizio.

L'indicizzazione del parco istanze supporta copie shadow senza nome e con nome in modo diverso. Per ulteriori informazioni, consulta Gestione dell'indicizzazione del parco istanze.

Accesso alle copie shadow

Ogni copia shadow dispone di un argomento MQTT e di un URL HTTP riservato che supporta le operazioni get, update e delete sulla copia shadow.

Le copie shadow utilizzano i documenti shadow JSON per archiviare e recuperare i dati. Il documento di una copia shadow contiene una proprietà di stato che descrive questi aspetti dello stato del dispositivo:

  • desired

    Le app specificano gli stati desiderati delle proprietà del dispositivo aggiornando l'oggetto desired.

  • reported

    I dispositivi segnalano il loro stato corrente nell'oggetto reported.

  • delta

    AWS IoT riporta le differenze tra lo stato desiderato e quello riportato nell'deltaoggetto.

I dati archiviati in una copia shadow sono determinati dalla proprietà stato del corpo del messaggio dell'operazione di aggiornamento. Le operazioni di aggiornamento successive possono modificare i valori di un oggetto dati esistente, nonché aggiungere ed eliminare chiavi e altri elementi nell'oggetto stato della copia shadow. Per ulteriori informazioni sull'accesso alle copie shadow, consulta Utilizzo delle copie shadow nei dispositivi e Utilizzo delle copie shadow in app e servizi.

Importante

L'autorizzazione a effettuare richieste di aggiornamento deve essere limitata alle app e ai dispositivi attendibili. Ciò impedisce che la proprietà stato della copia shadow venga modificata in modo imprevisto; in caso contrario, i dispositivi e le app che utilizzano la copia shadow devono essere progettati in modo che le chiavi nella proprietà stato vengano modificate.

Utilizzo delle copie shadow in dispositivi, app e altri servizi cloud

L'utilizzo delle copie shadow in dispositivi, app e altri servizi cloud richiede coerenza e coordinamento. Il servizio AWS IoT Device Shadow memorizza lo stato shadow, invia messaggi quando lo stato shadow cambia e risponde ai messaggi che ne modificano lo stato. I dispositivi, le app e altri servizi cloud nella soluzione IoT devono gestirne lo stato e mantenerlo coerente con lo stato della copia shadow del dispositivo.

I dati dello stato della copia shadow sono dinamici e possono essere modificati da dispositivi, app e altri servizi cloud con autorizzazione per accedere alla copia shadow. Per questo motivo, è importante considerare come ogni dispositivo, app e altro servizio cloud interagiranno con la copia shadow. Ad esempio:

  • I dispositivi devono scrivere solo sulla proprietà reported dello stato shadow quando comunicano i dati di stato alla copia shadow.

  • Le app e gli altri servizi cloud devono scrivere solo nella proprietà desired quando comunicano le richieste di modifica dello stato al dispositivo tramite la copia shadow.

Importante

I dati contenuti in un oggetto dati shadow sono indipendenti da quelli di altre copie shadow e altre proprietà oggetto, ad esempio gli attributi di un oggetto e il contenuto dei messaggi MQTT che il dispositivo di un oggetto potrebbe pubblicare. Un dispositivo può, tuttavia, segnalare gli stessi dati in diversi argomenti MQTT e copie shadow, se necessario.

Un dispositivo che supporta più copie shadow deve mantenere la coerenza dei dati segnalati nelle diverse copie shadow.

Ordine dei messaggi

Non è garantito che i messaggi del AWS IoT servizio arrivino al dispositivo in un ordine specifico. Lo scenario seguente mostra ciò che accade in questo caso.

Documento sullo stato iniziale:

{ "state": { "reported": { "color": "blue" } }, "version": 9, "timestamp": 123456776 }

Aggiornamento 1:

{ "state": { "desired": { "color": "RED" } }, "version": 10, "timestamp": 123456777 }

Aggiornamento 2:

{ "state": { "desired": { "color": "GREEN" } }, "version": 11, "timestamp": 123456778 }

Documento sullo stato finale:

{ "state": { "reported": { "color": "GREEN" } }, "version": 12, "timestamp": 123456779 }

Il risultato è costituito da due messaggi delta:

{ "state": { "color": "RED" }, "version": 11, "timestamp": 123456778 }
{ "state": { "color": "GREEN" }, "version": 12, "timestamp": 123456779 }

Il dispositivo potrebbe ricevere questi messaggi non in ordine. Poiché lo stato nei messaggi è cumulativo, un dispositivo può scartare senza problemi qualsiasi messaggio contenente un numero di versione precedente a quello monitorato. Se il dispositivo riceve il delta per la versione 12 prima della versione 11, può scartare senza problemi il messaggio con la versione 11.

Taglio dei messaggi delle copie shadow

Per ridurre le dimensioni dei messaggi delle copie shadow inviati al dispositivo, definisci una regola che seleziona solo i campi necessari per il dispositivo, quindi ripubblica il messaggio in un argomento MQTT in cui il dispositivo è in ascolto.

La regola viene specificata in formato JSON e dovrebbe essere simile a quanto segue:

{ "sql": "SELECT state, version FROM '$aws/things/+/shadow/update/delta'", "ruleDisabled": false, "actions": [ { "republish": { "topic": "${topic(3)}/delta", "roleArn": "arn:aws:iam:123456789012:role/my-iot-role" } } ] }

L'istruzione SELECT determina i campi del messaggio che verranno ripubblicati nell'argomento specificato. Il carattere jolly "+" permette di trovare la corrispondenza con tutti i nomi delle copie shadow. La regola specifica che tutti i messaggi corrispondenti devono essere ripubblicati nell'argomento specificato. In questo caso, la funzione "topic()" viene usata per specificare l'argomento su cui ripetere la pubblicazione. topic(3) restituisce il nome nell'oggetto nell'argomento originale. Per ulteriori informazioni sulla creazione di regole, consulta Regole per AWS IoT.