Internet delle Cose: idee ed esempi.

Pubblicato: luglio 14, 2015 in Programmazione, Programmazione & Software, Uncategorized
Tag:, , , ,

Lightbulb-0add8b56e2c9c54fce60e57a28f991c4E già da molto tempo che nel mondo dei sistemi embedded e del software ad esso relativo si parla di Iot ovvero di “Internet of things” che tradotto in italiano sarebbe: “Internet degli oggetti”.
Quanti di voi conoscono il significato di questo termine e soprattutto, quanti di voi possiede un oggetto di questo tipo?
Forse resterete sorpresi ma, secondo il report “The Internet of Things: The Future of Consumer Adoption ” sembrerebbe che almeno il 30% dei consumatori possegga già un dispositivo che rientra in questa categoria, ma il più delle volte non ne è consapevole.

Ma cosa sono gli oggetti IoT e cosa fanno?

Con il termine Internet of things si indica l’insieme delle tecnologie e degli oggetti, anche senza alcuna vocazione digitale, con possono essere connessi alla rete internet.
In altre parole, si tratta di tutti gli oggetti tecnologici in grado connettersi ad internet e dialogare con un server; rientrano in questa categoria le TV smart, i termostati intelligenti della vostra casa, gli orologi e bracciali indossabili (oggetti “wearable”) , i Google Glass o perchè no, anche il vostro ultimo strumento musicale digitale che avete da poco acquistato.

In effetti molti dei dispositivi elettronici che possedete ( anche i vostri elettrodomestici, o la vostra nuova centralina d’allarme), potrebbero avere le capacità di collegarsi ad internet, anche se in alcuni casi, queste funzionalità, non sono troppo evidenti o magari non vengono proprio utilizzate..

Il report di Acquity Group ha infatti rilevato una certa mancanza di interesse verso i dispositivi IoT, sia da parte degli utilizzatori che da parte dei produttori.
La domanda sorge spontanea: ma perchè se un dispositivo ha internamente le potenzialità per connettersi, per dialogare con un server, per essere controllato da un browser, l’azienda che lo produce non dovrebbe sfruttare a pieno questa possibilità e perchè gli utenti non dovrebbero trovare queste funzionalità “attraenti” o motivarne maggiormente il suo acquisto?

La principale barriera sul lato dei consumatori sembra essere la convinzione che l’utilizzo degli IoT non dia un valore aggiunto rispetto allo stesso oggetto “non connesso” mentre per i produttori, gestire un oggetto in grado di collegarsi ad un server e scambiare dati ed informazioni, crea molti problemi e molte complicazioni.index

Ma allora, perchè si costruiscono dispositivi che hanno queste capacità che poi non vengono sfruttate?

Le potenzialità sono fornite dall’hardware e dalle piattaforme tecnologiche e al giorno d’oggi, anche la CPU più scarsa, dispone di una connessione di rete e può ospitare uno stack TCPIP. Quindi nella maggior parte dei casi le funzionalità di connessione e dialogo in rete risultano essere quasi gratis, nei progetti e nella realizzaizone dei dispositivi.
Il problema è il software e nella gestione degli applicativi.
Ad esempio per controllare il nostro frigo “smart” dal nostro telefonino, sarà necessario dotarlo di un’App apposita, magari che giri su IOS, Android e Windows, inoltre è necessario avere un sistema Cloud per lo stoccaggio dei dati ed un backhand funzionale.
Quindi se da un lato questa possibilità offre interessantissime potenzialità, dall’altro richiede un grande investimenti di tempo e risorse per realizzare servizi  funzionali ed accattivanti.

A mia avviso, un punto di forte interesse degli oggetti IoT è quello di poter realizzare anche dispositivi più economici e più efficienti risparmiando sulla potenza di calcolo dei dispositivi e quindi anche sui consumi; infatti la connessione e la capacità di dialogare con un server permette di spostare le elaborazioni, almeno le più complesse, sui server nel cloud o magari di far cooperare più device in una sorta di cluster multi-client.
Un’altra interessante possibilità è quella di offrire servizi complessi che addirittura potrebbero non essere stati pensati al momento della realizzazione del sistema stesso ma che potrebbero essere implementati in futuro direttamente sui cloud.

