Internet of Things

Microsoft e l’Internet of Things : dalle "cose" al "Cloud"

E' da pochi giorni che la Microsoft è stata inclusa nella classifica delle 10 aziende più innovative del 2015 nell'ambito dell'Internet of Things e questo risultato non può essere assolutamente considerato un caso. Molto probabilmente, le motivazioni principali che hanno permesso di raggiungere questo ottimo risultato sono due:

 

  • l’annuncio di un sistema operativo come Windows 10 in grado di poter essere eseguito su ogni tipo di dispositivo, dai sistemi embedded, agli smartphone, ai tablet, alle console per il gaming ed infine ai PC;
  • l’ampia scelta di servizi Cloud di Microsoft Azure attraverso i quali è possibile “accogliere” ed analizzare in tempo reale l’enorme quantità di dati provenienti dalle “cose”;

L’offerta Microsoft nell’ambito dell’Internet of Things copre tutto ciò che va dai device embedded (la “T”) fino al Cloud (la “I”) riuscendo a fornire una soluzione sotto un unico “cappello”.
Ma quali sono le tecnologie a disposizione ? In che modo possiamo realmente “portare” le nostre “cose” nel Cloud e renderle parte integrante dell’Internet of “Your” Things come è stato ribattezzato da Microsoft ?

Le "cose" …

Ad oggi siamo tutti proiettati nell’attesa di vedere Windows 10 in esecuzione sulla Raspberry Pi 2 come è stato annunciato qualche settimana fa. Tutti sappiamo che il nuovo sistema operativo riuscirà a coprire numerosi device embedded grazie anche alle partnership che Microsoft ha stretto con i maggiori produttori di silicio (Intel, Qualcomm, …)
Ma dando uno sguardo al presente … al futuro immediato … quali sono le soluzioni attuali ?

Le "cose" che sono parte integrante dell'IoT hanno dimensioni, caratteristiche e funzionalità diverse in base alle quali è possibile scegliere quale tipologia di sistema operativo o piattaforma utilizzare per il loro sviluppo : dai sensori ed attuatori fino agli ATM e POS, passando per i gateway IoT, i wereables ed i dispositivi industriali.

Windows Embedded Compact 2013

L'unico sistema operativo "real-time" della famiglia Microsoft e quindi adatto a tutte le applicazioni che necessitano di un tempo di risposta deterministico e pressochè immediato del sistema. La sua natura a "componenti" lo rende altamente customizzabile, permettendo di includere o meno specifiche funzionalità e/o driver in base all'applicazione che dobbiamo realizzare ed all'hardware che abbiamo a disposizione, sia in termini di processore (ARM o x86 supportati) che di periferiche. Visual Studio 2013 è l'IDE utilizzato per la "costruzione" dell'immagine del sistema operativo e per lo sviluppo delle applicazioni, in codice nativo (C/C++) oppure in codice gestito (C#/VB.NET) con il supporto del .Net Compact Framework 3.9. Maggiori informazioni qui.

Windows Embedded 8.1

