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>):
$value = $_GET["value"]; |
Per semplicità scegliamo la modalità di ricezione dati in CSV, costruendo l’URL come indicato nella guida:
$root = __DIR__; $svg_template = simplexml_load_file("$root/template.svg"); |
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:
$result = $svg_template->xpath("//*[@id='temp_level']"); if(count($result) == 1) $temp_level = $result[0]; else exit("Unable to find a node with temp_level ID"); $result = $svg_template->xpath("//*[@id='temp_value']"); if(count($result) == 1) $temp_value = $result[0]; else exit("Unable to find a node with temp_value ID"); |
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:
$temp_level['height'] = $value * 5; $temp_value[0] = $value; |
Infine creiamo un iframe per visualizzare il termometro passando il valore letto da Pachube:
if($value < 15) { $temp_level['style']="fill:#0000ff;stroke:none"; $temp_value['style'] = "font-size:72px;fill:#0000ff"; } elseif($value < 25) { $temp_level['style']="fill:#00ff00;stroke:none"; $temp_value['style'] = "font-size:72px;fill:#00ff00"; } else { $temp_level['style']="fill:#ff0000;stroke:none"; $temp_value['style'] = "font-size:72px;fill:#ff0000"; } |
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.