• RSS
  • Add To My MSN
  • Add To Windows Live
  • Add To My Yahoo
  • Add To Google

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

Post di Paolo Patierno venerdì 18 luglio 2014 13:03:04
Valuta questo articolo 0 Voti

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.

Windows Developer Program for IoT ufficialmente partito !! 

Post di Paolo Patierno sabato 12 luglio 2014 14:22:07
Valuta questo articolo 0 Voti

Capture

Seppure ne fosse stata annunciata l’esistenza dopo Build 2014 e subito dopo all’evento O’Reilly Solid, il programma “Windows Developer Program for IoT” è ufficialmente partito ieri !

L’annuncio è stato dato dal program manager, Steve Teixeira, sul blog di Windows sottolineando il lancio del nuovo portale Windows Developer for IoT e l’inizio della spedizione degli evaluation kit costituiti dalle board Intel Galileo con a bordo una versione specifica di Windows che supporta le API Arduino ed un sottoinsieme delle Win32.

Inoltre, sul sito della Microsoft Open Technologies è specificato che l’SDK sarà presto rilasciato in parte come open source.

Per chi si fosse già iscritto al programma, non gli resta che aspettare l’arrivo del kit direttamente a casa ma può iniziare a farsi un giro sul nuovo portale che già mette a disposizione tutte le informazioni sull’SDK con relativi esempi applicativi !

Azure Nodes : i servizi di Microsoft Azure in Node-RED ! 

Post di Paolo Patierno mercoledì 9 luglio 2014 13:20:24
Valuta questo articolo 0 Voti

azurenodes2

Dopo aver scritto l’articolo relativo all’installazione di Node-RED attraverso un Web Site in Microsoft Azure, ho deciso di iniziare un altro “piccolo” progetto open source strettamente legato alla “flow-based programming” con Node-RED utilizzando i servizi di Microsoft Azure.

Partendo dall’ Azure SDK per Node.js mi sono posto la seguente domanda : perché non mettere a disposizione degli utilizzatori di Node-RED tutti i servizi di Microsoft Azure nei loro “flow” ?

Da qui è nata l’idea del progetto Azure Nodes !

Questo progetto, disponibile su GitHub, aggiunge una serie di nodi (di colore “azure”) alla toolbox di Node-RED attraverso i quali poter interagire con i servizi di Microsoft Azure. La versione attuale è ancora in Beta e supporta esclusivamente le funzionalità del Service Bus (queue e topic/subscription) molto utili nell’Internet Of Things.

sample_topic_sub_flow

La documentazione è disponibile nelle pagine di Wiki relative al progetto stesso anche se l’utilizzo dei nodi è notevolmente semplice ed intuitivo.

sb_queue_in_node

Ci sono ancora molti (toppi ?) messaggi di debug visualizzati sulla console di Node.js ma voglio prima capire se il progetto può essere considerato valido ed interessante per gli utilizzatori. Per questo motivo, non esitate a contattarmi e darmi la vostra opinione !

Ovviamente, ho già provveduto ad attivare l’account Twitter @azurenodes !

IoT, breve introduzione alla scelta del protocollo … su HTML.it 

Post di Paolo Patierno venerdì 4 luglio 2014 23:32:54
Valuta questo articolo 0 Voti

Capture

Il percorso della guida introduttiva sullo sviluppo su Arduino si fa sempre più interessante, nell’avvicinamento al Cloud. L’ultimo capitolo appena pubblicato è una brevissima discussione sulla scelta del miglior protocollo per l’Internet of Things. Ovviamente, non è possibile ridurre un discorso complesso in pochissime righe ma è fondamentalmente utile per comprenderne l’utilizzo nei capitoli successivi. Il vasto panorama dei protocolli per l’IoT andrebbe affrontato con una guida a parte, considerando la sua ampia gamma di attori in gioco.

Flow-based programming per l’Internet of Things con Node-RED in Microsoft Azure 

Post di Paolo Patierno sabato 28 giugno 2014 17:29:16
Valuta questo articolo 0 Voti

azure-ill

Uno dei migliori e più conosciuti tool per il “flow-based programming” e che fornisce ottimi strumenti per l’Internet of Things è sicuramente Node-RED. Esso è un progetto open source ospitato su GitHub e sviluppato da Nick O’Leary e Dave Conway-Jones della IBM, anche se non è assolutamente basato su tecnologie IBM. La sua caratteristica principale è che è completamente scritto in JavaScript ed HTML e si basa sul framework server-side NodeJS. Ciò significa che può essere eseguito su un qualsiasi PC in cui sia possibile installare NodeJS e con tutti i sistemi operativi disponibili da Windows a Linux passando per Mac OS X.

