531 lines
18 KiB
JavaScript
531 lines
18 KiB
JavaScript
/*
|
|
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(`<div id="${point.getDisplayName()}">
|
|
// <label>${point.getDisplayName()}</label>
|
|
// <div id="${point.getDisplayName()}-value" style="text-align: center;"></div>
|
|
// </div>`)
|
|
// 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(`<div id="${point.getDisplayName()}">
|
|
// <label>${point.getDisplayName()}</label>
|
|
// <div id="${point.getDisplayName()}-ip" style="text-align: center;"></div>
|
|
// </div>`)
|
|
// 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();
|
|
|
|
});
|