Nel campo delle applicazioni musicali quali potrebbero essere i punti di interessa di questa tecnologia?
Ad esempio non avere in locale il database completo dei brani musicali o magari disporre solamente di quelli che si eseguono generalmente e lasciare nel “cloud” tutti gli altri da cui attingere nel caso di una “gentile richiesta”. In effetti il primo utilizzo che viene in mente quando si parla di un server cloud, è quello di utilizzarlo come un sistema di memorizzazione a lungo termine indipendenti dal dispositivo o per archiviare contenuti e conservare informazioni importanti sullo stato del dispositivo.
Ad esempio si potrebbe pensare di cambiare “macchina” e ritrovarsi automaticamente tutto il proprio repertorio dalla vecchia alla nuova senza dover far nulla.
Si potrebbe attingere automaticamente a nuovi suoni o nuovi styles che la casa madre potrebbe mettere a disposizione nel tempo o magari demandare al cloud il processamento o la conversione di una risorsa interna dello strumento in un formato o in una forma non prevista al momento della progettazione del dispositivo o per la quale sia richiesto una potenza di calcolo non sopportabile dal device stesso. Supponiamo ad esempio che si disponga di un nuovo algoritmo per la separazione dei singoli strumenti e delle singole parti musicali di un brano audio, ( in pratica qualcosa di magico per cui dandogli un wave, ne restituisce uno un cui c’è solo la batteria, uno in cui c’è solo la parte cantata, uno in cui c’è solo la parte di basso etc..) e che questo algoritmo sia troppo complesso per essere implementato direttamente sullo strumento; si potrebbe pensare di implementarlo nel cloud e connettere tale funzionalità al nostro dispositivo hardware che al momento della conversione, si limita a trasmettere il modello al cloud e a ricevere indietro il risultato dell’elaborazione. Per l’utente tutto potrebbe essere trasparente e svolgersi come se l’operazione avvenisse direttamente sulla propria macchina.

Fantascienza?
No , già questo servizio esiste, per cui non è fantascienza ma, la domanda vera da porsi è:

Queste funzionalità sono veramente necessarie e soprattutto, i clienti finali sarebbero disposti a sopportare un aumento di costo del prodotto per averle incluse nei loro prodotti?
Francamente non credo; in un mondo in cui il costo sembra essere il primo problema, generalmente il superfluo è la prima cosa che viene tagliata ed ecco spiegato il motivo per cui generalmente tali funzionalità non sono presenti nei device ad oggi disponibili sul mercato anche nel caso in cui, la tecnologia utilizzata e le specifiche di progetto le includevano già da tempo.

Ma quali sono gli ostacoli e gli strumenti utili per gli sviluppatori per implementare le funzionalità cloud nei device?
Il problema degli sviluppatori embedded è la varietà delle piattaforme che devono esse supportare e la realizzazione degli applicativi e dei client ad esse dedicati.
Quello che serve è un ambiente di sviluppo che permetta al software di essere utilizzato in una ampia varietà di ambienti dalle caratteristiche molto diverse.
Qt è sicuramente uno degli strumenti più indicati.
Con esso infatti, non occorre sviluppare da zero servizi cloud per ogni applicazione, grazie ai servizi “Qt Cloud” gli sviluppatori Qt possiedono una gamma di strumenti e di API per l’uso diretto da parte dei Client dei servizi Cloud.

Sono ad esempio disponibili: L’Enginio Data Storage, un database non relazionare cloud based che può essere utilizzato per reperire o salvare dati dalle nostre applicazioni. Il Managed WebSockets per collegamenti bidirezionali in tempo reale, tra cliente e Client Server. Il Managed Runtimes per trasferire porzioni di implementazione o di calcolo scritte con tecnologia lato server tradizionale o utilizzando direttamente le API Qt sul lato server scalabile.
Insomma tante belle cose tutte pronte all’uso.

Facciamo qualche prova e vediamo come funziona la gestione e l’accesso ad un database tramite EDS ovvero l’Enginio Data Storage:

Per prima cosa creiamo un account su Qt Cloud Services https://console.qtcloudservices.com/login indispensabile per operare con le risorse cloud di Qt.

Al primo accesso al servizio cliccando sul pulsante Quick Start crea il tuo primo Cloud.

  iot_QuickStart

Si tratta praticamente di dare solamente un nome al Cloud.

iot_QuickStart_1

Clicca su Launch Instance e seleziona ad esempio l’Enginio Data Storage per un primo test.

iot_QuickStart_2

Inserisci il nome del database e andiamo avanti

iot_QuickStart_40

Viene visualizzato un report generale da quale accediamo alla sezione Environment

iot_QuickStart_41

Dalla quale prendiamo nota dell’ID del nostro backend che abbiamo creato.

iot_QuickStart_42

Tutto quello che dovevamo fare sul cloud è stato fatto, ora aprimao il Creator ed iniziamo a scrivere qualche riga di codice.

La prima idea che mi è venuta in mente è quella di realizzare una piccola applicazione che memorizza in un database una serie di strighe ad ognuna delle quali è associato una variabile booleana.
In pratica si tratta di una versione casareccia della toDo list ovvero delle cose da fare in cui la descrizione è un testo ( “Andare a comperare il latte” ad esempio) e la variabile booleana indica se la cosa è stata fatta si o no.

