.NetCF

Internet of Things e la lavatrice ai Community Days 2014

Questa volta un’altra nuova ed entusiasmante esperienza come speaker …. ai Community Days 2014 a Roma e che vede la partecipazione di tutte le community sul territorio italiano !

Ho avuto l’onore di fare per la prima volta una sessione con il mio “grande” amico Valter Minute, dal quale non si smette mai di imparare qualcosa di nuovo. Ovviamente, l’argomento era l’Internet of Things e questa volta con una lavatrice come protagonista !

00 01
02 03
04 05

Mi ha fatto molto piacere vedere la sala piena e persone in piedi che seguivano con interesse la sessione, esilarante e tecnica al tempo stesso.

06 07
08 09

Grazie a questo evento ho potuto incontrare amici come Mirco Vanini e Marco Dal Pino con i quali c’è un continuo contatto cybernetico ma non fisico. Ho avuto anche l’onore di conoscere di persona Roberto Andreoli, Technical Evangelist Manager in Microsoft, con il quale poter parlare anche di IoT con Microsoft in Italia; spero di rivederlo nuovamente la settimana prossima alla Maker Faire a Roma.

Un grazie particolare va a Daniele Bochicchio ed a tutti coloro che hanno organizzato alla grande questo evento.

Community Days 2014 : “Internet of Things : la mia lavatrice collegata ad Internet ?”

logo_small

Dopo esserci stato più volte dalla parte del pubblico, questa volta con grande onore sarò tra gli speaker dei Community Days 2014 di Roma che si terranno dal 23 al 25 Settembre.

L’onore sarà doppio, in quanto avrò al mio fianco un caro amico come Valter Minute che ho riconosciuto come il “Maradona” dei sistemi embedded.

La nostra sessione, intitolata “Internet of Things : la mia lavatrice collegata ad Internet ?”, sarà completamente dedicata all’IoT partendo dai possibili sistemi embedded (targati Microsoft) fino alle possibili soluzioni nel Cloud, tra cui il futuro progetto “Reykjavik” basato su Azure presentato a Build 2014; il titolo dice la verità, tra le altre cose, avremo come protagonista una lavatrice (giocattolo) !

Potete trovare tutte le informazioni relativa all’agenda delle sessioni ed alla logistica sul sito ufficiale oltre al modulo per la registrazione.

Vi aspettiamo numerosi per questo evento che come ogni anno non deluderà le aspettative di coloro che vi parteciperanno !

M2Mqtt e GnatMQ … adesso anche su Windows 8.1 e Windows Phone 8.1 !!

Windows_logo_-_2012 m2mqttpng
gnat

Sembra che io sia stato in vacanza (vista la mancanza di post sul mio blog) ed è la verità !

Nonostante la vacanza, ho proseguito lo sviluppo del progetto M2Mqtt ed oggi ho il piacere di rilasciare la nuova versione 3.6.0.0 con il supporto per WinRT !!

Ho dovuto intervenire soprattutto nei punti di gestione del networking (in WinRT non ci sono le Socket ma gli StreamSocket), dei thread (passaggio da Thread a Task) e della sicurezza ma finalmente il primo client MQTT per tutte le piattaforme .Net, da oggi funziona anche sui tablet dotati di Windows 8.1 e sugli smartphone con Windows Phone 8.1.

Il nuovo progetto, aggiunto in una solution per Visual Studio 2013, è una “portable class library” che ho utilizzato e testato in una Universal App.

La stessa sorte è toccata al “fratello” GnatMQ, giunto alla versione (Beta) 0.9.2.0, grazie al quale abbiamo a disposizione un broker MQTT da eseguire su tablet e smartphone della famiglia Windows 8.1.

Ovviamente ho provveduto ad aggiornare anche il package Nuget aggiungendo gli assemblies per WinRT.

Spero di aver fatto cosa gradita per moltissimi utilizzatori di M2Mqtt che in passato mi hanno richiesto fortemente questo porting !

Sorriso

