気圧・温度・湿度測定のグラフ化 †更新日 2017-07-22 (土) 09:46:56
気圧・温度・湿度をグラフにして表示 †
<?php // 折れ線グラフ描画に必要なライブラリ require_once 'libs/jpgraph.php'; require_once 'libs/jpgraph_line.php'; require_once 'libs/jpgraph_mgraph.php'; $date = trim($_GET["date"]); // echo $date ; // データ、凡例、描画色を準備 $dirname = "/var/www/html/ondo/press/"; if ($date == "" ){ $filename = $dirname . "index.html"; $today = date("Ymd"); }else{ $filename = $dirname . $date . ".html" ; $today = $date; } // echo $filename; $fp = fopen($filename, 'r'); $Time1 = array(); $rTime1 = array(); $Ta1 = array(); $rTa1 = array(); $Hum1 = array(); $rHum1= array(); $Pa1 = array(); $rPa1 = array(); $cx = 1200; $cy = 400; $labelInt = 2; // -----------BME280 DataRead----------- $i = 0; while (!feof($fp)) { $txt = fgets($fp); if (strlen(trim($tex))==0) bleak; $S = strpos($txt , '-') + 1; $E = strpos($txt , 'TEMP'); $tmp1 = trim(substr($txt, $S, $E-$S)); $Time1[$i] = $tmp1; $S = strpos($txt , 'PRESS :') + 7; $E = strpos($txt , 'hPa'); $tmp2= trim(substr($txt, $S, $E-$S)); $Pa1[$i] = $tmp2; $S = strpos($txt , 'TEMP :') + 6; $E = strpos($txt , 'DegC'); $tmp2= trim(substr($txt, $S, $E-$S)); $Ta1[$i] = $tmp2; $S = strpos($txt , 'HUM :') + 5; $E = strpos($txt , '%'); $tmp2= trim(substr($txt, $S, $E-$S)); $Hum1[$i] = $tmp2; // printf("%d %s %s<br /> \n", $i, $Ta1[$i], $Pa1[$i] ); $i++; } fclose($fp); // exit; //配列を逆転 $rTime1 = array_reverse($Time1); $rPa1 = array_reverse($Pa1); $rTa1 = array_reverse($Ta1); $rHum1 = array_reverse($Hum1); $objar = array(); // END ------------BME280 -------------------- //--------------------- DS18B20 Data Read---------------------------- // Device DS18B20 温度計 $Time2 = array(); $rTime2 = array(); $Ta2 = array(); $rTa2 = array(); $dirname = "/var/www/html/ondo/"; if ($date == "" ){ $filename = $dirname . "index.html"; $today = date("Ymd"); }else{ $filename = $dirname . $date . ".html" ; $today = $date; } $fp = fopen($filename, 'r'); $i = 0; //echo $filename; while (!feof($fp)) { $txt = fgets($fp); if (strlen(trim($tex))==0) bleak; $S = strpos($txt , '-') + 1; $E = 15; $tmp1 = trim(substr($txt, $S, $E-$S)); $Time2[$i] = $tmp1; $E = strpos($txt , '<br />') - 1; $tmp2= trim(substr($txt, 15, $E-15+1)); $Ta2[$i] = $tmp2; $i++; // printf(" %s <br /> \n", $Ta2[$i]); } fclose($fp); // exit; //配列を逆転 $rTime2 = array_reverse($Time2); $rTa2 = array_reverse($Ta2); // echo count($rTa); // echo $i; // End -----------DS18B20----------------- // --------------DH11 Data Read------------- // Device DH11 温湿度計 // グラフの描画先 DH11 $deviceName= "DH11"; $Time3 = array(); $rTime3 = array(); $Hum3 = array(); $rHum3 = array(); $Ta3 = array(); $rTa3 = array(); $dirname = "/var/www/html/ondo/hum/"; if ($date == "" ){ $filename = $dirname . "index.html"; $today = date("Ymd"); }else{ $filename = $dirname . $date . ".html" ; $today = $date; } $fp = fopen($filename, 'r'); $i = 0; // echo $filename; while (!feof($fp)) { $txt = fgets($fp); if (strlen(trim($tex))==0) bleak; $S = strpos($txt , '-') + 1; $E = 15; $tmp1 = trim(substr($txt, $S, $E-$S)); $Time3[$i] = $tmp1; $S = strpos($txt , 'Humidity =') + 11; $E = strpos($txt , '%'); $tmp2= trim(substr($txt, $S, $E-$S)); $Hum3[$i] = $tmp2; // printf(" %s <br /> \n", $Hum3[$i]); $S = strpos($txt , 'Temperature =') + 14; $E = strpos($txt , '*C'); $tmp2= trim(substr($txt, $S, $E-$S)); $Ta3[$i] = $tmp2; // printf(" %s <br /> \n", $Ta3[$i]); $i++; } fclose($fp); // exit; //配列を逆転 $rTime3 = array_reverse($Time3); $rTa3 = array_reverse($Ta3); $rHum3 = array_reverse($Hum3); // echo count($rTa); // echo $i; // END --------------DHT11--------- // ---------- 気圧 -------------- // print_r($Pa); // グラフの描画先(気圧) $g1 = new Graph($cx, $cy, "auto"); // サイズ $g1->setScale('textlin'); // 目盛り $g1->title->setFont(FF_MINCHO, FS_NORMAL, 18); // タイトルフォント $g1->title->set('気圧 [' . $today . ']' ); // タイトル $g1->legend->setFont(FF_MINCHO, FS_NORMAL, 14); // 凡例フォント // 気圧の表示 //X軸ラベル $g1->xaxis->SetTickLabels($rTime1); $g1->xaxis->SetTextLabelInterval($labelInt); $g1->xaxis->title->Set("Time"); $g1->yaxis->title->Set("(hPa)"); $g1->SetFrame(true,'blue',1); //Y軸 $l = new LinePlot($rPa1); // データ // $l->SetColor('#FFFF00'); // 描画色 $deviceName = 'BME280'; $l->setLegend($deviceName); // 凡例 $g1->add($l); // 追加 // グラフを描画(気圧) // $g1->stroke(); array_push($objar, $g1); // ---------- 温度 -------------- // グラフの描画先(温度) $g1 = new Graph($cx, $cy, "auto"); // サイズ $g1->setScale('textlin'); // 目盛り $g1->title->setFont(FF_MINCHO, FS_NORMAL, 18); // タイトルフォント $g1->title->set('温度 [' . $today . '] '); // タイトル $g1->legend->setFont(FF_MINCHO, FS_NORMAL, 14); // 凡例フォント // 温度の表示 //X軸ラベル $g1->xaxis->SetTickLabels($rTime1); $g1->xaxis->SetTextLabelInterval($labelInt); $g1->xaxis->title->Set("Time"); $g1->yaxis->title->setFont(FF_MINCHO, FS_NORMAL, 10); $g1->yaxis->title->Set("(度)"); $g1->SetFrame(true,'blue',1); //Y軸 $l = new LinePlot($rTa1); // データ $deviceName= "BME280"; $l->setLegend($deviceName); // 凡例 // $l->SetColor('red'); // 描画色 $g1->add($l); // 追加 $l = new LinePlot($rTa2); // データ $deviceName= "DS18B20"; $l->setLegend($deviceName); // 凡例 // $l->SetColor('red'); // 描画色 $g1->add($l); // 追加 $l = new LinePlot($rTa3); // データ $deviceName= "DHT11"; $l->setLegend($deviceName); // 凡例 // $l->SetColor('red'); // 描画色 $g1->add($l); // 追加 // グラフを描画(温度) // $g1->stroke(); array_push($objar, $g1); // ---------- 湿度 -------------- // グラフの描画先(湿度) $g1 = new Graph($cx, $cy, "auto"); // サイズ $g1->setScale('textlin'); // 目盛り $g1->title->setFont(FF_MINCHO, FS_NORMAL, 18); // タイトルフォント $g1->title->set('湿度 [' . $today . '] '); // タイトル // $g1->legend->setFont(FF_MINCHO, FS_NORMAL, 14); // 凡例フォント // 湿度の表示 //X軸ラベル $g1->xaxis->SetTickLabels($rTime1); $g1->xaxis->SetTextLabelInterval($labelInt); $g1->xaxis->title->Set("Time"); $g1->yaxis->title->Set("(%)"); $g1->SetFrame(true,'blue',1); //Y軸 $l = new LinePlot($rHum1); // データ $deviceName= "BME280"; $l->setLegend($deviceName); // 凡例 // $l->setColor('green'); // 描画色 $g1->add($l); // 追加 $l = new LinePlot($rHum3); // データ $deviceName= "DHT11"; $l->setLegend($deviceName); // 凡例 // $l->setColor('green'); // 描画色 $g1->add($l); // 追加 // グラフを描画(湿度) // $g1->stroke(); array_push($objar, $g1); //----------------------- // Create a multigraph //---------------------- $mgraph = new MGraph(); $mgraph->SetMargin(20,20,20,20); $mgraph->SetFrame(true,'darkgray',2); $mgraph->SetFillColor('lightgray'); $i = 0; foreach($objar as $g1){ $mgraph->Add($g1,0,$cy*$i ); $i++; } // echo $i; $mgraph->Stroke(); ?> 結果 †
参考 † |