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à.
Tutorial: Archiviazione dei dati del dispositivo in una tabella DynamoDB
Questo tutorial dimostra come creare una AWS IoT regola che invii i dati dei messaggi a una tabella DynamoDB.
In questo tutorial potrai creare una regola per l'invio di dati di messaggi da un dispositivo immaginario di sensori meteorologici a una tabella Dynamo DB. La regola formatta i dati da molti sensori meteorologici in modo che possano essere aggiunti a una singola tabella di database.
Cosa imparerai in questo tutorial
-
Come creare una tabella Dynamo DB
-
Come inviare i dati dei messaggi a una tabella DynamoDB da una regola AWS IoT
-
Come utilizzare i modelli sostitutivi in una regola AWS IoT
-
Come utilizzare SQL query e funzioni semplici in un'istruzione di interrogazione basata su regole
-
Come usare il MQTT client per testare una regola AWS IoT
Questo tutorial dura circa 30 minuti.
In questo tutorial, dovrai:
Prima di iniziare questo tutorial, assicurati di disporre di:
-
Configurare Account AWS
Avrai bisogno della tua Account AWS AWS IoT console per completare questo tutorial.
-
Aver rivisto Visualizza MQTT i messaggi con il AWS IoT MQTT client
Assicurati di poter utilizzare il MQTT client per iscriverti e pubblicare su un argomento. Utilizzerai il MQTT client per testare la tua nuova regola in questa procedura.
-
Aver rivisto la panoramica di Amazon DynamoDB
Se non hai già usato Dynamo DB, consulta Nozioni di base su Dynamo DB per acquisire familiarità con i concetti e le operazioni di base di Dynamo DB.
Fase 1: Creazione della tabella Dynamo DB per questo tutorial
In questo tutorial creerai una tabella Dynamo DB con questi attributi per registrare i dati dai dispositivi immaginari con sensori meteorologici:
-
sample_time
è una chiave primaria e descrive l'ora in cui il campione è stato registrato. -
device_id
è una chiave di ordinamento e descrive il dispositivo che ha fornito l'esempio -
device_data
sono i dati ricevuti dal dispositivo e formattati dall'istruzione query della regola
Per creare la tabella Dynamo DB per questo tutorial
-
Accedi alla console Dynamo DB
e scegli Create table (Crea una tabella). -
In Create table (Crea tabella):
-
In Table name (Nome tabella), inserisci il nome della tabella:
wx_data
. -
In Partition key (Chiave di partizione) inserisci
sample_time
e, nell'elenco delle opzioni accanto al campo, scegliNumber
. -
In Sort key (chiave di ordinamento), inserisci
device_id
e nell'elenco delle opzioni accanto al campo, scegliNumber
. -
Nella parte inferiore della pagina, scegli Create (Crea).
-
Definisci device_data
in seguito, quando configuri l'operazione della regola Dynamo DB.
Fase 2: Creare una AWS IoT regola per inviare dati alla tabella DynamoDB
In questo passaggio utilizzerai l'istruzione query della regola per formattare i dati provenienti dai dispositivi sensore meteo immaginari per scrivere nella tabella del database.
Un esempio di payload di messaggio ricevuto da un dispositivo con sensore meteo è simile al seguente:
{ "temperature": 28, "humidity": 80, "barometer": 1013, "wind": { "velocity": 22, "bearing": 255 } }
Per la voce del database, si utilizzerà l'istruzione query della regola per appiattire la struttura del payload del messaggio in modo che sia simile al seguente:
{ "temperature": 28, "humidity": 80, "barometer": 1013, "wind_velocity": 22, "wind_bearing": 255 }
In questa regola, utilizzerai anche un paio di Modelli di sostituzione. I modelli di sostituzione sono espressioni che consentono di inserire valori dinamici dalle funzioni e dai dati dei messaggi.
Per creare la AWS IoT regola per inviare dati alla tabella DynamoDB
-
Apri l’hub Rules (Regole) della console AWS IoT
. In alternativa, puoi aprire la AWS IoT home page all'interno di AWS Management Console e passare a Message Routing>Rules. -
Per iniziare a creare la nuova regola in Rules (Regole), scegli Create rule (Crea regola).
-
In Proprietà delle regole:
-
In Role name (Nome ruolo) immettere
wx_data_ddb
.Ricorda che il nome di una regola deve essere univoco all'interno della tua regione Account AWS e non può avere spazi. Abbiamo usato un carattere di sottolineatura in questo nome per separare le due parole nel nome della regola.
-
In Description (Descrizione), descrivi la regola.
Una descrizione significativa ti aiuta a ricordare cosa fa questa regola e perché l'hai creata. La descrizione può essere lunga quanto necessario, quindi sii il più dettagliato possibile.
-
-
Seleziona Successivo per continuare.
-
Nella SQLdichiarazione:
-
Nella SQLversione, seleziona
2016-03-23
. -
Nella casella di modifica del SQLrendiconto, inserisci l'istruzione:
SELECT temperature, humidity, barometer, wind.velocity as wind_velocity, wind.bearing as wind_bearing, FROM 'device/+/data'
Questa istruzione:
-
Ascolta i MQTT messaggi con un argomento che corrisponde al filtro degli
device/+/data
argomenti. -
Formatta gli elementi dell’attributo
wind
come attributi individuali. -
Consente di passare gli attributi
temperature
,humidity
ebarometer
invariati.
-
-
-
Seleziona Successivo per continuare.
-
In Azioni delle regole:
-
Per aprire l'elenco delle azioni della regola per questa regola, in Azione 1, scegli
DynamoDB
.Nota
Assicurati di scegliere DynamoDB e non ynamoDBv D 2 come azione della regola.
-
In Table name (Nome tabella) scegli il nome della tabella Dynamo DB creata in un passaggio precedente:
wx_data
.I campi Partition key type (Tipo di chiave di partizione) e Sort key type (Tipo di chiave di ordinamento) sono compilati con i valori dalla tabella Dynamo DB.
-
In Chiave di partizione, immettere
sample_time
. -
In Partition key value (Valore della chiave di partizione), immettere
${timestamp()}
.Questo è il primo di Modelli di sostituzione che userai in questa regola. Invece di utilizzare un valore dal payload del messaggio, utilizzerà il valore restituito dal metodo della funzione timestamp. Per ulteriori informazioni, consulta timestamp nella Guida per gli sviluppatori di AWS IoT Core .
-
In Sort key (chiave di ordinamento), immettere
device_id
. -
In Sort key value (Valore della chiave di ordinamento), immettere
${cast(topic(2) AS DECIMAL)}
.Questa è la seconda di Modelli di sostituzione che userai in questa regola. Inserisce il valore del secondo elemento nel nome dell'argomento, che è l'ID del dispositivo, dopo averlo convertito in un DECIMAL valore corrispondente al formato numerico della chiave. Per ulteriori informazioni sugli argomenti, consulta la sezione argomenti nella Guida per sviluppatori di AWS IoT Core . Oppure per saperne di più sul casting, vedi cast nella Guida per lo Sviluppatore di AWS IoT Core .
-
In Write message data to this column (Scrivi i dati del messaggio in questa colonna), immettere
device_data
.Questo creerà la colonna
device_data
nella tabella Dynamo DB. -
Lascia vuoto il campo Operation (Operazione).
-
Nel IAMruolo, scegli Crea nuovo ruolo.
-
Nella finestra di dialogo Create role (Crea ruolo), per Role name (Nome ruolo), immetti wx_ddb_role. Questo nuovo ruolo conterrà automaticamente una policy con prefisso "aws-iot-rule" che consentirà alla
wx_data_ddb
regola di inviare dati alla tabellawx_data
DynamoDB che hai creato. -
Nel IAMruolo, scegli.
wx_ddb_role
-
Nella parte inferiore della pagina scegli Next (Avanti).
-
-
Nella parte inferiore della pagina Rivedi e crea, scegli Create per creare la regola.
Fase 3: Verificare la AWS IoT regola e la tabella DynamoDB
Per testare la nuova regola, utilizzerai il MQTT client per pubblicare e sottoscrivere i MQTT messaggi utilizzati in questo test.
Apri il MQTTclient nella AWS IoT
console
Per utilizzare il MQTT client per testare la regola
-
Nel MQTTclient nella AWS IoT console
, iscriviti all'argomento di input, device/+/data
.-
Nel MQTT client, scegli Sottoscrivi un argomento.
-
Per Topic filter (Filtro argomenti), inserisci l'argomento del filtro dell’argomento di input,
device/+/data
. -
Scegliere Subscribe (Effettua sottoscrizione).
-
-
Ora pubblica un messaggio per l'argomento di input con un ID dispositivo specifico,
device/22/data
. Non puoi pubblicare MQTT su argomenti che contengono caratteri jolly.-
Nel MQTT client, scegli Pubblica su un argomento.
-
Per Topic name (Nome argomento), inserisci un nome per l'argomento di input,
device/22/data
. -
Per Message payload (Payload del messaggio)(, inserisci i seguenti dati di esempio.
{ "temperature": 28, "humidity": 80, "barometer": 1013, "wind": { "velocity": 22, "bearing": 255 } }
-
Per pubblicare il MQTT messaggio, scegli Pubblica.
-
Ora, nel MQTT client, scegli Sottoscrivi a un argomento. Nella colonna Subscribe (Effettua sottoscrizione), scegli la sottoscrizione
device/+/data
. Verifica che vengano visualizzati i dati di esempio del passaggio precedente.
-
-
Seleziona per visualizzare la riga della tabella Dynamo DB creata dalla regola.
-
Nell'hub DynamoDB Tables AWS IoT della
console, scegli wx_data, quindi scegli la scheda Items. Se sei già sulla scheda Items (Elementi), è possibile che sia necessario aggiornare la visualizzazione selezionando l'icona Aggiorna nell'angolo in alto a destra dell'intestazione della tabella.
-
Nota che i valori sample_time nella tabella sono collegamenti, quindi aprine uno. Se hai appena inviato il tuo primo messaggio, sarà l'unico nella lista.
Questo collegamento visualizza tutti i dati nella riga della tabella.
-
Espandi la voce device_dati per visualizzare i dati risultanti dall'istruzione query della regola.
-
Esplora le diverse rappresentazioni dei dati disponibili in questo display. È possibile modificare i dati anche in questo display.
-
Al termine della revisione di questa riga di dati, per salvare le modifiche apportate, scegli Save (Salva) o, per uscire senza salvare le modifiche, scegli Cancel (Annulla).
-
Se il comportamento non viene visualizzato correttamente, controlla i suggerimenti per la risoluzione dei problemi.
Risoluzione dei problemi relativi alla regola Dynamo DB
Ecco alcune cose da controllare nel caso in cui non vedi i risultati che ti aspetti.
-
Hai un banner di errore
Se viene visualizzato un errore quando è stato pubblicato il messaggio di input, correggilo prima. I seguenti passaggi potrebbero aiutarti a correggere l'errore.
-
Il messaggio di input non viene visualizzato nel client MQTT
Ogni volta che pubblichi il messaggio di input
device/22/data
sull'argomento, tale messaggio dovrebbe apparire nel MQTT client se hai sottoscritto il filtro deglidevice/+/data
argomenti come descritto nella procedura.Controlli
-
Controlla il filtro degli argomenti a cui hai effettuato la sottoscrizione
Se hai effettuato la sottoscrizione all'argomento del messaggio di input come descritto nella procedura, visualizzerai una copia del messaggio di input ogni volta che lo pubblichi.
Se il messaggio non viene visualizzato, controlla il nome dell'argomento sottoscritto e confrontalo con l'argomento in cui è stato pubblicato. I nomi degli argomenti fanno distinzione tra maiuscole e minuscole e l'argomento a cui è stato sottoscritto deve essere identico all'argomento in cui hai pubblicato il payload dei messaggi.
-
Controlla la funzione di pubblicazione dei messaggi
Nel MQTT client, in Abbonamenti, scegli device/+/data, controlla l'argomento del messaggio di pubblicazione, quindi scegli Pubblica sull'argomento. Dovresti vedere il payload del messaggio dalla casella di modifica sotto l'argomento visualizzato nell'elenco dei messaggi.
-
-
I dati non vengono visualizzati nella tabella Dynamo DB
Per prima cosa, aggiorna la visualizzazione selezionando l'icona di aggiornamento nell'angolo in alto a destra dell'intestazione della tabella. Se non vengono visualizzati i dati che si sta cercando, controlla quanto segue.
Controlli
-
Controlla il tipo Regione AWS del tuo MQTT cliente e la regola che hai creato
La console su cui esegui il MQTT client deve trovarsi nella stessa AWS regione della regola che hai creato.
-
Controlla l'argomento del messaggio di input nell'istruzione query della regola
Affinché la regola funzioni, deve ricevere un messaggio con il nome dell'argomento che corrisponde al filtro dell'argomento nella FROM clausola dell'istruzione di interrogazione della regola.
Controlla l'ortografia del filtro dell'argomento nell'istruzione di interrogazione delle regole con quella dell'argomento nel MQTT client. I nomi degli argomenti fanno distinzione tra maiuscole e minuscole e l'argomento del messaggio deve corrispondere al filtro argomento nell'istruzione query della regola.
-
Controllare il contenuto del payload del messaggio di input
Affinché la regola funzioni, deve trovare il campo dati nel payload del messaggio dichiarato nell'SELECTistruzione.
Controlla l'ortografia del
temperature
campo nell'istruzione Rule Query con quella del payload del messaggio nel client. MQTT I nomi dei campi fanno distinzione tra maiuscole e minuscole e il campotemperature
nell'istruzione query della regola deve essere identico a quello del campotemperature
nel payload del messaggio.Assicurati che il JSON documento nel payload del messaggio sia formattato correttamente. Se JSON contiene errori, ad esempio una virgola mancante, la regola non sarà in grado di leggerlo.
-
Controlla i nomi delle chiavi e dei campi utilizzati nell'operazione della regola
I nomi dei campi utilizzati nella regola dell'argomento devono corrispondere a quelli presenti nel JSON payload del messaggio pubblicato.
Apri la regola che hai creato nella console e controlla i nomi dei campi nella configurazione delle azioni delle regole con quelli utilizzati nel MQTT client.
-
Controlla il ruolo utilizzato dalla regola
L'operazione della regola deve disporre dell'autorizzazione per ricevere l'argomento originale e pubblicare il nuovo argomento.
Le policy che autorizzano la regola a ricevere i dati dei messaggi e ad aggiornare la tabella Dynamo DB sono specifiche degli argomenti utilizzati. Se si modifica l'argomento o il nome della tabella Dynamo DB utilizzato dalla regola, è necessario aggiornare il ruolo dell'operazione della regola per aggiornare la policy in modo che corrisponda.
Se si sospetta che questo sia il problema, modificare l'operazione della regola e creare un nuovo ruolo. I nuovi ruoli creati dall'operazione della regola ricevono le autorizzazioni necessarie per eseguire queste operazioni.
-
Fase 4: Esamina i risultati e i passaggi successivi
Dopo aver inviato alcuni messaggi alla tabella Dynamo DB con questa regola, provare a sperimentarla per verificare come la modifica di alcuni aspetti del tutorial influisca sui dati scritti nella tabella. Ecco alcune idee per iniziare.
-
Cambia il
device_id
nell'argomento del messaggio di input e osserva l'effetto sui dati. È possibile utilizzarlo per simulare la ricezione di dati da più sensori meteorologici. -
Modifica i campi selezionati nell'istruzione query della regola e osserva l'effetto sui dati. Questo strumento consente di filtrare i dati archiviati nella tabella.
-
Aggiungi un'azione della regola di ripubblicazione per inviare un MQTT messaggio per ogni riga aggiunta alla tabella. È possibile utilizzarlo per il debug.
Dopo aver completato questo tutorial, consulta Tutorial: Formattare una notifica utilizzando una funzione AWS Lambda.