MQTT – Topics

luca 08/11/2016 0

Nella prima parte di questo tutorial ho introdotto il concetto di topics (argomenti in italiano). Ogni messaggio inviato ad un MQTT broker deve essere associato ad un topic e i client che si collegano al broker decidono quali messaggi ricevere sottoscrivendo uno o più topics.

Oggi vedremo più in dettaglio il formato dei topics e le diverse modalità di sottoscrizione.

Un topic è definito da una stringa (formato UTF-8) e consiste in uno o più livelli, separati da uno slash.

Ecco alcuni esempi di topic:

comandi
casa/temperatura
orto/pomodori/umidità

Un topic deve essere composto da almeno un carattere e può contenere spazi (anche se è sconsigliato).

Attenzione: i topic sono case sensitive, quindi i due topic Casa/Temperatura e casa/temperatura sono diversi!

Per utilizzare un topic non è necessario prima definirlo/crearlo sul broker: il client che invia i messaggi può specificare un qualsiasi topic, purché sia sintatticamente valido.

Wildcards

Un client può sottoscrivere uno o più topic. La sottoscrizione può avvenire in maniera puntuale, specificando il nome esatto del topic al quale ci si vuole sottoscrivere. In alternativa è possibile utilizzare due wildcards, ovvero caratteri speciali per sottoscrivere un insieme di topics.

Il primo wildcard è il carattere +. Tale carattere consente di sottoscrivere un singolo livello di topics.

Vediamo un esempio: sottoscrivendo il topic casa/+/temperatura si effettua la sottoscrizione a tutti i topics che contengono una qualsiasi scritta al posto del carattere +, ad esempio:

  • casa/soggiorno/temperatura
  • casa/cucina/temperatura
  • casa/terrazzo/temperatura

Ecco invece alcuni esempi di topics che non sono sottoscritti:

  • garage/temperatura
  • casa/soggiorno/umidità
  • casa/terrazzo/destro/temperatura

L’ultimo esempio spiega nuovamente come il carattere + sia wildcard per un solo livello (quindi non corrisponda ai due livelli terrazzo/destro dell’esempio).

Il carattere wildcard multilivello è #. Tale carattere deve occupare sempre la posizione finale del topic e deve essere preceduto dal carattere /.

Ad esempio, se si sottoscrive il topic casa/interno/# si riceveranno i messaggi dei seguenti topics:

  • casa/interno/temperatura
  • casa/interno/cucina/temperatura
  • casa/interno/cucina/umidità

mentre non si riceveranno i messaggi dei seguenti topics:

  • casa/esterno/temperatura
  • garage/umidità
Se si sottoscrive il topic # (senza specificare alcuna radice), si riceveranno tutti i messaggi inviati al broker

Proviamo!

Possiamo verificare quanto spiegato sopra grazie al nostro mosquitto. Dopo aver lanciato il server, proviamo a sottoscrivere il topic home/+:

mosquitto_sub.exe -t home/+ -v

(utilizziamo l’opzione -v per visualizzare, insieme al messaggio, anche il topic al quale è stato pubblicato).

Se ora inviamo messaggi a diversi topics, possiamo verificare quali vengono ricevuti e quali no:

mqtt-wild4

Egualmente per il wildcard #:

mqtt-wild3

Leave A Response »

Questo sito usa i cookie per poterti offrire una migliore esperienza di navigazione maggiori informazioni

Questo sito utilizza i cookie per fonire la migliore esperienza di navigazione possibile. Continuando a utilizzare questo sito senza modificare le impostazioni dei cookie o clicchi su "Accetta" permetti al loro utilizzo.

Chiudi