Come abbiamo descritto nel nostro WhitepaperInternet of Things: consigli tecnici per entrare nel mondo IoT”, lo sviluppo di un progetto in quest’ambito richiede di considerare i seguenti aspetti:

  • Connettività: impiego di un protocollo semplice e leggero in grado di superare i limiti di memoria e consumo energetico che il protocollo HTTP impone.
  • Dispositivi: in un progetto di IoT è importante considerare alcuni fondamentali aspetti in merito alla gestione dei devices customizzabili in base al dispositivo utilizzato e all’ambiente operativo di riferimento.
  • Data Collection & Analysis: l’architettura si dovrà occupare di raccogliere i dati, “pulirli”, analizzarli e fornire degli strumenti statistici e predittivi per supportare le persone e le aziende a svolgere le proprie attività di business.
  • Scalabilità: la scalabilità di un progetto è molto importante perché, considerata la sua tipologia, è facilmente ipotizzabile il passaggio da pochi sensori a centinaia di migliaia di device in un intervallo molto breve.
  • Sicurezza: i dispositivi IoT collezionano e/o fungono da tramite per i dati personali e, per loro natura, portano il mondo reale sul Web. In particolare, in quest’ambito, si possono classificare due tipologie di problematiche, quali:
  1. Rischi di sicurezza presenti in qualsiasi progetto internet, ovvero tutte le problematiche di sicurezza che oggigiorno siamo abituati a gestire nel mondo Internet (DDoS, vulnerabilità di software applicativi, porte di comunicazione aperte ecc.).
  2. Rischi esclusivamente legati al dispositivo IoT, per esempio alcune schede elettroniche incapaci di supportare sistemi di crittografia e quindi di conservare e proteggere i dati in modo sicuro all’interno del dispositivo IoT.

I campi di applicabilità sono molteplici, difficili anche solo da elencare: si va dalle più ovvie applicazioni industriali, alla logistica e alle trasmissioni di informazioni in tempo reale relative agli ambiti di mobilità, fino ai più complessi scenari di analisi predittiva delle ingenti moli di dati oggi disponibili.

Come già anticipato l’argomento è stato ampiamente trattato nel nostro Whitepaper, in questo articolo invece vedremo un esempio concreto di come mettere insieme tutte queste caratteristiche in una “piattaforma IoT”. Nel dettaglio andremo ad analizzare un’offerta in modalità servizio (PaaS) a consumo: parlo di AWS IoT di Amazon Web Services.

Che cos’è AWS IoT

Amazon Web Services ha recentemente presentato AWS IoT, una piattaforma cloud che presenta i seguenti vantaggi:

  • consente a dispositivi connessi di interagire in modo semplice e sicuro con applicazioni nel cloud e altri dispositivi
  • è in grado di supportare miliardi di dispositivi e migliaia di miliardi di messaggi
  • è in grado di elaborare e instradare tali messaggi agli endpoint di AWS e ad altri dispositivi in modo sicuro e affidabile
  • consente alle applicazioni di rimanere collegate e comunicare con tutti i dispositivi, in qualsiasi momento, anche quando non sono collegati
  • presenta tutta una serie di servizi a corredo, ma necessari, pronti per essere utilizzati, in un modello di pricing a consumo (nessun investimento di start-up ne costi di dismissione)
  • la scelta di fornire inoltre l’implementazione di protocolli standard (MQTT e HTTP 1.1) facilita l’integrazione e la portabilità (in ingresso o in uscita) di componenti software già sviluppate.

AWS IoT è una piattaforma gestita che unisce più componenti (come si può vedere dalla seguente figura) ciascuna con un ruolo specifico.

img1

Proviamo ad esaminare con ordine le varie componenti e quali sono i rispettivi ruoli all’interno di un’architettura IoT …

Device Gateway e Device Registry

Supponiamo di avere i nostri “oggetti” ricchi di informazioni da trasmettere, la prima esigenza che ovviamente si incontra è quella di gestirli e inserirli in un ecosistema.
Ecco che AWS IoT consente di connettere con la massima semplicità i dispositivi al cloud e ad altri dispositivi.
Il gateway AWS (assimilabile ad un broker standard nel caso di uso MQTT) amministra il modello di pubblicazione/iscrizione gestendo in autonomia e in modo trasparente all’utilizzatore il dimensionamento dell’infrastruttura.
Il registry inoltre assegna e gestisce i dispositivi, monitora i metadati, gli attributi e le caratteristiche.

Authentication & Authorization