Per fare le cose ancora piu semplici, “listiamo” le cose da fare un un TextEdit Widget e nella finestra principale aggiungiamo tre bottoni con le seguenti indicazioni:
Add, Refresh e Delete il cui significato dovrebbe essere già chiaro.

iot_CreatorTest1_0

 Dopo aver creato un nuovo progetto ( widget ) e nel file .pro inseriamo la riga QT += enginio ad indicare che il nostro programma andrà ad utilizzare il modulo enginio.

iot_CreatorTest1_1

Nel costruttore del nostro programma vediamo che la prima cosa che creiamo è un client al quale assegniamogli il backendId del nostro database ottenuto nei passi precedenti.

iot_CreatorTest1_2

Analizziamo per primo il pulsante Add collegato allo slot appendItemSlot().

iot_CreatorTest1_3

Dopo aver riciesto l’immissione di un testo (QImputDialog), si disconnette tutti i segnali al client e si connette il segnale finished allo slot addFinishedSlot; questo slot verrà chiamato quando il database ha completato  l’inserimento ed il salvataggio dei nuovi dati.
Successivametne viene creato un oggetto QJsonObject il quale in parole semplici rappresenta il “record” da inserire nel Database.
con il comando m_client->create(object) si richiede al database la sua memorizzazione.
Una volta che l’operazione è stata effettuata viene chiamato lo slot addFinishedSlot nel quale si testa il buon fine dell’operazione e nel casi si aggiorna il textEdit.

iot_CreatorTest1_3_1

Quando lanciamo l’applicazione, alla pressione del pulsante add ottenamo:

iot_CreatorTest1_4_1

Se dopo la conferma andiamo a vedere sul pannello di controllo del nostro db

iot_CreatorTest1_6

Vediamo che i dati sono stati salvati nel database.

Possiamo ovviamente ripetere piu volte l’immissione delle righe di testo in modo da popolare il database con una serie di campi.

Se chiudiamo e riapriamo il programma e se clicchiamo sul pulsante Refresh il programma effettuerà una query e andrà a leggere tutti i “record” del nostro database.

iot_CreatorTest1_7
In poche parole creiamo un oggetti QJsonObject query nel quale richiediamo la lista di tutti gli oggetti toDo.
quando l’operazione viene conclusa, errà chiamato lo slot queryRefreshFinischedSlot nel quale si intercettano i dati presenti nella Reply e li si visualizza a video.

iot_CreatorTest1_8

utilizzando gli altri metodi del Client (update, e remove ) possiamo cancellare, aggiornare e modificare i dati del nostro database.

Ma siamo sicuri che il database sia su cloud o possa essere gestito da altri dispositivi?

Facciamo subito un aprova, dopo aver aggiunti e rimosso un po di dati la nostra lista delle cosa da fare si presenta in questo modo:

iot_CreatorTest1_9

Compiliamo ora la nostra applicazione per Android e carichiamola sul nostro tablet preferito, lanciamola e vediamo se anche li riusciamo a leggere la lista delle cose da fare preparata con il nostro PC.

Supponendo che abbiate installato anche la versione Qt per Android, dal menu project selezioniamo AddKits e successivamente la relativa voce dedicata.

iot_CreatorTest1_10

Selezionato il Kit, collegate il vostro tablet Android impostato in debug mode al PC tramite un cavo USB e cliccate sul pulsante RUN ( triangolo verde a sinistra ).

Dopo qualche minuto ( dovuto alla ricompilazione e al deploy dell’applicazione all’interno del tablet) vedrete avviarsi l’applicazione nel device Android come se fosse una delle tante App in esso contenute.

iot_CreatorTest1_11
Sorpresa delle sorprese, il database è visibile e anche li potrete interagire con la vostra lista di cose da fare.

iot_CreatorTest1_12
Sia il tablet che il vostro PC accedono contemporanemanete al database, scambiano con lui dati ed effettuano operazioni.
Ecco some si presenta l’applicazione sul Pc dopo aver aggiunto una cosa da fare nel Tablet:

iot_CreatorTest1_13

Simpatico no?

Ovviametne questi sono solo alcuni semplici esempi, inoltre vi segnalo che esistono altre strutture come l’EnginioModel che posso aiutare nella visualizzazione e nella gestione del database.
Moilto interessanti sono l’MWS (Manage WebSoket) per la comunicazione bidirezionale realtime, ed il MAR (Managed Application Runtime) , magari le vedreo in seguito.

 iot_CreatorTest1_14iot_CreatorTest1_15

Lascia un commento

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...