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à.
Simulazione delle comunicazioni del servizio Device Shadow
In questo argomento viene illustrato come il servizio Device Shadow funge da intermediario e consente a dispositivi e app di utilizzare una copia shadow per aggiornare, archiviare e recuperare lo stato di un dispositivo.
Per dimostrare l'interazione descritta in questo argomento e per approfondirla, avrai bisogno di un sistema Account AWS e di un sistema su cui eseguire. AWS CLI Se non si dispone di questi, è ancora possibile vedere l'interazione negli esempi di codice.
In questo esempio, la AWS IoT console rappresenta il dispositivo. AWS CLI Rappresenta l'app o il servizio che accede al dispositivo tramite l'ombra. L' AWS CLI interfaccia è molto simile a quella API che un'app potrebbe utilizzare per comunicare AWS IoT. Il dispositivo in questo esempio è una lampadina intelligente e l'app visualizza lo stato della lampadina e può cambiare lo stato della lampadina.
Impostazione della simulazione
Queste procedure inizializzano la simulazione aprendo la console AWS IoT
Per configurare l'ambiente di simulazione
-
Avrai bisogno di un Account AWS per eseguire autonomamente gli esempi tratti da questo argomento. Se non ne hai uno Account AWS, creane uno, come descritto inConfigurare Account AWS.
-
Apri la AWS IoT console
e, nel menu a sinistra, scegli Test per aprire il MQTTclient. -
In un'altra finestra, aprire una finestra di terminale su un sistema su cui sia installata l' AWS CLI .
Dovresti avere due finestre aperte: una con la AWS IoT console nella pagina Test e una con il prompt della riga di comando.
Inizializzare il dispositivo
In questa simulazione, lavoreremo con un oggetto denominato oggetto e la sua ombra denominata 1. mySimulatedThingsimShadow
Creazione di un oggetto e della relativa policy IoT
Per creare un oggetto, nella console AWS IoT :
-
Scegli Gestisci, quindi seleziona Oggetti.
-
Fai clic sul pulsante Crea se gli elementi sono elencati, altrimenti fai clic su Registra una singola cosa per creare una singola AWS IoT cosa.
-
Inserisci il nome
mySimulatedThing
, lascia le altre impostazioni predefinite e quindi fai clic su Successivo. -
Utilizza la creazione di certificati con un solo clic per generare i certificati che autenticheranno la connessione del dispositivo a AWS IoT. Fare clic su Attiva per attivare il certificato.
-
Puoi allegare la politica
My_IoT_Policy
che autorizza il dispositivo a pubblicare e sottoscrivere gli argomenti MQTT riservati. Per passaggi più dettagliati su come creare un AWS IoT oggetto e su come creare questa politica, consultaCrea un oggetto.
Creazione di una copia shadow con nome per un oggetto
Puoi creare una copia shadow con nome per un oggetto pubblicando una richiesta di aggiornamento sull'argomento $aws/things/mySimulatedThing/shadow/name/simShadow1/update
come descritto di seguito.
Oppure, per creare un'ombra con nome:
-
Nella console AWS IoT , scegli l'oggetto dall'elenco degli oggetti visualizzato e quindi scegli Shadows (Copie shadow).
-
Scegli Aggiungi una copia shadow, inserisci il nome
simShadow1
, quindi scegli Crea per aggiungere la copia shadow.
Iscriviti e pubblica su MQTT argomenti riservati
Nella console, sottoscrivi gli argomenti MQTT shadow riservati. Questi argomenti sono le risposte alle operazioni get
, update
e delete
, in modo che il dispositivo sia pronto a ricevere le risposte dopo la pubblicazione di un'operazione.
Per sottoscrivere un MQTT argomento nel MQTTclient
-
Nel MQTTclient, scegli Sottoscrivi un argomento.
-
Inserisci gli argomenti
get
,update
edelete
a cui vuoi effettuare la sottoscrizione. Copia un argomento alla volta dall'elenco seguente, incollalo nel campo Filtro di argomenti, quindi clicca su Sottoscrivi. Verranno visualizzati gli argomenti sotto Sottoscrizioni.-
$aws/things/mySimulatedThing/shadow/name/simShadow1/delete/accepted
-
$aws/things/mySimulatedThing/shadow/name/simShadow1/delete/rejected
-
$aws/things/mySimulatedThing/shadow/name/simShadow1/get/accepted
-
$aws/things/mySimulatedThing/shadow/name/simShadow1/get/rejected
-
$aws/things/mySimulatedThing/shadow/name/simShadow1/update/accepted
-
$aws/things/mySimulatedThing/shadow/name/simShadow1/update/rejected
-
$aws/things/mySimulatedThing/shadow/name/simShadow1/update/delta
-
$aws/things/mySimulatedThing/shadow/name/simShadow1/update/documents
A questo punto, il dispositivo simulato è pronto a ricevere gli argomenti pubblicati da AWS IoT.
-
Per pubblicare su un MQTT argomento nel MQTTclient
Dopo l'inizializzazione e la sottoscrizione agli argomenti di risposta, il dispositivo deve interrogare le copie shadow supportate. Questa simulazione supporta solo un'ombra, l'ombra che supporta un oggetto denominato, mySimulatedThing, named, simShadow1.
Per ottenere lo stato dell'ombra corrente dal client MQTT
-
Nel MQTTclient, scegli Pubblica su un argomento.
-
Sotto Pubblica, inserisci l'argomento seguente ed elimina qualsiasi contenuto dalla finestra del corpo del messaggio sottostante in cui è stato inserito l'argomento da ottenere. È quindi possibile scegliere Pubblicazione nell'argomento per pubblicare la richiesta.
$aws/things/mySimulatedThing/shadow/name/simShadow1/get
.Se non hai creato un nome shadow
simShadow1
, riceverai un messaggio nell'argomento$aws/things/mySimulatedThing/shadow/name/simShadow1/get/rejected
, e ilcode
sarà404
, come in questo esempio in cui la copia shadow non è stata creata, quindi verrà creata in seguito.{ "code": 404, "message": "No shadow exists with name: 'simShadow1'" }
Per creare una copia shadow con lo stato corrente del dispositivo
-
Nel MQTTclient, scegli Pubblica su un argomento e inserisci questo argomento:
$aws/things/mySimulatedThing/shadow/name/simShadow1/update
-
Nella finestra del corpo del messaggio sotto la quale hai inserito l'argomento, inserisci questo documento ombra per mostrare che il dispositivo riporta il suo ID e il suo colore attuale in RGB valori. Scegli Pubblica per pubblicare la richiesta.
{ "state": { "reported": { "ID": "SmartLamp21", "ColorRGB": [ 128, 128, 128 ] } }, "clientToken": "426bfd96-e720-46d3-95cd-014e3ef12bb6" }
Se viene visualizzato un messaggio nell'argomento:
-
$aws/things/mySimulatedThing/shadow/name/simShadow1/update/accepted
: significa che la copia shadow è stata creata e che il corpo del messaggio contiene il documento shadow corrente. -
$aws/things/mySimulatedThing/shadow/name/simShadow1/update/rejected
: esamina l'errore nel corpo del messaggio. -
$aws/things/mySimulatedThing/shadow/name/simShadow1/get/accepted
: la copia shadow esiste già e il corpo del messaggio ha lo stato shadow corrente, come in questo esempio. Con questo, è possibile impostare il dispositivo o confermare che corrisponda allo stato della copia shadow.{ "state": { "reported": { "ID": "SmartLamp21", "ColorRGB": [ 128, 128, 128 ] } }, "metadata": { "reported": { "ID": { "timestamp": 1591140517 }, "ColorRGB": [ { "timestamp": 1591140517 }, { "timestamp": 1591140517 }, { "timestamp": 1591140517 } ] } }, "version": 3, "timestamp": 1591140517, "clientToken": "426bfd96-e720-46d3-95cd-014e3ef12bb6" }
Inviare un aggiornamento dall'app
Questa sezione lo utilizza AWS CLI per dimostrare come un'app può interagire con un'ombra.
Per ottenere lo stato attuale dell'ombra, utilizzare AWS CLI
Nella riga di comando, immettere questo comando:
aws iot-data get-thing-shadow --thing-name mySimulatedThing --shadow-name simShadow1 /dev/stdout
Sulle piattaforme Windows è possibile usare con
al posto di /dev/stdout
.
aws iot-data get-thing-shadow --thing-name mySimulatedThing --shadow-name simShadow1 con
Poiché la copia shadow esiste ed è stata inizializzata dal dispositivo per riflettere lo stato corrente, deve restituire il seguente documento shadow.
{ "state": { "reported": { "ID": "SmartLamp21", "ColorRGB": [ 128, 128, 128 ] } }, "metadata": { "reported": { "ID": { "timestamp": 1591140517 }, "ColorRGB": [ { "timestamp": 1591140517 }, { "timestamp": 1591140517 }, { "timestamp": 1591140517 } ] } }, "version": 3, "timestamp": 1591141111 }
L'app può utilizzare questa risposta per inizializzare la sua rappresentazione dello stato del dispositivo.
Se l'app aggiorna lo stato, ad esempio quando un utente finale cambia il colore della lampadina intelligente in giallo, l'app invierà un comando update-thing-shadow. Questo comando corrisponde a UpdateThingShadow
RESTAPI.
Per aggiornare una copia shadow da un'app
Nella riga di comando, immettere questo comando:
In caso di esito positivo, questo comando deve restituire il seguente documento shadow.
{ "state": { "desired": { "ColorRGB": [ 255, 255, 0 ] } }, "metadata": { "desired": { "ColorRGB": [ { "timestamp": 1591141596 }, { "timestamp": 1591141596 }, { "timestamp": 1591141596 } ] } }, "version": 4, "timestamp": 1591141596, "clientToken": "21b21b21-bfd2-4279-8c65-e2f697ff4fab" }
Rispondere all'aggiornamento nel dispositivo
Tornando al MQTTclient nella AWS console, dovrebbero essere visualizzati i messaggi AWS IoT pubblicati in base al comando di aggiornamento emesso nella sezione precedente.
Per visualizzare i messaggi di aggiornamento nel MQTTclient
Nel MQTTclient, scegli $aws/things/ mySimulatedThing /shadow/name/ 1/update/delta nella colonna simShadow Sottoscrizioni. Se il nome dell'argomento viene troncato, è possibile metterlo in pausa per visualizzare l'argomento completo. Nel registro degli argomenti di questo argomento, dovresti vedere un messaggio /delta
simile a questo.
{ "version": 4, "timestamp": 1591141596, "state": { "ColorRGB": [ 255, 255, 0 ] }, "metadata": { "ColorRGB": [ { "timestamp": 1591141596 }, { "timestamp": 1591141596 }, { "timestamp": 1591141596 } ] }, "clientToken": "21b21b21-bfd2-4279-8c65-e2f697ff4fab" }
Il dispositivo elaborerà il contenuto di questo messaggio per impostare lo stato del dispositivo in modo che corrisponda allo stato desired
del messaggio.
Dopo che il dispositivo ha aggiornato lo stato in modo che corrisponda allo stato del messaggio, deve rispedire il nuovo desired
stato segnalato pubblicando un messaggio di aggiornamento. AWS IoT Questa procedura simula questo nel MQTTclient.
Per aggiornare la copia shadow dal dispositivo
-
Nel MQTTclient, scegli Pubblica su un argomento.
-
Nella finestra del corpo del messaggio, nel campo dell'argomento sopra la finestra del corpo del messaggio, inserisci l'argomento della copia shadow seguito dall'operazione
/update
:$aws/things/mySimulatedThing/shadow/name/simShadow1/update
e nel corpo del messaggio, inserisci questo documento shadow aggiornato, che descrive lo stato corrente del dispositivo. Scegli Pubblica per pubblicare lo stato aggiornato del dispositivo.{ "state": { "reported": { "ColorRGB": [255,255,0] } }, "clientToken": "a4dc2227-9213-4c6a-a6a5-053304f60258" }
Se il messaggio è stato ricevuto correttamente da AWS IoT, dovresti vedere una nuova risposta nel log dei messaggi $aws/things/ mySimulatedThing /shadow/name/ simShadow 1/update/accepted del client con lo stato attuale dell'ombra, come in questo esempio. MQTT
{ "state": { "reported": { "ColorRGB": [ 255, 255, 0 ] } }, "metadata": { "reported": { "ColorRGB": [ { "timestamp": 1591142747 }, { "timestamp": 1591142747 }, { "timestamp": 1591142747 } ] } }, "version": 5, "timestamp": 1591142747, "clientToken": "a4dc2227-9213-4c6a-a6a5-053304f60258" }
Un aggiornamento riuscito allo stato segnalato del dispositivo comporta AWS IoT anche l'invio di una descrizione completa dello stato ombra in un messaggio all'argomento, ad esempio questo corpo del messaggio risultante dall'aggiornamento dello shadow eseguito dal dispositivo nella procedura precedente.
{ "previous": { "state": { "desired": { "ColorRGB": [ 255, 255, 0 ] }, "reported": { "ID": "SmartLamp21", "ColorRGB": [ 128, 128, 128 ] } }, "metadata": { "desired": { "ColorRGB": [ { "timestamp": 1591141596 }, { "timestamp": 1591141596 }, { "timestamp": 1591141596 } ] }, "reported": { "ID": { "timestamp": 1591140517 }, "ColorRGB": [ { "timestamp": 1591140517 }, { "timestamp": 1591140517 }, { "timestamp": 1591140517 } ] } }, "version": 4 }, "current": { "state": { "desired": { "ColorRGB": [ 255, 255, 0 ] }, "reported": { "ID": "SmartLamp21", "ColorRGB": [ 255, 255, 0 ] } }, "metadata": { "desired": { "ColorRGB": [ { "timestamp": 1591141596 }, { "timestamp": 1591141596 }, { "timestamp": 1591141596 } ] }, "reported": { "ID": { "timestamp": 1591140517 }, "ColorRGB": [ { "timestamp": 1591142747 }, { "timestamp": 1591142747 }, { "timestamp": 1591142747 } ] } }, "version": 5 }, "timestamp": 1591142747, "clientToken": "a4dc2227-9213-4c6a-a6a5-053304f60258" }
Osservare l'aggiornamento nell'app
L'app può ora interrogare la copia shadow per lo stato corrente come riportato dal dispositivo.
Per ottenere lo stato attuale dell'ombra, utilizzare il AWS CLI
-
Nella riga di comando, immettere questo comando:
aws iot-data get-thing-shadow --thing-name mySimulatedThing --shadow-name simShadow1 /dev/stdout
Sulle piattaforme Windows è possibile usare
con
al posto di/dev/stdout
.aws iot-data get-thing-shadow --thing-name mySimulatedThing --shadow-name simShadow1 con
-
Poiché la copia shadow è stata appena aggiornata dal dispositivo per riflettere lo stato corrente, dovrebbe restituire il seguente documento shadow.
{ "state": { "desired": { "ColorRGB": [ 255, 255, 0 ] }, "reported": { "ID": "SmartLamp21", "ColorRGB": [ 255, 255, 0 ] } }, "metadata": { "desired": { "ColorRGB": [ { "timestamp": 1591141596 }, { "timestamp": 1591141596 }, { "timestamp": 1591141596 } ] }, "reported": { "ID": { "timestamp": 1591140517 }, "ColorRGB": [ { "timestamp": 1591142747 }, { "timestamp": 1591142747 }, { "timestamp": 1591142747 } ] } }, "version": 5, "timestamp": 1591143269 }
Andare oltre la simulazione
Prova l'interazione tra AWS CLI (che rappresenta l'app) e la console (che rappresenta il dispositivo) per modellare la soluzione IoT.