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.
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.
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/
MQTT device_id
/datadevice_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/temp
argomento.
Ad esempio, il payload di un MQTT messaggio con l'device/22/data
argomento è 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/temp
argomento 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
-
In Rules (Regole), scegli Create (Crea) e inizia a creare la nuova regola.
-
Nella parte superiore di Create a rule (Crea una regola):
-
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.
-
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.
-
-
In Rule query statement (Istruzione query regola) di Create a rule (Crea una regola):
-
In Utilizzo della SQL versione, seleziona
2016-03-23
. -
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 campotemperature
.
-
-
-
In Set one or more actions (Imposta una o più operazioni):
-
Per aprire l'elenco delle azioni della regola per questa regola, scegli Add action (Aggiungi operazione).
-
In Seleziona un'azione, scegli Ripubblica un messaggio su un argomento. AWS IoT
-
Nella parte inferiore dell'elenco delle azioni, scegli Configure action (Configura operazione) per aprire la pagina di configurazione dell'azione selezionata.
-
-
In Configure action (Configura operazione):
-
In Topic (Argomento), inserisci
device/data/temp
. Questo è l'MQTTargomento del messaggio che verrà pubblicato da questa regola. -
In Quality of Service (Qualità del servizio), scegli 0 - Il messaggio viene recapitato zero o più volte.
-
In Scegli o crea un ruolo a cui concedere AWS IoT l'accesso per eseguire questa azione:
-
Selezionare Create Role (Crea ruolo). Si aprirà la finestra di dialogo Create a new role (Crea un nuovo ruolo).
-
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.
-
Scegli Create role (Crea ruolo) per creare il ruolo e chiudere la finestra di dialogo.
-
-
Scegli Add action (Aggiungi operazione) per aggiungere l'operazione alla regola e tornare alla pagina Create a rule (Crea una regola).
-
-
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.
-
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
Per utilizzare il MQTT client per testare la regola
-
Nel MQTT client della AWS IoT console
, iscriviti agli argomenti di input, in questo caso, device/+/data
.-
Nel MQTT client, in Abbonamenti, scegli Sottoscrivi a un argomento.
-
In Subscription topic (Argomento sottoscrizione), inserisci l'argomento del filtro dell’argomento di input,
device/+/data
. -
Lascia gli altri campi ai valori predefiniti.
-
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
.
-
-
Effettua la sottoscrizione all'argomento che verrà pubblicato dalla regola:
device/data/temp
.-
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
. -
Lascia gli altri campi ai valori predefiniti.
-
Scegli Subscribe to topic (Effettua sottoscrizione all'argomento).
Nella colonna Subscriptions (Sottoscrizioni), sotto device/+/data (dispositivo/+/dati),
device/data/temp
viene visualizzato.
-
-
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.-
Nel MQTT client, in Abbonamenti, scegli Pubblica su argomento.
-
Nel campo Publish (Pubblica), inserisci il nome dell'argomento di input,
device/22/data
. -
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 } }
-
Per inviare il MQTT messaggio, scegli Pubblica su argomento.
-
-
Esamina i messaggi che sono stati inviati.
-
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.
-
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 } }
-
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 valoretemperature
è numerico. Questo perché la funzionetopic()
ha estratto la stringa dal nome dell'argomento del messaggio di input mentre il valoretemperature
utilizza il valore numerico dal payload del messaggio di input.Se desideri rendere il valore
device_id
un valore numerico, sostituiscitopic(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.
-
-
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 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.
-
-
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 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 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.