M2Mqtt 3.5 : .Net MQTT client con un miglior supporto SSL/TLS, altri miglioramenti e licenza Apache 2.0 !

Questa volta la libreria M2Mqtt ha subito alcune modifiche “importanti” sia in termini di nuove funzionalità che di bug fixing. Devo ammettere che i miglioramenti sono dovuti soprattutto alle persone che la utilizzano in maniera assidua e mi segnalano nuove funzionalità da aggiungere o bug da risolvere. Oltre ad alcuni problemi segnalati su CodePlex, questa volta anche Clemens Vasters, PM su Microsoft Azure, mi ha sottoposto alcuni miglioramenti da applicare nell’ambito dell’autenticazione SSL/TLS. Infatti, come già twittato molte settimane fa, Clemens ha usato la mia libreria per eseguire i test sul progetto Reykjavik (Device Gateway) presentato a Build 2014 ed io non posso che esserne onorato.

Autenticazione SSL/TLS

In questo caso, il miglioramento è strettamente legato alla versione per .Net Framework, poiché è l’unica versione a supportare quanto è stato aggiunto. In particolare, la classe MqttClient mette disposizione altri costruttori ai quali è possibile fornire le seguenti callback :

  • RemoteCertificateValidationCallback : permette all’utente di effettuare ulteriori controlli sulla validazione del certificato ricevuto dal server oltre a quelli già eseguiti dal sistema. Utile nel caso di debugging e di utilizzo di certificati self-signed, in modo da accettare a prescindere la connessione con il server;
  • LocalCertificateSelectionCallback : permette all’utente di selezionare in maniera opportuna il certificato client da trasferire al server in caso di mutua autenticazione durante l’handshake SSL. Il certificato può essere selezionato da un pool di certificati locali oppure creato “a volo” direttamente nella callback;

Per maggiori informazioni, è possibile fare riferimento alla documentazione MSDN ufficiale.

Nel caso del costruttore più complesso (con entrambe le callback), un esempio di applicazione può essere il seguente :

MqttClient client = new MqttClient("<server_name>", 8883, true, ValidateServerCertificate, SelectClientCertificate);
...
...

bool ValidateServerCertificate(object sender,
 X509Certificate certificate,
 X509Chain chain,
 SslPolicyErrors sslpolicyerrors)
{
 bool valid;
 // check sslpolicyerrors and execute your certificate validation
 ...
 ...
 return valid;
}

X509Certificate SelectClientCertificate(
 Object sender,
 string targetHost,
 X509CertificateCollection localCertificates,
 X509Certificate remoteCertificate,
 string[] acceptableIssuers)
{
 X509Certificate cert;

 // choose client certificate from local store or creating new one
 ...
 ...
 return cert;
}

Per cercare di semplificare la creazione dell’oggetto client, i costruttori che ricevono in ingresso un IPAddress sono stati “marcati” con l’attributo Obsolete. Infatti, tutti gli altri costruttori permettono di specificare in ingresso un indirizzo IP o un host name in formato stringa; sarò carico del costruttore verificare di che tipo si tratta e nel caso di host name effettuare una conversione ad indirizzo IP attraverso DNS.

Per quanto riguarda il tracing, alcune persone hanno segnalato che nella versione Nuget questa funzionalità non visualizzava il contenuto di ciascuno messaggio scambiato ma il tipo del messaggio; ciò era dovuto al fatto che la libreria Nuget è compilata in modalità Release ma i messaggi di trace erano attivi in Debug. La versione attuale fornisce il tracing sia in debug che release in quanto è legata al simbolo TRACE (e non più al simbolo DEBUG) che è definito in entrambe le configurazioni. Ovviamente, il tracing è sempre legato alla definizione di un TraceListener da parte dell’utilizzatore.

Bug fixing

I principali bug risolti sono stati segnalati sul sito CodePlex da alcuni utenti e di seguito riporto i riferimenti :

Conclusioni

La libreria è in continua evoluzione grazie alla community e molto presto includerà il supporto per MQTT 3.1.1 che tra poche settimane sarà standard OASIS. L’ulteriore passo è la licenza passata da L-GPL ad Apache 2.0 !

