Internet of Things : MQTT con la piattaforma 2lemetry

Oramai online è possibile trovare numerose piattaforme che offrono il servizio di “device to cloud”, per poter acquisire dati provenienti da dispositivi remoti, storicizzarli ed eventualmente esporli verso altri device : uno di queste è 2lemetry.

Quest’ultima, oltre a fornire l’interfacciamento RESTful tramite HTTP, mette a disposizione anche il protocollo MQTT che andremo ad utilizzare facendo uso della libreria client M2Mqtt.

In primo luogo è necessario effettuare la registrazione online (operazione banalissima)

01_register

Al termine della registrazione, si esegue l’accesso e la pagina relativa all’account ci mostra una serie di informazioni, tra le quali quella più importante è il “domain”, che rappresenterà la radice di tutti i topic sui quali andremo a pubblicare o ricevere messaggi via MQTT.

A questo punto possiamo passare immediatamente allo sviluppo di una semplice applicazione scegliendo tra tutte le piattaforme supportate dalla libreria M2Mqtt (.Net Framework, .Net Compact Framework oppure .Net Micro Framework). Volendo realizzare un caso reale, utilizziamo la board Netduino Plus con un sensore di temperatura (il solito TMP102 già ampiamente usato in post precedenti ed il cui driver potete trovare nella uPLibrary) per inviare online i dati rilevati.

In primo luogo definiamo tutti i parametri necessari a 2lemetry per caricare i dati :

const string M2MIO_DOMAIN = "<domain>";
const string M2MIO_CLIENTID = "device1";
const string M2MIO_STUFF = "temp";
const string M2MIO_BROKER = "q.m2m.io";
const string M2MIO_USERNAME = "<username>";
const string M2MIO_PASSWORD = "<MD5password>";

E’ ovviamente necessario l’indirizzo del broker (che usa la porta standard 1883), il client ID, ciò che viene chiamato “stuff” che nel nostro caso sarà la temperatura, il dominio ed infine lo username e l’MD5 della password della nostra iscrizione online.

L’applicativo è banalmente il seguente :

TMP102 tmp102 = new TMP102(A0AddressSelect.GND, 100);

MqttClient client = new MqttClient(M2MIO_BROKER);
client.Connect(M2MIO_CLIENTID, M2MIO_USERNAME, M2MIO_PASSWORD);
string topic = M2MIO_DOMAIN + "/" + M2MIO_STUFF + "/" + M2MIO_CLIENTID;

while (true)
{
    float value = tmp102.Temperature();
    client.Publish(topic, Encoding.UTF8.GetBytes("{ \"value\" : " + value + " }"));
    Thread.Sleep(5000);
}

In questo modo, ogni 5 sec verrà pubblicato il valore della temperatura sul topic<domain>/temp/device1.

Per avere un riscontro immediato, possiamo sfruttare la piattaforma online messa a disposizione da 2lemetry all’indirizzo http://mqtt.io/. In primo luogo vanno impostate le opzioni di sessione, cioè username e password del nostro account.

02_options

Subito dopo è necessario specificare l’indirizzo del broker, la porta ed un client Id per poterci connettere. Una volta connessi, utilizzando la sezione di subscriber, possiamo sottoscrivere al topic sul quale la nostra board pubblica i dati.

03_subscriber

In poco meno di 10 minuti abbiamo messo in piedi una stazione di rilevamento della temperatura che pubblica dati online su una piattaforma che li storicizza per noi e che con i suoi strumenti permette di analizzarli e ripubblicarli magari via HTTP !

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s