Connetti il tuo device a IoT Hub usando MQTT

 

Connettere un dispositivo al cloud non è sufficiente per parlare di Internet of Things, ma è sicuramente il primo step indispensabile. IoT Hub è il servizio di Azure che ha il ruolo di “porta di accesso” al cloud e permette ai dati provenienti da device e sensori di essere collezionati, analizzati, memorizzati e trasformati in informazioni utili, oltre alla possibilità di inviare comandi dal cloud al device.

Ovviamente esistono svariati tipi di dispositivi, molto diversi tra loro: più o meno potenti in termini di risorse hardware, più o meno standard in termini di protocolli di comunicazione, con o senza sistema operativo, in grado di gestire la connettività alla rete autonomamente o con l’ausilio di un gateway. La scelta del tipo di dispositivo non è un tema che affronteremo in questo post, in quanto dipende sostanzialmente dallo scenario, ma è importante sottolineare che IoT Hub impone un vincolo: deve essere garantita la sicurezza nella trasmissione del dato, usando SSL/TLS.

L’immagine sottostante mostra alcuni scenari tipici per soluzioni IoT.

 

clip_image001

 

Veniamo alla pratica.

Il primo step per la connessione consiste nella registrazione del dispositivo per ottenere una chiave univoca che autorizzi la comunicazione tra quell’oggetto specifico e l’IoT Hub, in seguito è sufficiente utilizzare questa chiave per tutte le trasmissioni di dati o comandi tra l’oggetto e il cloud.

A questo punto la comunicazione può avvenire utilizzando diversi protocolli: AMQP, HTTP, MQTT. Su GitHub sono disponibili gli SDK per svariati linguaggi e piattaforme, a questo link potete trovare alcuni esempi di codice sorgente, oltre a una utile guida step-by-step da seguire se volete utilizzare Windows 10 IoT Core sulla vostra RPI2. E se volete semplificare ulteriormente lo sviluppo della vostra soluzione, seguite il metodo descritto in questo blog post.

Esistono però molti scenari in cui non è possibile utilizzare gli SDK sui dispositivi che si vogliono connettere al cloud, ecco perché IoT Hub supporta anche nativamente AMQP 1.0, HTTP 1.1, MQTT 3.1.1.

Vediamo ad esempio quali sono le differenze utilizzando il protocollo MQTT con l’SDK o nativamente.

Nel primo caso, è sufficiente avere a disposizione la connection string del vostro device per avviare la trasmissione dei dati (dopo aver registrato il dispositivo, conterrà anche la Device Key e potete recuperarla utilizzando il Device Explorer).

 

image

//Connection to IoT Hub using my device connection string, containing Hostname, Device Id & Device Key 

DeviceClient deviceClient = DeviceClient.CreateFromConnectionString(DeviceConnectionString, TransportType.Mqtt);

image

 

Veniamo al secondo punto. Nel caso in cui il vostro dispositivo utilizzi una libreria esterna, nel nostro esempio abbiamo utilizzato M2MQTT, non sarà ovviamente presente il riferimento alla libreria Microsoft.Azure.Devices.Client ma la libreria di riferimento, e per avviare la comunicazione tra device e cloud sarà necessario utilizzare username e password.

image

MqttClient client = new MqttClient("RPIdemo.azure-devices.net", 8883, true, MqttSslProtocols.TLSv1_0, null, null);

 

//clientID - it's the device ID I used to register my device

String clientID = "MQTTDevice";

//username - it's my IoT Hub URI / ClientID

String username = "<your IoT Hub URI/ClientID>";

//Password - SAS Token taken from Device Explorer, removing the initial part (before SharedAccessSignature sr=...)

String password = "SharedAccessSignature sr=******&sig=*********";

 

La password in particolare si ottiene utilizzando il SAS Token associato al device e può essere recuperata anch’essa dal Device Explorer, come mostrato nelle immagini sottostanti:

 

imageimage

 

A questo punto abbiamo tutti i dati necessari per connettere il dispositivo e avviare la trasmissione dei dati, usando l’API della nostra libreria:

//M2MQTT Connection

var returnValue = client.Connect(clientID, username, password);

Console.WriteLine($"connection return value: {returnValue}\n");

 

A questo link potete trovare la documentazione più dettagliata per connettere il vostro device usando MQTT. E’ importante sottolineare che nell’esempio proposto abbiamo utilizzato il Device Explorer per la generazione del SAS Token e l’identificazione della password, ma in uno scenario concreto si utilizzeranno le API della libreria per generare la password nel formato corretto.

Su GitHub è disponibile il codice sorgente utilizzato per l’esempio riportato in questo blog post: https://github.com/erryB/IoTHub-tests

E adesso non vi resta che provare! Smile