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 in app e servizi
Questa sezione descrive come un'app o un servizio interagisce con il servizio AWS IoT Device Shadow. Questo esempio presuppone che l'app o il servizio interagisca solo con la copia shadow e, attraverso la copia shadow, con il dispositivo. Questo esempio non include alcuna operazione di gestione, ad esempio la creazione o l'eliminazione di copie shadow.
Questo esempio utilizza l'API REST del servizio AWS IoT Device Shadow per interagire con le ombre. A differenza dell'esempio utilizzato in Utilizzo delle copie shadow nei dispositivi, che utilizza un modello di comunicazione pubblica/sottoscrivi, in questo esempio viene utilizzato il modello di comunicazione richiesta/risposta dell'API REST. Ciò significa che l'app o il servizio deve effettuare una richiesta prima di poter ricevere una risposta da AWS IoT. Uno svantaggio di questo modello, tuttavia, è che non supporta le notifiche. Se l'app o il servizio richiedono notifiche tempestive delle modifiche dello stato del dispositivo, prendere in considerazione i protocolli MQTT o MQTT su WSS, che supportano il modello di comunicazione pubblicazione/sottoscrizione, come descritto in Utilizzo delle copie shadow nei dispositivi.
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 e come vengono gestiti gli aggiornamenti nel dispositivo e nelle app o nei servizi che accedono alla copia shadow. Il progetto deve specificare chiaramente come lo stato del dispositivo viene aggiornato e segnalato e come le app e i servizi interagiscono con il dispositivo e le relative copie shadow.
L'URL dell'API REST per una copia shadow denominata è:
https://
endpoint
/things/thingName
/shadow?name=shadowName
e per una copia shadow senza nome è:
https://
endpoint
/things/thingName
/shadow
dove:
- endpoint
-
L'endpoint restituito dal comando CLI è:
aws iot describe-endpoint --endpoint-type IOT:Data-ATS
- thingName
-
Il nome dell'oggetto a cui appartiene la copia shadow è:
- shadowName
-
Il nome della copia shadow con nome. Questo parametro non viene utilizzato con copie shadow senza nome.
Inizializzazione dell'app o del servizio durante la connessione a AWS IoT
Quando l'app si connette per la prima volta AWS IoT, dovrebbe inviare una richiesta HTTP GET agli URL delle ombre che utilizza per ottenere lo stato attuale delle ombre che sta utilizzando. Ciò consente di sincronizzare l'app o il servizio con la copia shadow.
Lo stato di elaborazione cambia mentre l'app o il servizio sono connessi a AWS IoT
Mentre l'app o il servizio è connesso AWS IoT, può interrogare periodicamente lo stato corrente inviando una richiesta HTTP GET sugli URL degli shadow che utilizza.
Quando un utente finale interagisce con l'app o il servizio per modificare lo stato del dispositivo, l'app o il servizio può inviare una richiesta POST HTTP agli URL delle copie shadow utilizzate per aggiornare lo stato desired
della copia shadow. Questa richiesta restituisce la modifica accettata, ma potrebbe essere necessario eseguire il polling della copia shadow effettuando richieste HTTP GET fino a quando il dispositivo non ha aggiornato la cop0ia shadow con il suo nuovo stato.
Rilevamento di un dispositivo connesso
Per stabilire se un dispositivo è attualmente connesso, includere una proprietà connected
nel documento shadow e utilizzare un messaggio LWT (Last Will and Testament) MQTT per impostare la proprietà connected
su false
se un dispositivo viene disconnesso a causa di un errore.
Nota
I messaggi MQTT LWT inviati ad argomenti AWS IoT riservati (argomenti che iniziano con $) vengono ignorati dal servizio AWS IoT Device Shadow. Tuttavia, vengono elaborati dai client sottoscritti e dal motore delle AWS IoT regole, pertanto sarà necessario creare un messaggio LWT da inviare a un argomento non riservato e una regola che ripubblichi il messaggio MQTT LWT come messaggio di aggiornamento shadow nell'argomento di aggiornamento riservato dello shadow,. ShadowTopicPrefix
/update
Per inviare un messaggio LWT al servizio Device Shadow
-
Creare una regola che ripubblica il messaggio LWT MQTT sull'argomento riservato. L'esempio seguente è una regola che ascolta i messaggi sull'argomento
my/things/myLightBulb/update
e li ripubblica su$aws/things/myLightBulb/shadow/update
.{ "rule": { "ruleDisabled": false, "sql": "SELECT * FROM 'my/things/myLightBulb/update'", "description": "Turn my/things/ into $aws/things/", "actions": [ { "republish": { "topic": "$$aws/things/myLightBulb/shadow/update", "roleArn": "arn:aws:iam:123456789012:role/aws_iot_republish" } } ] } }
-
Quando il dispositivo si connette AWS IoT, registra un messaggio LWT su un argomento non riservato affinché la regola di ripubblicazione lo riconosca. In questo esempio, tale argomento è
my/things/myLightBulb/update
e imposta la proprietà connessa sufalse
.{ "state": { "reported": { "connected":"false" } } }
-
Dopo la connessione, il dispositivo pubblica un messaggio sul relativo argomento di aggiornamento shadow,
$aws/things/myLightBulb/shadow/update
, per segnalare lo stato corrente, che include l'impostazione della proprietàconnected
sutrue
.{ "state": { "reported": { "connected":"true" } } }
-
Prima della disconnessione, il dispositivo pubblica un messaggio sul relativo argomento di aggiornamento shadow,
$aws/things/myLightBulb/shadow/update
, per segnalare lo stato più recente, che include l'impostazione della proprietàconnected
sufalse
.{ "state": { "reported": { "connected":"false" } } }
-
Se il dispositivo si disconnette a causa di un errore, il broker di messaggi pubblica il AWS IoT messaggio LWT del dispositivo per conto del dispositivo. La regola di ripubblicazione rileva questo messaggio e pubblica il messaggio di aggiornamento shadow per aggiornare la proprietà
connected
del Device Shadow.