HOW TO: setup Libelium Waspmote Plug&Sense Smart Environment PRO IOT Device to work on Snap4City

 

Il passo iniziale è quello di studiare il dispositivo, comprendere i sensori e le misure che possono effettuare, in modo da creare un modello che rappresenti correttamente il dispositivo.

 

 

Tramite la piattaforma Snap4city viene creato un modello. Dopo essersi registrati su Snap4city ed ottenuto il ruolo minimo di “Area Manager”, il quale ha i permessi necessari, è possibile accedere alla lista dei modelli tramite il menu laterale ( IOT Directory and Devices -> IOT Device Models ) e andare a creare un nuovo modello tramite il bottone in alto a destra “New Model”.

Nella finestra che si apre è possibile andare ad inserire tutte le informazioni del modello: le informazioni generali, l’IoT Broker, gli Static Attributes e i Values.

Nella tab sulle informazioni generali si deve inserire oltre a nome e descrizione del modello, il tipo di device che utilizza questo modello, e la tipologia di generazione delle chiavi che serviranno per autenticarsi per controllare il device.

Per quanto riguarda l’IoT broker si deve andare a selezionare uno dei broker presenti sulla piattaforma Snap4city, il tipo di protocollo utilizzato per l’ingestion dei dati e il formato utilizzato per gestirli.

Infine nella tab Values si devono inserire i campi che vogliamo che il modello possieda, per ciascuno di questi oltre al nome dovrà essere specificato il tipo di dato che quel campo rappresenta, il tipo di valore del dato di quel campo e l’unità di misura del valore, e dovranno essere coerenti con i dati che verranno mandati dai device.

 

 

Dopo avere creato il modello va creato il o i device che rappresentano i dispositivi fisici (Digital TWIN) all’interno della piattaforma. Per crearli si accede alla lista completa dei devices tramite il menu laterale (IOT Directory and Devices -> IOT Device) e cliccando sul bottone in altro a destra “New Device” si può andare crearli.

Nella creazione del device verrano inserite: le informazioni generali come l’identificativo del device e il tipo di device, sotto la voce model si seleziona il modello che abbiamo creato e che vogliamo utilizzare con il dispositivo che si sta creando, la selezione del modello automaticamente aggiungerà gli attributi statici e i valori che sono stati specificati nel modello selezionato, sarà poi necessario cliccare sul bottone per la generazione delle chiavi in modo da ottenerne due che serviranno insieme al Device Identifier , ad identificare il device su Snap4city ed autenticarsi per poterlo gestire. Infine la selezione del punto geografico di dove sarà posizionato il dispositivo hardware.

 

       Come inviare i dati su Snap4city

La comunicazione tra i dispositivi hardware e la piattaforma Snap4city avviene tramite il Broker, il quale si interpone tra il dispositivo e la piattaforma cloud, fornendo a quest’ultima, l’informazione che riceve dal dispositivo in un formato standardizzato. I vantaggi derivanti dall’utilizzo di un Broker sono principalmente:

  • Riduzione accoppiamento tra dispositivi e cloud con incremento sicurezza della trasmissione.
  • Device shadowing, che fa si che eventuale indisponibilità del dispositivo non generi nessun’eccezione, in quanto è il Broker che comunica con il cloud.
  • Gestione dell’intero ciclo vitale delle informazioni (aggiornamenti del contesto, query, registrazioni, sottoscrizioni).

In questo caso per entrambi i dispositivi, come è stato specificato nella creazione dei modelli e dei dispositivi su Snap4city, è stato scelto di utilizzare l’Orion Broker messo a disposizione dalla piattaforma Cloud.

