| @@ -17,6 +17,8 @@ define('WEB_LIB', SERVER_URL.'libs/'); // 網頁lib | |||||
| define('BOOTSTRAPS', WEB_LIB.'bootstrap_sb/'); // bootstrap lib | define('BOOTSTRAPS', WEB_LIB.'bootstrap_sb/'); // bootstrap lib | ||||
| define('LOG_PATH', FILE_BASE.APP_NAME.'/logs/'); // log path | define('LOG_PATH', FILE_BASE.APP_NAME.'/logs/'); // log path | ||||
| require_once(MQ_CLASS_FILE); | |||||
| class Carpark extends CI_Controller | class Carpark extends CI_Controller | ||||
| { | { | ||||
| var $vars = array(); // 共用變數 | var $vars = array(); // 共用變數 | ||||
| @@ -57,7 +59,9 @@ class Carpark extends CI_Controller | |||||
| $mqtt_port = isset($station_setting['mqtt_port']) ? $station_setting['mqtt_port'] : MQ_PORT; | $mqtt_port = isset($station_setting['mqtt_port']) ? $station_setting['mqtt_port'] : MQ_PORT; | ||||
| $this->vars['mqtt_ip'] = $mqtt_ip; | $this->vars['mqtt_ip'] = $mqtt_ip; | ||||
| $this->vars['mqtt_port'] = $mqtt_port; | $this->vars['mqtt_port'] = $mqtt_port; | ||||
| $this->sync_data_model->init($this->vars); // for mqtt | |||||
| // init sync model | |||||
| $this->sync_data_model->init($this->vars); | |||||
| // 產生 excel 報表 | // 產生 excel 報表 | ||||
| $this->load->model('excel_model'); | $this->load->model('excel_model'); | ||||
| @@ -252,13 +256,18 @@ class Carpark extends CI_Controller | |||||
| // 判斷會員身份 | // 判斷會員身份 | ||||
| $rows = $this->cars_model->get_member($lpr); | $rows = $this->cars_model->get_member($lpr); | ||||
| // 取得 ck | |||||
| $parms['ck'] = $this->cars_model->gen_opendoor_ck($parms); | |||||
| if ($rows['member_no'] == 0) | if ($rows['member_no'] == 0) | ||||
| { | { | ||||
| $this->cars_model->mq_send_opendoor(MQ_TOPIC_OPEN_DOOR, "DO{$parms['ivsno']},TICKET,{$parms['lpr']}"); // 臨停訊號 | |||||
| //$this->cars_model->mq_send_opendoor(MQ_TOPIC_OPEN_DOOR, "DO{$parms['ivsno']},TICKET,{$parms['lpr']}"); | |||||
| $this->cars_model->temp_opendoors($parms); // 臨停訊號 | |||||
| } | } | ||||
| else | else | ||||
| { | { | ||||
| $this->cars_model->mq_send_opendoor(MQ_TOPIC_OPEN_DOOR, "DO{$parms['ivsno']},OPEN,{$parms['lpr']}"); // 月租訊號 | |||||
| //$this->cars_model->mq_send_opendoor(MQ_TOPIC_OPEN_DOOR, "DO{$parms['ivsno']},OPEN,{$parms['lpr']}"); | |||||
| $this->cars_model->member_opendoors($parms); // 月租訊號 | |||||
| } | } | ||||
| $this->cars_model->stop(); | $this->cars_model->stop(); | ||||
| echo 'ok'; | echo 'ok'; | ||||
| @@ -30,6 +30,8 @@ var ip='66.249.82.183';var clientid='565162cb67dfb';var mqtt_ip='192.168.51.11'; | |||||
| define('LOG_PATH', FILE_BASE.APP_NAME.'/logs/'); // log path name | define('LOG_PATH', FILE_BASE.APP_NAME.'/logs/'); // log path name | ||||
| define('LOG_FILE', FILE_BASE.APP_NAME.'/logs/cario.'); // log file name | define('LOG_FILE', FILE_BASE.APP_NAME.'/logs/cario.'); // log file name | ||||
| require_once(MQ_CLASS_FILE); | |||||
| class Cars extends CI_Controller | class Cars extends CI_Controller | ||||
| { | { | ||||
| var $vars = array(); | var $vars = array(); | ||||
| @@ -107,12 +109,7 @@ class Cars extends CI_Controller | |||||
| $mqtt_port = isset($station_setting['mqtt_port']) ? $station_setting['mqtt_port'] : MQ_PORT; | $mqtt_port = isset($station_setting['mqtt_port']) ? $station_setting['mqtt_port'] : MQ_PORT; | ||||
| $this->vars['mqtt_ip'] = $mqtt_ip; | $this->vars['mqtt_ip'] = $mqtt_ip; | ||||
| $this->vars['mqtt_port'] = $mqtt_port; | $this->vars['mqtt_port'] = $mqtt_port; | ||||
| // init again | |||||
| $this->sync_data_model->init($this->vars); // for mqtt | |||||
| $this->load->model('cars_model'); | |||||
| $this->cars_model->init($this->vars); | |||||
| trigger_error(__FUNCTION__ . "..init mqtt..{$this->vars['mqtt_ip']}:{$this->vars['mqtt_port']}"); | |||||
| } | } | ||||
| @@ -158,6 +155,10 @@ class Cars extends CI_Controller | |||||
| { | { | ||||
| $parms = $this->uri->uri_to_assoc(3); | $parms = $this->uri->uri_to_assoc(3); | ||||
| $parms['lpr'] = urldecode($parms['lpr']); // 中文車牌 | $parms['lpr'] = urldecode($parms['lpr']); // 中文車牌 | ||||
| // 載入 | |||||
| $this->load->model('cars_model'); | |||||
| $this->cars_model->init($this->vars); | |||||
| $this->cars_model->opendoor_lprio($parms); | $this->cars_model->opendoor_lprio($parms); | ||||
| $this->cars_model->stop(); | $this->cars_model->stop(); | ||||
| } | } | ||||
| @@ -188,7 +189,9 @@ http://192.168.10.201/cars.html/ipcam/sno/12119/ivsno/0/io/O/type/C/lpr/4750YC/c | |||||
| $parms['lpr'] = urldecode($parms['lpr']); // 中文車牌 | $parms['lpr'] = urldecode($parms['lpr']); // 中文車牌 | ||||
| // 同步並送出一次出入口 888 | // 同步並送出一次出入口 888 | ||||
| $this->sync_data_model->init($this->vars); | |||||
| $this->sync_data_model->sync_888($parms); | $this->sync_data_model->sync_888($parms); | ||||
| $this->sync_data_model->stop(); | |||||
| $pic_folder = CAR_PIC.$this->vars['date_num'].'/'; // 今日資料夾名(yyyymmdd) | $pic_folder = CAR_PIC.$this->vars['date_num'].'/'; // 今日資料夾名(yyyymmdd) | ||||
| if (!file_exists($pic_folder)) mkdir($pic_folder); // 如果資料夾不存在, 建立日期資料夾 | if (!file_exists($pic_folder)) mkdir($pic_folder); // 如果資料夾不存在, 建立日期資料夾 | ||||
| @@ -224,6 +227,9 @@ http://192.168.10.201/cars.html/ipcam/sno/12119/ivsno/0/io/O/type/C/lpr/4750YC/c | |||||
| $parms['curr_time_str'] = $this->vars['date_time']; // 現在時間, 例2015-09-21 15:36:47 | $parms['curr_time_str'] = $this->vars['date_time']; // 現在時間, 例2015-09-21 15:36:47 | ||||
| $parms['pic_name'] = $config['file_name']; // 圖片檔名 | $parms['pic_name'] = $config['file_name']; // 圖片檔名 | ||||
| // 載入 | |||||
| $this->load->model('cars_model'); | |||||
| $this->cars_model->init($this->vars); | |||||
| $this->cars_model->lprio($parms); // 測試eTag | $this->cars_model->lprio($parms); // 測試eTag | ||||
| $this->cars_model->stop(); | $this->cars_model->stop(); | ||||
| } | } | ||||
| @@ -234,10 +240,45 @@ http://192.168.10.201/cars.html/ipcam/sno/12119/ivsno/0/io/O/type/C/lpr/4750YC/c | |||||
| $lpr = $this->uri->segment(3); | $lpr = $this->uri->segment(3); | ||||
| $etag = $this->uri->segment(4); | $etag = $this->uri->segment(4); | ||||
| // 載入 | |||||
| $this->load->model('cars_model'); | |||||
| $this->cars_model->init($this->vars); | |||||
| $this->cars_model->check_lpr_etag($lpr, $etag); | $this->cars_model->check_lpr_etag($lpr, $etag); | ||||
| $this->cars_model->stop(); | $this->cars_model->stop(); | ||||
| exit; | exit; | ||||
| } | } | ||||
| // 開門 (臨停) | |||||
| public function temp_opendoors() | |||||
| { | |||||
| $parms['ivsno'] = $this->uri->segment(3); | |||||
| $parms['lpr'] = $this->uri->segment(4); | |||||
| $parms['ck'] = $this->uri->segment(5); | |||||
| // 載入 | |||||
| $this->load->model('cars_model'); | |||||
| $this->cars_model->init($this->vars); | |||||
| $this->cars_model->do_temp_opendoor($parms); | |||||
| $this->cars_model->stop(); | |||||
| exit; | |||||
| } | |||||
| // 開門 (臨停) | |||||
| public function member_opendoors() | |||||
| { | |||||
| $parms['ivsno'] = $this->uri->segment(3); | |||||
| $parms['lpr'] = $this->uri->segment(4); | |||||
| $parms['ck'] = $this->uri->segment(5); | |||||
| // 載入 | |||||
| $this->load->model('cars_model'); | |||||
| $this->cars_model->init($this->vars); | |||||
| $this->cars_model->do_member_opendoor($parms); | |||||
| $this->cars_model->stop(); | |||||
| exit; | |||||
| } | |||||
| public function test_now() | public function test_now() | ||||
| { | { | ||||
| @@ -21,6 +21,8 @@ method: POST | |||||
| 上傳圖檔欄位名稱為cars | 上傳圖檔欄位名稱為cars | ||||
| */ | */ | ||||
| require_once(MQ_CLASS_FILE); | |||||
| class Pks extends CI_Controller | class Pks extends CI_Controller | ||||
| { | { | ||||
| var $vars = array(); // 共用變數 | var $vars = array(); // 共用變數 | ||||
| @@ -3,7 +3,6 @@ | |||||
| file: cars_model.php | file: cars_model.php | ||||
| */ | */ | ||||
| require_once(ALTOB_SYNC_FILE) ; | require_once(ALTOB_SYNC_FILE) ; | ||||
| require_once(MQ_CLASS_FILE); | |||||
| define('CARS_TMP_LOG', 'cars_tmp_log'); // 暫存進出車號 | define('CARS_TMP_LOG', 'cars_tmp_log'); // 暫存進出車號 | ||||
| @@ -27,12 +26,16 @@ class Cars_model extends CI_Model | |||||
| if(isset($this->vars['mqtt_ip']) && isset($this->vars['mqtt_port'])) | if(isset($this->vars['mqtt_ip']) && isset($this->vars['mqtt_port'])) | ||||
| { | { | ||||
| // 一般 | |||||
| $this->vars['mqtt'] = new phpMQTT($this->vars['mqtt_ip'], $this->vars['mqtt_port'], uniqid(). 'mqtt'); | |||||
| $this->vars['mqtt']->connect(); | |||||
| // 開門專用 | |||||
| $this->vars['mqtt_opendoor'] = new phpMQTT($this->vars['mqtt_ip'], $this->vars['mqtt_port'], uniqid() . 'mqtt_opendoor'); | |||||
| $this->vars['mqtt_opendoor']->connect(); | |||||
| $this->vars['mqtt'] = new phpMQTT($this->vars['mqtt_ip'], $this->vars['mqtt_port'], uniqid()); | |||||
| if(!$this->vars['mqtt']->connect()) | |||||
| { | |||||
| trigger_error(__FUNCTION__ . '..mqtt fail..' . "{$this->vars['mqtt_ip']}:{$this->vars['mqtt_port']}"); | |||||
| } | |||||
| } | |||||
| else | |||||
| { | |||||
| trigger_error(__FUNCTION__ . '..mqtt ip, port not found..'); | |||||
| } | } | ||||
| } | } | ||||
| @@ -43,72 +46,43 @@ class Cars_model extends CI_Model | |||||
| { | { | ||||
| $this->vars['mqtt']->close(); | $this->vars['mqtt']->close(); | ||||
| } | } | ||||
| if(isset($this->vars['mqtt_opendoor'])) | |||||
| { | |||||
| $this->vars['mqtt_opendoor']->close(); | |||||
| } | |||||
| } | } | ||||
| // 車輛進出傳入車牌號碼 (2016/07/27) | |||||
| // 開門, 字幕 | |||||
| public function opendoor_lprio($parms) | public function opendoor_lprio($parms) | ||||
| { | { | ||||
| $parms['lpr'] = urldecode($parms['lpr']); | $parms['lpr'] = urldecode($parms['lpr']); | ||||
| $rows = array(); | |||||
| // $parms['ts'] = date('Y-m-d H:i:s', $parms['ts']); | |||||
| trigger_error(__FUNCTION__ . '|車牌傳入:' . print_r($parms, true)); | |||||
| if ($parms['etag'] != 'NONE') | |||||
| { | |||||
| if ($parms['lpr'] != 'NONE') | |||||
| { | |||||
| // do nothing | |||||
| } | |||||
| else // 車辨失敗但有eTag, 查詢是否有車號 | |||||
| { | |||||
| //$parms['lpr'] = $this->etag2lpr_2($parms['etag']); // 2017/01/10 預設都不用 ETAG 找車牌 | |||||
| } | |||||
| } | |||||
| trigger_error(__FUNCTION__ . '|車牌傳入 [開門]:' . print_r($parms, true)); | |||||
| $rows = $this->get_member($parms['lpr']); | $rows = $this->get_member($parms['lpr']); | ||||
| $this->save_db_io($parms, $rows, true); | |||||
| $this->save_db_io($parms, $rows, true); // 開門, 字幕 | |||||
| return true; | return true; | ||||
| } | } | ||||
| // 車輛進出傳入車牌號碼 | |||||
| // 資料 | |||||
| public function lprio($parms) | public function lprio($parms) | ||||
| { | { | ||||
| //$parms['lpr'] = urldecode($parms['lpr']); | |||||
| $parms['lpr'] = urldecode($parms['lpr']); | |||||
| $rows = array(); | |||||
| // $parms['ts'] = date('Y-m-d H:i:s', $parms['ts']); | |||||
| trigger_error('車牌傳入:' . print_r($parms, true)); | |||||
| trigger_error(__FUNCTION__ . '車牌傳入 [資料]:' . print_r($parms, true)); | |||||
| if ($parms['etag'] != 'NONE') | if ($parms['etag'] != 'NONE') | ||||
| { | { | ||||
| if ($parms['lpr'] != 'NONE') | if ($parms['lpr'] != 'NONE') | ||||
| { | { | ||||
| // 有車牌有eTag, 檢查資料庫是否double驗證 | |||||
| //get_headers("http://192.168.10.201/cars.html/check_lpr_etag/{$parms['lpr']}/{$parms['etag']}"); | |||||
| get_headers("http://localhost/cars.html/check_lpr_etag/{$parms['lpr']}/{$parms['etag']}"); // update 2016/07/26 | |||||
| } | |||||
| else // 車辨失敗但有eTag, 查詢是否有車號 | |||||
| { | |||||
| // $parms['lpr'] = $this->etag2lpr_2($parms['etag']); // 2017/01/10 預設都不用 ETAG 找車牌 | |||||
| get_headers("http://localhost/cars.html/check_lpr_etag/{$parms['lpr']}/{$parms['etag']}"); | |||||
| } | } | ||||
| } | } | ||||
| $rows = $this->get_member($parms['lpr']); | $rows = $this->get_member($parms['lpr']); | ||||
| $this->save_db_io($parms, $rows); | |||||
| $this->save_db_io($parms, $rows); // 資料 | |||||
| return true; | return true; | ||||
| } | } | ||||
| // 入出口異動cario | // 入出口異動cario | ||||
| public function save_db_io($parms, $rows, $opendoor=false) | |||||
| function save_db_io($parms, $rows, $opendoor=false) | |||||
| { | { | ||||
| if (!empty($rows['lpr_correct'])) $parms['lpr'] = $rows['lpr_correct']; | if (!empty($rows['lpr_correct'])) $parms['lpr'] = $rows['lpr_correct']; | ||||
| @@ -1173,32 +1147,59 @@ class Cars_model extends CI_Model | |||||
| // 送出至message queue(目前用mqtt) | // 送出至message queue(目前用mqtt) | ||||
| public function mq_send($topic, $msg) | |||||
| function mq_send($topic, $msg) | |||||
| { | { | ||||
| $this->vars['mqtt']->publish($topic, $msg, 0); | $this->vars['mqtt']->publish($topic, $msg, 0); | ||||
| trigger_error("mqtt:{$topic}|{$msg}"); | trigger_error("mqtt:{$topic}|{$msg}"); | ||||
| } | } | ||||
| // 開門專用 | |||||
| public function mq_send_opendoor($topic, $msg) | |||||
| // 產生 CK | |||||
| public function gen_opendoor_ck($parms) | |||||
| { | { | ||||
| $this->vars['mqtt_opendoor']->publish($topic, $msg, 0); | |||||
| trigger_error("mqtt_opendoor:{$topic}|{$msg}"); | |||||
| } | |||||
| return md5($parms['ivsno']. 'alt' . date('dmh') . 'ob' . $parms['lpr']); | |||||
| } | |||||
| // 開門 (月租) | // 開門 (月租) | ||||
| public function member_opendoors($parms) | public function member_opendoors($parms) | ||||
| { | { | ||||
| $this->mq_send_opendoor(MQ_TOPIC_OPEN_DOOR, "DO{$parms['ivsno']},OPEN,{$parms['lpr']}"); | |||||
| //$this->mq_send_opendoor(MQ_TOPIC_OPEN_DOOR, "DO{$parms['ivsno']},OPEN,{$parms['lpr']}"); | |||||
| $ck = $this->gen_opendoor_ck($parms); | |||||
| get_headers("http://localhost/cars.html/member_opendoors/{$parms['ivsno']}/{$parms['lpr']}/{$ck}"); | |||||
| return true; | return true; | ||||
| } | } | ||||
| // 開門 (臨停) | // 開門 (臨停) | ||||
| public function temp_opendoors($parms) | public function temp_opendoors($parms) | ||||
| { | { | ||||
| $this->mq_send_opendoor(MQ_TOPIC_OPEN_DOOR, "DO{$parms['ivsno']},TICKET,{$parms['lpr']}"); | |||||
| //$this->mq_send_opendoor(MQ_TOPIC_OPEN_DOOR, "DO{$parms['ivsno']},TICKET,{$parms['lpr']}"); | |||||
| $ck = $this->gen_opendoor_ck($parms); | |||||
| get_headers("http://localhost/cars.html/temp_opendoors/{$parms['ivsno']}/{$parms['lpr']}/{$ck}"); | |||||
| return true; | return true; | ||||
| } | } | ||||
| // 開門 (月租) | |||||
| public function do_member_opendoor($parms) | |||||
| { | |||||
| if($parms['ck'] != $this->cars_model->gen_opendoor_ck($parms)) | |||||
| { | |||||
| return 'ck_error'; // 中斷 | |||||
| } | |||||
| $this->mq_send(MQ_TOPIC_OPEN_DOOR, "DO{$parms['ivsno']},OPEN,{$parms['lpr']}"); | |||||
| return 'ok'; | |||||
| } | |||||
| // 開門 (臨停) | |||||
| public function do_temp_opendoor($parms) | |||||
| { | |||||
| if($parms['ck'] != $this->cars_model->gen_opendoor_ck($parms)) | |||||
| { | |||||
| return 'ck_error'; // 中斷 | |||||
| } | |||||
| $this->mq_send(MQ_TOPIC_OPEN_DOOR, "DO{$parms['ivsno']},TICKET,{$parms['lpr']}"); | |||||
| return 'ok'; | |||||
| } | |||||
| // 指派車位 | // 指派車位 | ||||
| @@ -3,8 +3,6 @@ | |||||
| file: pks_model.php 車位在席資料庫處理模組 | file: pks_model.php 車位在席資料庫處理模組 | ||||
| */ | */ | ||||
| require_once(MQ_CLASS_FILE); | |||||
| class Pks_model extends CI_Model | class Pks_model extends CI_Model | ||||
| { | { | ||||
| var $vars = array(); | var $vars = array(); | ||||
| @@ -23,7 +21,15 @@ class Pks_model extends CI_Model | |||||
| { | { | ||||
| // 一般 | // 一般 | ||||
| $this->vars['mqtt'] = new phpMQTT($this->vars['mqtt_ip'], $this->vars['mqtt_port'], uniqid(). 'mqtt'); | $this->vars['mqtt'] = new phpMQTT($this->vars['mqtt_ip'], $this->vars['mqtt_port'], uniqid(). 'mqtt'); | ||||
| $this->vars['mqtt']->connect(); | |||||
| if(!$this->vars['mqtt']->connect()) | |||||
| { | |||||
| trigger_error(__FUNCTION__ . '..mqtt connect fail..' . "{$this->vars['mqtt_ip']}:{$this->vars['mqtt_port']}"); | |||||
| } | |||||
| } | |||||
| else | |||||
| { | |||||
| trigger_error(__FUNCTION__ . '..mqtt ip, port not found..'); | |||||
| } | } | ||||
| } | } | ||||
| @@ -23,6 +23,22 @@ class Sync_data_model extends CI_Model | |||||
| public function init($vars) | public function init($vars) | ||||
| { | { | ||||
| $this->vars = $vars; | $this->vars = $vars; | ||||
| // 一般 | |||||
| if(isset($this->vars['mqtt_ip']) && isset($this->vars['mqtt_port'])) | |||||
| { | |||||
| $this->vars['mqtt'] = new phpMQTT($this->vars['mqtt_ip'], $this->vars['mqtt_port'], uniqid(). 'mqtt'); | |||||
| if(!$this->vars['mqtt']->connect()) | |||||
| { | |||||
| trigger_error(__FUNCTION__ . '..mqtt connect fail..' . "{$this->vars['mqtt_ip']}:{$this->vars['mqtt_port']}"); | |||||
| } | |||||
| } | |||||
| else | |||||
| { | |||||
| trigger_error(__FUNCTION__ . '..mqtt ip, port not found..'); | |||||
| } | |||||
| } | } | ||||
| // 結束 | // 結束 | ||||
| @@ -31,6 +47,7 @@ class Sync_data_model extends CI_Model | |||||
| if(isset($this->vars['mqtt'])) | if(isset($this->vars['mqtt'])) | ||||
| { | { | ||||
| $this->vars['mqtt']->close(); | $this->vars['mqtt']->close(); | ||||
| trigger_error(__FUNCTION__ . '..mqtt close..' . "{$this->vars['mqtt_ip']}:{$this->vars['mqtt_port']}"); | |||||
| } | } | ||||
| } | } | ||||