DevExperience

.Net Framework, Internet of Things & M2M, Embedded Systems, Design Patterns Paolo Patierno's Blog

MVP Award

I'm Microsoft MVP for Windows Embedded

Recent Posts

Apps & Articles

Progetti

Pubblicazioni

Tags

My Profiles

 

My Embedded101 Blog

My YouTube Channel

Windows Embedded CE 6.0

Building Embedded Devices using Windows Embedded CE 6.0 R2

Archives

Sto leggendo...

Windows Embedded

.Net Micro Framework

.Net Framework & CLR

Email Notifications

Open Source Hardware

RSS Blog Post

Node-RED, flow-based programming per l’IoT su HTML.it

node-red-guida

A partire da oggi, su HTML.it, inizia la pubblicazione di una nuova guida che ho scritto molto volentieri, in quanto ritengo l’argomento in oggetto molto importante ed utile nell’ambito dell’Internet of Things : sto parlando di Node-RED !

Nel corso del primo capitolo, viene introdotto il concetto di flow-based programming che rappresenta il paradigma di programmazione su cui si basa Node-RED in modo da poterne capire i concetti fondamentali prima di iniziare ad utilizzarlo praticamente.

Spero mi seguiate numerosi per poter scoprire le potenzialità di questo strumento nell’ambito dell’Internet of Things !

Sorriso

Esplora l’immagine “Windows for IoT” della Intel Galileo (Gen2) comodamente sul tuo PC !

Vi siete iscritti al Windows Developer Program for IoT e siete in attesa della board oppure avete ordinato una Intel Galileo (Gen2) sulla quale caricherete l’immagine di Windows messa a disposizione sul sito ufficiale ? Siete in attesa delle board ma siete curiosi di sapere quali siano i componenti inclusi nell’immagine di Windows for IoT ?

Una soluzione c’è !

Una volta scaricato il file WIM del sito, è possibile eseguirne il mounting attraverso il comando DISM nel modo seguente :

dism /Mount-Wim /WimFile:<path_wim_file> /Index:1 /MountDir:<path_dir_mount>

Ad esempio :

dism /Mount-Wim /WimFile:C:\Users\ppatierno\Downloads\9600.16384.x86fre.winblue_rtm_iotbuild.140925-1000_galileo_v2.wim /Index:1 /MountDir:C:\Galileo

Attenzione !! La cartella in cui montare va creata prima.

01

Al termine di tale operazione, attraverso esplora risorse potrete vedere comodamente sul vostro PC il contenuto dell’immagine di Windows per la vostra Intel Galileo !

02

Infine, per poter cancellare la cartella creata, è necessario in primo luogo eseguire l’unmounting con il seguente comando :

dism /Unmount-Wim /MountDir:<path_dir_mount> /Discard

03

Sorriso

Mobile Camp : demo e slide sulla geolocalizzazione con MQTT

Giovedì 23 Ottobre c’è stato a Napoli il “Mobile Camp” organizzato da Microsoft insieme alla mia community DotNetCampania e dedicato allo sviluppo su piattaforma Windows Phone e Windows.

Sono intervenuti Lorenzo Barbieri ed Erica Barone della Microsoft che, oltre alle sessioni introduttive alla giornata, hanno guidato tutti i ragazzi intervenuti durante il lab.

Per concludere la giornata, Mauro Ghiani, Michele Aponte, Clemente Giorio ed io abbiamo tenuto singolarmente una breve sessione.

La mia sessione era dedicata all’utilizzo dei location services e dei geofences e la relativa pubblicazione dei dati nel cloud attraverso l’uso del protocollo MQTT confrontato con l’HTTP.

Al seguente indirizzo su GitHub potete trovare la demo e su Slideshare le poche slide necessarie all’introduzione della stessa.

M2Mqtt è ufficialmente parte del progetto Paho !

Chi conosce il protocollo MQTT, utilizzato nell’ambito dell’Internet Of Things, sa benissimo che il punto di riferimento per quest’ultimo è il progetto Paho della Eclipse Foundation.

01

Tale progetto fornisce una serie di implementazioni di client MQTT nei principali linguaggi quali C/C++ (sia in ambiente Windows o Linux che su sistemi embedded), Java, (per J2SE ed Android), Javascript, Python e Go.

