気圧・温度・湿度測定のグラフ化

更新日 2017-07-22 (土) 09:46:56

気圧・温度・湿度をグラフにして表示

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

?>

結果

  • 当日
  • 日付指定

参考


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2017-07-22 (土) 09:46:56 (389d)