Nello swagger su km4city ( https://www.km4city.org/swagger/external/index.html ) è possibile consultare l’API relative all’Orion Broker, selezionando in alto a destra “Orion Broker k1-k2 Authentication”.

HTTP invece di HTTPS

Dato che su entrambi i dispositivi i moduli GPRS/GSM e 4G non era supportato https, è stato necessario l’utilizzo di un Access Point diverso ( http://iot-app.snap4city.org:80 invece di https://broker1.snap4city.org:8080 ) basato su http in cui il dato è stato protetto tramite l’utilizzo di k1 e k2 invece che con il certificato.

Aggiornamento del contesto

In conclusione l’invio dei dati si riduce ad una chiamata post di aggiornamento del contesto del broker in cui nell’url si passa sia il deviceId che le chiavi k1 e k2 e il payload è un json formattato in maniera standardizzata secondo l’Orion Broker.

L’url sarà quindi della forma

http://iot-app.snap4city.org:80/orion-broker/v1/updateContext?elementid=ELEMENTID&k1=K1&k2=K2

Verranno mostrati poi, nelle sezioni relative ai due dispositivi, degli esempi del Json payoload delle chiamate per l’aggiornamento del contesto.

 

 

Libelium Waspmote Plug&Sense Smart Environment PRO

Aspetti generali e hardware

Il Waspmote Plug & Sense Smart Enveiroment Pro ( https://development.libelium.com/gases_pro_sensor_guide/ ) è un dispositivo della linea Plug & Sense ( https://development.libelium.com/plug-and-sense-technical-guide/ ) prodotto da Libelium, che è stato progettato per monitorare i parametri ambientali come la temperatura, l’umidità, la pressione, le polveri nell’aria e 16 tipi diversi di gas. Consiste in un robusto involucro impermeabile con prese esterne specifiche per collegare i sensori, il pannello solare, le antenne, la socket per la SIM per la rete Cellular, ed il cavo USB per riprogrammare il nodo.

 

SENSORI

La capacità di rilevamento sono fornite dalle sonde sensori che si possono attaccare alle socket del dispositivo, al massimo ogni dispositivo può supportare contemporaneamente 6 sonde sensore.

Ogni sonda sensore deve andare una socket dedicata, dato che ogni sensore ha diversi requisiti di potenza, consultare sempre la documentazione per conoscere le socket in cui può essere inserita ogni sonda sensore. Le sonde sensore in dotazione al momento sono 4:

  • BME280 Temperature + Humidity + Pressure la cui socket a disposizione è la E
  • Carbon Monoxide (CO) for low concentrations [Calibrated] le cui socket a dispozione sono: A, B, C, F
  • Nitric Oxide (NO) for low concentrations [Calibrated] le cui socket a dispozione sono: A, B, C, F
  • Nitric Dioxide (NO2) high accuracy [Calibrated] le cui socket a dispozione sono: A, B, C, F
     

 

COMUNICAZIONE

Per quanto riguarda la comunicazione invece questo dispositivo può supportare diversi moduli radio, nel dispositivo in dotazione il modulo radio a disposizione è il modulo “4G EU/BR v2” che supporta i protocolli HTTP, FTP, TCP, UDP. Sarà quindi necessaria una scheda SIM di un provider di telefonia mobile per poter comunicare, la scheda SIM dovrà essere inserita nell’apposito inserto laterale accanto alla porta per il cavo di programmazione.

 

AUTONOMIA

Il dispositivo oltre a fornire un attacco per l’alimentazione esterna tramite pannello solare o batteria esterna, è provvisto di una batteria ricaricabile interna da 6600 mA·h. E viene acceso tramite il pulsante laterale vicino alla socket per la scheda SIM.

 

Programmazione dispositivo

Per poter programmare il nodo è necessario scaricare dal sito ufficiale di Libelium ( https://development.libelium.com/waspmote-ide-v06/ )l’ambiente di sviluppo dedicato. Tramite il cavo USB è possibile collegare il dispositivo al PC e caricare sopra al nodo il codice sorgente prodotto. Per il corretto caricamento del codice sorgente è necessario selezionare dagli strumenti dell’IDE la scheda e la porta seriale corretta, inoltre il dispositivo deve essere acceso quando si carica il codice.

 

Il codice

Il codice è composto da un unico file “LibeliumSmartEnv” nel quale e presente l’intero sketch per la programmazione del nodo. Il linguaggio di programmazione è C/C++, e vengono utilizzate le funzioni presenti nella libreria messa a disposizione da libelium, la cui documentazione è possibile trovare sul sito ufficiale ( https://development.libelium.com/plug-and-sense/documentation ).

Anche qui come in Arduino le due funzioni principale di uno sketch sono la funzione setup() e la funzione loop(). La prima eseguita una volta all’avvio del dispositivo, la seconda eseguita ciclicamente.

Nella funzione setup() viene solamente avviato e settato il Clock Real Time e settato l’APN con i valori delle variabili globali. Per quanto riguarda il Clock Real Time ogni volta che si va a caricare lo sketch sul dispositivo è necessario settare manualmente l’orario UTC modificando la riga di codice evidenziata in figura. Mentre per quanto riguarda l’APN per il corretto funzionamento dovranno essere modificati i valori delle variabili gloabli in base al Service Provider della scheda SIM utilizzata per la comunicazione 4G.

 

 

 

 

 

 

Nella funzione loop() vengono eseguite sequenzialmente 4 operazioni:

  1. Lettura dei sensori
  2. Creazione stringa DateTime
  3. Creazione Json da inserire nella chiamata post per l’aggiornamento del contesto nel broker
  4. Esecuzione chiamata post per aggiornamento contesto nel broker.