/* This code snippet is taken from from the 'gettingStarted' BajaScript tutorial. More information can be found by navigating to this ORD... module://docDeveloper/doc/jsdoc/bajaux-ux/tutorial-gettingStarted.html */ let baja_my_user_account_func, //設定使用者帳號 baja_prepare_specify_subscribe_devices = [], //設定要指定訂閱的設備 baja_all_emergency_devices = [], //所有緊急應變的設備 baja_emergency_alarm_func, //設定回傳的緊急應變設備編號Function baja_target_func; //設定回傳指定訂閱設備編號Function var baja_specify_alarm_device_number = []; //要回傳的異常設備 var baja_emergency_alarm_device_number = []; //要回傳的緊急應變的異常設備 function MyBaja() { this.setMyUserAccount = function (callBackFunc) { if (callBackFunc != undefined && callBackFunc != null) { baja_my_user_account_func = callBackFunc; } } //設定使用者傳入的設備 this.setPrepareSubscribeDevices = function (devices) { baja_prepare_specify_subscribe_devices = devices; BajaSpecifySubscribeDevices(); //執行訂閱設備 }; //設定要回傳緊急應變的Function this.setEmergencyCallBack = function (callBackFunc) { if (callBackFunc != undefined && callBackFunc != null) { baja_emergency_alarm_func = callBackFunc; } } //設定使用者傳入的Function this.setCallBack = function (callBackFunc) { if (callBackFunc != undefined && callBackFunc != null) { baja_target_func = callBackFunc; } }; //設定設備開關 this.setSSC = function (device) { SetDeviceSSCPoint(device) } } /*===================== * 取得使用者account - start ======================*/ require(['baja!'], function (baja) { var user_name = baja.getUserName(); if (baja_my_user_account_func != undefined && baja_my_user_account_func != null) { baja_my_user_account_func(user_name); } }); /*===================== * 取得使用者account - end ======================*/ /*===================== * 使用者指定要訂閱的設備 - start ======================*/ //更新使用者訂閱設備 function update_baja_specify_alarm_device_number(point) { var target_device_number = point.$parent.getDisplayName().split('_').slice(0, 5).join('_'); var point_name = point.getDisplayName() // console.log("target_device_number", target_device_number) // console.log(point.getOutDisplay()); var facets_split = point.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 = point.getOutDisplay().split(' '); let key = Object.keys(facets).find(k => facets[k] === point_out_split[0]); //判斷設備是否已存在 var index = baja_specify_alarm_device_number.findIndex(x => x.device_number == target_device_number) if (index < 0) { //設備不存在則新增 baja_specify_alarm_device_number.push( { device_number: target_device_number, points: {}, // finish: 1, // alarm_timestamp: str_date }); //新增點位 if (key != undefined && key != null && point_name != "ER") { var mypoint = { [point_name]: key } } else { var mypoint = { [point_name]: point_out_split[0] } } var renew_index = baja_specify_alarm_device_number.findIndex(x => x.device_number == target_device_number) baja_specify_alarm_device_number[renew_index].points = mypoint; } else { //設備存在則修改 //判斷點位是否存在 var point_key = Object.keys(baja_specify_alarm_device_number[index].points).find(k => k === point_name); if (point_key != undefined && point_key != null && point_name != "ER") { baja_specify_alarm_device_number[index].points[point_key] = key } else { baja_specify_alarm_device_number[index].points[point_name] = point_out_split[0] } } } function BajaSpecifySubscribeDevices() { require(['baja!'], function (baja) { var sub = new baja.Subscriber(); sub.attach('changed', function (prop) { // console.log("sub changed", prop) if (prop.getName() === 'out') { // console.log(`變更的項目${this.getDisplayName()}`, this); update_baja_specify_alarm_device_number(this) } //執行使用者傳入的function if (baja_target_func != undefined && baja_target_func != null) { baja_target_func(baja_specify_alarm_device_number); } }); baja_prepare_specify_subscribe_devices.forEach(function (device, index) { var device_number_split = device.device_number.split("_"); device_number_split = device_number_split.map(function (item) { var first = item.substr(0, 1); if (!isNaN(parseInt(first))) { return "$3" + item; } else { return item; } }); /** * 針對傳入設備抓取點位 */ baja.Ord.make("local:|foxs:|station:|slot:/Arena/" + device_number_split.slice(0, 4).join("/") + "/" + device.device_number) .get() .then(function (folder) { folder.getSlots().isComponent().eachValue(function (point) { var target_device_number = point.$parent.getDisplayName().split('_').slice(0, 5).join('_'); var point_name = point.getDisplayName() // console.log("target_device_number", target_device_number) // console.log(point.getOutDisplay()); var facets_split = point.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 = point.getOutDisplay().split(' '); let key = Object.keys(facets).find(k => facets[k] === point_out_split[0]); //判斷設備是否已存在 var index = baja_specify_alarm_device_number.findIndex(x => x.device_number == target_device_number) if (index < 0) { //設備不存在則新增 baja_specify_alarm_device_number.push( { device_number: target_device_number, points: {}, // finish: 1, // alarm_timestamp: str_date }); //新增點位 if (key != undefined && key != null && point_name != "ER") { var mypoint = { [point_name]: key } } else { var mypoint = { [point_name]: point_out_split[0] } } var renew_index = baja_specify_alarm_device_number.findIndex(x => x.device_number == target_device_number) baja_specify_alarm_device_number[renew_index].points = mypoint; } else { //設備存在則修改 //判斷點位是否存在 var point_key = Object.keys(baja_specify_alarm_device_number[index].points).find(k => k === point_name); if (point_key != undefined && point_key != null) { baja_specify_alarm_device_number[index].points[point_key] = key } else { baja_specify_alarm_device_number[index].points[point_name] = point_out_split[0] } } sub.subscribe({ comps: point, }); }); }); return }); }); } /*===================== * 使用者指定要訂閱的設備 - end ======================*/ /*===================== * 使用者針對設備開關 - start ======================*/ function SetDeviceSSCPoint(device) { require(['baja!'], function (baja) { var sub = new baja.Subscriber(); var device_number_split = device.device_number.split("_"); device_number_split = device_number_split.map(function (item) { var first = item.substr(0, 1); if (!isNaN(parseInt(first))) { return "$3" + item; } else { return item; } }); /** * 針對傳入設備抓取點位 */ baja.Ord.make("local:|foxs:|station:|slot:/Arena/" + device_number_split.slice(0, 4).join("/") + "/" + device.device_number) .get() .then(function (folder) { folder.getSlots().isComponent().eachValue(function (point) { if (point.getDisplayName() == "SSC") { sub.subscribe({ comps: point, }); point.set1({ value: device.SSC }) sub.unsubscribeAll(); sub.detach(); } }); }); }); } /*===================== * 使用者針對設備開關 - end ======================*/ /*===================== * 訂閱緊急應變的設備 - start ======================*/ function update_baja_emergency_alarm_device_number(point) { var target_device_number = point.$parent.getDisplayName().split('_').slice(0, 5).join('_'); var arr_point_alarm = point.getOutDisplay().split(' '); var temp = baja_all_emergency_devices.filter(function (item, index) { return item.device_number == target_device_number; }); if (temp[0].facets != undefined || temp[0].facets != null) { let key = Object.keys(temp[0].facets).find(k => temp[0].facets[k] === arr_point_alarm[0]); date = new Date(); str_date = date.getFullYear() + "-" + ("0" + (date.getMonth() + 1)).slice(-2) + "-" + ("0" + date.getDate()).slice(-2) + " " + ("0" + date.getHours()).slice(-2) + ":" + ("0" + date.getMinutes()).slice(-2) + ":" + ("0" + date.getSeconds()).slice(-2) if (/true/.test(key)) { if (baja_emergency_alarm_device_number.findIndex(x => x.device_number == target_device_number) < 0) { baja_emergency_alarm_device_number.push({ device_number: target_device_number, finish: 1, alarm_timestamp: str_date }); } } else if (/false/.test(key)) { var index = baja_emergency_alarm_device_number.findIndex(x => x.device_number == target_device_number) if (index >= 0) { baja_emergency_alarm_device_number.splice(index, 1); } } } } require(['baja!'], function (baja) { var sub = new baja.Subscriber(); sub.attach('changed', function (prop) { if (prop.getName() === 'out') { update_baja_emergency_alarm_device_number(this); } //執行使用者傳入的function baja_emergency_alarm_func(baja_emergency_alarm_device_number); }); baja.Ord.make("local:|foxs:|station:|slot:/Arena|bql:select * from kitControl:Or where name like '%ER%' AND slotPath like '%H_B_B5F_2A%'") // baja.Ord.make("local:|foxs:|station:|slot:/Arena|bql:select * from kitControl:Or where name like '%ER%'") .get({ cursor: { before: function () { }, each: function (item, index) { // console.log("SlotPath", this.getDisplay("slotPath")); baja.Ord.make("local:|foxs:|station:|" + this.getDisplay("slotPath")) .get() .then(function (component) { // console.log("component", component); var target_device_number = component.$parent.getDisplayName().split('_').slice(0, 5).join('_'); var facets_split = component.getFacets1().$cEncStr.split('|'); var facets_arr = []; facets_split.forEach(function (item, index) { facets_arr.push(item.split('=s:')); }); // console.log(component.$parent.getOutDisplay()); var emergency_device = { device_number: target_device_number, facets: facets_arr.reduce((obj, cur) => ({ ...obj, [cur[0]]: cur[1] }), {}) } baja_all_emergency_devices.push(emergency_device) sub.subscribe({ comps: component, }); //初始判斷是否有發生alarm var arr_point_alarm = component.getOutDisplay().split(' '); let key = Object.keys(emergency_device.facets).find(k => emergency_device.facets[k] === arr_point_alarm[0]); date = new Date(); str_date = date.getFullYear() + "-" + ("0" + (date.getMonth() + 1)).slice(-2) + "-" + ("0" + date.getDate()).slice(-2) + " " + ("0" + date.getHours()).slice(-2) + ":" + ("0" + date.getMinutes()).slice(-2) + ":" + ("0" + date.getSeconds()).slice(-2) if (/true/.test(key)) { if (baja_emergency_alarm_device_number.findIndex(x => x.device_number == emergency_device.device_number) < 0) { baja_emergency_alarm_device_number.push({ device_number: emergency_device.device_number, finish: 1, alarm_timestamp: str_date }); } } else if (/false/.test(key)) { var index = baja_emergency_alarm_device_number.findIndex(x => x.device_number == emergency_device.device_number) if (index >= 0) { baja_emergency_alarm_device_number.splice(index, 1); } } if (baja_emergency_alarm_func != undefined) { //執行使用者傳入的function baja_emergency_alarm_func(baja_emergency_alarm_device_number); } }); }, after: function () { }, limit: -1, // Specify optional limit on the number of records (defaults to 10) offset: 0 // Specify optional record offset (defaults to 0) } }); }); /*===================== * 訂閱緊急應變的設備 - end ======================*/ // Subscribe to a Ramp. When it changes, print out the results. require(['baja!'], function (baja) { "use strict"; // // A Subscriber is used to listen to Component events in Niagara. // var sub = new baja.Subscriber(); // //當有訂閱的點位值被修改執行的function // sub.attach('changed', function (prop) { // if (prop.getName() === 'out') { update(this); } // if (prop.getName() === 'out') { update_baja_specify_alarm_device_number(this); } // // if (prop.getName() === 'pingHost') { updateIP(this); } //CCTV抓取IP位置 // baja_target_func(baja_specify_alarm_device_number); // }); /*===================== * 取得單一點位資料 - start ======================*/ // baja.Ord.make('local:|foxs:|station:|slot:/Arena/H/B/B4F/FE/H_B_B4F_2A_01/H_B_B4F_2A_01_ST').get({subscriber: sub}) // .then(update); // The 'update' method is called whenever the text needs to be updated. // function update(light) { // $("#Ramp1").html(light.getOutDisplay()); // } /*===================== * 取得單一點位資料 - end ======================*/ /*===================== * 指定路徑取得該路徑點位 - start ======================*/ // baja.Ord.make("local:|foxs:|station:|slot:/Arena/H/B/B5F/$32A") // .get() // .then(function (folders) { // var batch = new baja.comm.Batch(); // console.log("查看指定路徑資料夾資訊", folders); // console.log("取得指定路徑Slots", folders.getSlots()) // folders.getSlots().eachValue(function (folder, index) { // if (index == 16) { // return // } // baja.Ord.make("local:|foxs:|station:|slot:" + folder.getSlotPath().getNames().join("/")) // .get() // .then(function (folder) { // console.log("folder", folder) // folder.getSlots().is("control:BooleanWritable").eachValue(function (point) { // console.log(folder.getDisplayName() + " point", point) // $("#auto-append-wrap").append(`
// //
//
`) // sub.subscribe({ // comps: point // }); // }); // }); // }); // }); // function update(point) { // console.log("update function point:", point); // $(`#${point.getDisplayName()}-value`).html(point.getOutDisplay()); // } /*===================== * 指定路徑取得該路徑點位 - end ======================*/ /*===================== * 指定路徑取得該路徑CCTV的IP - start ======================*/ // baja.Ord.make("local:|foxs:|station:|slot:/Arena/H/C/B5F/VRC") // .get() // .then(function (folders) { // console.log("CCTV"); // console.log("查看指定路徑資料夾資訊", folders); // console.log("取得指定路徑Slots", folders.getSlots()) // folders.getSlots().eachValue(function (folder, index) { // baja.Ord.make("local:|foxs:|station:|slot:" + folder.getSlotPath().getNames().join("/")) // .get() // .then(function (folder) { // console.log("folder", folder) // console.log("folder getSlots", folder.getSlots()) // folder.getSlots().is("vykonPro:ConnectionFailover").eachValue(function (point) { // console.log(folder.getDisplayName() + " point", point) // $("#ip-auto-append-wrap").append(`
// //
//
`) // sub.subscribe({ // comps: point // }); // }); // }); // }); // }); // function updateIP(point) { // console.log("updateIP function point:", point); // $(`#${point.getDisplayName()}-ip`).html(point.getPingHost()); // } /*===================== * 指定路徑取得該路徑CCTV的IP - end ======================*/ // Unsubscribe the Component so we're no longer listening to live // events. // sub.unsubscribeAll(); // Detach all subscription handlers to ensure we don't unnecessarily // create memory leaks. // sub.detach(); });