Questo articolo non intende essere una guida introduttiva o completa a Node-RED ma vuole mostrare come quest’ultimo possa essere eseguito nel cloud ! Grazie alle sue fondamenta in NodeJS e la potenza di tutti i servizi Microsoft Azure, è possibile creare un Azure Web Site per un’applicazione NodeJS che ospiti Node-RED in modo da potervi accedere, controllare e svilupparci ovunque ci troviamo !

In questo modo, non c’è bisogno di mettere su un server “on premise” oppure a casa una delle board maggiormente utilizzate dai makers come la Raspberry Pi o la Intel Galileo. Queste soluzioni vanno bene per scenari dove c’è poco carico e traffico sui “flows” di Node-RED ma per ottenere un sistema altamente scalabile con milioni di connessioni, l’unica soluzione possibile è quella di utilizzare una PaaS come Microsoft Azure.

Siete interessati a sapere come si ? Partiamo !

Deploy in un Local Git repository su Azure

Il primo passo da fare è quello di procurarsi il codice sorgente di Node-RED, poichè è necessario eseguire una piccola modifica al codice stesso. Abbiamo a disposizione molteplici soluzioni per farlo, grazie alla funzionalità di integrate source control fornita da Azure per i Web Sites. Quando si crea un Web Sites, è possibile impostare il deploy da un source control system in modo che ogni modifica apportata al proprio repository (locale o remoto) viene automaticamente distribuita in produzione su Azure. Il codice sorgente può essere su Visual Studio Online, in un Local Git repository (su Azure), GitHub, Dropbox, Bitbucket, CodePlex oppure su un qualsiasi altro repository esterno basato su Git o Mercurial.

Nel caso di Node-RED, le possibili soluzioni sono quelle di usare un Local Git repository oppure un repository remoto su GitHub. Nel corso dell’articolo, li vedremo entrambi per completezza ma ciascuno di voi potrà scegliere il modo migliore in base alle proprie esigenze.

In primo luogo, bisogna creare un Azure Web Site utilizzando il management portal online.

01

Per impostare un deploy da un source control system, è possibile utilizzare il link corrispondente nella pagina principale del Web Site appena creato.

02

Per utilizzare un Local Git repository, è necessario selezionare la corrispondente voce “Local Git repository”.

03

Per abilitare il publishing attraverso Git, la prima volta che viene utilizzato, il management portal chiede di impostare le credenziali di accesso (username e password). Queste credenziali sono comuni a tutti i Web Sites, per cui se sono state già impostate, non verrano richieste nuovamente. Al termine di questa operazione, Azure crea un repository Git locale in cui è possibile pubblicare la propria applicazione; per farlo il portale ci mostra i passi da eseguire : scaricare ed installare Git sul proprio PC, creare un repository Git locale e committare l’applicazione sul repository remoto in Azure.

In questo caso, l’applicazione locale è Node-RED per cui è necessario scaricarne il codice sorgente attraverso il file zip disponibile sul sito ufficiale. Una volta estratti i file in una cartella sul proprio PC (nel mio caso C:\Users\Paolo\Source\Repos\node-red-0.8.0), usando la Git Bash (nella medesima cartella di Node-RED) è possibile creare il repository locale, aggiungere i file dell’applicazione ed eseguire il primo commit in locale attraverso I seguenti comandi :

git init

git add .

git commit –m “Initial Node-RED commit”

04

(E’ necessario ricordare che per eseguire il commit, Git richiede di impostare email e username mediante il comand git config per i parametri user.email e user.name)

Il passo successivo consiste nell’aggiungere un server Git remoto ed eseguire il push del master branch sul repository in Azure; dal management portal, nella dashboard del Web Site, è possibile ricavere il nome di tale repository. I comandi da eseguire sono i seguenti :

git remote add azure [repository URL on Azure]

git push azure master

Ovviamente, Git chiede la password per la connessione al repository remoto ed al termine di tale operazione, Azure inizia il deploy, il cui risultato è visibile nel tab Deployments del management portal.

05

Durante la fase di deploy, Azure esegue anche npm (NodeJS Package Manager) per poter installare tutti i moduli necessari a Node-RED per poter funzionare; tale informazioni è ricavata attraverso il file package.json.

A questo punto sembra di aver finito ma purtroppo navigando all’URL del sito non saremo in grado di visualizzare il tool visuale di Node-RED per la creazione dei “flows”. Per risolvere questo problema è necessario effettuare una piccola modifica al file settings.js impostando opportunamente il parametro uiPort nel modo seguente :

// the tcp port that the Node-RED web server is listening on
uiPort: process.env.PORT || 1880,

Al termine dell’articolo sarà più chiaro il perchè di tale modifica.

A questo punto, bisogna committare in locale le modifiche ed aggiornale sul repository in Azure in modo da avviare il re-deploy automatico.

git add .

git commit –m “uiPort setting changed”

