File "client.php"
Full path: /www/co2/client.php
File size: 16.59 KiB (16993 bytes)
MIME-type: text/x-php
Charset: utf-8
<?php
$data = file_get_contents('php://input');
$ddd = stripslashes($data);
$ddd = rtrim($ddd ,'}"');
$ddd = ltrim($ddd ,'"{');
$data_ = explode(',',$ddd);
$count_ = count($data_);
// $data: サーバからのリクエスト POST ボディデータ(フォーマット: json)
// シシステムに合わせて、パース及び処理を記述するステムに合わせて、パース及び処理を記述する
//データ形式を整理
$data_row['NMEA'] = "";
for($i = 0;$i < $count_;$i++)
{
if($i < 36)
{
if(($i == 2) || ($i == 3))
{
$data_json = array();
$data_json = explode(':',$data_[$i]);
$json_name = rtrim($data_json[0],'"');
$json_name = ltrim($json_name,'"');
$data_json[3]= rtrim($data_json[3],'"');
$data_json[1] = ltrim($data_json[1],'"');
$data_row[$json_name] = $data_json[1] .":" .$data_json[2].":" .$data_json[3] ;
}
else
{
$data_json = array();
$data_json = explode(':',$data_[$i]);
$json_name = rtrim($data_json[0],'"');
$json_name = ltrim($json_name,'"');
if(!empty($data_json[1])) $json_value = rtrim($data_json[1],'"');
$json_value = ltrim($json_value,'"');
$data_row[$json_name] = $json_value;
}
}
else
{
$data_row['NMEA'] .= "," .$data_[$i];
}
}
//20210528
//デバイスIDによって登録先DBの変更
$device_list = array("lc10546","lc2473","lc2389","lc2733","lc1949","lc2355");
$device_ct = count($device_list);
for($d =0;$d < $device_ct;$d++)
{
if(!strcmp($data_row['DEVICE_ID'] ,$device_list[$d]))
{
$id = $d +1;
}
}
$DATA_TABLE = "gps.rtk_data" .$id;
$DATA_TABLE2 = "gps.rtk_data_1m" .$id;
$DATA_TABLE3 = "gps.rtk_data_1m_calc" .$id;
$DATA_TABLE4 = "gps.send_mail_address";
$DATA_TABLE5 = "gps.send_log";
$DATA_TABLE6 = "gps.real_time_data".$id;
$HOST = "localhost";
$DB = "ichimill";
$USER = "postgres";
$PASS = "postgres";
$CURRENT_PATH = "/www/gps_socket/" .$id;
$filename = $CURRENT_PATH ."/csv/" .date("YmdH",time()) .".csv";
$filename_new = $CURRENT_PATH ."/new_data.csv";
//20211108 追加(警報レンジ)
$alarm_range = file_get_contents($CURRENT_PATH ."/alarm_range.txt");
$ppp = fopen("/www/gps_socket/access_ck.txt",'a');
fwrite($ppp,date("Y-m-d H:i:s",time()) ."_" .$id ."\n");
fclose($ppp);
if (!file_exists($filename)) {
$fp = fopen($filename,"a");
fwrite($fp,"顧客ID,端末ID,端末時刻,GPS時刻,受信サーバ時刻,緯度,経度,標高,楕円体高,測位状況,HDOP,イベントタイプID,イベント名,イベント名,バッテリ残量,バッテリ電圧,加速度X(RAW),加速度Y(RAW),加速度Z(RAW),加速度X,加速度Y,加速度Z,角速度X(RAW),角速度Y(RAW),角速度Z(RAW),角速度X,角速度Y,角速度Z,気圧,高度,端末庫内温度,信号受信電力,信号強度,受信品質,信号電力対干渉,NMEA" ."\n");
fclose($fp);
}
if($count_)
{
//================================================
// データベース接続
// 備考 :
// 更新 : 2013/03/12 KMK-Yokosuka
//================================================
$conn = pg_connect("
host = ". $HOST. "
dbname = ". $DB. "
user = ". $USER. "
password= ". $PASS. "
");
$CUSTOMER_ID = (!empty($data_row['CUSTOMER_ID']) ? $data_row['CUSTOMER_ID'] : "");
$DEVICE_ID = (!empty($data_row['DEVICE_ID']) ? $data_row['DEVICE_ID'] : "");
$DATE = (!empty($data_row['DATE']) ? $data_row['DATE'] : "");
$GPS_DATE = (!empty($data_row['GPS_DATE']) ? $data_row['GPS_DATE'] : "");
$SERVER_UNIXTIME = (!empty($data_row['SERVER_UNIXTIME']) ? $data_row['SERVER_UNIXTIME'] : "");
$LATITUDE = (!empty($data_row['LATITUDE']) ? $data_row['LATITUDE'] : "");
$LONGITUDE = (!empty($data_row['LONGITUDE']) ? $data_row['LONGITUDE'] : "");
$GPS_ALTITUDE = (!empty($data_row['GPS_ALTITUDE']) ? $data_row['GPS_ALTITUDE'] : "");
$GPS_ELLIPSOIDALHEIGHT = (!empty($data_row['GPS_ELLIPSOIDALHEIGHT']) ? $data_row['GPS_ELLIPSOIDALHEIGHT'] : "");
$POSITION_TYPE_NAME = (!empty($data_row['POSITION_TYPE_NAME']) ? $data_row['POSITION_TYPE_NAME'] : "");
$HDOP = (!empty($data_row['HDOP']) ? $data_row['HDOP'] : "");
$EVENT_TYPE = (!empty($data_row['EVENT_TYPE']) ? $data_row['EVENT_TYPE'] : "");
$EVENT_NAME_JP = (!empty($data_row['EVENT_NAME_JP']) ? $data_row['EVENT_NAME_JP'] : "");
$EVENT_NAME_EN = (!empty($data_row['EVENT_NAME_EN']) ? $data_row['EVENT_NAME_EN'] : "");
$POWER = (!empty($data_row['POWER']) ? $data_row['POWER'] : "");
$VOLTAGE = (!empty($data_row['VOLTAGE']) ? $data_row['VOLTAGE'] : "");
$ACCELERATION_RAW_X = (!empty($data_row['ACCELERATION_RAW_X']) ? $data_row['ACCELERATION_RAW_X'] : "");
$ACCELERATION_RAW_Y = (!empty($data_row['ACCELERATION_RAW_Y']) ? $data_row['ACCELERATION_RAW_Y'] : "");
$ACCELERATION_RAW_Z = (!empty($data_row['ACCELERATION_RAW_Z']) ? $data_row['ACCELERATION_RAW_Z'] : "");
$ACCELERATION_X = (!empty($data_row['ACCELERATION_X']) ? $data_row['ACCELERATION_X'] : "");
$ACCELERATION_Y = (!empty($data_row['ACCELERATION_Y']) ? $data_row['ACCELERATION_Y'] : "");
$ACCELERATION_Z = (!empty($data_row['ACCELERATION_Z']) ? $data_row['ACCELERATION_Z'] : "");
$GYRO_RAW_X = (!empty($data_row['GYRO_RAW_X']) ? $data_row['GYRO_RAW_X'] : "");
$GYRO_RAW_Y = (!empty($data_row['GYRO_RAW_Y']) ? $data_row['GYRO_RAW_Y'] : "");
$GYRO_RAW_Z = (!empty($data_row['GYRO_RAW_Z']) ? $data_row['GYRO_RAW_Z'] : "");
$GYRO_X = (!empty($data_row['GYRO_X']) ? $data_row['GYRO_X'] : "");
$GYRO_Y = (!empty($data_row['GYRO_Y']) ? $data_row['GYRO_Y'] : "");
$GYRO_Z = (!empty($data_row['GYRO_Z']) ? $data_row['GYRO_Z'] : "");
$PRESSURE = (!empty($data_row['PRESSURE']) ? $data_row['PRESSURE'] : "");
$ALTITUDE = (!empty($data_row['ALTITUDE']) ? $data_row['ALTITUDE'] : "");
$TEMPERATURE = (!empty($data_row['TEMPERATURE']) ? $data_row['TEMPERATURE'] : "");
$RSRP = (!empty($data_row['RSRP']) ? $data_row['RSRP'] : "");
$RSSI = (!empty($data_row['RSSI']) ? $data_row['RSSI'] : "");
$RSRQ = (!empty($data_row['RSRQ']) ? $data_row['RSRQ'] : "");
$SINR = (!empty($data_row['SINR']) ? $data_row['SINR'] : "");
$NMEA = (!empty($data_row['NMEA']) ? $data_row['NMEA'] : "");
$fp = fopen($filename,"a");
$fp2 = fopen($filename_new,"w");
fwrite($fp,$CUSTOMER_ID."," .$DEVICE_ID."," .$DATE."," .$GPS_DATE."," .$SERVER_UNIXTIME."," .$LATITUDE.",");
fwrite($fp,$LONGITUDE."," .$GPS_ALTITUDE."," .$GPS_ELLIPSOIDALHEIGHT."," .$POSITION_TYPE_NAME."," .$HDOP."," .$EVENT_TYPE.",");
fwrite($fp,$EVENT_NAME_JP."," .$EVENT_NAME_EN."," .$POWER."," .$VOLTAGE."," .$ACCELERATION_RAW_X."," .$ACCELERATION_RAW_Y.",");
fwrite($fp,$ACCELERATION_RAW_Z."," .$ACCELERATION_X."," .$ACCELERATION_Y."," .$ACCELERATION_Z."," .$GYRO_RAW_X."," .$GYRO_RAW_Y.",");
fwrite($fp,$GYRO_RAW_Z."," .$GYRO_X."," .$GYRO_Y."," .$GYRO_Z."," .$PRESSURE."," .$ALTITUDE.",");
fwrite($fp,$TEMPERATURE."," .$RSRP."," .$RSSI."," .$RSRQ."," .$SINR."," .$NMEA."\n");
fwrite($fp2,$CUSTOMER_ID."," .$DEVICE_ID."," .$DATE."," .$GPS_DATE."," .$SERVER_UNIXTIME."," .$LATITUDE.",");
fwrite($fp2,$LONGITUDE."," .$GPS_ALTITUDE."," .$GPS_ELLIPSOIDALHEIGHT."," .$POSITION_TYPE_NAME."," .$HDOP."," .$EVENT_TYPE.",");
fwrite($fp2,$EVENT_NAME_JP."," .$EVENT_NAME_EN."," .$POWER."," .$VOLTAGE."," .$ACCELERATION_RAW_X."," .$ACCELERATION_RAW_Y.",");
fwrite($fp2,$ACCELERATION_RAW_Z."," .$ACCELERATION_X."," .$ACCELERATION_Y."," .$ACCELERATION_Z."," .$GYRO_RAW_X."," .$GYRO_RAW_Y.",");
fwrite($fp2,$GYRO_RAW_Z."," .$GYRO_X."," .$GYRO_Y."," .$GYRO_Z."," .$PRESSURE."," .$ALTITUDE.",");
fwrite($fp2,$TEMPERATURE."," .$RSRP."," .$RSSI."," .$RSRQ."," .$SINR.",'ttt'");
fclose($fp);
fclose($fp2);
//2022024 PTSサーバーへデータの転送
//---------------------------------------------------------------
//$dev_id = $data_row['DEVICE_ID'];
$send_data = $CUSTOMER_ID."," .$DEVICE_ID."," .$DATE."," .$GPS_DATE."," .$SERVER_UNIXTIME."," .$LATITUDE.",";
$send_data .= $LONGITUDE."," .$GPS_ALTITUDE."," .$GPS_ELLIPSOIDALHEIGHT."," .$POSITION_TYPE_NAME."," .$HDOP."," .$EVENT_TYPE.",";
$send_data .= $EVENT_NAME_JP."," .$EVENT_NAME_EN."," .$POWER."," .$VOLTAGE."," .$ACCELERATION_RAW_X."," .$ACCELERATION_RAW_Y.",";
$send_data .= $ACCELERATION_RAW_Z."," .$ACCELERATION_X."," .$ACCELERATION_Y."," .$ACCELERATION_Z."," .$GYRO_RAW_X."," .$GYRO_RAW_Y.",";
$send_data .= $GYRO_RAW_Z."," .$GYRO_X."," .$GYRO_Y."," .$GYRO_Z."," .$PRESSURE."," .$ALTITUDE.",";
$send_data .= $TEMPERATURE."," .$RSRP."," .$RSSI."," .$RSRQ."," .$SINR."," .$NMEA;
$url = 'http://www.ptgw3.net/400_ichimiru/recv/icm_recv.php';
$data = array(
'data' => $send_data
);
//$header = array(
// "Content-Type: application/x-www-form-urlencoded",
// "Content-Length: ".strlen($data['data'])
// );
$options = array('http' => array(
'method' => 'POST',
// 'header' => implode("\r\n", $header),
'content' => http_build_query($data),
));
$contents = file_get_contents($url, false, stream_context_create($options));
//---------------------------------------------------------------
//■データベース登録処理
$insert = "COPY " .$DATA_TABLE ." FROM '" .$filename_new ."' WITH CSV;";
$res = pg_query($conn, $insert);
//■最新の緯度経度高さから60秒平均を引き、データベースへ登録
$avg = "SELECT count(latitude),avg(latitude) as lat, avg(longitude) as lon, avg(gps_altitude) as alt ";
$avg .= "FROM " .$DATA_TABLE2;
$res_avg = pg_query($conn, $avg);
$row_avg = pg_fetch_array($res_avg,0);
$limit_t = 30;
if($row_avg['count'] != 0)
{
//20211115 平均高さ-現在の最新の高さを取得
$sel_new = "SELECT * FROM " .$DATA_TABLE3 ." order by gps_date desc limit 1";
$res_new = pg_query($conn, $sel_new);
$row_new = pg_fetch_array($res_new,0);
$base_alt = $row_new['gps_altitude'];
$out_lat = number_format($LATITUDE - $row_avg['lat'],9,".","");
$out_lon = number_format($LONGITUDE -$row_avg['lon'],9,".","");
$out_alt = number_format($GPS_ALTITUDE - $row_avg['alt'],6,".","");
$t_now = strtotime($GPS_DATE);
$t_st = file_get_contents($CURRENT_PATH ."/t_st.txt"); //現在の開始時間T(秒)
$z_min = file_get_contents($CURRENT_PATH ."/z_min.txt"); //現在の最小の差分波高さ
$z_max = file_get_contents($CURRENT_PATH ."/z_max.txt"); //現在の最大の差分波高さ
if($limit_t < ($t_now - $t_st))
{
$fp_tst = fopen($CURRENT_PATH ."/t_st.txt","w");
$fp_zmin = fopen($CURRENT_PATH ."/z_min.txt","w");
$fp_zmax = fopen($CURRENT_PATH ."/z_max.txt","w");
fwrite($fp_tst,$t_now);
fwrite($fp_zmin,0);
fwrite($fp_zmax,0);
fclose($fp_tst);
fclose($fp_zmin);
fclose($fp_zmax);
$t_st = file_get_contents($CURRENT_PATH ."/t_st.txt"); //現在の開始時間T(秒)
$z_min = file_get_contents($CURRENT_PATH ."/z_min.txt"); //現在の最小の差分波高さ
$z_max = file_get_contents($CURRENT_PATH ."/z_max.txt"); //現在の最大の差分波高さ
}
/*
if($limit_t < ($t_unix - $t_st))
{
$fp_tst = fopen($CURRENT_PATH ."/t_st.txt","w");
$fp_zmin = fopen($CURRENT_PATH ."/z_min.txt","w");
$fp_zmax = fopen($CURRENT_PATH ."/z_max.txt","w");
fwrite($fp_tst,"");
fwrite($fp_zmin,0);
fwrite($fp_zmax,0);
fclose($fp_tst);
fclose($fp_zmin);
fclose($fp_zmax);
}
*/
//20211115 リアルタイムの波高、周期の計算
$fp_de = fopen($CURRENT_PATH ."/debug.txt","a");
fwrite($fp_de,"st_" .$GPS_DATE ."__" .date("Y-m-d H:i:s" ,$t_st) ."__" .$t_now ."__" .$t_st ."__" .$base_alt ."__" .$out_alt ."__" .$z_min ."__" .$z_max ."\n");
if((($base_alt * $out_alt) < 0) && ($out_alt > 0))
{
fwrite($fp_de,"1" ."\n");
//T1記録
//Export T1
//Zmax,Zmin初期化、 T0記録
$wave_height = $z_max - $z_min;
$period = $t_now -$t_st;
$fp_tst = fopen($CURRENT_PATH ."/t_st.txt","w");
fwrite($fp_tst,$t_now);
fclose($fp_tst);
if($period != 0)
{
fwrite($fp_de,"export" ."\n");
$insert4 = "INSERT INTO " .$DATA_TABLE6 ."(";
$insert4 .= "gps_date, wave_height,period)";
$insert4 .= "VALUES (";
$insert4 .= "'" .$GPS_DATE ."',";
$insert4 .= $wave_height .",";
$insert4 .= $period;
$insert4 .= ")";
$res4 = pg_query($conn, $insert4);
$fp_zmin = fopen($CURRENT_PATH ."/z_min.txt","w");
$fp_zmax = fopen($CURRENT_PATH ."/z_max.txt","w");
fwrite($fp_zmin,0);
fwrite($fp_zmax,0);
fclose($fp_zmin);
fclose($fp_zmax);
}
}
else
{
fwrite($fp_de,"2" ."\n");
if($z_max < $out_alt)
{
fwrite($fp_de,"max_up" ."\n");
//zmax更新
$fp_zmax = fopen($CURRENT_PATH ."/z_max.txt","w");
fwrite($fp_zmax,$out_alt);
fclose($fp_zmax);
}
if($z_min > $out_alt)
{
fwrite($fp_de,"min_up" ."\n");
//zmin更新
$fp_zmin = fopen($CURRENT_PATH ."/z_min.txt","w");
fwrite($fp_zmin,$out_alt);
fclose($fp_zmin);
}
}
fwrite($fp_de, "end_" .$GPS_DATE ."__" .date("Y-m-d H:i:s" ,$t_st) ."__" .$t_now ."__" .$t_st ."__" .$base_alt ."__" .$out_alt ."__" .$z_min ."__" .$z_max ."\n");
fclose($fp_de);
$insert3 = "INSERT INTO " .$DATA_TABLE3 ."(";
$insert3 .= "gps_date, latitude, longitude, gps_altitude)";
$insert3 .= "VALUES (";
$insert3 .= "'" .$GPS_DATE ."',";
$insert3 .= $out_lat .",";
$insert3 .= $out_lon .",";
$insert3 .= $out_alt ."";
$insert3 .= ")";
$res3 = pg_query($conn, $insert3);
//20211108 追加 メール送信処理
//$wave_height
if($alarm_range < $wave_height)
// if($alarm_range < $out_alt)
{
$sql3 = "SELECT * FROM " .$DATA_TABLE4 ." WHERE device_id=" .$id ." AND del_flag=0" ;
$res3 = pg_query($conn, $sql3);
$ct3 = pg_num_rows($res3);
for($k =0;$k < $ct3;$k++)
{
$row3 = pg_fetch_array($res3,$k);
$send = Mail_send($row3['mail_address'],$id);
if($send)
{
$ins_sql2 = "INSERT INTO " .$DATA_TABLE5 ."(device_id, mail_address, send_datetime)";
$ins_sql2 .= "VALUES (";
$ins_sql2 .= $id .",";
$ins_sql2 .= "'" .$row3['mail_address'] ."',";
$ins_sql2 .= "CURRENT_TIMESTAMP)";
$ins_res2 = pg_query($conn,$ins_sql2) or die("SQL ERROR!!<br />". $ins_sql2.pg_last_error());
}
}
}
$gps_date_unix = strtotime($GPS_DATE);
$delete_date = date("Y-m-d H:i:s", $gps_date_unix-60);
$delete = "DELETE FROM " .$DATA_TABLE3 ." WHERE gps_date <= '" .$delete_date ."';";
$res_del = pg_query($conn, $delete);
/*
$fp_a = fopen("coordinate_a_avg.txt","w");
$fp_b = fopen("coordinate_b_avg.txt","w");
$out_lat = number_format($LATITUDE - $row_avg['lat'],3,".","");
$out_lon = number_format($LONGITUDE -$row_avg['lon'],3,".","");
$out_alt = number_format($GPS_ALTITUDE - $row_avg['alt'],3,".","");
fwrite($fp_a,$out_lat ."," .$out_lon);
fwrite($fp_b,$out_alt);
fcloce($fp_a);
fcloce($fp_b);
*/
}
//■グラフ用に60秒分のデータ保存データーベス
$insert2 = "INSERT INTO " .$DATA_TABLE2 ."(";
$insert2 .= "gps_date, latitude, longitude, gps_altitude)";
$insert2 .= "VALUES (";
$insert2 .= "'" .$GPS_DATE ."',";
$insert2 .= $LATITUDE .",";
$insert2 .= $LONGITUDE .",";
$insert2 .= $GPS_ALTITUDE ."";
$insert2 .= ")";
if($LATITUDE) $res2 = pg_query($conn, $insert2);
$gps_date_unix = strtotime($GPS_DATE);
$delete_date = date("Y-m-d H:i:s", $gps_date_unix-60);
$delete = "DELETE FROM " .$DATA_TABLE2 ." WHERE gps_date <= '" .$delete_date ."';";
$res_del = pg_query($conn, $delete);
}
//●メール送信
function Mail_send($address_,$id_)
{
//■内部文字エンコーディングを設定
mb_internal_encoding("ISO-2022-JP");
// $data_ct = count($data_);
//ヘッダー設定
$header = "From: " ."ブイ管理システム" ."<www@penta-02.ptgw.net>" ."\n";
$header .= "Reply-To: " ."ブイ管理システム" ."<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("ブイ" .$id_ ,"ISO-2022-JP","UTF-8");
//本文設定
// $message = mb_convert_encoding("※このメールはシステム側から送信しています" ."<BR><BR>" ,"ISO-2022-JP","UTF-8");
// $message .= mb_convert_encoding("【体温が37℃以上及び体調不良者のお知らせ】" ."<BR>" ,"ISO-2022-JP","UTF-8");
// $message .= mb_convert_encoding("日時 :" .$date_ ."<BR>" ,"ISO-2022-JP","UTF-8");
// $message .= mb_convert_encoding("会社名 :" .$company_name_ ."<BR>" ,"ISO-2022-JP","UTF-8");
// $message .= mb_convert_encoding("名前 :" .$name_ ."<BR>" ,"ISO-2022-JP","UTF-8");
// for($ii = 0;$ii < $data_ct;$ii= $ii+2)
// {
// $message .= mb_convert_encoding($data_[$ii] .":" .$data_[$ii+1] ."<BR>" ,"ISO-2022-JP","UTF-8");
// }
//
// $message = wordwrap($message, 70);
//送信する
if(mb_send_mail($address_, $Subject , $message,$header))
{
return 1;
}
}
// 処理終了後、ステータスコード:200を返却
?>