In questo folto elenco, fino a qualche giorno fa mancava un’implementazione in C# che fosse utilizzabile sulle piattaforme .Net e WinRT. Ebbene, questa lacuna è stata colmata con l’ingresso del mio progetto M2Mqtt nell’ambito di Paho per il quale sono diventato ufficialmente un committer !

02

Non nascondo che questo è un grande onore per me e non potevo immaginare che poco dopo più di un anno dalla nascita del mio client, i membri principali della Eclipse Foundation e tutti coloro che lavorano sul protocollo MQTT mi potessero chiedere di fare parte di questo progetto. Tra di essi ci sono Benjamin Cabè (IoT Community Evangelist della Eclipse Foundation), Ian Craggs (Software Engineer alla IBM e project lead del progetto Paho), Andy Piper (Developer Advocat a Twitter e project lead del progetto Paho), Ian Skerrett (Vice Presidente Marketing alla Eclipse Foundation). Ad essi vanno poi aggiunti anche Nicholas O’Leary (Emerging Technology Specialist alla IBM, committer su Paho e padre di Node-RED), Roger Light (creatore del broker Mosquitto e committer su Paho) e tutti gli altri committer su Paho (Al Stockdill-Mander, Andy Gelme, Dave Locke) che hanno votato all’unanimità l’ingresso di M2Mqtt.

03

Queste sono le persone che hanno creduto che M2Mqtt fosse degna di far parte del progetto Paho insieme ovviamente a tutti coloro che usano la mia libreria in progetti professionali e non.

Come Microsoft MVP (su Windows Embedded ed IoT), sono molto felice del fatto che il linguaggio C# e le piattaforme .Net e WinRT fanno parte, grazie ad M2Mqtt, di un grande progetto open source come Paho. Questo significa che M2Mqtt può essere considerata l’implementazione MQTT di riferimento per le piattaforme Microsoft.

Ovviamente, tutti coloro che sino ad oggi hanno utilizzato CodePlex come repository di riferimento potranno continuare a farlo e lo stesso vale per Nuget. Esso sarà sempre allineato con gli aggiornamenti ed i miglioramenti apportati alla libreria nel progetto Paho.

Individual Member della AllSeen Alliance nel progetto AllJoyn per l’Internet of Things

logoimg-alljoyn-logo

Nel Dicembre del 2013, la Linux Foundation annunciò la nascita della AllSeen Alliance, un consorzio dedicato allo sviluppo ed all’innovazione nell’ambito dell’Internet of Things nelle nostre case e nell’ambito industriale.

Tra i membri che finanziano tale consorzio, ci sono dei leader mondiali del mercato dell’elettronica di consumo, della home automation e del silicio quali Qualcomm, Panasonic, LG Electronics, Haier, Sharp e tanti altri. Ad essi nell’ultimo periodo si è aggiunta anche la Microsoft.

Oltre ai colossi suddetti iscritti come “Premiem Member”, ci sono numerosi “Community Member” come Cisco, D-Link, HTC e tanti altri.

Ciascuno di essi fornisce il proprio contributo nello sviluppo del progetto open source il cui nome è AllJoyn ed il cui obiettivo è quello di fornire un framework attraverso il quale degli oggetti “intelligenti” possono esporre delle APIs in modo da poter interagire tra loro e con altri dispositivi come tablet e smartphone. AllJoyn ha come obiettivo quello di definire uno standard nella comunicazione nell’ambito dell’Internet of Things.

Ebbene, a partire da ieri, sono ufficialmente un “Individual Member” sponsorizzato da Joe Speed (uno dei membri della “board of director” del consorzio) grazie alla mia attività sul protocollo MQTT soprattutto su tecnologie Microsoft.

Spero di poter dare il mio supporto in questa ulteriore attività di community che mi vede coinvolto !

Windows for IoT : MQTT sulla board Intel Galileo

Una delle principali caratteristiche di un oggetto nell’ambito dell’Internet of Things è la sua capacità di scambiare messaggi, inviando dati o ricevendo comandi, nel modo più efficace ed efficiente possibile. Esistono numerosi protocolli standard per questo scopo ma uno dei miei preferiti è MQTT.