La “connessione” è solo il primo degli aspetti da considerare in una piattaforma IoT, il passo immediatamente successivo e avere dati e dispositivi sempre protetti; AWS IoT offre autenticazione e crittografia completa in tutti i punti di connessione, sia tramite metodi proprietari Amazon (SignV4) che standard (certificati X.509), perciò non si verificherà mai alcuno scambio di dati tra dispositivi e AWS IoT senza accertamenti di identità. E’ inoltre possibile revocare l’accesso per singoli dispositivi.

Rules Engine

Il passo successivo, raccolte in sicurezza le informazioni, è spesso I’elaborazione per intraprendere azioni conseguenza dei dati ricevuti dai dispositivi. Con AWS IoT è possibile, mediante una sintassi di tipo SQL, il filtraggio, la trasformazione e l’innesco di azioni sui dati in qualsiasi momento. Con AWS IoT è ovviamente semplice interagire con altri servizi dell’ecosistema AWS (ad esempio AWS Lambda, Amazon Kinesis, Amazon S3 e Amazon DynamoDB) e creare applicazioni IoT ancora più articolate.

Device Shadow

Il quadro sembra già completo, ma il minimo comun denominatore di tutto quanto detto è la presenza costante di una connessione stabile, cosa fare quindi nel caso di una connettività saltuaria (sia per problemi e\o condizioni ambientali sfavorevoli e non predicibili che pianificata e\o inevitabile o addirittura voluta)? In questo scenario, AWS IoT mette a disposizione un servizio di “dispositivi ombra” per permettere lettura e impostazione dello stato dei dispositivi.
AWS IoT memorizza lo stato più recente di un dispositivo per verificarlo e impostarlo in qualsiasi momento, facendolo risultare alle applicazioni come se fosse online. In questo modo l’applicazione potrà consultarne lo stato anche quando è disconnesso; sarà possibile impostare sul dispositivo uno stato che sarà implementato non appena si ricollega.

Kit Device SDK

Tutto questo sembra meraviglioso (e in un certo senso lo è… o perlomeno è molto comodo), ma indubbiamente ancora non è chiaro come collegare un dispositivo fisico a questa piattaforma. A questo scopo AWS distribuisce un device sdk per implementare la connessione. L’SDK è disponibile per Arduino Yún, C per piattaforme embedded (Linux & co.), NodeJS JavaScript.

Disponibilità e Prezzi

AWS IoT è disponibile in USA (Stati Uniti orientali – Virginia Settentrionale e Stati Uniti Orientali – Oregon), in Europa (region Irlanda) e nell’area asiatica (Tokyo) in puro stile cloud pay-as-you-go (i prezzi di AWS IoT).

Un esempio di utilizzo

Ma proviamo a fare un piccolo esercizio per cominciare a sperimentare AWS IoT e prendere confidenza con tutte le componenti della piattaforma sopra descritte.
Supponiamo di voler leggere la temperatura misurata da un sonda in una stanza ed, eventualmente, accendere un climatizzatore di conseguenza.
Useremo la console web di AWS, ma ovviamente tutte le operazioni possono essere eseguite mediante CLI o SDK.

img2

Cominciamo dunque…. “Get started” (dalla landing page della console è possibile anche avviare un tutorial interattivo).
Si apre così la console da cui è possibile controllare rapidamente ogni aspetto della piattaforma.

img3

Cominciamo banalmente a creare gli “oggetti”, il nostro sensore di temperatura e il condizionatore, eventualmente corredati di attributi (massimo 3).

img4

E’ ora di “mettere in sicurezza” i nostri oggetti, approfittiamo della console e creiamo al volo un paio di certificati con l’opzione “1-click Certificate Create” (ricordatevi di salvare le chiavi e il certificato stesso).

img5

 

Creiamo inoltre una policy IAM per definire chi potrà far cosa e per semplicità in questo esempio permetteremo a chiunque di far qualsiasi cosa in AWS IoT:

img6

Selezioniamo ora uno dei nostri certificati e nel menu delle azioni (“actions”) scegliamo “Attach a Policy” e ovviamente inseriamo la policy appena creata.

img7

Allo stesso modo agganciamo i certificati agli oggetti (in questo caso abbiamo un certificato per thing).

img8

