Applicazione demo AWS IoT Device Shadow - Gratuito RTOS

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à.

Applicazione demo AWS IoT Device Shadow

Importante

Questa demo è ospitata nel repository Amazon-FreeRTOS che è obsoleto. Consigliamo di procedere da qui quando procedere alla creazione di un nuovo progetto. Se disponi già di un progetto FreeRTOS esistente basato sull'ormai obsoleto repository Amazon-FreeRTOS, consulta ilGuida alla migrazione del RTOS repository Github gratuito da Amazon.

Introduzione

Questa demo mostra come utilizzare la libreriaAWS IoT Device Shadow per connettersi al servizioAWS Device Shadow. Utilizza ilMQTTlibreria principale per stabilire una connessione MQTT con TLS (Mutual Authentication) al brokerAWS IoT MQTT e al parser della libreria CoreJSON per analizzare i documenti shadow ricevuti dal servizioAWS Shadow. La demo mostra le operazioni shadow di base, ad esempio come aggiornare un documento shadow e come eliminare un documento shadow. La demo mostra anche come registrare una funzione di callback con la libreria CoreMQTT per gestire messaggi come shadow/update e/update/delta messaggi inviati dal servizioAWS IoT Device Shadow.

Questa demo è intesa come esercizio di apprendimento solo perché la richiesta di aggiornamento del documento ombra (stato) e la risposta all'aggiornamento vengono eseguite dalla stessa applicazione. In uno scenario di produzione realistico, un'applicazione esterna richiederebbe un aggiornamento dello stato del dispositivo da remoto, anche se il dispositivo non è attualmente connesso. Il dispositivo confermerà la richiesta di aggiornamento quando sarà connesso.

Nota

Per configurare ed eseguire le demo di FreeRTOS, segui i passaggi indicatiInizia con Free RTOS.

Funzionalità

La demo crea una singola attività applicativa che passa in rassegna una serie di esempi che mostrano shadow/update e/update/delta callback per simulare l'alternanza dello stato di un dispositivo remoto. Invia un aggiornamento shadow con il nuovodesired stato e attende che il dispositivo cambireported stato in risposta al nuovodesired stato. Inoltre, viene utilizzato un/update callback shadow per stampare gli stati delle ombre che cambiano. Questa demo utilizza anche una connessione MQTT sicura al brokerAWS IoT MQTT e presuppone che ci sia unopowerOn stato nell'ombra del dispositivo.

La demo esegue le seguenti operazioni:

  1. Stabilisci una connessione MQTT utilizzando le funzioni di supporto inshadow_demo_helpers.c.

  2. Assembla le stringhe degli argomenti MQTT per le operazioni shadow del dispositivo, utilizzando le macro definite dalla libreriaAWS IoT Device Shadow.

  3. Pubblica sull'argomento MQTT utilizzato per eliminare un'ombra del dispositivo per eliminare qualsiasi ombra del dispositivo esistente.

  4. Iscriviti agli argomenti MQTT per/update/delta/update/accepted e/update/rejected utilizza le funzioni di supporto inshadow_demo_helpers.c.

  5. Pubblica lo stato desiderato dipowerOn utilizzo delle funzioni di supporto inshadow_demo_helpers.c. Ciò causerà l'invio di un/update/delta messaggio al dispositivo.

  6. Gestisci i messaggi MQTT inprvEventCallback entrata e determina se il messaggio è correlato all'ombra del dispositivo utilizzando una funzione definita dalla libreriaAWS IoT Device Shadow (Shadow_MatchTopic). Se il messaggio è un/update/delta messaggio shadow del dispositivo, la funzione demo principale pubblicherà un secondo messaggio per aggiornare lo stato segnalatopowerOn. Se viene ricevuto un/update/accepted messaggio, verifica che sia loclientToken stesso pubblicato in precedenza nel messaggio di aggiornamento. Questo segnerà la fine della demo.

uscita terminale demo shadow

La demo è disponibile nel filefreertos/demos/device_shadow_for_aws/shadow_demo_main.c o su GitHub.

Lo screenshot seguente mostra l'output previsto quando la demo avrà successo.

uscita del terminale demo shadow che mostra il successo

Connect al brokerAWS IoT MQTT

Per connetterci al brokerAWS IoT MQTT, utilizziamo lo stesso metodoMQTT_Connect() diDemo dell'autenticazione reciproca CoreMQTT.

Eliminare il documento shadow

Per eliminare il documento shadow, chiamaxPublishToTopic con un messaggio vuoto, utilizzando le macro definite dalla libreriaAWS IoT Device Shadow. Viene utilizzatoMQTT_Publish per pubblicare sull'/deleteargomento. La seguente sezione del codice seguente mostra come procedere nella funzioneprvShadowDemoTask.

