| @@ -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'; | |||
| @@ -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() | |||
| { | |||
| @@ -21,6 +21,8 @@ method: POST | |||
| 上傳圖檔欄位名稱為cars | |||
| */ | |||
| require_once(MQ_CLASS_FILE); | |||
| class Pks extends CI_Controller | |||
| { | |||
| var $vars = array(); // 共用變數 | |||
| @@ -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'; | |||
| } | |||
| // 指派車位 | |||
| @@ -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..'); | |||
| } | |||
| } | |||
| @@ -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']}"); | |||
| } | |||
| } | |||