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

×

Warning message

You can't delete this newsletter because it has not been sent to all its subscribers.

 

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.

 

 

Lettura sensori

La lettura dei valori dei sensori avviene tramite gli oggetti Gas dichiarati globalmente tramite le socket su cui è stata installata la sonda sensore.

 

Tramite questi oggetti è possibile ottenere la concentrazione del gas di ciascuna sonda sensore, e come da documentazione si può ottenere i valori di temperatura, umidità e pressione. In particolare questi ultimi tre saranno letti di default tramite la sonda sensore BME280 in caso il dispositivo ne sia provvisto, nel caso in cui non ci sia la sonda sensore BME280 sarà possibile leggere solamente la temperatura dal sensore interno al dispositivo.

Quindi ogni sensore sarà prima acceso, dopodiché utilizzato per leggere i valori di concentrazione del Gas, temperatura, umidità e pressione, ed infine spento per una maggiore autonomia della batteria.

Con i tre valori di temperatura umidità e pressione ottenuti da i tre gas_sensor sarà poi calcolato un valore medio che sarà utilizzato come valore da inviare al broker.

Le concentrazioni dei Gas sono tutte acquisite in PPM, la temperatura è acquisita in Gradi Celsius, l’umidità in %RH, e la pressione viene acquisita in Pascal ma convertita prima dell’invio in hPascal.

Creazione stringa DateTime e Json per body chiamata POST

La funzione per la creazione della stringa DateTime e del Json Payload da inviare  al broker consistono in operazioni che permettono di creare una stringa che indicata la data e l’ora nel formato UTC che indica la data e l’ora di rilevamento dei valori dei sensori, e che permette di creare il Json corretto, formattato secondo lo standard definito dall’Orion Broker. ()

 

Invio dati tramite chiamata POST

Infine la funzione di invio dei valori letti dai sensori accende il modulo 4G, effettua un check della rete a cui il modulo si collega, effettua la chiamata post per l’aggiornamento del contesto nel broker, e spenge il modulo 4G per aumentare la durata della batteria del dispositivo.

 

Creazione Dashboard su Snap4city

La parte finale riguarda la creazione di due Dashboard che mostrasse gli andamenti dei valori dei sensori dei due dispositivi.

Per creare le Dashboard su Snap4city si accede alla piattaforma, si procede nella sezione relativa alle Dashboard, e si clicca sul bottone “New Dashboard”. A questo punto c’è solo da seguire la Three Stage Wizard:

  1. Inserimento del titolo della dashboard e scelta di eventuale template.
  2. Selezione Data and Widget che si vuole inserire nella Dashboard.
  3. Conferma e istanziazione della Dashboard.

Le due Dashboard create possono essere visualizzate dopo aver fatto il login su Snap4city ai sequenti link: https://www.snap4city.org/dashboardSmartCity/view/index.php?iddasboard=Mjk3MA== e https://www.snap4city.org/dashboardSmartCity/view/index.php?iddasboard=Mjk2OQ==