Come sempre potete trovare la versione aggiornata su CodePlex, Nuget e Microsoft Code Gallery. Infine, è stato ovviamente aggiornato anche il broker GnatMQ alla versione 0.9.1.0 ed il progetto M2Mqtt4CE.

M2Mqtt : aggiunto il supporto per il tracing nel client MQTT

La libreria M2Mqtt è giunta alla versione 3.4.0.0 con un’utile funzionalità come il tracing in modalità di debugging.

Il progetto ha la nuova classe Trace che espone il membro statico TraceListener il quale è dichiarato attraverso il seguente delegate :

// delegate for writing trace
public delegate void WriteTrace(string format, params object[] args);

In questo modo, è possibile scegliere la propria modalità di tracing assegnando a questo delegate un metodo con la medesima firma. Inoltre, è possibile stabilire il livello di tracing attraverso l’impostazione del membro statico TraceLevel sulla base dei seguenti possibili valori dell’enumerativo :

/// <summary>
/// Tracing levels
/// </summary>
public enum TraceLevel
{
 Error = 0x01,
 Warning = 0x02,
 Information = 0x04,
 Verbose = 0x0F,
 Frame = 0x10
}

Un semplice esempio applicativo di uso del tracing potrebbe essere il seguente :

Trace.TraceLevel = MqttUtility.TraceLevel.Verbose | MqttUtility.TraceLevel.Frame;
Trace.TraceListener = (f, a) => System.Diagnostics.Trace.WriteLine(System.String.Format(f, a));

In questo caso, attraverso una lambda expression, tutti i messaggi di trace vengono scritti sulla finestra di output di Visual Studio.