In questo caso parliamo di un'intera famiglia di sistemi operativi, nelle versioni Industry, Pro e Standard (fermo alla versione 8), che sono "figli" diretti di Windows 8.1 che utilizziamo quotidianamente sui nostri Personal Computer. Anche in questo caso, abbiamo la possibilità di customizzare il sistema (non ai livelli di WEC2013) soprattutto nel vincolare l'utilizzatore finale nelle azioni disponibili ed evitare le tipiche schermate di errore che, in un sistema embedded, non danno alcun contenuto informativo (a chi lo utilizza). Ad essi va aggiunta la versione Handheld, basato su Windows Phone 8.1, per lo sviluppo di applicazioni LOB (Line Of Business). Anche in questo caso, gli sviluppatori possono utilizzare Visual Studio 2013 ed i linguaggi nativi (C++) o gestiti (C#/VB.NET) con il pieno supporto di WinRT. Maggiori informazioni qui.

.Net Micro Framework

Non si tratta di un sistema operativo ma di una versione "light" del CLR (Common Language Runtime), cuore pulsante del .Net Framework (non a caso si parla di TinyCLR). Non è avido di risorse e può essere utilizzato in quei sistemi embedded dotati di un microcontrollore (senza MMU) e di pochi KB di memoria RAM e di memoria Flash. La possibilità di utilizzare il codice gestito (C#/VB.NET), lo rendono utilissimo per la prototipazione oppure in tutti quei casi in cui il "time to market" è fondamentale. Va tenuto conto che non è "real time" e non è dotato di un JIT (Just in Time) compiler per cui tutto il codice viene interpretato al tempo di esecuzione. Ovviamente, Visual Studio 2013 è ancora l'IDE di riferimento per sviluppare su questa piattaforma. Un ulteriore punto a favore è la sua natura "open source" e la disponibilità di tutto il codice sorgente su GitHub. Maggiori informazioni qui.

… ed il "Cloud"

Non è da nascondere che il principale interesse di Microsoft nell’ambito dell’Internet of Things è nei servizi offerti attraverso il Cloud, ai quali è possibile connettere device di tutti i tipi anche se dotati di sistemi operativi real-time (RTOS) oppure di Linux (ricordiamoci “Microsoft loves Linux”) e che quindi non utilizzando alcuna tecnologia Microsoft tra quelle viste in precedenza (es. Arduino, Tessel, Spark.IO, …)
In questo ambito, prima del futuro annuncio a Build della “IoT Suite”, cosa ci offre la nuvola azzurra ?

Event Hubs

Uno dei maggiori problemi dell'IoT è l'acquisizione della enorme quantità di dati che vengono prodotti dai device. Non è semplice gestire milioni di messaggi al secondo proveniente da miliardi di dispositivi in modo che siano anche elaborati in tempo reale. La soluzione Microsoft a questo problema è rappresentata dall'Event Hubs uno dei servizi di "ingestion" del Service Bus di Azure che si aggiunge a "queue" e "topic/subscription". Esso fornisce una soluzione altamente scalabile in grado di accogliere da pochi messaggi al minuto (es. connected cars, termostati, ..) fino a milioni di messaggi al secondo. L'utilizzo di questo servizio è possibile mediante l'Azure SDK nel caso di sistemi basati su Windows ma soprattutto attraverso protocolli standard quali AMQP ed HTTP (es. utilizzando il progetto Apache Qpid). Attualmente,  gli SDK per gli altri linguaggi (Java, Python, NodeJS e così via)  disponibili su Linux  non supportano Event Hubs ma solo "queue" e "topic/subscription".

Stream Analytics

Stream Analytics è un motore in grado di processare gli eventi ricevuti in ingresso in real time in modo da ricavarne il massimo contenuto informativo. Ha un'integrazione nativa con l'Event Hubs e può essere facilmente configurato per acquisire gli eventi attraverso di esso. L'elaborazione dei dati viene eseguita mediante un linguaggio "SQL like" e la relativa gestione è possibile attraverso l'Azure Management Portal. Oltre all'acquisizione dei dati, esso permette anche di produrre dei messaggi in uscita (da poter trasmettere ad esempio all'Event Hubs) che possono essere utili, ad esempio, per la gestione di allarmi sulla base dei dati elaborati.

Machine Learning

Il principale vantaggio che si può ricavare dai dati acquisiti e processati è la "predizione" di avvenimenti futuri. L'analisi predittiva ha come obiettivo l'applicazione di opportuni modelli sui dati acquisiti per poterne ricavare un contenuto informativo grazie al quale poter prevedere l'evoluzione dei dati stessi o particolari eventi futuri. Microsoft mette a disposizione il servizio di Machine Learning che permette a chiunque di diventare un "data scientist" in maniera semplice grazie ai numerosi algoritmi e modelli di analisi predittiva pronti per l'uso. Inoltre, è possibile sviluppare del codice personalizzato utilizzando il linguaggio R (per l'analisi statistica) oppure addirittura il Python.

HDInsight

Forse non tutti conoscono Apache Hadoop. Esso è un progetto open source che permette il calcolo distribuito ma soprattutto l'elaborazione di grandi quantità di dati in maniera affidabile e scalabile. Attraverso HDInsight, Microsoft fornisce una distribuzione di Hadoop nel cloud. Uno dei maggiori vantaggi rispetto ad una soluzione "on-premise" è sicuramente la possibilità di non doversi interssare all'hardware e l'estendibilità attraverso i principali linguaggi tra cui C# e Java.

Colleghiamo i punti ...

Un modo per poter "toccare" con mano una minima parte delle tecnologie suddette, è quello di familiarizzare con il progetto ConnectTheDots della Microsoft Open Technologies. Alcune delle principali piattaforme hardware come Arduino, Intel Galileo, Raspberry Pi e .Net Gadgeteer (FEZ Spider della GHI Electronics) sono utilizzate per la trasmissione di dati (es. temperatura, umidità, …) all'Event Hubs, visualizzati mediante una web application e processati attraverso Azure Stream Analytics.

Il futuro è da numeri 10 !

Per quanto riguarda le "cose", il futuro si chiama Windows 10 : un unico sistema operativo completamente "cross platform" ed in grado di essere eseguito sui sistema embedded per l'IoT (a meno dei sistemi a microcontrollore), su smartphone, tablet, PC e console. Esso è dotato di un "core" comune e fornisce la possibilità di sviluppo delle Universal Apps in grado di essere eseguite su tutte le piattaforme supportate senza alcuna modifica dall'una all'altra.
Per quanto riguarda il "Cloud", Microsoft ha da poco annunciato il lancio della "Azure IoT Suite" che offrirà tutto ciò di cui abbiamo bisogno per la realizzazione di una soluzione IoT completa ed altamente customizzabile. Su di essa non ci sono ancora informazioni precise ma bisognerà attendere Build 2015.