PrettyPrint

lunedì 15 febbraio 2010

LM35+LCD+web+MySQL - 6) Plotter

Per la creazione del grafico si è usata la libreria JpGraph (http://www.aditus.nu/jpgraph/) che consente di produrre grafici in PHP in modo molto semplice e flessibile.

Su Ubuntu la libreria si installa comodamente da riga di comando:

$ sudo apt-get install libphp-jpgraph


tutti i file della libreria vengono così installati nella directory /usr/share/jpgraph/


PLOTTER.PHP




<?php
/*************************************************************************************************
*
* Motivazione: costruisce un grafico con temperature rilevate nelle ultime 24hh
*
* Autore : Francesco Parisi (fparisi at tiscali dot it) , (fparisi at gmail dot com)
*
* Richiede : db.php, jpgraph.php, jpgraph_line.php
*
*************************************************************************************************/

require_once ('/usr/share/jpgraph/jpgraph.php');
require_once ('/usr/share/jpgraph/jpgraph_line.php');
require_once ('db.php');


// Apre la connessione al server
$conn = mysql_connect( $host, $user, $pass )
or die('Impossibile connettersi al server: ' . mysql_error());


// Seleziona il database
$sel = mysql_select_db( $dbname, $conn )
or die('Impossibile selezionare il database: ' . mysql_error());

// Temperature ultime 24hh
$sql_last_24hh = 'SELECT * FROM `log` WHERE `time` >= NOW() - INTERVAL 1 DAY';
$res = mysql_query( $sql_last_24hh )
or die('Impossibile eseguire query: ' . mysql_error());

// Formatta il timestamp e costruisce gli assi per il grafico
if ( $row = mysql_fetch_assoc($res) or die(mysql_error()) )
{
do
{
// Converte il timestamp MySQL in timestamp PHP
$timestamp = strtotime($row['time']);

// Costruisce il vettore degli orari (asse x)
$x[] = sprintf("%s, %s", date ('j/n', $timestamp), date ('H:i', $timestamp) );

// Costruisce il vettore delle temperature (asse y)
$y[] = $row['temp_int'];

} while ( $row=mysql_fetch_assoc($res) );
}

// Crea il grafico
$graph = new Graph(1024, 800,"auto");
$graph->SetScale( "textlin");
$graph->img-> SetMargin(60,40,40,110);
$graph->title->Set( 'Temperature rilevate nelle ultime 24hh');
$graph->title->SetFont( FF_FONT2, FS_BOLD );
$graph->xaxis->SetTickLabels( $x );
$graph->xgrid->Show(true);
$graph->xaxis->SetLabelAngle(90);
$graph->SetShadow();

// Crea il plot
$lineplot = new LinePlot( $y );
$lineplot->value->Show();
$lineplot->SetColor("blue");
$lineplot->SetWeight(2); // Two pixel wide
$lineplot->value->SetColor("darkred");
$lineplot->value->SetFormat( "%0.1f");
//$lineplot->mark ->SetType(MARK_FILLEDCIRCLE);

// Aggiunge il plot al grafico
$graph->Add( $lineplot );

// Mostra il grafico
$graph->Stroke();

// Chiude connessione
mysql_close( $conn )
or die('Impossibile chiudere connessione: ' . mysql_error());
?>



Ecco un esempio di grafico generato (click sopra per ingrandire), che verrà poi richiamato nella pagina web:

Nessun commento:

Posta un commento