let baja_subscribe_device_callback_func; //設定BQL訂閱之後要回傳的Function var ordPath; //當前點選選單的tag,用來抓出設備路徑,例如:旅館棟->H,消防偵煙器->F3 window.tolSubList = []; function subscriptionDevices() { // 用BQL的方式去訂閱 this.setSubscribeDevicesByBql = function (tempOrdPath) { ordPath = tempOrdPath; BajaSubscribeDevicesByBql(); }; // BQL去訂閱回傳的Function this.setSubscribeDevicesCallBack = function (callBackFunc) { if (callBackFunc != undefined && callBackFunc != null) { baja_subscribe_device_callback_func = callBackFunc; } } } /** * 使用者透過BQL指定路徑去訂閱設備點位 */ function BajaSubscribeDevicesByBql() { require(['baja!'], function (baja) { console.log("進入Function 準備執行BQL訂閱"); var init_start = new Date(Date.now()); var sub = new baja.Subscriber(); sub.attach('changed', function (prop) { if (prop.getName() === 'out') { var out_value = this.getOutDisplay(); var target_device_number = this.$parent.getDisplayName().split('_').slice(0, 5).join('_'); var point_name = this.getDisplayName(); //依據Facets判斷回傳的內容值為何 var facets_split = this.getFacets1().$cEncStr.split('|'); var facets_arr = []; facets_split.forEach(function (item, index) { facets_arr.push(item.split('=s:')); }); var facets = facets_arr.reduce((obj, cur) => ({ ...obj, [cur[0]]: cur[1] }), {}) var point_out_split = this.getOutDisplay().split(' '); let key = Object.keys(facets).find(k => facets[k] === point_out_split[0]); if (key == undefined) { key = point_out_split[0]; } var modify_target_device = { "device_number": target_device_number ? target_device_number : null, "point_name": point_name ? point_name : null, "value": key } if (baja_subscribe_device_callback_func != undefined && baja_subscribe_device_callback_func != null) { baja_subscribe_device_callback_func(modify_target_device, true); //第2參數用在平面圖,刷新畫面 } } }, function (err) { console.log(err) }); //使用bql語法 // var building_tag = "H"; // var system_tag = "M10"; // baja.Ord.make(`ip:greencloud.fic.com.tw|foxs:|station:|slot:/Arena/${building_tag}/${system_tag}|bql:select name, displayname, slotPath, out.value, out from control:ControlPoint`) console.log(`local:|foxs:|station:|slot:/TPE/${ordPath.building_tag}/${ordPath.system_tag}/${ordPath.name_tag}|bql:select name, displayname, slotPath, out.value, out, facets from control:ControlPoint`); baja.Ord.make(`local:|foxs:|station:|slot:/TPE/${ordPath.building_tag}/${ordPath.system_tag}/${ordPath.name_tag}|bql:select name, displayname, slotPath, out.value, out, facets from control:ControlPoint`) .get( function (table) { var tableStart, tableFinish; var subStart, subFinish; var component_index = 0; var total_component_index = 0; var readBqlFinish = new Date(Date.now()); // $("#readPath-finish-timestamp").html(readBqlFinish.toISOString()); // $("#readPath-finish-time").html((readBqlFinish.getTime() - init_start.getTime()) / 1000 + "sec"); console.log("讀取路徑完成-花費時間", (readBqlFinish.getTime() - init_start.getTime()) / 1000 + "sec"); table.cursor({ before: function () { tableStart = new Date(Date.now()); $("#table-start-timestamp").html(tableStart.toISOString()); render_start = new Date(Date.now()); }, each: function (item, index) { if (index < 1) { subStart = new Date(Date.now()); $("#sub-start").html(subStart.toISOString()); } $("#sub-number").html(index + 1); total_component_index = index; var target_device_number_split = this.getDisplay("slotPath").split('/'); var target_device_number = target_device_number_split[target_device_number_split.length - 2]; //console.log(target_device_number); var point_name = this.getDisplay("name"); var facets = this.getDisplay("facets"); //依據Facets判斷回傳的內容值為何 var facets_split = facets.split(','); var facets_arr = []; facets_split.forEach(function (item, index) { facets_arr.push(item.split('=')); }); facets = facets_arr.reduce((obj, cur) => ({ ...obj, [cur[0]]: cur[1] }), {}) var point_out_split = this.getDisplay("out").split(' '); let key = Object.keys(facets).find(k => facets[k] === point_out_split[0]); if (key == undefined) { key = point_out_split[0]; } var modify_target_device = { "device_number": target_device_number ? target_device_number : null, "point_name": point_name ? point_name : null, "value": key } //取得component當下就更新設備點位 if (baja_subscribe_device_callback_func != undefined && baja_subscribe_device_callback_func != null) { baja_subscribe_device_callback_func(modify_target_device); } baja.Ord.make("local:|foxs:|station:|" + this.getDisplay("slotPath")) .get() .then(function (component) { component_index++; var target_device_number = component.$parent.getDisplayName().split('_').slice(0, 5).join('_'); var point_name = component.getDisplayName(); // //依據Facets判斷回傳的內容值為何 // var facets_split = component.getFacets1().$cEncStr.split('|'); // var facets_arr = []; // facets_split.forEach(function (item, index) { // facets_arr.push(item.split('=s:')); // }); // var facets = facets_arr.reduce((obj, cur) => ({ ...obj, [cur[0]]: cur[1] }), {}) // var point_out_split = component.getOutDisplay().split(' '); // let key = Object.keys(facets).find(k => facets[k] === point_out_split[0]); // if (key == undefined) { // key = point_out_split[0]; // } // var modify_target_device = { // "device_number": target_device_number ? target_device_number : null, // "point_name": point_name ? point_name : null, // "value": key // } // //取得component當下就更新設備點位 // if (baja_subscribe_device_callback_func != undefined && baja_subscribe_device_callback_func != null) { // if (component_index == total_component_index) { // baja_subscribe_device_callback_func(modify_target_device, true); // } // else { // baja_subscribe_device_callback_func(modify_target_device); // } // } sub.subscribe({ comps: component, }); tolSubList.push(sub); subFinish = new Date(Date.now()); $("#sub-end").html(subFinish.toISOString()); $("#sub-time").html((subFinish.getTime() - subStart.getTime()) / 1000 + "sec"); // console.log("訂閱完成時間", (subFinish.getTime() - subStart.getTime()) / 1000 + "sec"); }); }, after: function () { tableFinish = new Date(Date.now()); // $("#table-finish-timestamp").html(tableFinish.toISOString()); // $("#table-time").html((tableFinish.getTime() - tableStart.getTime()) / 1000 + "sec"); console.log("表格完成時間", (tableFinish.getTime() - tableStart.getTime()) / 1000 + "sec"); }, limit: -1, offset: 0 }); }); }); } function getElevatorInfoByBaja(path, callback) { var _result = ""; var _ss = '{'; var _index = 0; // require(['baja!'], function (baja) { baja.Ord.make("local:|foxs:|station:|slot:/TPE/B1/ELEV/EL/R2F/NA/ELEV1/N1|bql:select name, displayName, out, out.value, slotPath, parent.name as 'device_number' from control:ControlPoint where name = 'CP' or name = 'RD' or name = 'DS' or name = 'ST' or name = 'LOAD' or name = 'MID' or name = 'HAND' or name = 'IND' or name = 'MD' or name = 'DNO'").get() .then(function (table) { return table.cursor({ each: function (record) { var item = null; var value = null; if (record.get('name') == "CP") { item = "floor"; value = record.get('out').get('value'); } else if (record.get('name') == "RD") { //UP or DOWN item = "direction"; value = record.get('out').get('value'); } else if (record.get('name') == "DS") { item = "door_state"; value = record.get('out').get('value') == true ? "OPEN" : "CLOSE";; } else if (record.get('name') == "ST") { item = "running_status"; value = record.get('out').get('value'); } else if (record.get('name') == "LOAD") { item = "loading"; value = record.get('out').get('value'); } else if (record.get('name') == "MID") { item = "maintenance"; value = record.get('out').get('value'); } else if (record.get('name') == "HAND") { item = "manual"; value = record.get('out').get('value'); } else if (record.get('name') == "IND") { item = "independent"; value = record.get('out').get('value'); } else if (record.get('name') == "MD") { item = "vip"; value = record.get('out').get('value'); } else if (record.get('name') == "DNO") { item = "automatic"; value = record.get('out').get('value'); } if (item != null && item != "") { if (_index == 0) _ss += '{"item":"' + item + '", "value":"' + value + '"}'; else _ss += ',{"item":"' + item + '", "value":"' + value + '"}'; _index++; } }, after: function () { _result += '{' + '"count": ' + _index + ', "data":['; _result += _ss; _result += ']}'; if (typeof callback === 'function') { callback(_result); } } }); }); }); } // baja.Ord.make('ip:greencloud.fic.com.tw|foxs:|station:|slot:/Arena/H/F3|bql:select name, displayname, slotPath, out.value, out from control:ControlPoint') // // baja.Ord.make('ip:greencloud.fic.com.tw|foxs:|station:|slot:/Arena/H/E1/B1F/TestData/H_E1_B1F_TestData_Data|bql:select slotPath,out.value from control:NumericWritable') // .get( // function (table) { // var tableStart, tableFinish; // var subStart, subFinish; // var readBqlFinish = new Date(Date.now()); // $("#readPath-finish-timestamp").html(readBqlFinish.toISOString()); // $("#readPath-finish-time").html((readBqlFinish.getTime() - init_start.getTime()) / 1000 + "sec"); // table.cursor({ // before: function () { // tableStart = new Date(Date.now()); // $("#table-start-timestamp").html(tableStart.toISOString()); // subStart = new Date(Date.now()); // $("#sub-start-timestamp").html(subStart.toISOString()); // render_start = new Date(Date.now()); // }, // each: function (item, index) { // // console.log("local:|foxs:|station:|" + this.getDisplay("slotPath")); // baja.Ord.make("local:|foxs:|station:|" + this.getDisplay("slotPath")) // .get() // .then(function (component) { // //紀錄 未render前花費約5秒 // $("#render-points").append(` //