MCUT_Supervisor/N4JS/js/bajatest_kai_final.js
2025-03-26 10:38:33 +08:00

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();
});