SEND CONNECT(protocolName:MQIsdp,protocolVersion:3,clientId:testId,willFlag:False,willRetain:False,willQosLevel:2,willTopic:,willMessage:,cleanSession:False,keepAlivePeriod:60)
RECV CONNACK(returnCode:0)
SEND SUBSCRIBE(messageId:1,topics:[/foo/#,/foo/+/baz],qosLevels:0202)
RECV SUBACK(messageId:1,grantedQosLevels:0202)
RECV PUBLISH(messageId:1,topic:/foo,message:48656C6C6F)
SEND PUBREC(messageId:1)
RECV PUBREL(messageId:1)
SEND PUBCOMP(messageId:1)
Hello
SEND PUBLISH(messageId:2,topic:/thank,message:5468616E6B20596F7520212031)
RECV PUBREC(messageId:2)
SEND PUBREL(messageId:2)
RECV PUBCOMP(messageId:2)

La nuova versione è disponibile sul CodePlex, Nuget e nella Microsoft Code Gallery. Ad essa va aggiunto anche l’aggiornamento della M2Mqtt4CE per l’immagine di Windows Embedded Compact 2013 !

IoT@Work : si è svolto a Roma l’evento sull’Internet of Things

Venerdì 6 Giugno si è tenuto l’evento IoT@Work a Roma presso la sede Microsoft, organizzato dalla community romana DomusDotNet e dalla community online TinyCLR.it (di cui faccio parte).

Grazie all’ospitalità di Massimo Bonanni e di tutti i ragazzi della community, abbiamo trascorso un’intera giornata all’insegna dell’Internet of Things.

6445.WP_20140606_10_45_59_Pro_7F6729C7 4382.WP_20140606_11_55_30_Pro_1F5286C5

La mattinata, molto teorica, è iniziata con Mirco Vanini che ci ha illustrato che cosa è e cosa non è l’Internet delle Cose, con una serie di casi d’uso reali e le proiezioni future di questo nuovo business. La sessione successiva ha visto me stesso come protagonista nell’affrontare da un punto di vista tecnico i principali protocolli che sono utilizzati maggiormente nell’IoT, ciascuno con i proprio vantaggi e svantaggi. Le sessioni mattutine sono state concluse da Lorenzo Maiorfi che ci ha parlato di “flow-programming”, del suo campo di applicazione nell’IoT e di due principali strumenti che possono essere utilizzati a questo scopo : NodeRed ed Orleans.

1261.WP_20140606_09_12_08_Pro_057E5096 4807.WP_20140606_09_07_48_Pro_19976D1F

Dopo la pausa pranzo, abbiamo ripreso con una parte assolutamente pratica ed una demo corale (io, Mirco e Lorenzo insieme) che ha visto protagonista ventole, luci, prese comandate, sensori ed attuatori pilotati e coordinati da un broker su base NodeRed …. insomma un intero sistema di domotica casalinga e/o industriale. Infine, Francesco Baldassarri ci ha illustrato quali sono gli strumenti che Intel mette a disposizione degli sviluppatori per l’IoT (vedi la board Galileo) e quali saranno le novità future !

Come sempre, in un evento del genere, fa sempre piacere avere il riscontro delle persone, soprattutto quando ti contattano il giorno dopo per farti le congratulazioni ed avere delucidazioni in merito !

Insomma…chi non è venuto…non potrà mai sapere cosa si è perso !

😉

IoT@Work e MobileDay : due eventi da non perdere !

3404.Cattura_187953B7

La community romana DomusDotNet (i “cugini” dei membri del DotNetCampania) e TinyCLR.it (di cui faccio parte) sono lieti di presentarvi IoT@Work, un evento in collaborazione con Microsoft ed Intel, completamente dedicato al mondo dell’Internet Of Things che si svolgerà il prossimo 6 Giugno a Roma !

La giornata è assolutamente gratuita ed affronta uno dei temi più “caldi” dell’ultimo anno relativo all’Internet delle Cose.

Si inizia con la sessione “IoT – What is it ?” di Mirco Vanini che ci spiega che cosa si intende per Internet of Things, quali sono i campi applicativi e le implementazioni attuali nel mondo reale. Subito dopo c’è la mia sessione “IoT Protocols Landscape” in cui affronto l’analisi dei principali protocolli che ad oggi si stanno mettendo in evidenza nel mondo dell’IoT con un occhio di riguardo a quello che mi sta più a “cuore”, MQTT. La mattinata si conclude con Lorenzo Maiorfi e la sessione su “IoT NodeRed”, un interessantissimo strumento basato su NodeJS ed utilizzato per la cosiddetta “flow-based programming” molto efficace nel mondo M2M.

Subito dopo la pausa pranzo, il pomeriggio parte con una demo corale (io, Mirco e Lorenzo) che mostra un sistema di Smart Home e Smart Factory e con una dimostrazione pratica dei concetti di IoT nell’ambito della domotica e dell’automazione industriale. A seguire, Francesco Baldassarri portavoce di Intel, sponsor dell’evento, ci mostra le caratteristiche principali e le potenzialità della board Galileo con le sue applicazioni future.

4478.Cattura_7019FB95

Il 13 Giugno a Napoli, DotNetCampania vi invita al MobileDay per poter parlare di sviluppo mobile con le tecnologie Microsoft e del partner Xamarin.

Nella prima sessione, Michele Aponte e Mauro Ghiani ci mostrano quali sono i principali problemi del web mobile ed i principali framework a disposizione con relativi esempi di applicazioni reali; quali sono le tecniche di responsive design e creare un sito web specifico per mobile in modo da fornire ai nostri utenti una user experience più o meno adatta ai dispositivi con cui accedono alla nostra applicazione. A seguire, Fabio Cozzolino parla di Xamarin attraverso il quale sia possibile sviluppare applicazioni mobile “cross-platform” data l’eterogeneità delle piattaforme sul mercato da Windows Phone ad iOS passando per l’immancabile Android. Infine, Emanuele Garofalo ci mostra la nuova linea di sviluppo Microsoft con le “universal” apps su Windows 8.1 e Windows Phone 8.1 in modo da condividere il codice che possa girare su smartphone e su tablet/desktop.

Insomma, il mese di Giugno inizia alla grande con due eventi assolutamente da non perdere !

M2Mqtt e GnatMQ : il progetto MQTT per la piattaforma .Net ha un sito ufficiale !

4760.Cattura_thumb_76DD1A9C

Finalmente, il progetto M2Mqtt, che include la libreria client ed il broker GnatMQ, ha il suo sito ufficiale !

Oltre ad un blog dedicato, è disponibile una ricca sezione di documentazione che attualmente contiene la descrizione dell’architettura della libreria client, i principali vantaggi nell’utilizzarla ed un semplice esempio di applicazione. Per quanto riguarda il broker, sono riportate le principali funzionalità implementate e quelle future.

Inoltre, nella sezione download sono elencati tutti i link da cui scaricare i progetti (CodePlex, Nuget e Microsoft Code Gallery).

Il mio obiettivo è quello di aggiungere una sezione relativa ai “case study” con esempi applicativi, hobbistici e professionali, e/o demo di coloro che stanno utilizzando la libreria e/o il broker. Ovviamente, chiunque voglia parteciparvi può contattare attraverso la sezione Contact !

IoT@Work : evento “romano” dedicato all’Internet of Things !

3515.domusdotnet20262x60_thumb_130D09A3 1067.logotinyclrit_275x80_thumb_396EECEE

DomusDotNet, community romana orientata alle tecnologie Microsoft, e TinyCLR.it. community italiana dedicata al .Net Micro Framework e di cui faccio parte, hanno organizzato per Venerdì 6 Giugno 2014 a Roma (presso la sede Microsoft) un evento completamente gratuito e dedicato all’Internet of Things : IoT@Work !

Insieme ad altri due MVP su Windows Embedded, Mirco Vanini e Lorenzo Maiorfi, avrò l’onore di essere speaker, per la prima volta anche io nelle vesti di MVP, con una sessione dedicata al panorama dei principali protocolli per l’IoT ed M2M communication.

Dopo una mattinata dedicata allo studio dell’IoT ed alle tecnologie che lo caratterizzano, il pomeriggio vedrà protagonista un’interessantissima demo “corale” con tutti gli speaker con un approccio di realizzazione di un sistema di home ed industrial automation.

L’evento è assolutamente da non perdere !! Vi aspettiamo !!

M2Mqtt : release 3.3.0.0 per il client MQTT su piattaforma .Net

Lo sviluppo della libreria M2Mqtt continua …. ormai giunta alla versione 3.3.0.0 !

Questa volta le nuove funizionalità riguardano due richieste provenienti dalle persone che la stanno utilizzando.

In primo luogo, ho aggiunto più overload al metodo Connect(), poichè da quanto ho rimosso i parametri di default (per questioni di compatibilità con le versioni precedenti del .Net Framework) ho lasciato il costruttore più complesso che richiede tutti i parametri. Molte persone, non conoscendo bene il protocollo MQTT, si sono trovate in difficoltà nel decidere quali valori passare ai parametri meno noti (will message, clean session, …).

L’ulteriore nuova funzionalità riguarda l’evento di disconnessione del client dal broker MQTT che è stato richiesto sul sito ufficiale CodePlex. La classe MqttClient espone l’evento MqttMsgDisconnected che viene sollevato quando è rilevata una condizione di mancata connessione con il broker e tipicamente in due casi :

  • In caso di assenza di traffico dati, al messaggio di PINGREQ (relativo al keep alive) non si riceve la risposta PINGRESP dal broker;
  • La trasmissione o la ricezione dati verso/da il broker fallisce per un problema di connessione;

Anche questa volta la nuova versione è disponibile su CodePlex e su Nuget, oltre ad aver aggiornato il corrispondente componente M2Mqtt4CE per Windows Embedded Compact 2013 !

Breaking changes ….

Per quanto riguarda Nuget, gli assemblies M2Mqtt relativi al .Net Micro Framework 4.3 sono stati aggiornati all’ultima release QFE1; essi non funzionano con la versione RTM precedente, poichè gli assemblies del micro framework sono passati dalla versione 4.3.0.0 alla 4.3.1.0.