File "index.php"

Full path: /www/wiolte/index.php
File size: 8.03 KiB (8221 bytes)
MIME-type: text/x-php
Charset: utf-8

Download   Open   Back

<?php


$data_dir = "./data/";

//$fp2 = fopen("test_20170920.txt", "a");
//fwrite($fp2, $_GET[data] ."\n");
//fclose($fp2);

//$res = data_decode($_GET[data]);
$data = file_get_contents('php://input'); 	//読み取り

$t_log = fopen("recv_test_2.log" ,"a");
fwrite($t_log , date("Y-m-d H:i:s",time()) ."," .$data . "\n");
fclose($t_log);

$res = data_shaping($data);


echo $res ? 'OK' : 'ERROR';

exit;


// データの整形
function data_shaping($data) {
	// 最初に保存ファイル名を取得しておく(ファイルが存在しなかったらヘッダーを作成)
	$dname = $GLOBALS["data_dir"] . date("Ym") . "/";
	$fname = $dname . date("Ymd") . "_.csv";

//20201013 追加
	$datas[0] = date("YmdHis",time());
	$obj = json_decode($data,1); 				//一度デコード	

	if (!file_exists($dname)) {
		if (!create_data_directory($dname)) {
			return false;
		}
	}
	if (!file_exists($fname)) {
		if (!create_csv_header($fname)) {
			return false;
		}
	}
	

	$floats = explode(",",$obj['data']);
	
	
	/*
	// データを日付とデータ部に分割
	$datas = split(',', $data);
	if (count($datas) != 2) {
		return false;
	}
	
	// データ部をBase64URLデコード
	$bytes = base64_url_decode($datas[1]);
	if (!$bytes) {
		return false;
	}
	
	// Base64URLデコード文字列をfloat配列に変換
	$floats = binary_to_floats($bytes);
	if (!$floats) {
		return false;
	}
	*/




	// CSVファイルに書き出し
	if (!write_csv($fname, date("Y/m/d H:i:s"), $datas[0], $floats)) {
		return false;
	}
	
	return true;
}

// データディレクトリの作成
function create_data_directory($dname) {
	if (!mkdir($dname, 0755, true)) {
		return false;
	}
	
	return true;
}

// CSVファイルとヘッダーの作成
function create_csv_header($fname) {
	$fp = fopen($fname, "w");
	if (!$fp) {
		return false;
	}
//	fwrite($fp, "[DataTime],date,time,roll,pitch,yaw,ax,ay,az,lat,lng,meters\n");
	fwrite($fp, "[DataTime],date,time,ax,ay,az\n");
	fclose($fp);
	
	return true;
}

// Base64URLデコード
function base64_url_decode($val) {
	$str = str_replace(array('_', '-', '.'), array('+', '/', '='), $val);
	$amari = strlen($str) % 4;
	if ($amari > 0) {
		for ($i = 0; $i < $amari; $i++) {
			$str .= "=";
		}
	}
	
	$bytes = base64_decode($str);

	return $bytes;
}

// バイナリデータのfloat配列化
function binary_to_floats($bytes) {
	// $bytesをfloat単位で分割
	$len = strlen($bytes);
	if ($len % 4 != 0) {
		return false;
	}
	$floats = array();
	for ($i = 0; $i < $len; $i += 4) {
		$str = substr($bytes, $i, 4);
		$float = unpack('f', $str);
		array_push($floats, $float[1]);
	}
	if (count($floats) % 12 != 0) {
		return false;
	}
	return $floats;
}

// floatからdoubleを得る
function float_to_double($float1, $float2) {
	$double = unpack('d', pack('f2', $float1, $float2));
	return $double[1];
}


