• Non ci sono risultati.

Architettura del framework Kura

2.2 Kura: un framework OSGi per gateway IoT

2.2.4 Architettura del framework Kura

Tutti i componenti di Kura sono progettati come servizi OSGi configurabili che espongono API e generano eventi. Per la maggior parte sono completamente realizzati in Java ma una parte di essi, avendo dipendenze dal sistema Linux sottostante, sono invocati attraverso la Java Native Interface6.

Figura 2.9: Architettura del Framework Kura[33]

In Figura 2.9 è mostrata l’architettura del Framework Kura, che viene rilasciato con i seguenti servizi: Input/Output: Kura fornisce servizi in grado di semplificare l’accesso ai dispositivi di input ed output. In

particolare il Device Abstraction layer fornisce:

6La Java Native Interface, o JNI, consente ad una classe Java di interagire con il cosiddetto “codice nativo”, specifico di un

• accesso alla porta seriale attraverso le API javax.comm 2.0 o OSGi I/O connection

• accesso alle porte e agli eventi USB sfruttando javax.usb, le API HID, ed estensioni perso- nalizzate

• accesso all’interfaccia Bluetooth mediante le API javax.bluetooth o OSGi I/O connection • un sistema di posizionamento per informazioni GPS ottenute da stream NMEA

• un Clock Service per la sincronizzazione del clock di sistema • Kura API per accesso a GPIO/PWM/I2C/SPI

Servizi di Comunicazione: Kura mette a disposizione degli sviluppatori tre differenti soluzioni di comuni- cazione, tutte incentrate su MQTT:

DataTransportService: fornisce un accesso semplificato alle API offerte da Paho per l’utilizzo di MQTT, esentando lo sviluppatore dal dover considerare la complessità del layer di rete e del protocollo di pubblicazione. Il servizio consente ai clienti di connettersi al broker, inviare messaggi e ricevere quelli che saranno pubblicati nei topic a cui si sottoscriveranno in modo trasparente.

DataService: utilizza il DataTransportReceiver, a cui aggiunge funzionalità per la gestio- ne della connessione con il broker, l’invio di messaggi con priorità ed un meccanismo di buffering per messaggi.

CloudService: estende le funzionalità del DataService permettendo di ottenere comunicazio- ni più complesse della comune publish-subscribe, come ad esempio request-response. Gestisce in multiplexing un singolo canale di comunicazione verso il broker, partizionando in modo op- portuno i topic utilizzati da dispositivi ed applicazioni differenti.

CloudServicefornisce, inoltre, un modello per la rappresentazione del payload che prende il nome di KuraPayload. Questo modello ha la stessa struttura dati, ma con nomi differenti, di EdcPayload– creata da Eurotech per comunicare con la piattaforma Everywhere Cloud – ed è composta da informazioni quali:

setOn: contiene l’istante in cui il messaggio è stato inviato a Kura.

metrics: è una struttura dati composta da tre campi: nome, valore e tipo di dato. Queste informazioni possono essere utili per effettuare una ricerca all’interno dei messaggi. Ogni payload può avere zero o più metrics.

position: è un campo opzionale che può contenere le informazioni geografiche associate al payload

body: può contenere informazioni aggiuntive di qualsiasi tipo. Il campo verrà memorizzato dalla piattaforma, ma non verrà utilizzato per analisi statistiche

Il servizio provvede anche alla serializzazione del payload con Google Proto Buf7in modo da

limitare ulteriormente la banda necessaria all’invio.

7Protocol Buffer è un meccanismo estendibile ed indipendente dal linguaggio e dalla piattaforma che consente la serializzazione di

I servizi di comunicazione illustrati sono senza dubbio utili, ma presentano alcuni difetti. Su tutti il fat- to che ci si possa connettere ad un solo broker o che, a partire dall’ultima versione 1.3, le librerie Paho MQTT siano state inserite nel core bundle di Kura e non siano rese disponibili all’esterno causando, di fatto, l’impossibilità di utilizzare le librerie se non importandole nuovamente.

