Utilizzo delle copie shadow in app e servizi - 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 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
  1. 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" } } ] } }
  2. 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 su false.

    { "state": { "reported": { "connected":"false" } } }
  3. 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 su true.

    { "state": { "reported": { "connected":"true" } } }
  4. 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 su false.

    { "state": { "reported": { "connected":"false" } } }
  5. 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.