Pachube, come creare un feeds aggiornabile con Netduino o Arduino

Pachube è uno dei tanti servizi online che offrono un’applicazione web aggiornabile tramite dispositivi elettronici come Netduino, Arduino, smartphone, PC o altri sistemi capaci di interagire con Internet.
Banalmente possiamo definirlo un “datalogger on line” capace di registrare dati provenienti dai dispositivi e di creare grafici che ne mostrano l’andamento nel tempo.
Pachube certamente è un buon servizio che dimostra lo sviluppo di applicazioni dell’Internet delle cose.

Logo Pachube

Anche io ho voluto realizzare la mia applicazione per semplice curiosità e per condividere la mia esperienza.

Iniziamo registrandoci al servizio Pachube. Al momento in cui scrivo sono disponibili tre tipi di piani tariffari, tra cui uno gratuito. La differenza sostanziale tra essi, è il numero di dati che possiamo caricare sul sito e il tempo di memorizzazione degli stessi.
Per una piccola applicazione fortunatamente è sufficiente creare un account gratuito. La registrazione richiede solo pochi dati come il Nome Utente e una casella e-mail valida. Una volta compilati tutti i campi clicchiamo sul pulsante Sign Up, verrà spedita automaticamente una mail contenente il link di attivazione del vostro account. Successivamente l’attivazione Pachube fornisce una API Key che viene utilizzata per autorizzare le nostre applicazioni.

Il passo seguente è quello di creare un feed per memorizzare i dati inviati da un dispositivo remoto.
Clicchiamo sul link Create a Feed dal menu My Account. Le informazioni da inserire sono diverse, molto intuitive, che identificano una precisa locazione geografica e il tipo di dispositivo utilizzato.
Prima di salvare dobbiamo aggiungere almeno un datastream, fondamentale per memorizzare e rappresentare i dati provenienti dal nostro dispositivo.
Clicchiamo su Add a datastream per crearne uno. Il campo ID serve ad identificare il datastream all’interno del Feed, può essere un valore numerico o testuale, Tags specifica alcune parole chiave descrittive per il datastream, Units rappresenta l’unita di misura per i dati del datastream e Symbol rappresenta la dicitura dell’unità di misura.

I valori realmente necessari per la creazione di un feed sono il suo nome e l’ID del datastream, gli altri campi possono essere lasciati in bianco ma è comunque consigliabile compilarli per dare tutte le informazioni per interpretare i dati e capirne la provenienza.

Salviamo il Feed cliccando sul pulsante Save.

In questo esempio reale ho creato un Feed che monitorizza il carico della cpu del mio pc, potete osservare i dati recandovi a questo indirizzo http://pachube.com/feeds/28933

Pachube aggiorna la finestra mostrando le impostazioni del Feed appena creato. In questa finestra troviamo tre link, JSON, XML e CSV, sotto la voce Feed Format. Questi tre formati sono quelli accettati da Pachube per interagire da remoto con il Feed. Quello che preferisco è il formato XML, cliccando sul link viene caricata una nuova finestra che mostra la struttura del file XML. Nella barra degli indirizzi viene mostrato il percorso del file XML.

La documentazione presente sul sito è molto chiara. In questa sezione troviamo il codice XML necessario per aggiornare il Feed (possiamo anche apprendere come leggere, creare e cancellare i Feed da remoto).
Ho modificato il codice XML della guida in base alle impostazioni del Feed e del datastream che ho precedentemente creato:

<?xml version="1.0" encoding="UTF-8"?>
<eeml xmlns="http://www.eeml.org/xsd/0.5.1"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
version="0.5.1" xsi:schemaLocation="http://www.eeml.org/xsd/0.5.1
http://www.eeml.org/xsd/0.5.1/0.5.1.xsd">
<environment>

<title>Cpu_Usage</title>

<status>live</status>

<description>Monitoraggio Carico CPU</description>

<tag>Carico Cpu</tag>
<tag>Monitor</tag>

<data id="CpuLoad">
<current_value>10</current_value>
<max_value>100</max_value>
<min_value>0</min_value>
</data>

</environment>
</eeml>
<pre>

 

Prima di creare un applicazione basata su un dispositivo hardware ne ho sviluppato una in C# che permette di testare tutta la procedura per interagire con il Feed.

Il codice si basa sulla classe WebClient e permette con alcune righe di codice di eseguire l’aggiornamento

String UpdateData1 = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
"<eeml xmlns=\"http://www.eeml.org/xsd/0.5.1\" " +
"xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" " +
"version=\"0.5.1\" " +
"xsi:schemaLocation=\"http://www.eeml.org/xsd/0.5.1 " +
"http://www.eeml.org/xsd/0.5.1/0.5.1.xsd\"><environment>" +
"<status>live</status><data id=\"CpuLoad\"><current_value>";

String UpdateData2 = "</current_value></data></environment></eeml>";

try
{
String Value = "";
WebClient pachube = new WebClient();

//WebProxy mio_proxy = new WebProxy("Inserire nome proxy", 8080);
//pachube.Proxy = mio_proxy;

pachube.Headers.Add("X-PachubeApiKey", "Inserisci la tua API Key");

//questo codice recupera la percentuale di carico della CPU (testato su win XP)
ManagementObjectSearcher searcher = new ManagementObjectSearcher("root\\CIMV2",
 "SELECT * FROM Win32_Processor");

foreach (ManagementObject queryObj in searcher.Get())
{
Value = queryObj["LoadPercentage"].ToString();
}

Byte[] Data = Encoding.UTF8.GetBytes(UpdateData1 + Value + UpdateData2);

pachube.UploadData("Inserisci indirizzo file XML", "PUT", Data);

Console.WriteLine("Aggiornamento eseguito con successo");
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}

 

Le prime variabili contengono il codice XML che permette di aggiornare il datastream. Ho diviso il listato XML in due parti in modo da inserire, via codice, il dato della variabile Value all’interno dei tag XML <current_value></current_value>.

Creiamo un’istanza di oggetto dalla classe WebClient, specifichiamo la nostra API key tramite il metodo Add della collection Headers.
Recuperiamo il valore della percentuale di carico della CPU ed assegnamolo alla variabile Value.
Creiamo la stringa XML completa e convertiamola in un array di Byte (necessario per l’invio tramite WebClient). In fine aggiorniamo il Feed tramite il metodo UploadData.
Nel metodo UploadData dobbiamo specificare, come primo parametro, il nome del file .xml relativo al Feed ( recuperabile dai link presenti sotto la voce Feed Formats).

Eseguendo questo codice in modo ciclico, ad esempio utilizzando un timer, Pachube realizzerà, con i dati inviati, un grafico sull’andamento del carico della CPU:

Grafico Pachube

Questi dati vengono memorizzati, nel caso dell’account free per un mese.

I campi di applicazione di questo servizio sono numerosi, possiamo collegare al pc dei sensori ed inviare i dati ai Feed Pachube e condividerli con la comunità.
Il passo successivo che mi interessa realizzare è il porting di questa applicazione desktop su Netduino o Arduino.