Remote Management: consente la gestione remota delle applicazioni IoT installate in Kura, compreso il lo- ro deploy, aggiornamento e configurazione. Si basa sul ConfigurationService e sul CloudService ConfigurationService: sfrutta ConfigurationAdmin e MetaTypeService definiti nella spe-

cifica OSGi per la gestione delle configurazioni dei bundle. Il servizio offre, in aggiunta a quanto già presente in OSGi, una semplificazione nell’accesso alle configurazioni correnti dei bundle che im- plementano l’interfaccia ConfigurableComponent, un servizio di snapshot con cui è possibile memorizzare le configurazioni di tutti i servizi in esecuzione nel container, la possibilità di esegui- re un rollback ad uno snapshot precedente e la possibilità di accedere alle configurazioni da remoto utilizzando il CloudService.

Networking: fornisce API che consentono l’analisi e la configurazione delle interfacce di rete presenti nel gateway come Ethernet, WiFi e reti cellulari

Watchdog Service: registrando i componenti critici nel servizio watchdog consentirà il reset del sistema attraverso il watchdog hardware quando verranno rilevati dei problemi

Web administration interface: offre, all’interno del container, una console di gestione web-based per la configurazione del gateway

Con Kura, dunque, gli sviluppatori avranno a che fare con una infrastruttura standard per la gestione di eventi, che comprende il framework ed una serie di servizi di default. Un’applicazione viene distribuita come bundle OSGi e viene eseguita nel container unitamente ad altri componenti Kura.

Utilizzando la libreria Eclipse Paho, il framework fornisce un servizio di store and forward per tutte le applicazioni che, dopo aver acquisito localmente informazioni, desiderano inoltrare i dati ad un broker, o ad altri servizi cloud, sfruttando la leggerezza del protocollo MQTT.

Le applicazioni possono essere implementate da remoto come pacchetti OSGi e la loro configurazione può essere importata/esportata tramite un servizio di snapshot- Questo servizio può essere utilizzabile inoltre per configurare altri servizi Kura, compatibili con OSGi, che consentono di gestire le impostazioni di rete del gateway –DHCP, DNS, firewall, WiFi, routing–. Altri servizi offerti da Kura che possono essere utilizzati dai bundle sono:

position servizio GPS per geolocalizzare i gateway

click servizio che garantisce una buona sincronizzazione temporale

db utile per la memorizzazione di informazioni in un database SQL embedded servizi di processo e watchdog garantiscono che tutto funzioni correttamente

Per comunicare con i dispositivi, le applicazioni Kura possono collegarsi all’infrastruttura dei device sfrut- tando le funzionalità di networking standard di Java o di protocolli opzionali come Modbus o CAN Bus.

Con i servizi OSGi per le comunicazioni seriali (USB e Bluetooth) che consentono l’astrazione dell’hard- ware, Kura consente l’accesso mobile ad un’ampia gamma di dispositivi. È garantita anche la possibilità di incorporare nel gateway dell’hardware addizionale, grazie alle API che consentono l’accesso ai dispositivi collegati via GPIO, I2C, PWM o SPI.

Il framework Kura, inoltre, offre un front-end web che consente allo sviluppatore/amministratore di attivare/disattivare da remoto tutti i bundle, o di mettere a disposizione una pagina di configurazione bundle- specific.

Unendo tutte queste caratteristiche, insieme al supporto degli strumenti di Eclipse, il gruppo di lavoro IoT della Eclipse Foundation punta a proporre Kura come scelta di riferimento per gli sviluppatori Java di applicazioni Enterprise e IoT/M2M.

Progettazione del servizio

Per fare sì che un gateway IoT che esegue un’istanza di Kura possa essere individuabile dovrà avere in esecuzione un bundle che metta a disposizione un servizio di discovery.

In questo progetto si è pensato di realizzarne uno che, grazie all’utilizzo di un protocollo leggero come MQTT, possa eseguire il lookup da qualsiasi dispositivo smart dotato di connessione ad Internet. Nello specifico si è scelto realizzare oltre al servizio per il gateway Kura, in esecuzione su Raspberry Pi B+, anche un client per smartphone Android che consente la ricerca del gateway più vicino, la connessione ad esso ed infine la trasmissione di dati relativi ai sensori di interesse delle applicazioni nel framework Kura.