446 lines
18 KiB
Plaintext
446 lines
18 KiB
Plaintext
<style>
|
||
.paraarea-hide {
|
||
display: none;
|
||
}
|
||
</style>
|
||
|
||
|
||
|
||
|
||
<link href="~/Content/Adaptive.css" rel="stylesheet" />
|
||
<main>
|
||
@*<section class="row" aria-labelledby="aspnetTitle">
|
||
<h1 id="aspnetTitle">MQTT服务器的Web端API</h1>
|
||
<p class="lead">本服务器可以接受MQTT服务器转发的设备上报消息,也可以通过MQTT服务器转发消息到设备。</p>
|
||
</section>*@
|
||
<div class="row">
|
||
<nav class="navbar navbar-expand-sm navbar-toggleable-sm navbar-dark bg-dark">
|
||
<div class="container">
|
||
@Html.ActionLink("查看设备", "Index", "Home", new { area = "" }, new { @class = "navbar-brand" })
|
||
@Html.ActionLink("查看所有设备离在线记录", "Viewofflinerecordsofalldevices", "Home", new { area = "" }, new { @class = "navbar-brand" })
|
||
<button type="button" class="navbar-toggler" data-bs-toggle="collapse" data-bs-target=".navbar-collapse" title="切换导航" aria-controls="navbarSupportedContent"
|
||
aria-expanded="false" aria-label="Toggle navigation">
|
||
<span class="navbar-toggler-icon"></span>
|
||
</button>
|
||
@*<div class="collapse navbar-collapse d-sm-inline-flex justify-content-between">
|
||
<ul class="navbar-nav flex-grow-1">
|
||
<li>@Html.ActionLink("API", "Index", "Help", new { area = "" }, new { @class = "nav-link" })</li>
|
||
</ul>
|
||
</div>*@
|
||
</div>
|
||
</nav>
|
||
<section class="col-md-9" aria-labelledby="gettingStartedTitle">
|
||
@*<h2 id="gettingStartedTitle">设备上报消息</h2>
|
||
<p>所有按规则转发的设备上报消息</p>*@
|
||
<div>
|
||
<form class="row g-3">
|
||
<div class="col-auto">
|
||
<label for="inputPassword2" class="visually-hidden">设备名称</label>
|
||
<input type="text" class="form-control" id="inputPassword2" placeholder="请输入设备名称" onblur="SelectBYNmae()">
|
||
</div>
|
||
<div class="col-auto">
|
||
<button type="button" class="btn btn-light mb-3" onclick="getshebebyname()">查询</button>
|
||
</div>
|
||
<div class="col-md-4">
|
||
<select id="inputState" class="form-select" onchange="SelectStatus()">
|
||
<option value="1">在线</option>
|
||
<option value="0">不在线</option>
|
||
<option value="3">未使用</option>
|
||
<option selected value="-1">全部</option>
|
||
</select>
|
||
</div>
|
||
|
||
|
||
|
||
</form>
|
||
@*<button onclick="toggleAutoGet()" class="col-md-6">打开/关闭自动获取上报消息</button>*@
|
||
@*<button onclick="RefreshDevice()" class="col-md-12">刷新设备</button>*@
|
||
</div>
|
||
<div class="box">
|
||
<div class="box-body">
|
||
<div id="gridwrapper" class="dataTables_wrapper form-inline dt-bootstrap">
|
||
<div class="row"><div class="col-sm-6"></div><div class="col-sm-6"></div></div>
|
||
<div class="row">
|
||
<div class="col-md-12">
|
||
<div id="gridtable">
|
||
|
||
</div>
|
||
|
||
</div>
|
||
</div>
|
||
@*<div class="row" style="width: 100%;"><button onclick="getAllHistoryData()" class="btn btn-light">加载更多</button></div>*@
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</section>
|
||
|
||
</div>
|
||
</main>
|
||
<script>
|
||
var gCurrentProduct = "";
|
||
var gCurrentDevice = "";
|
||
var gProductIDKey = "HICL5RNXAU";
|
||
var gTableDataMap = new Map();
|
||
var gDeviceArr = new Array();
|
||
|
||
|
||
function SelectBYNmae() {
|
||
var lockm = document.querySelector("#inputPassword2").value;
|
||
var myselect = document.getElementById("inputState");
|
||
var index = myselect.selectedIndex;
|
||
var zhuant = myselect.options[index].value;
|
||
var text = myselect.options[index].text;
|
||
getAllHistoryData(lockm, zhuant)
|
||
}
|
||
|
||
|
||
|
||
function getshebebyname() {
|
||
var lockm = document.querySelector("#inputPassword2").value;
|
||
var myselect = document.getElementById("inputState");
|
||
var index = myselect.selectedIndex;
|
||
|
||
var zhuant = myselect.options[index].value;
|
||
var text = myselect.options[index].text;
|
||
getAllHistoryData(lockm, zhuant)
|
||
}
|
||
|
||
|
||
$(function () {
|
||
var lockm = document.querySelector("#inputPassword2").value;
|
||
var myselect = document.getElementById("inputState");
|
||
var index = myselect.selectedIndex;
|
||
var zhuant = myselect.options[index].value;
|
||
var text = myselect.options[index].text;
|
||
|
||
//selectinfo()
|
||
|
||
getAllHistoryData(lockm, zhuant)
|
||
setInterval(() => {
|
||
/* selectinfo()*/
|
||
var lockm = document.querySelector("#inputPassword2").value;
|
||
var myselect = document.getElementById("inputState");
|
||
var index = myselect.selectedIndex;
|
||
var zhuant = myselect.options[index].value;
|
||
/* var text = myselect.options[index].text;*/
|
||
getAllHistoryData(lockm, zhuant)
|
||
}, 60000)
|
||
});
|
||
function SelectStatus() {
|
||
/* selectinfo()*/
|
||
var lockm = document.querySelector("#inputPassword2").value;
|
||
var myselect = document.getElementById("inputState");
|
||
var index = myselect.selectedIndex;
|
||
var zhuant = myselect.options[index].value;
|
||
var text = myselect.options[index].text;
|
||
getAllHistoryData(lockm, zhuant)
|
||
}
|
||
function selectinfo() {
|
||
fetch("/api/Logs")
|
||
|
||
.then(function (jsondata) {
|
||
});
|
||
}
|
||
|
||
function toggleAutoGet() {
|
||
if (gRunning == 1) {
|
||
clearTimeout(gRetTimerId);
|
||
gRunning = 0;
|
||
}
|
||
else {
|
||
gRetTimerId = setTimeout(getLogContent, gDelayTime);
|
||
gRunning = 1;
|
||
}
|
||
};
|
||
|
||
function getAllHistoryData(lockm, zhuant) {
|
||
var lockm = document.querySelector("#inputPassword2").value;
|
||
var myselect = document.getElementById("inputState");
|
||
var index = myselect.selectedIndex;
|
||
var zhuant = myselect.options[index].value;
|
||
var text = myselect.options[index].text;
|
||
fetch("/api/Logs/?Name=" + lockm + "&zhant=" + zhuant)
|
||
.then(resp => resp.json())
|
||
.then(function (jsondata) {
|
||
var arrRef = jsondata;
|
||
|
||
getLatestData(arrRef);
|
||
|
||
fillTable(sortByDevice());
|
||
});
|
||
};
|
||
|
||
function getLatestData(arrRef) {
|
||
gTableDataMap = new Map();
|
||
/* debugger*/
|
||
for (var i = 0; i < arrRef.length; i++) {
|
||
let tmp2Part = arrRef[i].split(",");
|
||
let devicename = tmp2Part[0].split(":")[1];
|
||
let Online = tmp2Part[1].split(":")[1];
|
||
let districtinfo = tmp2Part[2].split(":")[1];
|
||
let LastUpdateTime = tmp2Part[3].split(":")[1];
|
||
let powerintakestatus = tmp2Part[4].split(":")[1];
|
||
let Power = tmp2Part[5].split(":")[1];
|
||
let pir1status = tmp2Part[6].split(":")[1];
|
||
let pir2status = tmp2Part[7].split(":")[1];
|
||
let pir3status = tmp2Part[8].split(":")[1];
|
||
let pir4status = tmp2Part[9].split(":")[1];
|
||
let gatemagnetstatus = tmp2Part[10].split(":")[1];
|
||
let pir5status = tmp2Part[11].split(":")[1];
|
||
let pir6status = tmp2Part[12].split(":")[1];
|
||
let pir7status = tmp2Part[13].split(":")[1];
|
||
let pir8status = tmp2Part[14].split(":")[1];
|
||
|
||
|
||
let powerOnEquipment = tmp2Part[15].split(":")[1];
|
||
let equipmenttime = tmp2Part[16].split(":")[1];
|
||
let powerOnEquipmentinfo = tmp2Part[17].split(":")[1];
|
||
let yingjianbanbinfo = tmp2Part[18].split(":")[1];
|
||
let ruanjianbanbinfo = tmp2Part[19].split(":")[1];
|
||
|
||
|
||
|
||
let tmpKey = devicename;
|
||
|
||
gTableDataMap.set(tmpKey, [Online, devicename, districtinfo, LastUpdateTime, powerintakestatus, Power, pir1status, pir2status, pir3status, pir4status, gatemagnetstatus, pir5status, pir6status, pir7status, pir8status, powerOnEquipment, equipmenttime, powerOnEquipmentinfo, yingjianbanbinfo, ruanjianbanbinfo]);
|
||
}
|
||
};
|
||
|
||
//init from device list;
|
||
function initLatestData() {
|
||
for (var i = 0; i < gDeviceArr.length; i++) {
|
||
//use product+device as key
|
||
let productid = gProductIDKey;
|
||
let devicename = gDeviceArr[i].DeviceName;
|
||
let tmpKey = productid + "_" + devicename;
|
||
let topic = "";
|
||
let payload = "";
|
||
let seq = "";
|
||
let timestamp = "";
|
||
let timemills = "";
|
||
gTableDataMap.set(tmpKey, [productid, devicename, topic, payload, seq, timestamp, timemills]);
|
||
|
||
}
|
||
}
|
||
|
||
function sortByDevice() {
|
||
var arrayObj = Array.from(gTableDataMap);
|
||
arrayObj.sort(function (a, b) { return a[0].localeCompare(b[0]); });
|
||
return arrayObj;
|
||
}
|
||
|
||
|
||
function fillTable(dataArrFromMap) {
|
||
|
||
var tarBody = document.querySelector("#gridtable")/*.tBodies[0]*/;
|
||
tarBody.innerHTML = '';
|
||
|
||
var combineHtml = '';
|
||
for (let i = 0; i < dataArrFromMap.length; i++) {
|
||
/* console.log(dataArrFromMap[i])*/
|
||
combineHtml += '<div class="divide-y">';
|
||
combineHtml += '<div id="button_' + dataArrFromMap[i][0] + '_' + dataArrFromMap[i][1][0] + '" ondblclick="showHistoryMessage(this)" onclick="presentationinfo(`' + dataArrFromMap[i][0] + '_' + dataArrFromMap[i][1][0] +'`)">'
|
||
combineHtml += '<ul class="grid" >'
|
||
combineHtml += '<li>'
|
||
|
||
combineHtml += '<span class="titlestime">'
|
||
combineHtml += dataArrFromMap[i][1][1]
|
||
combineHtml += '</span>'
|
||
|
||
if (dataArrFromMap[i][1][0] == 1) {
|
||
combineHtml += '<span class="titlestime" style = "color:#00AA55;">'
|
||
combineHtml += "在线"
|
||
combineHtml += '</span>'
|
||
} else if (dataArrFromMap[i][1][0] == 0) {
|
||
|
||
combineHtml += '<span class="titlestime" style = "color:#FF5511;">'
|
||
combineHtml += "离线"
|
||
combineHtml += '</span>'
|
||
|
||
|
||
} else {
|
||
combineHtml += '<span class="titlestime">'
|
||
combineHtml += "未使用"
|
||
combineHtml += '</span>'
|
||
}
|
||
|
||
if (dataArrFromMap[i][1][4] == "取电") {
|
||
combineHtml += '<span class="analyze">'
|
||
combineHtml += '<span style = "background-color:#00AA55; color:#FFFFFF;">取电</span>'
|
||
combineHtml += '</span>'
|
||
} else {
|
||
combineHtml += '<span class="analyze">'
|
||
combineHtml += '<span style = "background-color:#FF5511;color:#FFFFFF;">断电</span>'
|
||
combineHtml += '</span>'
|
||
}
|
||
if (dataArrFromMap[i][1][6] == "1") {
|
||
combineHtml += '<span class="analyze">'
|
||
combineHtml += '<span style="color:#00AA55;">pir1</span>'
|
||
combineHtml += '</span>'
|
||
} else {
|
||
combineHtml += '<span class="analyze">'
|
||
combineHtml += '<span style="color:#FF5511;">pir1</span>'
|
||
combineHtml += '</span>'
|
||
}
|
||
if (dataArrFromMap[i][1][7] == "1") {
|
||
combineHtml += '<span class="analyze">'
|
||
combineHtml += '<span style="color:#00AA55;">pir2</span>'
|
||
combineHtml += '</span>'
|
||
} else {
|
||
combineHtml += '<span class="analyze">'
|
||
combineHtml += '<span style="color:#FF5511;">pir2</span>'
|
||
combineHtml += '</span>'
|
||
}
|
||
|
||
if (dataArrFromMap[i][1][8] == "1") {
|
||
combineHtml += '<span class="analyze">'
|
||
combineHtml += '<span style="color:#00AA55;">pir3</span>'
|
||
combineHtml += '</span>'
|
||
} else {
|
||
combineHtml += '<span class="analyze">'
|
||
combineHtml += '<span style="color:#FF5511;">pir3</span>'
|
||
combineHtml += '</span>'
|
||
}
|
||
|
||
if (dataArrFromMap[i][1][9] == "1") {
|
||
combineHtml += '<span class="analyze">'
|
||
combineHtml += '<span style="color:#00AA55;">pir4</span>'
|
||
combineHtml += '</span>'
|
||
} else {
|
||
combineHtml += '<span class="analyze">'
|
||
combineHtml += '<span style="color:#FF5511;">pir4</span>'
|
||
combineHtml += '</span>'
|
||
}
|
||
if (dataArrFromMap[i][1][11] == "1") {
|
||
combineHtml += '<span class="analyze">'
|
||
combineHtml += '<span style="color:#00AA55;">pir5</span>'
|
||
combineHtml += '</span>'
|
||
} else {
|
||
combineHtml += '<span class="analyze">'
|
||
combineHtml += '<span style="color:#FF5511;">pir5</span>'
|
||
combineHtml += '</span>'
|
||
}
|
||
|
||
if (dataArrFromMap[i][1][12] == "1") {
|
||
combineHtml += '<span class="analyze">'
|
||
combineHtml += '<span style="color:#00AA55;">pir6</span>'
|
||
combineHtml += '</span>'
|
||
} else {
|
||
combineHtml += '<span class="analyze">'
|
||
combineHtml += '<span style="color:#FF5511;">pir6</span>'
|
||
combineHtml += '</span>'
|
||
}
|
||
if (dataArrFromMap[i][1][13] == "1") {
|
||
combineHtml += '<span class="analyze">'
|
||
combineHtml += '<span style="color:#00AA55;">pir7</span>'
|
||
combineHtml += '</span>'
|
||
} else {
|
||
combineHtml += '<span class="analyze">'
|
||
combineHtml += '<span style="color:#FF5511;">pir7</span>'
|
||
combineHtml += '</span>'
|
||
}
|
||
if (dataArrFromMap[i][1][14] == "1") {
|
||
combineHtml += '<span class="analyze">'
|
||
combineHtml += '<span style="color:#00AA55;">pir8</span>'
|
||
combineHtml += '</span>'
|
||
} else {
|
||
combineHtml += '<span class="analyze">'
|
||
combineHtml += '<span style="color:#FF5511;">pir8</span>'
|
||
combineHtml += '</span>'
|
||
}
|
||
if (dataArrFromMap[i][1][10] == "1") {
|
||
combineHtml += '<span class="analyze">'
|
||
combineHtml += '<span style="color:#00AA55;">门磁</span>'
|
||
combineHtml += '</span>'
|
||
} else {
|
||
combineHtml += '<span class="analyze">'
|
||
combineHtml += '<span style="color:#FF5511;">门磁</span>'
|
||
combineHtml += '</span>'
|
||
}
|
||
combineHtml += '<span class="analyze">功率:'
|
||
combineHtml += dataArrFromMap[i][1][5].substring(0, 7)
|
||
combineHtml += 'W</span>'
|
||
combineHtml += '<span class="analyze">'
|
||
combineHtml += dataArrFromMap[i][1][15]
|
||
combineHtml += '</span>'
|
||
combineHtml += '<span class="analyze">'
|
||
combineHtml += dataArrFromMap[i][1][16]
|
||
combineHtml += '</span>'
|
||
combineHtml += '</span>'
|
||
|
||
combineHtml += '<div id="' + dataArrFromMap[i][0] + '_' + dataArrFromMap[i][1][0] +'" style="display:none">'
|
||
combineHtml += '<span class="titlestime">硬件版本:'
|
||
combineHtml += dataArrFromMap[i][1][18]
|
||
combineHtml += '</span>'
|
||
combineHtml += '<span class="titlestime">软件版本:'
|
||
combineHtml += dataArrFromMap[i][1][19]
|
||
combineHtml += '</span>'
|
||
combineHtml += '<span class="RawData">异常详情:'
|
||
combineHtml += dataArrFromMap[i][1][17]
|
||
combineHtml += '</span>'
|
||
combineHtml += '<div>'
|
||
combineHtml += '<span class="RawData">'
|
||
combineHtml += dataArrFromMap[i][1][2]
|
||
combineHtml += '</span>'
|
||
combineHtml += '</li>'
|
||
combineHtml += '</ul>'
|
||
combineHtml += '</div>'
|
||
combineHtml += '</div>'
|
||
}
|
||
tarBody.innerHTML = combineHtml;
|
||
}
|
||
|
||
function clearAllMessgeHistory() {
|
||
var targetTextDom = document.querySelector("#historypopupmessage");
|
||
targetTextDom.innerHTML = "";
|
||
targetTextDom.value = "";
|
||
}
|
||
|
||
function clearSelectedMessgeHistory() {
|
||
var targetTextDom = document.querySelector("#historypopupmessageselected");
|
||
targetTextDom.innerHTML = "";
|
||
targetTextDom.value = "";
|
||
|
||
clearDeviceMessage();
|
||
//let time = 2 * 60 * 60 * 1000;
|
||
//window.setTimeout(clearDeviceMessage, time)
|
||
}
|
||
function shijianchuozhuanhuan(timestamp) {
|
||
// 此处时间戳以毫秒为单位
|
||
let date = new Date(parseInt(timestamp) * 1000);
|
||
let Year = date.getFullYear();
|
||
let Moth = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1);
|
||
let Day = (date.getDate() < 10 ? '0' + date.getDate() : date.getDate());
|
||
let Hour = (date.getHours() < 10 ? '0' + date.getHours() : date.getHours());
|
||
let Minute = (date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes());
|
||
let Sechond = (date.getSeconds() < 10 ? '0' + date.getSeconds() : date.getSeconds());
|
||
let GMT = Year + '-' + Moth + '-' + Day + ' ' + Hour + ':' + Minute + ':' + Sechond;
|
||
return GMT
|
||
}
|
||
function showHistoryMessage(btnDom) {
|
||
var splArr = btnDom.id.split("_");
|
||
var productid = splArr[1];
|
||
|
||
gCurrentProduct = productid;
|
||
|
||
//refreshDeviceMessage(productid, devicename);
|
||
//gotoDownMessageArea(btnDom)
|
||
window.location.href = "/Home/RefreshDevice?shebxx=" + btnDom.id
|
||
}
|
||
let att = "";
|
||
function presentationinfo(zhanshiinfo) {
|
||
/* console.log(zhanshiinfo)*/
|
||
if (att != zhanshiinfo) {
|
||
$('#' + zhanshiinfo + '').css("display", "block");
|
||
/* $('.' + trdemo + '').css("display", "block");*/
|
||
att = zhanshiinfo;
|
||
} else {
|
||
$('#' + zhanshiinfo + '').css("display", "none");
|
||
/* $('.' + trdemo + '').css("display", "none");*/
|
||
att = 0;
|
||
}
|
||
}
|
||
|
||
|
||
</script> |