Tutorial: Archiviazione dei dati del dispositivo in una tabella DynamoDB - 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à.

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.

Prima di iniziare questo tutorial, assicurati di disporre di:

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
  1. Accedi alla console Dynamo DB e scegli Create table (Crea una tabella).

  2. In Create table (Crea tabella):

    1. In Table name (Nome tabella), inserisci il nome della tabella: wx_data.

    2. In Partition key (Chiave di partizione) inserisci sample_time e, nell'elenco delle opzioni accanto al campo, scegli Number.

    3. In Sort key (chiave di ordinamento), inserisci device_id e nell'elenco delle opzioni accanto al campo, scegli Number.

    4. 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
  1. 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.

  2. Per iniziare a creare la nuova regola in Rules (Regole), scegli Create rule (Crea regola).

  3. In Proprietà delle regole:

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

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

  4. Seleziona Successivo per continuare.

  5. Nella SQLdichiarazione:

    1. Nella SQLversione, seleziona2016-03-23.

    2. 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 e barometer invariati.

  6. Seleziona Successivo per continuare.

  7. In Azioni delle regole:

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

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

    3. In Chiave di partizione, immettere sample_time.

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

    5. In Sort key (chiave di ordinamento), immettere device_id.

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

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

    8. Lascia vuoto il campo Operation (Operazione).

    9. Nel IAMruolo, scegli Crea nuovo ruolo.

    10. 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 tabella wx_data DynamoDB che hai creato.

    11. Nel IAMruolo, scegli. wx_ddb_role

    12. Nella parte inferiore della pagina scegli Next (Avanti).

  8. 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 in una nuova finestra. Ciò ti consentirà di modificare la regola senza perdere la configurazione del tuo MQTT client. Il MQTT client non conserva alcun abbonamento o registro dei messaggi se lo lasci passare a un'altra pagina della console. Ti consigliamo inoltre di aprire una finestra della console separata sull'hub DynamoDB Tables nella console per visualizzare AWS IoT le nuove voci inviate dalla regola.

Per utilizzare il MQTT client per testare la regola
  1. Nel MQTTclient nella AWS IoT console, iscriviti all'argomento di input,device/+/data.

    1. Nel MQTT client, scegli Sottoscrivi un argomento.

    2. Per Topic filter (Filtro argomenti), inserisci l'argomento del filtro dell’argomento di input, device/+/data.

    3. Scegliere Subscribe (Effettua sottoscrizione).

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

    1. Nel MQTT client, scegli Pubblica su un argomento.

    2. Per Topic name (Nome argomento), inserisci un nome per l'argomento di input, device/22/data.

    3. Per Message payload (Payload del messaggio)(, inserisci i seguenti dati di esempio.

      { "temperature": 28, "humidity": 80, "barometer": 1013, "wind": { "velocity": 22, "bearing": 255 } }
    4. Per pubblicare il MQTT messaggio, scegli Pubblica.

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

  3. Seleziona per visualizzare la riga della tabella Dynamo DB creata dalla regola.

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

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

    3. Espandi la voce device_dati per visualizzare i dati risultanti dall'istruzione query della regola.

    4. Esplora le diverse rappresentazioni dei dati disponibili in questo display. È possibile modificare i dati anche in questo display.

    5. 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 degli device/+/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 campo temperaturenell'istruzione query della regola deve essere identico a quello del campo temperature 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.