/* First of all, try to delete any Shadow document in the cloud. */ returnStatus = PublishToTopic( SHADOW_TOPIC_STRING_DELETE( THING_NAME ), SHADOW_TOPIC_LENGTH_DELETE( THING_NAME_LENGTH ), pcUpdateDocument, 0U );

Iscriviti agli argomenti oscuri

Iscriviti agli argomenti Device Shadow per ricevere notifiche dalAWS IoT broker sulle modifiche alle ombre. Gli argomenti Device Shadow sono assemblati mediante macro definite nella libreria Device Shadow. La seguente sezione del codice seguente mostra come procedere nellaprvShadowDemoTask funzione.

/* Then try to subscribe shadow topics. */ if( returnStatus == EXIT_SUCCESS ) { returnStatus = SubscribeToTopic( SHADOW_TOPIC_STRING_UPDATE_DELTA( THING_NAME ), SHADOW_TOPIC_LENGTH_UPDATE_DELTA( THING_NAME_LENGTH ) ); } if( returnStatus == EXIT_SUCCESS ) { returnStatus = SubscribeToTopic( SHADOW_TOPIC_STRING_UPDATE_ACCEPTED( THING_NAME ), SHADOW_TOPIC_LENGTH_UPDATE_ACCEPTED( THING_NAME_LENGTH ) ); } if( returnStatus == EXIT_SUCCESS ) { returnStatus = SubscribeToTopic( SHADOW_TOPIC_STRING_UPDATE_REJECTED( THING_NAME ), SHADOW_TOPIC_LENGTH_UPDATE_REJECTED( THING_NAME_LENGTH ) ); }

Invia aggiornamenti su Shadow

Per inviare un aggiornamento shadow, la demo chiamaxPublishToTopic con un messaggio in formato JSON, utilizzando le macro definite dalla libreria Device Shadow. Viene utilizzatoMQTT_Publish per pubblicare sull'/deleteargomento. La seguente sezione del codice seguente mostra come procedere nellaprvShadowDemoTask funzione.

#define SHADOW_REPORTED_JSON \ "{" \ "\"state\":{" \ "\"reported\":{" \ "\"powerOn\":%01d" \ "}" \ "}," \ "\"clientToken\":\"%06lu\"" \ "}" snprintf( pcUpdateDocument, SHADOW_REPORTED_JSON_LENGTH + 1, SHADOW_REPORTED_JSON, ( int ) ulCurrentPowerOnState, ( long unsigned ) ulClientToken ); xPublishToTopic( SHADOW_TOPIC_STRING_UPDATE( THING_NAME ), SHADOW_TOPIC_LENGTH_UPDATE( THING_NAME_LENGTH ), pcUpdateDocument, ( SHADOW_DESIRED_JSON_LENGTH + 1 ) );

Gestisci i messaggi shadow delta e i messaggi di aggiornamento shadow

La funzione di callback dell'utente, che è stata registrata nella libreria client CoreMQTT utilizzando laMQTT_Init funzione, ci informerà di un evento di pacchetto in arrivo. Vedi la funzione di callback prvEventCallbackattiva GitHub.

La funzione di callback conferma che il pacchetto in arrivo è di tipoMQTT_PACKET_TYPE_PUBLISH e utilizza l'API Device Shadow LibraryShadow_MatchTopic per confermare che il messaggio in arrivo è un messaggio shadow.

Se il messaggio in arrivo è un messaggio shadow di tipoShadowMessageTypeUpdateDelta, chiamiamo prvUpdateDeltaHandler per gestire questo messaggio. Il gestoreprvUpdateDeltaHandler utilizza la libreria CoreJSON per analizzare il messaggio per ottenere il valore delta per lopowerOn stato e lo confronta con lo stato corrente del dispositivo mantenuto localmente. Se sono diversi, lo stato locale del dispositivo viene aggiornato in modo da riflettere il nuovo valore dellopowerOn stato del documento shadow.

Se il messaggio in arrivo è un messaggio shadow di tipoShadowMessageTypeUpdateAccepted, chiamiamo prvUpdateAcceptedHandler per gestire questo messaggio. Il gestoreprvUpdateAcceptedHandler analizza il messaggio utilizzando la libreria CoreJSON per ottenere ilclientToken file dal messaggio. Questa funzione di gestione verifica che il token client del messaggio JSON corrisponda al token client utilizzato dall'applicazione. Se non corrisponde, la funzione registra un messaggio di avviso.