X-Git-Url: https://git.rvb.name/weathermon.git/blobdiff_plain/3a48d89e76fd2ab87dabf08632474c529cf77ad4..b7dcd298e5f0565be8e5ca3d9477cb6de97ae3ac:/web/image.php diff --git a/web/image.php b/web/image.php index 2a2d2f3..9b6ca84 100644 --- a/web/image.php +++ b/web/image.php @@ -1,6 +1,6 @@ false)))) { - die('Не могу подключиться к БД'); + die('Не могу подключиться к БД'); } +$supported = imagetypes(); +if( $supported & IMG_PNG ) $img_format="png"; +elseif( $supported & IMG_GIF ) $img_format="gif"; +elseif( $supported & IMG_JPG ) $img_format="jpeg"; +elseif( $supported & IMG_WBMP ) $img_format="wbmp"; +elseif( $supported & IMG_XPM ) $img_format="xpm"; + +$cachefilename = NULL; + $db -> exec('SET CHARACTER SET utf8'); $type = $_REQUEST['type']; @@ -56,12 +65,13 @@ if ($type and $param) { } $q = $db -> prepare( - 'select u.name_short from units u where u.id='.$to_unit + 'select u.name_short,u.prec from units u where u.id='.$to_unit ); $q -> execute(); while ($row = $q -> fetch(PDO::FETCH_ASSOC)) { $param_unit = $row['name_short']; + $precision = $row['prec']; } $xdata = array(); @@ -73,19 +83,63 @@ if ($type and $param) { 'select unix_timestamp(timestamp) as x,unitconv(value,'.$from_unit.','.$to_unit.') as y from sensor_values where timestamp>adddate(now(), -1) and sensor_id='.$sensor.' and parameter_id='.$param.' order by timestamp' ); - $height = 130; + $bottomheight = 130; + $topheight = 40; + $sizex = 1000; + $sizey = 800; + $scale = True; + + } elseif ($type == 'last24small') { + + $q = $db -> prepare( + 'select unix_timestamp(timestamp) as x,unitconv(value,'.$from_unit.','.$to_unit.') as y from sensor_values where timestamp>adddate(now(), -1) and sensor_id='.$sensor.' and parameter_id='.$param.' order by timestamp' + ); + + $bottomheight = 20; + $topheight = 20; + $sizex = 400; + $sizey = 300; + $scale = False; } elseif ($type == 'range') { + $curr = intval(date('YmdHis')); + $from = intval($_REQUEST['fromdate']); $to = intval($_REQUEST['todate']); + if ($curr>$to) { + + $cachefilename='meteo.'.$sensor.'.'.$param.'.'.$to_unit.'.'.$from.'-'.$to.'.'.$img_format; + + } + $q = $db -> prepare( 'select unix_timestamp(timestamp) as x,unitconv(value,'.$from_unit.','.$to_unit.') as y from sensor_values where timestamp>=str_to_date("'.$from.'","%Y%m%d%H%i%s") and timestamp<=str_to_date("'.$to.'","%Y%m%d%H%i%s") and sensor_id='.$sensor.' and parameter_id='.$param.' order by timestamp' ); - $height = 60; + $bottomheight = 60; + $topheight = 40; + $sizex = 1000; + $sizey = 800; + $scale = True; + + } + + $g = new Graph($sizex,$sizey); + + if ($cachefilename) { + if ($g->cache->IsValid($cachefilename)) { + + $g->cache->StreamImgFile($g->img,$cachefilename); + return; + } else { + + $timeout = 8640000; + $g->SetupCache($cachefilename,$timeout); + + } } $q -> execute(); @@ -102,7 +156,7 @@ if ($type and $param) { $total_weight=0; $sum=0; - $maxdelta = 900; + $maxdelta = 1800; for ($j = $i; $j < count($xdata); ++$j) { @@ -132,37 +186,54 @@ if ($type and $param) { } // Create the graph - $g = new Graph(640,480); $g->graph_theme = null; - //$g->img->SetAntiAliasing(); + $g->img->SetAntiAliasing(); - // We need a linlin scale since we provide both - // x and y coordinates for the data points. + // We need a datlin scale since we provide both + // x and y coordinates for the data points, but x is unix timestamp. $g->SetScale('datlin'); - $g->xaxis->SetLabelAngle(90); + if ($scale) { + $g->xaxis->SetLabelAngle(90); + } else { + $g->xaxis->HideLabels(True); + } $g->xaxis->SetPos("min"); + $g->yaxis->SetLabelFormat("%0.".$precision."f"); +# $g->xaxis->scale->SetTimeAlign( HOURADJ_1 ); + - // We use a scatterplot to illustrate the original - // contro points. - $splot = new ScatterPlot($ydata,$xdata); - $g->Add($splot); + if ($type!="last24small") { - // - $splot->mark->SetFillColor($dot_color); - $splot->mark->SetColor($dot_color); - $splot->mark->SetType(MARK_FILLEDCIRCLE); - $splot->mark->SetSize(2); + // We use a scatterplot to illustrate the original + // contro points. + $splot = new ScatterPlot($ydata,$xdata); + $g->Add($splot); + + // + $splot->mark->SetFillColor($dot_color); + $splot->mark->SetColor($dot_color); + $splot->mark->SetType(MARK_FILLEDCIRCLE); + $splot->mark->SetSize(2); + + } $fplot = new LinePlot($f_ydata,$xdata); $g->Add($fplot); $fplot->SetColor($line_color); $fplot->SetWeight(2); - $g->SetMargin(50,30,40,$height); - $g->title->Set($sensor_name.'/'.$param_name.', '.$param_unit); - $g->title->SetFont(FF_DV_SANSSERIF,FS_BOLD,12); - $g->SetMarginColor('silver'); + $g->SetMargin(50,30,$topheight,$bottomheight); + if ($scale) { + $g->title->Set($sensor_name.'/'.$param_name.', '.$param_unit); + $g->title->SetFont(FF_DV_SANSSERIF,FS_BOLD,12); + } + $g->SetMarginColor('lightgray'); + + $g->xgrid->Show(); + $g->xgrid->SetLineStyle('dotted'); + $g->ygrid->Show(); + $g->ygrid->SetLineStyle('dotted'); // Add the plots to the graph and stroke $g->Stroke(); @@ -170,7 +241,7 @@ if ($type and $param) { } else { header("Content-Type: text/html; charset=UTF-8"); - die('Сенсор не выбран!'); + die('Сенсор не выбран!'); }