Supervisione e controllo Real Time con SignalR e .NetMF

Chi segue gli sviluppi e l’evoluzione dei sistemi per quella che viene denominata “Internet-delle-cose” (IoT, Internet of Things), sa che uno degli aspetti più intriganti riguarda la possibilità di supervisionare (ossia osservare ed agire) sistemi fisici remoti. Le piattaforme più interessanti in tal senso, Pachube e ThingSpeak, forniscono l’infrastruttura di base per una comunicazione bidirezionale, strutturata tipicamente intorno a interfacce REST/JSON, con cui i client (web, app, servizi, ecc.) interagiscono da remoto con device elettronici che a loro volta fanno capo a sensori, motori, sistemi di comunicazione periferici, ecc.

Quello che di fatto però servizi quali Pachube e ThingSpeak non permettono, per motivi legati agli inevitabili compromessi tra costi di infrastruttura e valore dell’implementazione, sono il controllo del sistema fisico veramente in real-time, ossia quello che scherzosamente ho chiamato nel titolo “real-real-time”, in cui ogni azione svolta sul sistema da remoto, ogni variazione autonoma dello stesso così come ogni notifica di variazione vengono gestite in tempi inferiori al decimo di secondo, oltre il quale l’utente perde la percezione di “tempo reale”.

Se ci poniamo come obiettivo inoltre quello di utilizzare client realizzati come applicazioni web in senso tradizionale, ossia che non utilizzino naturalmente un modello di messaging “push”, le scelte tecnologiche possibili restano poche, anzi pochissime: Flash (poco portabile soprattutto in ambito mobile), Silverlight (anch’esso un po’ troppo vincolante come potenziale platea di client), WebSockets (non ancora stabili né implementati completamente nella maggior parte dei browser, mobile e non), Applet Java (praticamente scomparse dal web e comunque poco portabili sulle nuove piattaforme) e, l’attuale miglior candidato, lo straordinario SignaR.

Senza addentrarci nei dettagli, per i quali vi rimando al Wiki del progetto su GitHub e ad un post di “recensione” di Scott Hanselman, SignalR è un framework per ASP.NET (lato server) e HTML+JS, .NET4 e WP7 (lato client) che implementa il supporto per la comunicazione bidirezionale tra client e server. Sfruttando un modello costruito intorno ai tipi “dynamic”, SignalR rende ad esempio possibile chiamare un metodo di una classe server-side da parte di uno script JavaScript e, decisamente più stupefacente, chiamare una funzione JavaScript del client da parte del server! Quello che è ancora più interessante è che SignalR semplifica in maniera imbarazzante la creazione di “concentratori” (chiamati Hub) che, oltre a ricevere chiamate dai client,  possono diramare in broadcasting messaggi a tutti i client collegati a quell’Hub.

Nell’esempio che ho realizzato, finalizzato proprio al controllo di N uscite digitali, N ingressi digitali e N ingressi analogici di un sistema, ho creato un Hub SignalR che comunica, con la mediazione di un oggetto Singleton che serializza le comunicazioni che per loro natura sarebbero parallele proveniendo da più client simultaneamente, con una scheda .NET MF (un FezPanda-II con collegati 2 led, un pulsante e un potenziometro) via Socket TCP/IP, bidirezionale e full-duplex per natura.

L’applicazione client è costituita da una singola pagina ASPX che contiene il pochissimo markup relativo ai due pulsanti per il toggling delle uscite digitali e ad un <div> per ciascuna delle grandezze rilevate (gli stati del pulsante, dei led e del potenziometro) e una cinquantina di righe di JavaScript per la attivazione dell’Hub SignalR e per il processing dei messaggi scambiati con il server. Nella sua attuale (e temporanea) implementazione l’applicazione si presenta così, più o meno indipendentemente dal browser (desktop, tablet o smartphone) su cui è stata testata:

signalrnetmf

 

 

30/07/2014
Tags: , , , , ,
Categorie: microframeworkPostSviluppoTech
Autore: Lorenzo Maiorfi

Chi segue gli sviluppi e l’evoluzione dei sistemi per quella che viene denominata “Internet-delle-cose” (IoT, Internet of Things), sa che uno degli aspetti più intriganti riguarda la possibilità di supervisionare (ossia osservare ed agire) sistemi fisici remoti. Le piattaforme più interessanti in tal senso, Pachube e ThingSpeak, forniscono l’infrastruttura di base per una comunicazione bidirezionale, strutturata tipicamente intorno […]


Support