// CSVファイル書き出し
function write_csv($fname, $now, $datestr, $floats)
{

	$limit = 20;
	$alarm_range = file_get_contents("alarm_range.txt");


	$DATA_TABLE = "wave_height.data_03_log";
	$HOST = "192.168.100.153";
	$DB = "arduino";
	$USER = "postgres";
	$PASS = "postgres";

	//================================================
	//	データベース接続
	//	備考		:	
	//	更新		:	2013/03/12 KMK-Yokosuka
	//================================================
	$conn = pg_connect("
		host	=	". $HOST. "
		dbname	=	". $DB. "
		user	=	". $USER. "
		password=	". $PASS. "
	");



	//■内部文字エンコーディングを設定 
	mb_internal_encoding("ISO-2022-JP");

	//■警報メールの送信設定
	//ヘッダー設定
	$header  = "From: " ."Alert" ."<www@penta-02.ptgw.net>" ."\n";
	$header .= "Reply-To: " ."Alert" ."<www@penta-02.ptgw.net>" ."\n";
	//$header.= "Cc: " .$send_to1 ."," .$send_to2 ."\n";
	//$header.= "Bcc: " ."'blue.puny@gmail.com'" ."\n";
	$header .= "Content-Type: text/html;charset=ISO-2022-JP" ."\n";
	$header .= "X-Mailer: myphpMail ". phpversion(). "\n";

	//件名設定
	$Subject = mb_convert_encoding("ブイ1","ISO-2022-JP","UTF-8");

	//本文設定

	// $datestrから対象となる基準日時を得る
	$t = strtotime(substr($datestr, 0, 4) . '-' . substr($datestr, 4, 2) . '-' . substr($datestr, 6, 2) . ' ' . substr($datestr, 8, 2) . ':' . substr($datestr, 10, 2) . ':' . substr($datestr, 12, 2));
	$len = count($floats) -1;
	
	$fp = fopen($fname, "a");
	if (!$fp) {
		return false;
	}
	
	$fname = $dname . date("Ymd")  . "_debug_.txt";
	
	$fp2 = fopen($fname, "a");
	fwrite($fp2, "------------------------------------------------------------------------------"."\n");
	
	
	$millisec = 0;
	$a[] = array();
	$b[] = array();
	$act = 0;
	
	
	$fp_t = fopen("insert_temp.csv","w");
	
//	for ($i = 0; $i < $len; $i += 12)
	for ($i = 0; $i < $len; $i += 5)
	{
		$ax = $floats[$i + 2];
		$ay = $floats[$i + 3];
		$az = $floats[$i + 4];

		$date_str = date("Y/m/d", $t);
		$time_str = date("H:i:s", $t);
		
		$text = sprintf("[%s],%s,%s.%03d,%11.6F,%11.6F,%11.6F\n", $now, $date_str, $time_str, $millisec, $ax, $ay, $az);
		fwrite($fp, $text);
		$text2 = sprintf("%s,%s,%s.%03d,%F,%F,%F\n", $now, $date_str, $time_str, $millisec, $ax, $ay, $az);
		fwrite($fp_t, $text2);

/*
		$millisec += 200;
		if ($millisec % 1000 == 0)
		{
			$t += floor($millisec / 1000);
			$millisec -= (floor($millisec / 1000) * 1000);
		}
*/		

		//■■■Alarm処理
//		if( $len > $i + 9)
		if( $len > $i + 5)
		{
//			fwrite($fp2, "a1_==" .$floats[$i + 3]  ."\n");
//			fwrite($fp2, "a2_==" .$floats[$i + 9] ."\n");
			
			$a[$act] = number_format(($floats[$i + 4] / 1000) * 9.81, 4, '.', '');
			$a[$act+1] =number_format(($floats[$i + 9] /1000) * 9.81, 4, '.', '');
//			fwrite($fp2, "a1==" .$a[$act]."\n");
//			fwrite($fp2, "a2==" .$a[$act+1]."\n");
			if((($a[$act+1] - $a[$act]) > $limit) || (($a[$act+1] - $a[$act]) < -$limit)) $a[$act+1] = $a[$act];
			$act += 1;
		}
		
		$b[$act] = $date_str ." " .$time_str ."." .$millisec;
		
		
	}
	fclose($fp);
	fclose($fp_t);
	
	//■データベース登録処理
	//$insert = "COPY wave_height.data_03_log FROM '/www/arduino/acc_test/1/insert_temp.csv' WITH CSV;";
	$insert = "COPY wave_height.data_03_log FROM '/www/wiolte/insert_temp.csv' WITH CSV;";
	//$res = pg_query($conn, $insert);



	//■■■Alarm処理
	$ac_data_ct = count($a);
	$sum_ = array_sum($a);
	$avg_ = number_format($sum_ / $ac_data_ct,4,"." ,"");
	
	fwrite($fp2,"count=" .$ac_data_ct."_______");
	fwrite($fp2,"sum_=" .$sum_."_______");
	fwrite($fp2,"avg_=" .$avg_."\n");
	
	
	$send_flag = 0;
	for($ii = 0;$ii < $ac_data_ct;$ii++)
	{
		//fwrite($fp2,$a[$ii] - $avg_."\n");
		$fn = $ii+1;
		fwrite($fp2,"a" .$fn ."=" .$a[$ii]  ."-" .$avg_ ."__");
		
		if($alarm_range < ($a[$ii] - $avg_))
		{
			fwrite($fp2, $a[$ii] - $avg_ ."__________");
			
			//本文設定
//			$message = "";
//			$message = mb_convert_encoding("<center>" ."ブイ1" ."<BR><BR>","ISO-2022-JP","UTF-8");
//			$message .= mb_convert_encoding("<center>" .$b[$ii] ."<BR><BR>","ISO-2022-JP","UTF-8");
//			$message .= mb_convert_encoding("<center>" ."Alarm==" .$alarm_range ."<BR>","ISO-2022-JP","UTF-8");
//			$message .= mb_convert_encoding("<center>" ."Value==" .$a[$ii] ."<BR>","ISO-2022-JP","UTF-8");
//			$message .= mb_convert_encoding("<center>" ."Average==" .$avg_ ."<BR>","ISO-2022-JP","UTF-8");
			//$message .= wordwrap($message, 70);
			
			
			if($send_flag == 0)
			{
				//送信する
				if(mb_send_mail("kikuchi.katsumi@gmail.com", $Subject , $message,$header))
//				{}
				
//				if(mb_send_mail("unyou@kmk-ss.co.jp", $Subject , $message,$header))
				{
					$fp_sl = fopen("send_log.txt", "a");
					fwrite($fp_sl,date("[Y-m-d H:i:s]",time()) ."_Alarm_Range==" .$alarm_range ."_Value==" .$a[$ii]  ."_Average==" .$avg_ ."__"."__send_OK" ."\n");
					fclose($fp_sl);
					fwrite($fp2,"send_OK");
				}
/*
				if(mb_send_mail("kikuchi.katsumi@gmail.com", $Subject , $message,$header))
				{
					$fp_sl = fopen("send_log_k.txt", "a");
					fwrite($fp_sl,date("[Y-m-d H:i:s]",time()) ."_Alarm_Range==" .$alarm_range ."_Value==" .$a[$ii]  ."_Average==" .$avg_ ."__"."__send_OK" ."\n");
					fclose($fp_sl);
					fwrite($fp2,"send_OK");
				}
*/
				$send_flag = 1;
			}
		}
		fwrite($fp2,"\n");
	}
	fclose($fp2);
	
	return true;
}


?>

PHP File Manager