Passa al contenuto principale

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.

Alt text

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

Alt text

*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.

Alt text

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.