Tutorial: ripubblicazione di un messaggio MQTT - 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: ripubblicazione di un messaggio MQTT

Questo tutorial dimostra come creare una AWS IoT regola che pubblica un MQTT messaggio quando viene ricevuto un MQTT messaggio specificato. Il payload del messaggio in arrivo può essere modificato dalla regola prima della pubblicazione. In questo modo è possibile creare messaggi su misura per applicazioni specifiche senza la necessità di modificare il dispositivo o il firmware. È inoltre possibile utilizzare l'aspetto filtrante di una regola per pubblicare messaggi solo quando viene soddisfatta una condizione specifica.

I messaggi ripubblicati in base a una regola si comportano come messaggi inviati da qualsiasi altro AWS IoT dispositivo o client. I dispositivi possono sottoscrivere i messaggi ripubblicati nello stesso modo in cui possono iscriversi a qualsiasi altro argomento del MQTT messaggio.

Cosa imparerai in questo tutorial:
  • 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:

Rivedi MQTT gli argomenti e AWS IoT le regole

Prima di parlare di AWS IoT regole, è utile comprendere il MQTT protocollo. Nelle soluzioni IoT, il MQTT protocollo offre alcuni vantaggi rispetto ad altri protocolli di comunicazione di rete, ad esempioHTTP, il che lo rende una scelta popolare per l'uso da parte dei dispositivi IoT. Questa sezione esamina gli aspetti chiave di MQTT come si applicano a questo tutorial. Per informazioni sulla MQTT comparazione conHTTP, vediScelta di un protocollo applicativo per la comunicazione del dispositivo.

MQTTprotocollo

Il MQTT protocollo utilizza un modello di comunicazione di pubblicazione/sottoscrizione con il relativo host. Per inviare dati, i dispositivi pubblicano messaggi identificati da argomenti nel AWS IoT broker di messaggi. Per ricevere messaggi dal broker di messaggi, i dispositivi sottoscrivono gli argomenti che riceveranno inviando al broker di messaggi filtri argomento nelle richieste di sottoscrizione. Il motore AWS IoT delle regole riceve MQTT messaggi dal broker di messaggi.

AWS IoT regole

AWS IoT le regole sono costituite da un'istruzione di interrogazione delle regole e da una o più azioni relative alle regole. Quando il motore AWS IoT delle regole riceve un MQTT messaggio, questi elementi agiscono sul messaggio nel modo seguente.

  • Istruzione query della regola

    L'istruzione di interrogazione della regola descrive gli MQTT argomenti da utilizzare, interpreta i dati del payload del messaggio e formatta i dati come descritto da un'SQListruzione simile alle istruzioni utilizzate dai database più diffusiSQL. Il risultato dell'istruzione della query sono i dati inviati alle azioni della regola.

  • Operazione delle regole

    Ogni azione di una regola agisce sui dati che risultano dall'istruzione di query della regola. AWS IoT supporta molte azioni relative alle regole. In questo tutorial, tuttavia, ti concentrerai sull'azione della Republish regola, che pubblica il risultato dell'istruzione di query come MQTT messaggio con un argomento specifico.

Passaggio 1: crea una AWS IoT regola per ripubblicare un messaggio MQTT

La AWS IoT regola che creerai in questo tutorial riguarda gli argomenti in cui device/device_id/data MQTT device_id è l'ID del dispositivo che ha inviato il messaggio. Questi argomenti sono descritti da un filtro argomenti come device/+/data, dove + è un carattere jolly che corrisponde a qualsiasi stringa tra i due caratteri di barra in avanti.

Quando la regola riceve un messaggio da un argomento corrispondente, ripubblica i temperature valori device_id and come nuovo MQTT messaggio con l'device/data/tempargomento.

Ad esempio, il payload di un MQTT messaggio con l'device/22/dataargomento è simile al seguente:

{ "temperature": 28, "humidity": 80, "barometer": 1013, "wind": { "velocity": 22, "bearing": 255 } }

La regola prende il temperature valore dal payload del messaggio e quello device_id dall'argomento e li ripubblica come MQTT messaggio con l'device/data/tempargomento e un payload del messaggio simile al seguente:

{ "device_id": "22", "temperature": 28 }

Con questa regola, i dispositivi che richiedono solo l'ID del dispositivo e i dati di temperatura si sottoscrivono all’argomento device/data/temp per ricevere solo tali informazioni.

