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:
-
Stabilisci una connessione MQTT utilizzando le funzioni di supporto in
shadow_demo_helpers.c
. -
Assembla le stringhe degli argomenti MQTT per le operazioni shadow del dispositivo, utilizzando le macro definite dalla libreriaAWS IoT Device Shadow.
-
Pubblica sull'argomento MQTT utilizzato per eliminare un'ombra del dispositivo per eliminare qualsiasi ombra del dispositivo esistente.
-
Iscriviti agli argomenti MQTT per
/update/delta
/update/accepted
e/update/rejected
utilizza le funzioni di supporto inshadow_demo_helpers.c
. -
Pubblica lo stato desiderato di
powerOn
utilizzo delle funzioni di supporto inshadow_demo_helpers.c
. Ciò causerà l'invio di un/update/delta
messaggio al dispositivo. -
Gestisci i messaggi MQTT in
prvEventCallback
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.
La demo è disponibile nel file
o su GitHubfreertos
/demos/device_shadow_for_aws/shadow_demo_main.c
Lo screenshot seguente mostra l'output previsto quando la demo avrà 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'/delete
argomento. 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'/delete
argomento. 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 CoreMQTTMQTT_Init
funzione, ci informerà di un evento di pacchetto in arrivo. Vedi la funzione di callback prvEventCallback
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 prvUpdateDeltaHandlerprvUpdateDeltaHandler
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 prvUpdateAcceptedHandlerprvUpdateAcceptedHandler
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.