Dashboard in SVG

luca 22/01/2012 12

PHP e Pachube

Per poter ricevere dei dati da Pachube, è necessaria una api key, legata al proprio account. Dal sito web di Pachube è possibile generare keys con diversi privilegi; per leggere i dati da un feed è sufficiente assegnare READ come permitted methods:

Nel file PHP vengono definite alcune costanti per la connessione a Pachube: la api key indicata sopra, il feed id, il datastream id e la posizione del campo da utilizzare all’interno della riga (normalmente ogni riga ricevuta ha il formato <datastream_id>,<timestamp>,<value>):

define("API_KEY", "myapikey");
define("FEED_ID", 29689);
define("DATASTREAM_ID", 0);
define("ELEMENT_POSITION", 2);

Per semplicità scegliamo la modalità di ricezione dati in CSV, costruendo l’URL come indicato nella guida:

$feed_url = "http://api.pachube.com/v2/feeds/" . FEED_ID . ".csv?datastreams=" . DATASTREAM_ID;

Per il collegamento al sito web di Pachube, utilizziamo la libreria cURL: con il metodo curl_init otteniamo un handle legato all’URL del feed di Pachube. Prima di eseguire la connessione, impostiamo le proprietà RETURNTRANSFER per ottenere da cURL la risposta del server e HTTPHEADER per specificare la nostra api key:

$curl_handle = curl_init($feed_url);
curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl_handle, CURLOPT_HTTPHEADER, array('X-PachubeApiKey: ' . API_KEY));
$out = curl_exec($curl_handle);

Una volta effettuata la connessione, controlliamo l’HTTP_CODE restituito dal server di Pachube: se tale codice è 200, significa che la connessione è andata a buon fine e che Pachube ci ha restituito il valore richiesto. Dividiamo la risposta ottenuta usando come separatore la virgola (formato CSV) e prendiamo l’elemento che ci interessa:

$http_code = curl_getinfo($curl_handle, CURLINFO_HTTP_CODE);
if($http_code == "200") {
  $elements = explode(",", $out);
  $element = $elements[ELEMENT_POSITION];
}

Infine creiamo un iframe per visualizzare il termometro passando il valore letto da Pachube:

echo "<iframe src="thermometer.php?value=$element" frameborder="0" width="320" height="240"></iframe>;

Il risultato (con attiva la modalità di debug):

Pagine: 1 2 3 4

12 Comments »

  1. Lucio 30/06/2012 at 16:51 - Reply

    Gentile Luca Dentella,
    ho trovato interessantissimo il suo tutorial che riguarda il dashboard svg. Le chiederei gentilmente, se possibile, di fornirmi un esempio per visualizzare in forma grafica sul browser i valore di tensione letti sugli ingressi analogici dell’arduino uno in forma vu meter lineare (tipo il suo termometro) oppure classico a lancetta.
    Ringraziando anticipatamente, Le porgo distinti saluti.
    lucio.ra@libero.it

  2. A MacLeod 06/05/2013 at 22:24 - Reply

    Thanks for taking the time to document this, I used it as a basis for my own arduino project (a web-connected heating oil level monitor.)

    Getting a nice SVG-based level indication turned out to be easier than I had feared… strangely, getting it to send warning emails was trickier!

    http://s230.photobucket.com/user/macleodaj/media/Junk/oil_level_gauge.jpg.html

    • luca 07/05/2013 at 08:19 - Reply

      Hi! Thanks for your feedback and great SVG web interface!

Leave A Response »