Nel corso di questo articolo, vedremo come sia possibile utilizzare un client MQTT sulla board Intel Galileo con “Windows for IoT”, in modo da aggiungere a quest’ultima la potenzialità necessaria per poter essere riconosciuta come parte del mondo dell’Internet of Things.

Paho project : il client MQTT

Paho è un progetto open source della Eclipse Foundation che mette a disposizione una serie di client, sviluppati con differenti linguaggi di programmazione, per i principali protocolli utilizzati nell’ambito della M2M (Machine To Machine) communication e dell’IoT (Internet of Things). In particolare, la nostra attenzione è focalizzata sul client MQTT in linguaggio ANSI C che fornisce il supporto Posix/Windows e che espone due tipologie di APIs :

  • Sincrone : ogni chiamata è bloccante e ritorna il controllo al chiamante solo al termine dell’operazione richiesta;
  • Asincrone : l’operazione richiesta viene avviata in maniera asincrona restituendo immediatamente il controllo al chiamante e tutte le notifiche sono eseguite attraverso delle callback (molto utile nell’ambito di software con una UI);

Per poter compilare tale progetto utilizzando Visual Studio 2013, è necessario utilizzare GIT per eseguire il clone del corrispondente repository il cui URL è disponibile nella pagina principale della libreria nella sezione Downloads –> MQTT –> C/C++ –> C (Posix/Windows).

00

Nella sottocartella “Windows Build”, possiamo trovare la solution “Paho C MQTT APIs” i cui progetti sono i seguenti :

  • MQTTVersion : applicazione console che visualizza la versione corrente di una specifica libreria;
  • paho-mqtt3c, paho-mqtt3a : sono rispettivamente le librerie MQTT sincrone ed asincrone senza il supporto SSL;
  • paho-mqtt3cs, paho-mqttas : sono rispettivamente le librerie MQTT sincrone ed asincrone con il supporto SSL;
  • stdoutsub, stdoutsuba : applicazioni console che forniscono un subscriber in modalità sincrona ed asincrona;
  • test1, test3 : applicazioni console di test per la libreria sincrona rispettivamente senza e con SSL;
  • test4, test5 : applicazioni console di test per la libreria asincrona rispettivamente senza e con SSL;

01

La solution è ben strutturata ma purtroppo è necessario effettuare una serie di modifiche alle impostazioni per poter compilare i progetti su Windows, per poi passare all’esecuzione sulla Intel Galileo con “Windows for IoT”.

Compiliamo la libreria sincrona

Focalizziamo la nostra attenzione sulla libreria che fornisce l’implementazione sincrona (paho-mqtt3c) senza il supporto SSL nella configurazione di Debug. Essa compila senza alcun problema ma per l’esecuzione sulla Intel Galileo è necessario disabilitare le “enhanced instructions” a causa di un errore a runtime di “illegal instruction” sulla funzione difftime. Ciò è possibile attraverso le proprietà del progetto ed impostando “No Enhanced Instructions (/arch:IA32)” in C/C++ –> Code Generation –> Enable Enhanced Instruction Set.

02

Le modifiche principali vanno effettuate sul progetto test1 per la libreria suddetta, in quanto esso non compila immediatamente a causa di una serie di impostazioni errate.

