diff --git a/controllers/Carpark.php b/controllers/Carpark.php index 9bd533a..e103b60 100644 --- a/controllers/Carpark.php +++ b/controllers/Carpark.php @@ -17,6 +17,8 @@ define('WEB_LIB', SERVER_URL.'libs/'); // 網頁lib define('BOOTSTRAPS', WEB_LIB.'bootstrap_sb/'); // bootstrap lib define('LOG_PATH', FILE_BASE.APP_NAME.'/logs/'); // log path +require_once(MQ_CLASS_FILE); + class Carpark extends CI_Controller { 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; $this->vars['mqtt_ip'] = $mqtt_ip; $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 報表 $this->load->model('excel_model'); @@ -252,13 +256,18 @@ class Carpark extends CI_Controller // 判斷會員身份 $rows = $this->cars_model->get_member($lpr); + // 取得 ck + $parms['ck'] = $this->cars_model->gen_opendoor_ck($parms); + 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 { - $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(); echo 'ok'; diff --git a/controllers/Cars.php b/controllers/Cars.php index 8b64199..486f29d 100644 --- a/controllers/Cars.php +++ b/controllers/Cars.php @@ -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_FILE', FILE_BASE.APP_NAME.'/logs/cario.'); // log file name +require_once(MQ_CLASS_FILE); + class Cars extends CI_Controller { 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; $this->vars['mqtt_ip'] = $mqtt_ip; $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['lpr'] = urldecode($parms['lpr']); // 中文車牌 + + // 載入 + $this->load->model('cars_model'); + $this->cars_model->init($this->vars); $this->cars_model->opendoor_lprio($parms); $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']); // 中文車牌 // 同步並送出一次出入口 888 + $this->sync_data_model->init($this->vars); $this->sync_data_model->sync_888($parms); + $this->sync_data_model->stop(); $pic_folder = CAR_PIC.$this->vars['date_num'].'/'; // 今日資料夾名(yyyymmdd) 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['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->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); $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->stop(); 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() { diff --git a/controllers/Pks.php b/controllers/Pks.php index c346ede..1f762e1 100644 --- a/controllers/Pks.php +++ b/controllers/Pks.php @@ -21,6 +21,8 @@ method: POST 上傳圖檔欄位名稱為cars */ +require_once(MQ_CLASS_FILE); + class Pks extends CI_Controller { var $vars = array(); // 共用變數 diff --git a/models/Cars_model.php b/models/Cars_model.php index e5269a8..f10bee5 100644 --- a/models/Cars_model.php +++ b/models/Cars_model.php @@ -3,7 +3,6 @@ file: cars_model.php */ require_once(ALTOB_SYNC_FILE) ; -require_once(MQ_CLASS_FILE); 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'])) { - // 一般 - $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(); } - - if(isset($this->vars['mqtt_opendoor'])) - { - $this->vars['mqtt_opendoor']->close(); - } } - // 車輛進出傳入車牌號碼 (2016/07/27) + // 開門, 字幕 public function opendoor_lprio($parms) { $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']); - $this->save_db_io($parms, $rows, true); + $this->save_db_io($parms, $rows, true); // 開門, 字幕 return true; } - - // 車輛進出傳入車牌號碼 + + // 資料 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['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']); - $this->save_db_io($parms, $rows); + $this->save_db_io($parms, $rows); // 資料 return true; } - // 入出口異動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']; @@ -1173,32 +1147,59 @@ class Cars_model extends CI_Model // 送出至message queue(目前用mqtt) - public function mq_send($topic, $msg) + function mq_send($topic, $msg) { $this->vars['mqtt']->publish($topic, $msg, 0); 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) { - $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; } // 開門 (臨停) 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; } + + // 開門 (月租) + 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'; + } // 指派車位 diff --git a/models/Pks_model.php b/models/Pks_model.php index 285c069..83b442d 100644 --- a/models/Pks_model.php +++ b/models/Pks_model.php @@ -3,8 +3,6 @@ file: pks_model.php 車位在席資料庫處理模組 */ -require_once(MQ_CLASS_FILE); - class Pks_model extends CI_Model { 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']->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..'); } } diff --git a/models/Sync_data_model.php b/models/Sync_data_model.php index 9bb53f2..eaccf57 100644 --- a/models/Sync_data_model.php +++ b/models/Sync_data_model.php @@ -23,6 +23,22 @@ class Sync_data_model extends CI_Model public function init($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'])) { $this->vars['mqtt']->close(); + trigger_error(__FUNCTION__ . '..mqtt close..' . "{$this->vars['mqtt_ip']}:{$this->vars['mqtt_port']}"); } }