git push azure master

Prima di poter utilizzare Node-RED, manca un ultima modifica. Il tool visuale fa uso intensivo del protocollo WebSocket che è necessario abilitare nella Configure tab del management portal per il Web Site corrente. Resta inteso che questo passo è necessario solo se utilizziamo il tool per la creazione dei “flows” che, come sappiamo, sono dei file JSON che potremmo anche sviluppare in locale e caricare in Azure.

06

Dopo aver eseguito il salvataggio, navigando al Web Site con il proprio browser sarà possibile vedere in esecuzione il tool visuale e Node-RED. Siamo pronti per creare i nostri “flows” !

07

Deploy attraverso un repository su GitHub

La seconda possibilità consiste nell’utilizzare un repository su GitHub. Ovviamente, potremmo utilizzare quello ufficiale di Node-RED ma in questo caso non potremmo eseguire la modifica necessaria al file settings.js. Per questo motivo, un buon modo è quello di creare un fork del repository originale attraverso il proprio account GitHub.

Per farlo, è necessario accedere a GitHub con le proprie credenziali, andare sul repository di Node-RED e cliccare su fork.

08

Una volta completato il fork, GitHub avrà creato un repository con un URL di questo tipo https://github.com/<username>/node-red in modo da poterlo clonare sul proprio PC attraverso la Git Bash nel modo seguente :

git clone https://github.com/<username>/node-red.git

Al termine del cloning, possiamo modificare il file settings.js (come fatto in precedenza) ed eseguire il commit sul repository.

git add .

git commit –m “uiPort setting changed”

git push

In questo caso, non abbiamo alcun bisogno di un repository Git su Azure poichè stiamo utilizzando quello di GitHub al quale faremo puntare Azure stesso nel momento della creazione del Web Site.

Dopo aver creato un nuovo Web Site come fatto in precedenza, impostiamo il deploy attraverso il source control GitHub.

09

Microsoft Azure si connette a GitHub e chiede l’autorizzazione a poter accedere a tutti i repository del proprio account in modo da poterci far selezionare a quale repository deve collegarsi per farne il deploy.

10

Come già fatto in precedenza, è necessario abilitare il protocollo WebSocket per ottenere così l’applicazione visuale di Node-RED pronta ed in esecuzione !

Test di Node-RED su Azure con un semplice flow di debug

Per essere sicuri che l’applicazione Node-RED stia funzionando correttamente, possiamo realizzare un semplice flow di debug con i due soli seguenti nodi :

  • inject : permette di iniettare dati in un flow. Il valore di default del payload del messaggio è il timestamp che può essere cambiato in fase di configurazione del nodo;
  • debug : permette la stampa del payload del messaggio ricevuto nella finestra di debug;

Aggiungiamo e colleghiamo i due nodi nel modo seguente.

11

Cliccando su Deploy, il flow viene deployato ed eseguito nell’istanza di Node-RED e se proviamo a cliccare sul nodo di inject, vedremo il timestamp visualizzato nella finestra di debug. Il nostro flow è in esecuzione su Azure !!

IISNode … la magia per avere Node-RED su Azure

Il componente principale che permette l’esecuzione di applicazioni NodeJS su Azure è il modulo ISS chiamato IISNode, i cui vantaggi sono i seguenti :

  • ha cura del ciclo di vita del processo node.exe;
  • NodeJS è per natura single threaded ma IISNode permette la creazione di più processi node.exe e di gestire il carico delle richieste tra più istanze;
  • si assicura che se un’applicazione NodeJS viene aggiornata, il processo node.exe venga riciclato;
  • fornisce l’accesso alle informazioni di log via HTTP;

Talvolta, per garantire l’esecuzione delle applicazioni NodeJS su IISNode sono necessari alcuni piccoli accorgimenti al codice sorgente dell’applicazione stessa ed in particolare l’impostazione della porta HTTP di ascolto attraverso la variabile d’ambiente process.env.PORT. Ciò spiega il perchè del fatto che il tool visuale di Node-RED non può essere in ascolto sulla porta 1880 (default) ma è necessario impostare la porta su cui è in ascolto IISNode in HTTP.

Conclusioni

Node-RED è un validissimo tool per la realizzazione di progetti per l’Internet of Things attraverso dei “flows” con una UI eseguita all’interno di un browser. Il problema principale è strettamente legato alla sua distribuzione.

Le soluzioni “on premise” o locale vanno bene per scenari semplici ma sicuramente non per scenari enterprise. In questo caso possiamo utilizzare le funzionalità di Azure per l’esecuzione delle applicazioni NodeJS aggiungendo anche la scalabilità e la gestione del carico grazie al modulo IISNode all’interno di IIS.

Pagina 8 di 49 << < 1 2 3 4 5 6 7 8 9 10 20 > >>