Flussi
I flussi MQTT più comuni nell'applicazione.
Annuncio di un componente
I componenti vengono annunciati ogni volta che il microcontrollore (o nel nostro caso il simulatore) viene avviato. L'annuncio avviene tramite la pubblicazione di un messaggio contenente
IDCOMPONENTE_TIPO
sul topic /announce, al quale il connector è in ascolto.
Al momento dell'arrivo di questo messaggio il connector salverà nella tabella sensori o attuatori (discriminando in base al tipo) l'id del nuovo componente, il quale sarà da ora in poi disponibile all'associazione.

Associazione di un componente
Quando l'utente vuole aggiungnere un componente installato nel sistema, deve prendere nota del codice*, e aggiungerlo nel sistema dal dettaglio di un campo specifico.
L'utente dal frontend quindi scrive il codice del componente da aggiungere, e tramite l'endpoint /approva effettua l'associazione nel database del componente al campo specifico, aggiungendo id_campo nella tabella sensore o attuatore, a seconda del componente.
Se ogni cosa è andata per il verso giusto fin qui, si procede pubblicando un messaggio MQTT sul topic /association, sul quale il microcontrollore è in ascolto. Il formato del messaggio è di questo tipo:
IDAZIENDA_IDCAMPO_IDCOMPONENTE
Quando il microcontrollore lo riceve, verifica che l'id del componente sia tra quelli in suo possesso (verificabile nel suo state.json, dove sono stilati i suoi componenti) e in caso, salva nella eeprom (state.json) il nuovo campo topic, che coinciderà con il topic esclusivo del componente, dalla forma:
/<idazienda>/<idcampo>/S/<idcomponente>
per i sensori, o
/<idazienda>/<idcampo>/A/<idcomponente>
per gli attuatori

*nel nostro use case, il codice di ogni componente è fornito dopo l'installazione del sistema all'ipotetico cliente.
Pubblicazione delle letture
La pubblicazione delle letture inizia nel momento in cui il campo topic è presente in uno specifico componente, o meglio, da quando un componente è associato ad un campo. Il connector si mette in ascolto sul topic del nuovo sensore associato (sul quale il microcontrollore pubblica le letture). Il connector conosce il topic perchè nel momento in cui un messaggio viene pubblicato in association, si mette in ascolto sul topic che ne deriva dal parsing del messaggio ricevuto.
Il microcontrollore, invia ogni 20 minuti un valore intero sul topic specifico, e il connector provvede ad inserirlo nella giusta tabella del database.

Altri
Ci sono altri flussi MQTT più semplici, come ad esempio:
Eliminazione di un componente
Quando un componente viene eliminato, viene propagata la dissociazione anche ai microcontrollori pubblicando un messaggio del tipo
NULL_NULL_IDCOMPONENTE
nel topic /association sul quale ogni microcontrollore è in ascolto.
Irrigazione di un campo
L'irrigazione del campo avviene pubblicando un messaggio su un topic di un attuatore specifico, come:
/<idazienda>/<idcampo>/A/<idcomponente>
un messaggio del tipo:
START_20_<TIPO>
che indica di cominciare una irrigazione di 20 unità di irrigazione, in maniera bassa, media o alta (TIPO) che indica la velocità di irrigazione.