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
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 "";
|
|
}
|
|
|