In primo luogo fallisce l’inclusione del file MQTTClient.h (Cannot open include file: 'MQTTClient.h: No such file or directory) che possiamo risolvere aggiungendo la corrispondente directory nelle proprietà del progetto; in particolare va aggiunto il path $(SolutionDir)\..\src in C/C++ –> General –> AdditionalIncludeDirectoris.

03

Inoltre, è necessario aggiungere le seguenti define in C/C++ –> Preprocessor –> Preprocessor Definitions :

  • _WINDOWS : utilizzata per evitare l’inclusione di alcuni header files legati a Linux e garantire l’inclusione degli header files relativi alle WinSock;
  • _CRT_SECURE_NO_WARNINGS : purtroppo la libreria fa uso di molte funzioni nella versione “unsafe” (es. strtok al posto di strtok_s);

04

05

A questo punto, il compilatore riesce a fare il proprio lavoro ma il Linker segnala una serie di “unresolved externals”, in quanto non è in grado di trovare i simboli relativi alla libreria WinSock e la libreria MQTT. Nel caso della libreria WinSock, va aggiunto il riferimento per il Linker alla libreria ws2_32.lib in Linker –> Input –> Additional Dependencies.

06

Per quanto riguarda la libreria MQTT, possiamo referenziare direttamente il progetto (visto che è nella medesima solution) in Common Properties –> References –> Add New Reference.

07

Con queste ultime modifiche la compilazione viene eseguita correttamente ma purtroppo se proviamo ad eseguire l’applicazione di test sul nostro PC, ci ritroviamo di fronte ad un errore di “stack corruption”. Ho prontamente segnalato il bug (potete trovare i dettagli qui) che con la versione corrente non è stato ancora messo a posto. La soluzione consiste semplicemente in una modifica nel file MQTTClient.c (funzione MQTTClient_deliverMessage) e nello spostare la seguente riga di codice :

ListRemove(m->c->messageQueue, m->c->messageQueue->first->content);

subito dopo #endif e la chiamata della funzione MQTTPersistence_unpersistQueueEntry.

Il primo test su PC

Prima di lanciare l’esecuzione dell’applicazione di test sulla Intel Galileo, possiamo accertarci che tutto funzioni correttamente eseguendola sul proprio PC. In primo luogo, dobbiamo scegliere un broker MQTT per poter eseguire i test (oppure utilizzare quello online di default). Io ho preferito utilizzare un broker molto leggero come Mosquitto che è possibile scaricare qui. Lanciamo il broker con l’opzione “-v” ossia in modalità “verbose” in modo da poter vedere tutti i messaggi di debug durante il test.

Prima di ricompilare e lanciare l’applicazione test1, è necessario modificare la struttura options che contiene, tra l’altro, l’indirizzo del broker a cui collegarci (nel mio caso, l’indirizzo IP del mio PC).

   1: struct Options
   2: {
   3:     char* connection;         /**< connection to system under test. */
   4:     char** haconnections;
   5:     int hacount;
   6:     int verbose;
   7:     int test_no;
   8:     int MQTTVersion;
   9:     int iterations;
  10: } options =
  11: {
  12:     "tcp://192.168.10.188:1883",
  13:     NULL,
  14:     0,
  15:     0,
  16:     0,
  17:     MQTTVERSION_DEFAULT,
  18:     1,
  19: };

Se tutto è impostato nel modo corretto, l’applicazione di test verrà eseguita senza alcun problema.

08

MQTT con “Windows for IoT”

Una volta accertato il funzionamento sul PC, possiamo passare alla configurazione del remote debugging per eseguire l’applicazione sulla board Intel Galileo direttamente da Visual Studio; le impostazioni necessarie sono disponibili sul sito ufficiale di Windows On Devices.

09

Anche in questo caso, lanciando l’applicazione in debug dovremmo vedere tutti i messaggi nella console di Mosquitto che vengono scambiati con la board.

Abbiamo un client MQTT in esecuzione su di essa !

10

Se siamo curiosi di vedere anche l’output dell’applicazione di test, possiamo lanciarla attraverso una sessione Telnet direttamente dalla board. Al termine dell’esecuzione, viene visualizzato il report con tutti i test superati.

11

Ovviamente, tutte le modifiche apportati ai progetti relativi alla libreria sincrona, possono essere applicate anche ai progetti relativi alla libreria asincrona senza alcuna differenza con la garanzie di avere il medesimo risultato.

E' disponibile sul mio canale YouTube anche un video del test eseguito sulla Intel Galileo.

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.

.Net Micro Framework : rilasciato l’SDK R2 Beta con il supporto a Visual Studio 2013 e lanciato il nuovo sito !

release

Novità, novità … ancora novità !

L’attesa è finita ! Le prime novità della nuova vita del .Net Micro Framework sono state annunciate pubblicamente ieri con il rilascio dell’SDK R2 Beta per la versione 4.3 del framework.

Visual Studio 2013 … ma non solo !

Questa release cambia completamente la modalità di installazione del framework sul proprio PC utilizzando un package VSIX e garantendo il supporto di più versioni di Visual Studio anche con installazione syde by syde. Da tutto ciò scaturisce l’attuale supporto per Visual Studio 2013 (anche in versione Express) !

Il file zip scaricabile dal sito contiene il file MSI per l’installazione del framework e tre file VSIX per aggiungere i project template nelle tre differenti versioni supportate di Visual Studio (2012, 2013 e “14”).

Infatti, il team è andato oltre fornendo un supporto “light” (per una semplice applicazione “Hello World”) anche per la futura versione Visual Studio “14”.

Il sito ha una nuova veste

Altra novità è il completo re-styling del sito ufficiale dedicato al .Net Micro Framework a partire dalla home page. Questo rappresenta solo il primo passo con un futuro arricchimento di contenuti che la Microsoft chiede anche a tutte le persone che volessero presentare un proprio progetto.

website

La parte relativa al forum è stata rimossa, stabilendo di utilizzare CodePlex (attraverso la sezione “Discussions”) come unico punto di riferimento. Tale sezione è stata suddivisa in Application Development, General, Porting e Showcase.

I prossimi passi …

Il team è già al lavoro per i futuri aggiornamenti da includere nella release definitiva. In primo luogo, il miglioramento dello stack TCP/IP a seguito dei numerosi problemi rilevati e segnalati dalla community. Inoltre, saranno risolti i problemi relativi al debug (attualmente molto lento) ed al deploy.

Open source e Community

Come tutti sanno, il .Net Micro Framework è open source da anni ed ora che la Microsoft ha deciso di puntare anche su di esso, la community assume un ruolo sempre più importante nel miglioramento di questo prodotto. Il team di ingegneri che lavora su di esso fa parte della Microsoft Open Technologies e questo evidenzia anche la volontà di lavorare a stretto contatto con tutti gli sviluppatori che creano soluzioni IoT basate su .Net Micro Framework.

In definitiva … il .Net Micro Framework siamo anche noi !

Occhiolino

M2Mqtt Spy : Windows Store e Windows Phone companion apps per “spiare” il traffico MQTT

Logo.scale-240

windows-logo-new-370x229

Dopo aver aggiunto il supporto per WinRT al progetto M2Mqtt nell’ultima release, ho deciso di realizzare una semplice “companion” app : M2Mqtt Spy.

01 02

Questa applicazione è disponibile come Windows Store e Windows Phone app e fornisce le seguenti funzionalità base :

  • connessione ad un broker MQTT locale o remoto (con eventuali username e password);
  • sottoscrizione/desottoscrizione ad uno o più topics (con QoS 0);
  • dashboard con i messaggi ricevuti in corrispondenza dei topics sottoscritti;
  • pubblicazione di un messaggio con (QoS 0) su un topic;
01 02 03

Ovviamente, questa è solo la versione iniziale, grazie alla quale poter aver un primo applicativo di testing MQTT sui proprio device Windows.

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

Better Embedded 2014 : la mia sessione sull’Internet of Things

Il 4 e 5 Luglio sono stato a Firenze per l’evento Better Embedded 2014, la prima conferenza italiana dedicata al mondo embedded.

Ho avuto la fortuna e l’onore di essere speaker con una sessione sull’Internet of Things, intitolata “Internet of Things : protocols war !”. L’evento è stato seguito da molte persone come ogni anno ed ha mantenuto le sue aspettative e spero di poter rivivere questa esperienza anche l’anno prossimo.

10502174_10202541224956011_7172979389273929892_n

10488180_10202543474652252_1308244259809629282_n

Per quanto riguarda la mia sessione, potete trovare le slide disponibili su SlideShare.

Windows for IoT : “cannot open include file arduino.h” ? Verifica la connessione ad Internet, hai bisogno del package Galileo C++ SDK su Nuget !

Ieri ho ricevuto il mio kit con la board Intel Galileo con la versione di “Windows for IoT” ed ovviamente, come un bambino che ha tra le mani il suo nuovo giocattolo, ho iniziato a giocare !

La cosa più semplice è quella di seguire la documentazione online, raggiungibile dal sito ufficiale Windows On Devices, che descrive passo passo come essere “up and running” in pochi minuti. La mia voglia di fare mi ha portato a commettere un “errore” che non mi ha permesso di concludere la procedura nel modo corretto. Cosa è successo ?

Dopo aver acceso la Galileo, averla collegata al PC e navigato tra le cartelle (sia con una sessione telnet che come “network shared”), ho deciso di sviluppare il primo esempio relativo al blinking del led. Apro Visual Studio 2013 e seleziono il template di progetto C++ relativo a Windows for IoT, avvio la compilazione ed …. ecco l’errore !!

arduino_header_error

Non trova il file arduino.h ? Come mai ? Non viene installato insieme all’SDK che dobbiamo scaricare dal sito Microsoft Connect ? La risposta è no !

Tutti gli headers file con relativa implementazione sono nel Galileo C++ SDK che trovate su Nuget. Per questo motivo, ho dovuto manualmente scaricare tale package e referenziarlo nel mio progetto. A quel punto, tutto ha funzionato correttamente !

A quanto pare, però, sono stato l’unico ad avere questo problema e mi sono chiesto come mai ! Tutte le altre persone che hanno il kit hanno compilato il progetto di esempio senza alcun problema ma soprattutto senza dover scaricare manualmente il package Galileo C++ SDK da Nuget.

Ebbene non è proprio così ! Quel package è necessario ma il wizard lo scarica automaticamente al momento della generazione del progetto ed a quanto pare, in quel momento, il mio PC non era connesso ad Internet !!!

Se il PC non è connesso ad Internet, il wizard crea il file package.config vuoto :

   1: <?xml version=”1.0encoding=”utf-8”?>
   2: <packages>
   3: </packages>

Viceversa, esso contiene un riferimento al Galileo C++ SDK (Microsoft.IoT.Galileo.Arduino 1.0.0.0) nel momento in cui c’è connessione.

   1: <?xml version=”1.0encoding=”utf-8”?>
   2: <packages>
   3:     <package id="Microsoft.IoT.Galileo.Arduino" version="1.0.0.0" targetFramework="Native" />
   4: </packages>

E’ ovvio che tale package è necessario se avete intenzione di sviluppare applicazioni Arduino-like (infatti il wizard specifica “Galileo Wiring app”) ma non nel caso di applicazioni Win32 standard.

Insomma … prima di partire con il Windows Developer Program for IoT assicuratevi di avere il PC connesso alla grande rete !

IoT, Arduino, REST e Cloud … su HTML.it

Cattura

Giunti al nono capitolo della guida introduttiva su Arduino, possiamo finalmente toccare con mano la nuvola !

In particolare, si parte dalla realizzazione di un semplice client HTTP REST su Arduino attraverso il quale poter trasmettere nel Cloud i valori di temperatura rilevati dal relativo sensore e letti attraverso il driver sviluppato nei capitoli precedenti. La nuvola che ospita il servizio di acquisizione dati è ovviamente Azure attraverso una semplice applicazione ASP.NET MVC4 Web API.

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 :

   1: MqttClient client = new MqttClient("<server_name>", 8883, true, ValidateServerCertificate, SelectClientCertificate);
   2: ...
   3: ...
   4:  
   5: bool ValidateServerCertificate(object sender, 
   6:                         X509Certificate certificate, 
   7:                         X509Chain chain, 
   8:                         SslPolicyErrors sslpolicyerrors)
   9: {
  10:     bool valid;
  11:     // check sslpolicyerrors and execute your certificate validation
  12:     ...
  13:     ...
  14:     return valid;
  15: }
  16:  
  17: X509Certificate SelectClientCertificate(
  18:                       Object sender,
  19:                       string targetHost,
  20:                       X509CertificateCollection localCertificates,
  21:                       X509Certificate remoteCertificate,
  22:                       string[] acceptableIssuers)
  23: {
  24:     X509Certificate cert;
  25:  
  26:     // choose client certificate from local store or creating new one
  27:     ...
  28:     ...
  29:     return cert;
  30: }

Costruttori obsoleti e tracing

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.

Più Post Pagina seguente »