Giunti a questo punto il nostro sensore di temperatura dovrebbe essere collegato ad un device in grado di pubblicare un messaggio MQTT (si può scegliere, per iniziare, uno tra questi: https://aws.amazon.com/it/iot/getting-started/#kits), in un topic ad esempio del tipo /sensor/room1/temperature.

Non ci resta che preparare una regola affinché il nostro ipotetico climatizzatore possa reagire all’aumentare della temperatura…
A tal scopo come prima cosa dobbiamo configurare IAM per permettere l’interazione di AWS IoT con i servizi AWS, creiamo quindi con lo strumento che preferiamo (web console, CLI, SDK,… ) un role con la seguente role-policy:

{
"Version": "2012-10-17",
"Statement": [{
"Sid": "",
"Effect": "Allow",
"Principal": {
"Service": "iot.amazonaws.com"
},
"Action": "sts:AssumeRole"
}]
}

al quale poi agganceremo un permesso opportuno (da adeguare ai servizi AWS a cui vorremmo accedere, nell’esempio solo IoT per ripubblicare un messaggio):

{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Action": [ "iot:*"],
"Resource": ["*"]
}]
}

e infine creiamo la regola per ripubblicare su un nuovo topic solo alcuni messaggi:

img9

A questo punto l’hardware del condizionatore potrà registrarsi come sottoscrittore al topic dell’esempio (warning/room1/high_temperature) e reagire di conseguenza accendendosi.

Proviamo il tutto simulando con un client MQTT (ad esempio il client di Mosquitto – http://www.eclipse.org/mosquitto/) la sottoscrizione da parte del climatizzatore e l’invio da parte del sensore.
Per fare questo ci manca solo l’endpoint del servizio AWS, che può essere recuperato dai dettagli degli oggetti in web console o via AWS CLI con il comando:

aws iot describe-endpoint

e avrà una forma del tipo:

<random-string>.iot.<aws-region>.amazonaws.com

avviamo la sottoscrizione (il certificato root CA usato da AWS è questo, eventualmente adeguando CA, certificato e chiavi ai path corretti)

mosquitto_sub --cafile rootCA.pem --cert cert.pem --key privateKey.pem -h "<your-aws-account-specific-iot-endpoint>" -p 8883 -q 1 -t warning/room1/high_temperature -i air-conditioner_room1

e proviamo a simulare la pubblicazione della temperatura (prima 20° e poi 25°) ad opera del sensore:

mosquitto_pub --cafile rootCA.pem --cert cert.pem --key privateKey.pem -h "<your-aws-account-specific-iot-endpoint>" -p 8883 -q 1 -t topic/test -i clientid2 -m "{\”temperature\”:20}"
mosquitto_pub --cafile rootCA.pem --cert cert.pem --key privateKey.pem -h "your-aws-account-specific-iot-endpoint" -p 8883 -q 1 -t topic/test -i clientid2 -m "{\”temperature\”:25}"

solo il secondo messaggio verrà ripubblicato nel nuovo topic dove ci siamo registrati… l’hardware connesso al climatizzatore potrà reagire di conseguenza accendendo quest’ultimo.

Ovviamente questo è solo un semplice esempio che può essere arricchito a piacimento con l’inserimento di altri messaggi e regole, con un controllo sulla temperatura minima (… così com’è, una volta accesso, nessuno fermerebbe più il climatizzatore), con l’aggiunta di una AWS Lambda per la rielaborazione dei messaggi (per pubblicare direttamente dei comandi di on\off),…

Conclusioni

Come abbiamo potuto leggere in precedenza, la piattaforma AWS IoT è in grado di velocizzare notevolmente l’avvio di un progetto in ambito Internet of Things, permettendo ai progettisti di focalizzare la propria attenzione nelle logiche di business, utilizzo ed analisi del dato.

AWS IoT è utile per attività di Dev & Test per chi vuole esplorare il settore dell’Internet of Things e capirne le relative potenzialità nel proprio settore. In più è ottimale per progetti di ogni dimensione, dal piccolo esperimento, che attraverso questa modalità può essere rapidamente pronto all’uso, al grosso e ambizioso progetto, con milioni di oggetti e miliardi di messaggi, senza preoccuparsi della tenuta del sistema a fronte della mole di informazioni da gestire.

Infatti, sono a carico di AWS i seguenti aspetti:

  • Scalabilità
  • Connettività
  • Buona parte delle problematiche relative alla sicurezza
  • Data Collections

Mentre ai progettisti rimane lo sviluppo delle logiche di business, proprie di ogni contesto e servizio offerto dalle aziende, e la parte principale di Data Analysis che è uno degli elementi chiave su cui le aziende devono investire per estrarre le informazioni dai dati a supporto dei processi di business e dei servizi erogati.

Qual è la tua opinione in ambito IoT e sul Servizio AWS IoT? Confrontati con noi!

Leave a Comment