Per creare una regola che ripubblichi un messaggio MQTT
  1. Apri l'hub Rules della AWS IoT console.

  2. In Rules (Regole), scegli Create (Crea) e inizia a creare la nuova regola.

  3. Nella parte superiore di Create a rule (Crea una regola):

    1. In Name (Nome), inserisci il nome della regola. Per questo tutorial, rinominala republish_temp.

      Ricorda che un nome di regola deve essere univoco all'interno dell’account e della regione e che non può contenere 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. In Rule query statement (Istruzione query regola) di Create a rule (Crea una regola):

    1. In Utilizzo della SQL versione, seleziona2016-03-23.

    2. Nella casella di modifica Rule query statement (Istruzione query regola), inserisci l'istruzione:

      SELECT topic(2) as device_id, temperature FROM 'device/+/data'

      Questa istruzione:

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

      • Seleziona il secondo elemento dalla stringa dell'argomento e lo assegna al campo device_id.

      • Seleziona il valore del campo temperature dal payload del messaggio e lo assegna al campo temperature.

  5. In Set one or more actions (Imposta una o più operazioni):

    1. Per aprire l'elenco delle azioni della regola per questa regola, scegli Add action (Aggiungi operazione).

    2. In Seleziona un'azione, scegli Ripubblica un messaggio su un argomento. AWS IoT

    3. Nella parte inferiore dell'elenco delle azioni, scegli Configure action (Configura operazione) per aprire la pagina di configurazione dell'azione selezionata.

  6. In Configure action (Configura operazione):

    1. In Topic (Argomento), inserisci device/data/temp. Questo è l'MQTTargomento del messaggio che verrà pubblicato da questa regola.

    2. In Quality of Service (Qualità del servizio), scegli 0 - Il messaggio viene recapitato zero o più volte.

    3. In Scegli o crea un ruolo a cui concedere AWS IoT l'accesso per eseguire questa azione:

      1. Selezionare Create Role (Crea ruolo). Si aprirà la finestra di dialogo Create a new role (Crea un nuovo ruolo).

      2. Inserisci un nome che descrive il nuovo ruolo. In questo tutorial, utilizza republish_role.

        Quando si crea un nuovo ruolo, le policy corrette per eseguire l'operazione della regola vengono create e associate al nuovo ruolo. Se si modifica l'argomento dell'operazione della regola o si utilizza questo ruolo in un'altra operazione della regola, è necessario aggiornare la policy per tale ruolo per autorizzare il nuovo argomento o operazione. Per aggiornare un ruolo esistente, scegli Update role (Aggiorna ruolo) in questa sezione.

      3. Scegli Create role (Crea ruolo) per creare il ruolo e chiudere la finestra di dialogo.

    4. Scegli Add action (Aggiungi operazione) per aggiungere l'operazione alla regola e tornare alla pagina Create a rule (Crea una regola).

  7. L'azione Ripubblica un messaggio su un AWS IoT argomento è ora elencata in Imposta una o più azioni.

    Nel titolo della nuova azione, sotto Republish a message to an AWS IoT topic (Ripubblicazione di un messaggio in un argomento di Amazon IoT), è possibile visualizzare l'argomento in cui verrà pubblicata l'operazione di ripubblicazione.

    Questa è l'unica operazione della regola che aggiungerai a questa regola.

  8. In Create a rule (Crea una regola), scorri verso il basso e seleziona Create rule (Crea regola) per creare la regola e completare questo passaggio.

Fase 2. Test della nuova regola

Per testare la nuova regola, utilizzerai il MQTT client per pubblicare e sottoscrivere i MQTT messaggi utilizzati da questa regola.

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.

