You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

222 lines
9.7 KiB

<?php
require_once "database.php";
date_default_timezone_set("Asia/Taipei");
$postData = file_get_contents('php://input');
$from = "system";
$create_at = date("Y-m-d H:i:s");
$myfile = fopen("receive_sanlien.txt", "a") or die("Unable to open file!");
fwrite($myfile, $postData . $create_at . "\n");
fclose($myfile);
if ($postData) {
$data = json_decode($postData, true);
//地震開關序號 裝置唯一值
$SERIAL_NO = isset($data['SERIAL NO.']) ? $data['SERIAL NO.'] : "";
//封包序號
$ID = isset($data['ID']) ? $data['ID'] : "";
//地震狀態, START為地震開始,END為地震結束。
$STATUS = isset($data['STATUS']) ? $data['STATUS'] : "";
$NETWORK_STATUS = isset($data['NETWORK STATUS']) ? $data['NETWORK STATUS'] : "";
$SS_SYS_YEAR = isset($data['SS_SYS_YEAR']) ? $data['SS_SYS_YEAR'] : "";
$SS_SYS_MONTH = isset($data['SS_SYS_MONTH']) ? $data['SS_SYS_MONTH'] : "";
$SS_SYS_DAY = isset($data['SS_SYS_DAY']) ? $data['SS_SYS_DAY'] : "";
$SS_SYS_HOUR = isset($data['SS_SYS_HOUR']) ? $data['SS_SYS_HOUR'] : "";
$SS_SYS_MINUTE = isset($data['SS_SYS_MINUTE']) ? $data['SS_SYS_MINUTE'] : "";
$SS_SYS_SECOND = isset($data['SS_SYS_SECOND']) ? $data['SS_SYS_SECOND'] : "";
$SS_STATUS = isset($data['SS_STATUS']) ? $data['SS_STATUS'] : "";
$ELE_STATUS = isset($data['ELE_STATUS']) ? $data['ELE_STATUS'] : "";
//地震事件時間、年
$SS_EVENT_YEAR = isset($data['SS_EVENT_YEAR']) ? $data['SS_EVENT_YEAR'] : "";
//地震事件時間、月
$SS_EVENT_MONTH = isset($data['SS_EVENT_MONTH']) ? $data['SS_EVENT_MONTH'] : "";
//地震事件時間、日
$SS_EVENT_DAY = isset($data['SS_EVENT_DAY']) ? $data['SS_EVENT_DAY'] : "";
//地震事件時間、時
$SS_EVENT_HOUR = isset($data['SS_EVENT_HOUR']) ? $data['SS_EVENT_HOUR'] : "";
//地震事件時間、分
$SS_EVENT_MINUTE = isset($data['SS_EVENT_MINUTE']) ? $data['SS_EVENT_MINUTE'] : "";
//地震事件時間、秒
$SS_EVENT_SECOND = isset($data['SS_EVENT_SECOND']) ? $data['SS_EVENT_SECOND'] : "";
//地震震度 請除10,5級以上為表示強弱,
//51為5弱59為5強,61為6弱69為6強,以此類推
//這裡40代表為4級地震
$SS_INTENSITY = isset($data['SS_INTENSITY']) ? $data['SS_INTENSITY'] : "";
//地震gal值 請除10 這裡為 2144 / 10 = 214.4 gal
$SS_INTENSITY_PGA = isset($data['SS_INTENSITY_PGA']) ? $data['SS_INTENSITY_PGA'] : "";
//地震速度值 請除10 這裡為 1251 / 10 = 125.1 mm / second
$SS_INTENSITY_PGV = isset($data['SS_INTENSITY_PGV']) ? $data['SS_INTENSITY_PGV'] : "";
//X軸加速度分量 為int16_t
//64889轉換後為 -647
//-647 請除10 = -64.7 gal 代表地震時X軸瞬間加速度為負向
$SS_INTENSITY_PGA_VX = isset($data['SS_INTENSITY_PGA_VX']) ? $data['SS_INTENSITY_PGA_VX'] : "";
//Y軸加速度分量 為int16_t
//2044轉換後為 2044
//2044 請除10 = 204.4 gal 代表地震時Y軸瞬間加速度為正向
$SS_INTENSITY_PGA_VY = isset($data['SS_INTENSITY_PGA_VY']) ? $data['SS_INTENSITY_PGA_VY'] : "";
//X軸速度分量 為int16_t
//331轉換後為 331
//331 請除10 = 331 / 10 = 33.1 mm / second 代表地震時X軸瞬間速度為正向
$SS_INTENSITY_PGA_VZ = isset($data['SS_INTENSITY_PGA_VZ']) ? $data['SS_INTENSITY_PGA_VZ'] : "";
//Y軸加速度分量 為int16_t
//46轉換後為 46
//46 請除10 = 4.6 gal 代表地震時Z軸瞬間加速度為正向
$SS_INTENSITY_PGV_VX = isset($data['SS_INTENSITY_PGV_VX']) ? $data['SS_INTENSITY_PGV_VX'] : "";
//Y軸速度分量 為int16_t
//64333轉換後為 -1203
//-1203請除10 = -1203 / 10 = -120.3 mm / second 代表地震時Y軸瞬間速度為負向
$SS_INTENSITY_PGV_VY = isset($data['SS_INTENSITY_PGV_VY']) ? $data['SS_INTENSITY_PGV_VY'] : "";
//Z軸速度分量 為int16_t
//65444轉換後為 -92
//-92請除10 = -92 / 10 = -9.2 mm / second 代表地震時Z軸瞬間速度為負向
$SS_INTENSITY_PGV_VZ = isset($data['SS_INTENSITY_PGV_VZ']) ? $data['SS_INTENSITY_PGV_VZ'] : "";
//X軸加速度分量 為int16_t
//64889轉換後為 -647
//-647 請除10 = -64.7 gal 代表地震時X軸瞬間加速度為負向
$SS_INTENSITY_PGA_VX = isset($data['SS_INTENSITY_PGA_VX']) ? $data['SS_INTENSITY_PGA_VX'] : "";
//X軸加速度 請除10,2044 / 10 = 204.4 gal
$SS_INTENSITY_PGAX = isset($data['SS_INTENSITY_PGAX']) ? $data['SS_INTENSITY_PGAX'] : "";
//Y軸加速度 請除10,2044 / 10 = 204.4 gal
$SS_INTENSITY_PGAY = isset($data['SS_INTENSITY_PGAY']) ? $data['SS_INTENSITY_PGAY'] : "";
//Z軸加速度 請除10,279 / 10 = 27.9 gal
$SS_INTENSITY_PGAZ = isset($data['SS_INTENSITY_PGAZ']) ? $data['SS_INTENSITY_PGAZ'] : "";
//X軸速度 請除10,431 / 10 = 43.1 mm / second
$SS_INTENSITY_PGVX = isset($data['SS_INTENSITY_PGVX']) ? $data['SS_INTENSITY_PGVX'] : "";
//Y軸速度請除10,1203 / 10 = 120.3 mm / second
$SS_INTENSITY_PGVY = isset($data['SS_INTENSITY_PGVY']) ? $data['SS_INTENSITY_PGVY'] : "";
//Z軸速度 請除10,161 / 10 = 16.1 mm / second
$SS_INTENSITY_PGVZ = isset($data['S_INTENSITY_PGVZ']) ? $data['SS_INTENSITY_PGVZ'] : "";
//地震開關Relay狀態
// 0 = OFF 1 = ON,bit0-2對應Relay0-2
$SS_INTENSITY_DO = isset($data['SS_INTENSITY_DO']) ? $data['SS_INTENSITY_DO'] : "";
$sql = "
INSERT INTO sanlien_log (
`SERIAL_NO`,
`ID`,
`STATUS`,
`SS_INTENSITY`,
`NETWORK_STATUS`,
`SS_SYS_YEAR`,
`SS_SYS_MONTH`,
`SS_SYS_DAY`,
`SS_SYS_HOUR`,
`SS_SYS_MINUTE`,
`SS_SYS_SECOND`,
`SS_STATUS`,
`ELE_STATUS`,
`SS_EVENT_YEAR`,
`SS_EVENT_MONTH`,
`SS_EVENT_DAY`,
`SS_EVENT_HOUR`,
`SS_EVENT_MINUTE`,
`SS_EVENT_SECOND`,
`SS_INTENSITY_PGA`,
`SS_INTENSITY_PGV`,
`SS_INTENSITY_PGA_VX`,
`SS_INTENSITY_PGA_VY`,
`SS_INTENSITY_PGA_VZ`,
`SS_INTENSITY_PGV_VX`,
`SS_INTENSITY_PGV_VY`,
`SS_INTENSITY_PGV_VZ`,
`SS_INTENSITY_PGAX`,
`SS_INTENSITY_PGAY`,
`SS_INTENSITY_PGAZ`,
`SS_INTENSITY_PGVX`,
`SS_INTENSITY_PGVY`,
`SS_INTENSITY_PGVZ`,
`SS_INTENSITY_DO`,
`from`,
`create_at`
)VALUES(
'$SERIAL_NO',
'$ID',
'$STATUS',
'$SS_INTENSITY',
'$NETWORK_STATUS',
'$SS_SYS_YEAR',
'$SS_SYS_MONTH',
'$SS_SYS_DAY',
'$SS_SYS_HOUR',
'$SS_SYS_MINUTE',
'$SS_SYS_SECOND',
'$SS_STATUS',
'$ELE_STATUS',
'$SS_EVENT_YEAR',
'$SS_EVENT_MONTH',
'$SS_EVENT_DAY',
'$SS_EVENT_HOUR',
'$SS_EVENT_MINUTE',
'$SS_EVENT_SECOND',
'$SS_INTENSITY_PGA',
'$SS_INTENSITY_PGV',
'$SS_INTENSITY_PGA_VX',
'$SS_INTENSITY_PGA_VY',
'$SS_INTENSITY_PGA_VZ',
'$SS_INTENSITY_PGV_VX',
'$SS_INTENSITY_PGV_VY',
'$SS_INTENSITY_PGV_VZ',
'$SS_INTENSITY_PGAX',
'$SS_INTENSITY_PGAY',
'$SS_INTENSITY_PGAZ',
'$SS_INTENSITY_PGVX',
'$SS_INTENSITY_PGVY',
'$SS_INTENSITY_PGVZ',
'$SS_INTENSITY_DO',
'$from',
'$create_at'
)
";
mysqli_query($link, $sql);
mysqli_close($link);
$earthquake_magnitude = getEarthquakeMagnitude($SS_INTENSITY);
$earthquake_time = $SS_EVENT_YEAR . "/" . $SS_EVENT_MONTH . "/" . $SS_EVENT_DAY . " " . $SS_EVENT_HOUR . ":" . $SS_EVENT_MINUTE . ":" . $SS_EVENT_SECOND;
if (in_array($STATUS, ['START', 'END'])) {
//以下推送到客户端消息
$access_token = array();
// 正式環境群組
// $access_token[] = "blymLDSO21gDaCXA6nJ2jf6fEZTNE0wEwANbLAhKMhM";
// 測試環境群組
$access_token[] = "Z6mRhmUT9yzPTrhBcJGdvo3SNTLVVXPAoWA9WyoKl5W";
$TargetCount = count($access_token);
$Push_Content['message'] = $faultstate . "\n";
$Push_Content['message'] = $Push_Content['message'] . "三連裝置編號: " . $SERIAL_NO . "\n";
$Push_Content['message'] = $Push_Content['message'] . "地震發生時間:" . $earthquake_time . "\n";
$Push_Content['message'] = $Push_Content['message'] . $earthquake_magnitude . "\n";
for ($i = 0; $i < $TargetCount; $i++) {
$ch = curl_init("https://notify-api.line.me/api/notify");
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($Push_Content));
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/x-www-form-urlencoded',
'Authorization: Bearer ' . $access_token[$i]
));
$response_json_str = curl_exec($ch);
curl_close($ch);
}
}
}
function getEarthquakeMagnitude($SS_INTENSITY)
{
if (empty($SS_INTENSITY))
return "";
if (intval(substr($SS_INTENSITY, 0, 1)) < 5) {
return "發生" . substr($SS_INTENSITY, 0, 1) . "級地震";
}
if (intval(substr($SS_INTENSITY, 0, 1)) >= 5) {
return "發生" . substr($SS_INTENSITY, 0, 1) . "級地震,強度為" . substr($SS_INTENSITY, 0, 1) . "";
}
return "";
}