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):
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
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
Hi! Thanks for your feedback and great SVG web interface!
Wonderful site, how do u get all this information?I’ve read a few posts on your site and I like your writing style. Thanks a million, keep up the great work.