Per utilizzare il MQTT client per testare la regola
  1. Nel MQTT client della AWS IoT console, iscriviti agli argomenti di input, in questo caso,device/+/data.

    1. Nel MQTT client, in Abbonamenti, scegli Sottoscrivi a un argomento.

    2. In Subscription topic (Argomento sottoscrizione), inserisci l'argomento del filtro dell’argomento di input, device/+/data.

    3. Lascia gli altri campi ai valori predefiniti.

    4. Scegli Subscribe to topic (Effettua sottoscrizione all'argomento).

      Nella colonna Subscriptions (Sottoscrizioni), sotto Publish to a topic (Pubblicaz in un argomento), viene visualizzato device/+/data.

  2. Effettua la sottoscrizione all'argomento che verrà pubblicato dalla regola: device/data/temp.

    1. Sotto Subscriptions (Sottoscrizioni), scegli di nuovo Subscribe to a topic (Sottoscrizione a un argomento), e in Subscription topic (Argomento sottoscrizione) inserisci l'argomento del messaggio ripubblicato, device/data/temp.

    2. Lascia gli altri campi ai valori predefiniti.

    3. Scegli Subscribe to topic (Effettua sottoscrizione all'argomento).

      Nella colonna Subscriptions (Sottoscrizioni), sotto device/+/data (dispositivo/+/dati), device/data/temp viene visualizzato.

  3. Pubblicazione di un messaggio nell'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, in Abbonamenti, scegli Pubblica su argomento.

    2. Nel campo Publish (Pubblica), inserisci il nome dell'argomento di input, device/22/data.

    3. Copia i dati di esempio mostrati qui e, nella casella di modifica sotto il nome dell'argomento, incolla i dati di esempio.

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

  4. Esamina i messaggi che sono stati inviati.

    1. Nel MQTT client, sotto Abbonamenti, c'è un punto verde accanto ai due argomenti a cui ti sei iscritto in precedenza.

      I punti verdi indicano che uno o più nuovi messaggi sono stati ricevuti dall'ultima volta che li hai guardati.

    2. Sotto Subscriptions (Sottoscrizioni), scegli device/+/data (dispositivo/+/dati) per verificare che il payload del messaggio corrisponda a quello che hai appena pubblicato e assomigli a questo:

      { "temperature": 28, "humidity": 80, "barometer": 1013, "wind": { "velocity": 22, "bearing": 255 } }
    3. Sotto Subscriptions (Sottoscrizioni), scegli device/data/temp (dispositivo/dati/temp) per verificare che il payload del messaggio ripubblicato sia simile a questo:

      { "device_id": "22", "temperature": 28 }

      Nota che il valore device_id è una stringa tra virgolette e il valore temperature è numerico. Questo perché la funzione topic() ha estratto la stringa dal nome dell'argomento del messaggio di input mentre il valore temperature utilizza il valore numerico dal payload del messaggio di input.

      Se desideri rendere il valore device_id un valore numerico, sostituisci topic(2)nell'istruzione query della regola con:

      cast(topic(2) AS DECIMAL)

      Nota che la trasformazione del valore topic(2) in un valore numerico funzionerà solo se la parte dell'argomento contiene solo caratteri numerici.

  5. Se si vede che il messaggio corretto è stato pubblicato nell’argomento device/data/temp (dispositivo/dati/temp), la regola ha funzionato. Scopri di più sull'azione Ripubblica regola nella sezione successiva.

    Se non vedi che il messaggio corretto è stato pubblicato negli argomenti device/+/data (dispositivo/+/dati) o device/data/temp (dispositivo/dati/temp), consulta i suggerimenti per la risoluzione dei problemi.

Risoluzione dei problemi della regola di ripubblicazione dei messaggi

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.

  • Non vedi il tuo messaggio ripubblicato nel client MQTT

    Affinché la regola funzioni, deve disporre della policy corretta che la autorizzi a ricevere e ripubblicare un messaggio e deve ricevere il messaggio.

    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 l'argomento del messaggio ripubblicato nell'operazione della regola

      L'argomento a cui l'azione della regola Ripubblica pubblica il nuovo messaggio deve corrispondere all'argomento a cui ti sei iscritto nel client. MQTT

      Apri la regola creata nella console e controlla l'argomento in cui l'operazione della regola ripubblicherà il messaggio.

    • 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 a ripubblicarli sono specifiche degli argomenti utilizzati. Se si modifica l'argomento utilizzato per ripubblicare i dati del messaggio, è necessario aggiornare il ruolo dell'operazione della regola per aggiornare la policy in modo che corrisponda all'argomento corrente.

      Se si sospetta che questo sia il problema, modificare l'operazione Ripubblica regola e creare un nuovo ruolo. I nuovi ruoli creati dall'operazione della regola ricevono le autorizzazioni necessarie per eseguire queste operazioni.

Fase 3: Esamina i risultati e i passaggi successivi

In questo tutorial
  • Hai utilizzato una semplice SQL query e un paio di funzioni in un'istruzione Rule Query per produrre un nuovo messaggio. MQTT

  • Hai creato una regola che ha ripubblicato il nuovo messaggio.

  • Hai usato il MQTT client per testare la tua AWS IoT regola.

Passaggi successivi

Dopo aver ripubblicato alcuni messaggi con questa regola, provare a sperimentarla per verificare come la modifica di alcuni aspetti del tutorial influisca sul messaggio ripubblicato. Ecco alcune idee per iniziare.

  • Cambia il device_id nell'argomento del messaggio di input e osserva l'effetto nel payload del messaggio ripubblicato.

  • Modifica i campi selezionati nell'istruzione query della regola e osserva l'effetto nel payload del messaggio ripubblicato.

  • Prova il prossimo tutorial di questa serie e scopri come Tutorial: invio di una SNS notifica Amazon.

L'operazione Ripubblica regola utilizzata in questo tutorial consente inoltre di eseguire il debug delle istruzioni di query della regola. Ad esempio, è possibile aggiungere questa operazione a una regola per verificare come l'istruzione della regola query formatta i dati utilizzati dalle relative operazioni delle regole.