*気圧・温度・湿度測定のグラフ化 [#b34ac9f1]

RIGHT:更新日 &lastmod();

***気圧・温度・湿度をグラフにして表示 [#q9d5b79a]

-dataが以下の以下のフォルダに入っている
--BME280:/var/www/html/ondo/press/
--DS18B20:/var/www/html/ondo/
--DHT11:/var/www/html/ondo/hum/


-g2.php

 <?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();
 
 ?>

***結果 [#fad91aaa]

-当日

--http://mz80.ism21.net/ondo/graph/g2.php

-日付指定

--http://mz80.ism21.net/ondo/graph/g2.php?date=20170720

***参考 [#da287845]

-http://www.buildinsider.net/web/bookphplib100/025
-http://katurakuno.xsrv.jp/PHP/JpGraphic/multiGraph.html

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS