Collegare Netduino Plus al servizio web Pachube

Ora che sapiamo creare un Pachube feed aggiornabile non ci resta che sviluppare una piccola app, da far girare sul Netduino Plus, che acquisisce dei dati tramite le sue porte in ingresso e li invia al servizio web.
Sul sito Pachube sono presenti diversi esempi che illustrano come scrivere delle applicazioni basate sul .Net framework. Tra queste è presente un listato di codice che mostra come aggiornare un feed tramite codice C#.
Per utilizzare questo esempio è necessario aggiungere alla soluzione la libreria System.Http (Progetto->Aggiungi riferimento->System.Http.dll) e, tramite la clausola using , aggiungere i namespace System.Text e System.IO.

Il codice seguente mostra come aggiornare il nostro feed con un valore statico.

WebRequest rq;
HttpWebResponse hwr;

//eventuale proxy aziendale
//WebProxy wp = new WebProxy("nome server proxy", 8080);

//creo un buffer contenente la chiave e il valore per il feed
byte[] buffer = Encoding.UTF8.GetBytes("CpuLoad,10");

//riferimento al feed in formato csv
rq = WebRequest.Create("http://api.pachube.com/v2/feeds/28933.csv");

//assegnazione eventuale server proxy
//rq.Proxy = wp;
rq.Timeout = 5000;
rq.Method = "PUT";

//request headers
rq.ContentLength = buffer.Length;
rq.ContentType = "text/csv";
rq.Headers.Add("X-PachubeApiKey", "API KEY PACHUBE");

try
{
Stream stm = rq.GetRequestStream();
stm.Write(buffer, 0, buffer.Length);
stm.Close();
hwr = (HttpWebResponse)rq.GetResponse();
Debug.Print("response " + hwr.StatusCode);
}
catch (Exception ex)
{
Debug.Print("ERRORE: " + ex.Message);
}

 

Il listato è molto sintetico e mostra come eseguire l’aggiornamento del feed. Nell’articolo precedente ho utilizzato XML per eseguire le operazioni di lettura e scrittura del feed. In questo caso, invece, è stato utilizzato il metodo che impiega un semplice file di testo csv (comma-separated values).

Le prime istruzioni istanziano un oggetto WebRequest e uno HttpWebResponse (fornisce un’implementazione specifica di HTTP della classe WebResponse). Tutto il lavoro viene eseguito dall’oggetto WebRequest che, dopo aver settato le varie proprietà relative al feed csv, crea uno stream IO per aggiornare il file csv remoto.

Impieghiamo le porte del Netduino per creare qualcosa di utile e dinamico. Tramite gli ingressi analogici acquisiamo delle grandezze, provenienti da diversi sensori, che possono essere graficate tramite feed Pachube.

Faccio riferimento all’articolo che illustrava l’utilizzo del sensore di temperatura analogico MCP9700a per monitorare l’ambiente e memorizzare i dati su Pachube.
Il codice viene così modificato:

WebRequest rq;
HttpWebResponse hwr;

//Impostop il pin A0 come ingresso analogico
AnalogInput AN0 = new AnalogInput(Pins.GPIO_PIN_A0);
Int16 Analog0 = 0;

while (true)
{
//acquisisci il valore analogico
Analog0 = (Int16)AN0.Read();

//creo una webrequest passando come argomento l'indirizzo del file csv
rq = WebRequest.Create("http://api.pachube.com/v2/feeds/XXXXX.csv");

//setto i parametri per l'oggetto webrequest
rq.Timeout = 3000;
byte[] buffer = Encoding.UTF8.GetBytes("Temp," + Analog0.ToString());
rq.ContentLength = buffer.Length;
rq.Method = "PUT";
rq.ContentType = "text/csv";
rq.Headers.Add("X-PachubeApiKey", "LA TUA API KEY");

//creo uno stream e scrivo i nuovi valori acquisiti
try
{
Stream stm = rq.GetRequestStream();
stm.Write(buffer, 0, buffer.Length);
stm.Close();
hwr = (HttpWebResponse)rq.GetResponse();
hwr.Close();
Debug.Print("response " + hwr.StatusCode);
}
catch (Exception ex)
{
Debug.Print("ERRORE: " + ex.Message);
}

//distruggo l'oggetto
rq.Dispose();

//attendi 30 secondi
Thread.Sleep(30000);
}

 

Il listato è autodescrittivo e permette con poco studio di capire come avviene il meccanismo di aggiornamento.

Prima di caricare il codice sul Netduino è necessario impostare il suo indirizzo ip attraverso l’uso di MFDeploy (C:\Programmi\Microsoft .NET Micro Framework\v4.1\Tools\MFDeploy.exe).

Una volta selezionato il dispositivo tramite la porta usb clicchiamo sul menu Target->Configuration->Network.

Seleziona configurazione di rete

Nella finestra seguente possiamo configurare l’indirizzo ip del Netduino Plus, la subnet mask e il gateway. Questi dati dobbiamo recuperarli dal router.

Configurazione Netduino Plus Network
E’ possibile abilitare il flag DHCP per recuperare automaticamente questi valori ma con alcuni router questa procedura non funziona correttamente e quindi vi consiglio di utilizzare, almeno per le prove, un indirizzo statico.

Tutto molto semplice e veloce. Con le restanti porte possiamo sperimentare con l’aggiunta di altri sensori per creare applicazioni più evolute ed interessanti.