Notizie

Alcune idee per i topic MQTT

Scritto da stefano

Se in azienda si hanno a disposizione delle macchine che comunicano con MQTT (direttamente o attraverso un adapter) è importante decidere con attenzione come saranno organizzati i topic per evitare conflitti, errori o anche manomissioni.

Particolare attenzione deve essere posta nel chiedere al produttore di poter impostare nella macchina il prefisso del topic, essendo questa una semplicissima implementazione che ci evita di dover fare un remapping con altri strumenti.

Ipotizziamo quindi di avere una batteria di macchine simili installate nel reparto “coloratura”. Ogni macchina dovrà avere un identificativo univoco e questo può essere il numero di matricola  un campo configurabile libero. Per il produttore la scelta migliore è quella di utilizzare il numero di matricola come valore predefinito, lasciando però la possibilità di modificarlo. Questa impostazione assicura che la macchina “out-of-box” abbia un topic senza conflitto con altre macchine uguali.

Nella nostra ipotesi, le macchine del reparto “coloratura” avranno come nel topic il suffisso coloratura/ (i topic non dovrebbero iniziare con /) seguito dall’identificativo della macchina. Ad esempio /coloratura/macchina-1. Nel caso di una batteria di macchine uguali, è interessante pensare ad un raggruppamento ulteriore, ad esempio: coloratura/tricromia/macchina-1. Tutte le macchine che fanno tricromia possono essere quindi immediatamente identificare ed i loro topic manipolati a livello di broker.

Autenticazione e accettazione delle pubblicazioni

L’autenticazione è fondamentale per evitare che “qualcuno” possa pubblicare per conto di un’altro, utilizzando il suo topic. Anche se in azienda possiamo pensare di essere in un ambiente sicuro (ma non lo è), utilizzare l’autenticazione e le regole di pubblicazione aiuta ad evitare errori difficili da scovare.

L’autenticazione per mezzo di username e password consente innanzi tutto di accettare da parte del broker solamente topic di dispositivi riconosciuti, in secondo luogo (ed è la cosa più importante) consente di impostare delle regole di accettazione del messaggio.

Una regola fondamentale è quella di accettare la pubblicazione in un topic solo se il topic contiene il nome utente. In questo modo, l’autenticazione garantisce la provenienza del messaggio, la regola impedisce di pubblicare su topic altrui.

La macchina 1 nel nostro esempio, quindi, pubblicherà su coloratura/tricromia/macchina-1 e si autenticherà con nome utente “macchina-1” e relativa password. Il broker avrà internamente una regola del tipo “accetta solo pubblicazioni da topic con formato coloratura/tricromia/{username}, dove evidentemente username è il nome utente di chi sta pubblicando.

Organizzazione del topic

Per macchine che non hanno molte cose da pubblicare potrebbe essere sufficiente un solo topic che contiene tutte le informazioni rilevanti. Ad esempio può essere spedito un JSON contenente solo le chiavi-valore che hanno subito una modifica oppure ogni volta tutti i valori.

E’ importante, vista la precedente struttura del topic, che i dati siano pubblicati in un sub-topic rispetto a quello principale, ad esempio coloratura/tricromia/macchina-1/data: questo semplifica operazioni di sottoscrizione e impostazioni di regole a livello di broker.

Prima il dispositivo o prima il dato?

Può esserci la tentazione di pubblicare i dati organizzati prima per tipologia e poi per dispositivo, ad esempio: temperatura/macchina-1 invece di macchina-1/temperatura. Sembra una struttura che permette di avere tutte le temperature sotto controllo. Normalmemte è una modalità che va evitata, salvo caso particolari, perché destruttura ciò che nel reparto produttivo è strutturato per reparti e macchine.

Molte volte questo formato viene proposto perché applicato in ambiti diversi dal reparto produttivo fatto di macchine. Ad esempio, se abbiamo un impianto con tanti sensori di temperatra lungo una linea di produzione, allora può aver senso strutturare il topic come temperatura/sensore-X perché in questo caso ci interessa effettivamente raccogliere tutte le temperature… ma non stiamo più parlando di macchine.

Riferimenti


Resta aggiornato, iscriviti alla newsletter

About the author

stefano

Leave a Comment