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 semplici query SQL e funzioni in un'istruzione di query della regola

  • Come usare il client MQTT 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. In Istruzione SQL:

    1. In Versione SQL, seleziona 2016-03-23.

    2. Nella casella di modifica Istruzione SQL, inserisci l'istruzione:

      SELECT temperature, humidity, barometer, wind.velocity as wind_velocity, wind.bearing as wind_bearing, FROM 'device/+/data'

      Questa istruzione:

      • Ascolta i messaggi MQTT con un argomento che corrisponde al filtro dell’argomento device/+/data.

      • 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 DBv2 Dynamo 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 la sua trasformazione in un valore DECIMALE per corrispondere 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. In IAM Role (Ruolo IAM), scegli Create new role (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. In IAM role (Ruolo IAM) scegliere 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, utilizza il client MQTT per pubblicare e sottoscrivere i messaggi MQTT utilizzati in questo test.

Apri il Client MQTT nella console AWS IoT in una nuova finestra. In questo modo è possibile modificare la regola senza perdere la configurazione del client MQTT. Il client MQTT non conserva sottoscrizioni o registri dei messaggi se si lascia per andare 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.

Utilizzare il client MQTT per testare la regola
  1. Nel Client MQTT nella console AWS IoT, effettua la sottoscrizione all'argomento di input, device/+/data.

    1. Nel client MQTT, scegli Subscribe to a topic (Effettua la sottoscrizione a 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 è possibile pubblicare su argomenti MQTT che contengono caratteri jolly.

    1. Nel client MQTT, scegli Publish to a topic (Pubblica in 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 messaggio MQTT, scegli Publish (Pubblica).

    5. Nel client MQTT, scegli Subscribe to a topic (Effettua la sottoscrizione 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 nell’argomento device/22/data, tale messaggio dovrebbe essere visualizzato nel client MQTT se hai effettuato la sottoscrizione al filtro argomento device/+/data 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 client MQTT, sotto Subscriptions (Sottoscrizioni), scegli device/+/data (dispositivo/+/dati), controlla l'argomento del messaggio di pubblicazione e quindi scegli Publish to topic (Pubblica in un 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 Regione AWS tuo client MQTT e la regola che hai creato

      La console in cui si esegue il client MQTT deve trovarsi nella stessa regione AWS della regola creata.

    • Controlla l'argomento del messaggio di input nell'istruzione query della regola

      Affinché la regola funzioni, è necessario che venga visualizzato un messaggio con il nome dell'argomento corrispondente al filtro dell’argomento nella clausola FROM dell'istruzione query della regola.

      Controlla l'ortografia del filtro argomento nell'istruzione query regola con quella dell'argomento nel client MQTT. 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, è necessario trovare il campo dati nel payload del messaggio dichiarato nell'istruzione SELECT.

      Controlla l'ortografia del campo temperature nell'istruzione query della regola 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 documento JSON nel payload del messaggio sia formattato correttamente. Se il JSON presenta errori, come 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 trovati nel payload del messaggio JSON del messaggio pubblicato.

      Apri la regola creata nella console e controlla i nomi dei campi nella configurazione dell'operazione della regola con quelli utilizzati nel client MQTT.

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

  • Modifica l'device_idargomento 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'operazione della regola di ripubblicazione per inviare un messaggio MQTT 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.