venerdì 25 dicembre 2015

Una rete di monitoraggio sensori ambientali

Il modo migliore per capire l'Internet delle cose è viverla, costruirla e farla funzionare.

Il prototipo del nodo sensori remoto
E' stato questo il motivo, insieme al mio innato istinto del "make", che mi ha spinto a buttarmi, nonostante il limitatissimo tempo libero che mi resta, in un progetto di monitoraggio di grandezze ambientali da accedere via web.
Il progetto è parte di un progetto molto più grande, intrapreso dall'Ecovillaggio TempoDiVivere e avente come obiettivo quello di mettere a punto un sistema di generazione termica basata su processi di digestione di compost. Non mi dilungo su di esso, essendoci tutte le informazioni sul sito dell'ecovillaggio a proposito di Thermocompost.

Nell'ambito di questo progetto, è sorta la necessità di monitorare alcune grandezze fisiche a distanza e possibilmente diffondere questo monitoraggio via web.
In aggiunta, in una fase successiva, a fronte di eventi e soglie sulle misurazioni effettuate, potranno esserci delle attuazioni, ad esempio di allarmi o elettrovalvole.

Un vero progetto IoT e di integrazione di sistemi, una grande opportunità

In questo progetto, la priorità è stata quella di avere un prototipo che monitorasse almeno temperatura ed umidità. I sensori si devono trovare ad una distanza massima di 50m da un nodo di controllo centrale con topologia a stella.
Le misure devono essere raccolte in un database. Le misure devono essere accessibili anche via web, in maniera sicura. Le misure devono essere mostrate come in un cruscotto misure (dashboard).

Fin dall'inizio sapevo che applicazioni di questo tipo esistono sicuramente da qualche parte. Tuttavia avevo davanti a me l'opportunità di progettare quasi completamente un sistema di monitoraggio IoT e di fare una esperienza importante in prima persona di questo tipo di progettazioni e di piattaforme di sviluppo.

Descriverò alcuni approcci fondamentali e le conseguenti scelte fatte finora nella progettazione.

Un primo approccio è stato quello di muovere la complessità e la logica più lontano possibile dai sensori remoti. Il nodo sensore deve essere più semplice possibile e fare il minimo indispensabile per i compiti che gli sono richiesti.
Così come motore di del sensore ho utilizzato un Arduino Micro, che dovrà solo leggere i sensori su richiesta del nodo centrale e rimandare indietro le misure. 

Come sensori ho usato, per ora, i DHT-22, interessanti sensori intelligenti digitali, che misurano insieme temperatura ed umidità e li restituiscono in maniera seriale sui pin di I/O di una qualunque scheda di controllo. Arduino dispone di librerie già pronte per i DHT-22.

Per la comunicazione ho scelto i transceiver XBee. A dire il vero la scelta non mi ha convinto al 100%, ma con il breve tempo a disposizione, è stata quasi obbligata. Il problema è che gli XBee sono un po costosi e fanno molte più cose di quelle che mi servono effettivamente. A me serve solo un ricetrasmettitore seriale FSK in banda 2,4GHz, non una vera e propria scheda intelligente. Ma per ora posso tenermi gli XBee.

Nel progetto finale il controllo centrale dovrebbe essere operato da una scheda Linux embedded tipo Udoo o Raspberry, ma per i tempi del prototipo, tale controllore sarà tutt'uno con il PC di gestione.

Un'altra scelta chiave del progetto è quello di usare il paradigma REST per lo scambio e l'accesso ai dati. Il REST, in estrema sintesi, è un architettura che unifica tutte le interfacce dei componenti software coinvolti nel sistema attraverso un indirizzamento simile alle richieste http effettuate, per esempio, dai browser verso i siti internet.
La forza dei sistemi REST è l'unificazione dell'interfaccia, che permette l'interconnessione di diversi software senza alcuna modifica all'architettura. I sistemi integrati possono essere espansi, modificati, sostituiti senza che tutti gli altri componenti debbano cambiare alcunchè. L'unica cosa da cambiare sono le richiesre http che dovranno essere adattate ai destinatari delle stesse, ma si tratta di uno sforzo minimo. 
Altro grande vantaggio dei sistemi REST è l'astrazione dell'accesso web, per cui non fa alcuna differenza se un componente software dialoga con un altro componente nello stesso server o in un altro server della LAN, o addirittura dall'altra parte del mondo via web. Il software non deve essere cambiato, in linea di principio.

Per questo progetto vorrei utilizzare un motore di REST chiamato DreamFactory, un vero tuttofare dell'integrazione di sistemi via web.

Allo stato attuale, ho appena finito il prototipo del nodo sensore (che vedete in alto) e devo programmare il processo Python per la scrittura dei dati nel database di DreamFactory via REST.

C'è molto da scoprire, e molte novità a venire!





2 commenti:

  1. Ciao Alberto
    Anche io sto lavorando su un progetto simile, ma sto usando i moduli NRF24, che mi stanno dando gioie e dolori.
    Userò sicuramente le tue esperienze per migliorare la mia soluzione.
    Paolo

    RispondiElimina
  2. Ciao Paolo
    Grazie del commento. La tua è stata una scelta molto interessante e sicuramente più efficiente di quella di questo prototipo. La mia è stata una scelta veloce per poter uscire subito con qualcosa che funzionasse.
    Se ti va, puoi dirmi in breve quale è stata la tua esperienza con il NRF24, un modulo che non ho mai usato finora.
    A presto!

    RispondiElimina