File "index_OLD20181204.php"
Full path: /www/arduino/2/index_OLD20181204.php
File size: 7.14 KiB (7312 bytes)
MIME-type: text/x-php
Charset: utf-8
<?php
$data_dir = "./data/";
//$fp2 = fopen("test_20170920.txt", "a");
//fwrite($fp2, $_GET[data] ."\n");
//fclose($fp2);
$res = data_decode($_GET[data]);
echo $res ? 'OK' : 'ERROR';
exit;
// データのデコード
function data_decode($data) {
// 最初に保存ファイル名を取得しておく(ファイルが存在しなかったらヘッダーを作成)
$dname = $GLOBALS["data_dir"] . date("Ym") . "/";
$fname = $dname . date("Ymd") . ".csv";
if (!file_exists($dname)) {
if (!create_data_directory($dname)) {
return false;
}
}
if (!file_exists($fname)) {
if (!create_csv_header($fname)) {
return false;
}
}
// データを日付とデータ部に分割
$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");
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_renge = 2;
$DATA_TABLE = "wave_height.data_01_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("【警報】","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);
$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) {
$lat = float_to_double($floats[$i + 6], $floats[$i + 7]);
$lng = float_to_double($floats[$i + 8], $floats[$i + 9]);
$meters = float_to_double($floats[$i + 10], $floats[$i + 11]);
$date_str = date("Y/m/d", $t);
$time_str = date("H:i:s", $t);
$text = sprintf("[%s],%s,%s.%03d,%6.1F,%6.1F,%6.1F,%11.6F,%11.6F,%11.6F,%11.6F,%11.6F,%11.6F\n", $now, $date_str, $time_str, $millisec, $floats[$i], $floats[$i + 1], $floats[$i + 2], $floats[$i + 3], $floats[$i + 4], $floats[$i + 5], $lat, $lng, $meters);
fwrite($fp, $text);
$text2 = sprintf("%s,%s,%s.%03d,%F,%F,%F,%F,%F,%F,%F,%F,%F\n", $now, $date_str, $time_str, $millisec, $floats[$i], $floats[$i + 1], $floats[$i + 2], $floats[$i + 3], $floats[$i + 4], $floats[$i + 5], $lat, $lng, $meters);
fwrite($fp_t, $text2);
$millisec += 200;
if ($millisec % 1000 == 0) {
$t += floor($millisec / 1000);
$millisec -= (floor($millisec / 1000) * 1000);
}
//■■■Alarm処理
if( $len > $i + 9)
{
// fwrite($fp2, "a1_==" .$floats[$i + 3] ."\n");
// fwrite($fp2, "a2_==" .$floats[$i + 9] ."\n");
$a[$act] = number_format(($floats[$i + 3] / 100) * 9.81, 4, '.', '');
$a[$act+1] =number_format(($floats[$i + 9] /100) * 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_01_log FROM '/www/arduino/2/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_renge < ($a[$ii] - $avg_))
{
fwrite($fp2, $a[$ii] - $avg_ ."__________");
//本文設定
$message = "";
$message = mb_convert_encoding("<center>" ."警報テスト" ."<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>" ."Value==" .$a[$ii] ."<BR><BR>","ISO-2022-JP","UTF-8");
$message .= mb_convert_encoding("<center>" ."Average==" .$avg_ ."<BR><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("ansys.pnt543@gmail.com", $Subject , $message,$header))
// {
// fwrite($fp2,"send_OK");
// }
$send_flag = 1;
}
}
fwrite($fp2,"\n");
}
fclose($fp2);
return true;
}
?>