Device_Sensor-_.html 32 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765
  1. <!DOCTYPE html>
  2. <html class="x-admin-sm" style="overflow-y: hidden;">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="renderer" content="webkit">
  6. <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
  7. <meta name="viewport"
  8. content="width=device-width,user-scalable=yes, minimum-scale=0.4, initial-scale=0.8,target-densitydpi=low-dpi"/>
  9. <link rel="shortcut icon" href="https://osscold.baozhida.cn/favicon.ico">
  10. <link rel="bookmark" href="https://osscold.baozhida.cn/favicon.ico">
  11. <link rel="stylesheet" href="https://osscold.baozhida.cn/css/font.css">
  12. <link rel="stylesheet" href="https://osscold.baozhida.cn/css/xadmin.css">
  13. <link rel="stylesheet" href="https://osscold.baozhida.cn/layui/css/layui.css">
  14. <script type="text/javascript" src="https://osscold.baozhida.cn/layui/layui.js" charset="utf-8"></script>
  15. <script type="text/javascript" src="https://osscold.baozhida.cn/js/xadmin.js"></script>
  16. <script src="https://cdn.staticfile.org/jquery/3.4.0/jquery.min.js"></script>
  17. <script src="https://cdn.staticfile.org/jquery-cookie/1.4.1/jquery.cookie.min.js"></script>
  18. <!-- 让IE8/9支持媒体查询,从而兼容栅格 -->
  19. <!--[if lt IE 9]>
  20. <script src="https://cdn.staticfile.org/html5shiv/r29/html5.min.js"></script>
  21. <script src="https://cdn.staticfile.org/respond.js/1.4.2/respond.min.js"></script>
  22. <![endif]--></head>
  23. <body>
  24. <div class="layui-fluid">
  25. <div class="layui-row" id="tab_1">
  26. <div class="layui-row">
  27. <button class="layui-btn layui-btn-normal" style="float: right" onclick="tab_2()">
  28. <i class="iconfont" style="margin-right: 4px">&#xe6ae;</i>配置参数
  29. </button>
  30. <fieldset class="layui-elem-field layui-field-title" style="margin-top: 20px;">
  31. <legend>实时数据</legend>
  32. </fieldset>
  33. <div style="margin-left: 40px;font-size: 20px">
  34. 设备名称:<span id="T_devName" class="tab_show" style="margin-right: 10px;"></span>
  35. 设备SN:<span id="T_sn" class="tab_show">{{.DeviceSensor.T_sn}}</span>
  36. </div>
  37. <div style="margin-left: 40px;font-size: 20px;margin-top: 10px">
  38. 传感器名称:<span id="T_name" class="tab_show" style="margin-right: 10px;">{{.DeviceSensor.T_name}}</span>
  39. 传感器ID:<span id="T_id" class="tab_show">{{.DeviceSensor.T_id}}</span>
  40. </div>
  41. <div style="margin-left: 40px;font-size: 20px;margin-top: 10px">
  42. 是否启用传感器:<span class="tab_show" style="margin-right: 10px;">
  43. {{if eq .DeviceSensor.T_en 1}}
  44. 启用
  45. {{end}}
  46. {{if eq .DeviceSensor.T_en 0}}
  47. 停止
  48. {{end}}
  49. </span>
  50. 是否为闲置状态(空库,只监测不报警):<span class="tab_show" style="margin-right: 10px;">
  51. {{if eq .DeviceSensor.T_free 0}}
  52. 正常
  53. {{end}}
  54. {{if eq .DeviceSensor.T_free 1}}
  55. 闲置
  56. {{end}}
  57. </span>
  58. </div>
  59. <div style="margin-left: 40px;">
  60. <div style="width: 100px;float: left;margin-right: 10px">
  61. {{if eq .DeviceSensor.T_err 0}}
  62. <img src="https://osscold.baozhida.cn/images/温湿度传感器-1.png" height="100" width="100"/>
  63. {{end}}
  64. {{if eq .DeviceSensor.T_err 1}}
  65. <img src="https://osscold.baozhida.cn/images/温湿度传感器-3.png" height="100" width="100"/>
  66. {{end}}
  67. </div>
  68. <div style="float: left;font-size: 20px">
  69. <div style="margin-top: 10px">
  70. <span id="T_t" style="width: 130px;float: left">温度:{{.DeviceSensor.T_t}}℃</span>
  71. <span id="T_Tlower" style="margin-right: 10px">限制:{{.DeviceSensor.T_Tlower}}℃</span> ~
  72. <span id="T_Tupper">{{.DeviceSensor.T_Tupper}}℃</span>
  73. </div>
  74. <div>
  75. <span id="T_rh" style="width: 130px;float: left">湿度:{{.DeviceSensor.T_rh}}%</span>
  76. <span id="T_RHlower" style="margin-right: 10px">限制:{{.DeviceSensor.T_RHlower}}%</span> ~
  77. <span id="T_RHupper">{{.DeviceSensor.T_RHupper}}%</span>
  78. </div>
  79. <div>
  80. <span id="T_time">更新时间:等待同步中.....</span><img style="margin-left: 2px"
  81. src="https://osscold.baozhida.cn/images/等待.gif" height="20"
  82. width="20"/>
  83. </div>
  84. </div>
  85. </div>
  86. </div>
  87. </div>
  88. <div class="layui-row" id="tab_2">
  89. <div class="layui-row">
  90. <button class="layui-btn layui-btn-normal" style="float: right" onclick="tab_1()">
  91. <i class="iconfont" style="margin-right: 4px">&#xe6e6;</i>实时数据
  92. </button>
  93. <fieldset class="layui-elem-field layui-field-title" style="margin-top: 20px;">
  94. <legend >传感器参数</legend>
  95. </fieldset>
  96. </div>
  97. <div class="layui-row">
  98. <div class="layui-col-md7">
  99. <form class="layui-form" action="" lay-filter="example">
  100. <div class="layui-form-item">
  101. <div class="layui-inline">
  102. <label class="layui-form-label">设备名称</label>
  103. <div class="layui-input-inline">
  104. <input type="text" id="S_devName layui-disabled" value="{{.Device.T_devName}}" name="S_devName" autocomplete="off"
  105. class="layui-input">
  106. </div>
  107. <div class="layui-input-inline">
  108. <input class="layui-input layui-disabled" value="{{.Device.T_sn}}" type="text" id="S_sn" name="S_sn"
  109. autocomplete="off"
  110. class="layui-input">
  111. </div>
  112. </div>
  113. </div>
  114. <div class="layui-form-item">
  115. <div class="layui-inline">
  116. <label class="layui-form-label">传感器名称</label>
  117. <div class="layui-input-inline">
  118. <input type="text" id="S_name" value="{{.DeviceSensor.T_name}}" name="S_name" autocomplete="off" class="layui-input">
  119. </div>
  120. <div class="layui-input-inline" style="width: 50px">
  121. <input class="layui-input layui-disabled" type="text" value="{{.DeviceSensor.T_id}}" id="S_id" name="S_id"
  122. autocomplete="off"
  123. class="layui-input">
  124. </div>
  125. </div>
  126. </div>
  127. <div class="layui-form-item">
  128. <div class="layui-inline">
  129. <label class="layui-form-label">温度范围 ℃</label>
  130. <div class="layui-input-inline" style="width: 100px;">
  131. <input type="text" name="S_Tlower" autocomplete="off" class="layui-input">
  132. </div>
  133. <div class="layui-form-mid">-</div>
  134. <div class="layui-input-inline" style="width: 100px;">
  135. <input type="text" name="S_Tupper" autocomplete="off" class="layui-input">
  136. </div>
  137. </div>
  138. </div>
  139. <div class="layui-form-item">
  140. <div class="layui-inline">
  141. <label class="layui-form-label">湿度范围 %</label>
  142. <div class="layui-input-inline" style="width: 100px;">
  143. <input type="text" name="S_RHlower" autocomplete="off" class="layui-input">
  144. </div>
  145. <div class="layui-form-mid">-</div>
  146. <div class="layui-input-inline" style="width: 100px;">
  147. <input type="text" name="S_RHupper" autocomplete="off" class="layui-input">
  148. </div>
  149. </div>
  150. </div>
  151. <div class="layui-form-item">
  152. <label class="layui-form-label" style="width: 60px;">启用</label>
  153. <div class="layui-input-block">
  154. <input type="checkbox" id="S_en" name="S_en" lay-filter="switchTest" lay-skin="switch"
  155. lay-text="开|关">
  156. <div class="layui-unselect layui-form-switch" lay-skin="_switch"><em>关</em><i></i></div>
  157. </div>
  158. </div>
  159. <div class="layui-form-item">
  160. <label class="layui-form-label" style="width: 60px;">空库</label>
  161. <div class="layui-input-block">
  162. <input type="checkbox" id="S_free" name="S_free" lay-filter="switchTest" lay-skin="switch"
  163. lay-text="开|关">
  164. <div class="layui-unselect layui-form-switch" lay-skin="_switch"><em>关</em><i></i></div>
  165. </div>
  166. </div>
  167. <div class="layui-form-item" style="text-align: center;margin-top: 20px">
  168. <button id="Pu_DeviceParameter_Sensor_id" type="submit" class="layui-btn layui-btn-normal" lay-submit="" lay-filter="add">离线-配置参数(温湿度范围 必填项)</button>
  169. </div>
  170. </form>
  171. <hr>
  172. <div class="layui-form-item" style="margin-top: 50px;">
  173. <div class="layui-inline">
  174. <label class="layui-form-label">实时数据显示排序:</label>
  175. <div class="layui-input-inline" style="width: 100px;">
  176. <input type="text" value="{{.DeviceSensor.T_sort}}" id="T_sort" autocomplete="off" class="layui-input">
  177. </div>
  178. <div class="layui-form-mid"></div>
  179. <div class="layui-input-inline" style="width: 100px;">
  180. <button class="layui-btn layui-btn-normal" onclick="UpDeviceSensor_Tsort()" >设置排序</button>
  181. </div>
  182. </div>
  183. </div>
  184. <hr>
  185. <button class="layui-btn layui-btn-danger" onclick="f_Device_Parameter_Del()" >删除此设备</button>
  186. </div>
  187. <div class="layui-col-md5">
  188. <fieldset class="layui-elem-field layui-field-title" style="margin-top: -10px;">
  189. <legend>最近修改记录</legend>
  190. </fieldset>
  191. {{range $index, $elem := .DeviceSensorParameter_lite}}
  192. <div class="layui-inline" style="margin-left: 40px;margin-bottom: 20px">
  193. <span style="margin-right: 20px">操作人UUID:{{$elem.T_uuid}}</span>
  194. <span style="margin-right: 20px">设备名称:{{$elem.T_name}}</span>
  195. <span style="margin-right: 20px">温度下限:{{$elem.T_Tlower}}</span>
  196. <span style="margin-right: 20px">温度上限:{{$elem.T_Tupper}}</span>
  197. <span style="margin-right: 20px">湿度下限:{{$elem.T_RHlower}}</span>
  198. <span style="margin-right: 20px">湿度上限:{{$elem.T_RHupper}}</span>
  199. <span style="margin-right: 20px">是否启用传感器:{{$elem.T_en}}</span>
  200. <span style="margin-right: 20px">监测点是否为闲置状态(:{{$elem.T_free}}</span>
  201. <span style="margin-right: 20px">修改时间:{{$elem.CreateTime}}</span>
  202. </div>
  203. {{end}}
  204. </div>
  205. </div>
  206. </div>
  207. </div>
  208. <script>
  209. //获取url中的参数
  210. function getQueryString(name) {
  211. var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
  212. var r = window.location.search.substr(1).match(reg);
  213. if (r != null)
  214. return decodeURIComponent(r[2]);
  215. return null;
  216. }
  217. function timestampToTime(timestamp) {
  218. var date = new Date(timestamp * 1000); //时间戳为10位需*1000,时间戳为13位的话不需乘1000
  219. Y = date.getFullYear() + '-';
  220. M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-';
  221. D = date.getDate() + ' ';
  222. h = date.getHours() + ':';
  223. m = date.getMinutes() + ':';
  224. s = date.getSeconds();
  225. return Y + M + D + h + m + s;
  226. }
  227. $("#tab_1").hide()
  228. $("#tab_2").show()
  229. function tab_1() {
  230. $("#tab_1").show()
  231. $("#tab_2").hide()
  232. }
  233. function tab_2() {
  234. $("#tab_1").hide()
  235. $("#tab_2").show()
  236. }
  237. function f_Device_Parameter_Del() {
  238. // console.log(getQueryString("Sn"),getQueryString("Id"))
  239. //
  240. $.ajax({
  241. type: 'POST',
  242. url: 'Device_Parameter_Del',//发送请求】
  243. data: {
  244. Sn: getQueryString("Sn"),
  245. Id: getQueryString("Id")
  246. },
  247. success: function (result) {
  248. console.log(result)
  249. //关闭当前frame
  250. parent.layer.close(parent.layer.getFrameIndex(window.name));
  251. parent.location.reload();
  252. // return false;
  253. }
  254. });
  255. }
  256. function UpDeviceSensor_Tsort() {
  257. // console.log(getQueryString("Sn"),getQueryString("Id"))
  258. //
  259. $.ajax({
  260. type: 'POST',
  261. url: '../../Device/UpDeviceSensor_Tsort',//发送请求】
  262. data: {
  263. Sn: getQueryString("Sn"),
  264. Id: getQueryString("Id"),
  265. T_sort: $("#T_sort").val()
  266. },
  267. success: function (result) {
  268. console.log(result)
  269. //关闭当前frame
  270. parent.layer.close(parent.layer.getFrameIndex(window.name));
  271. parent.location.reload();
  272. // return false;
  273. }
  274. });
  275. }
  276. f_Read_DeviceParameter_is = true
  277. function f_Read_DeviceParameter() {
  278. if(f_Read_DeviceParameter_is){
  279. console.log("Read_DeviceSensorParameter",getQueryString("Sn"))
  280. $.ajax({
  281. type: 'POST',
  282. url: 'Read_DeviceSensorParameter',//发送请求
  283. data: {
  284. SN:getQueryString("Sn"),
  285. },
  286. success: function(result) {
  287. }
  288. });
  289. f_Read_DeviceParameter_is = false
  290. }
  291. }
  292. layui.use(['form', 'layer', "layedit"],
  293. function () {
  294. $ = layui.jquery;
  295. var form = layui.form,
  296. layer = layui.layer;
  297. var layedit = layui.layedit
  298. layedit.set({
  299. uploadImage: {
  300. url: '/UpFile' //接口url
  301. }
  302. });
  303. //构建一个默认的编辑器
  304. var index = layedit.build('T_text', {
  305. height: 580 //设置编辑器高度,
  306. });
  307. //监听提交
  308. form.on('submit(add)',
  309. function (data) {
  310. console.log("=== submit(add) ==");
  311. loading = layer.load(0, {
  312. shade: false,
  313. time: 99 * 1000
  314. });
  315. console.log(data);
  316. S_en = 0
  317. if (data.field.S_en != undefined) {
  318. S_en = 1
  319. }
  320. S_free = 0
  321. if (data.field.S_free != undefined) {
  322. S_free = 1
  323. }
  324. var T_sensor_list = [];
  325. T_sensor_list.push({
  326. "id": parseInt(Id),
  327. "name": data.field.S_name,
  328. "Tlower": parseFloat(data.field.S_Tlower),
  329. "Tupper": parseFloat(data.field.S_Tupper),
  330. "RHlower": parseFloat(data.field.S_RHlower),
  331. "RHupper": parseFloat(data.field.S_RHupper),
  332. "en": S_en,
  333. "free": S_free
  334. })
  335. url_ = "Pu_DeviceParameter_Sensor_Cache"
  336. if(ok_websocket_data){
  337. url_ = "Pu_DeviceParameter_Sensor"
  338. }else {
  339. if(data.field.S_Tlower.length == 0 || data.field.S_Tupper.length == 0){
  340. layer.msg('(离线设置)温度范围 必须设置');
  341. return false;
  342. }
  343. if(data.field.S_RHlower.length == 0 || data.field.S_RHupper.length == 0){
  344. layer.msg('(离线设置)湿度范围 必须设置');
  345. return false;
  346. }
  347. }
  348. $.ajax({
  349. type: 'POST',
  350. url: url_,//发送请求】
  351. data: {
  352. User_tokey: $.cookie('User_tokey'),
  353. SN: Sn,
  354. T_id: parseInt(Id),
  355. T_sensor_list: JSON.stringify(T_sensor_list)
  356. },
  357. success: function (result) {
  358. console.log(result)
  359. if(ok_websocket_data){
  360. loading = layer.load(0, {
  361. shade: false,
  362. time: 99 * 1000
  363. });
  364. }else {
  365. //关闭当前frame
  366. parent.layer.close(parent.layer.getFrameIndex(window.name));
  367. }
  368. // return false;
  369. }
  370. });
  371. return false;
  372. });
  373. {{if eq $.Admin_Power.Power_DeviceSensor_Compensate_e 1}}
  374. //监听提交
  375. form.on('submit(O_add)',
  376. function (data) {
  377. console.log("=== submit(add) ==");
  378. loading = layer.load(0, {
  379. shade: false,
  380. time: 99 * 1000
  381. });
  382. var T_sompensate_list = [];
  383. T_sompensate_list.push({
  384. "id": parseInt(Id),
  385. "T": parseFloat(data.field.O_T),
  386. "RH": parseFloat(data.field.O_RH)
  387. })
  388. $.ajax({
  389. type: 'POST',
  390. url: 'Pu_DeviceParameter_Compensate',//发送请求】
  391. data: {
  392. User_tokey: $.cookie('User_tokey'),
  393. SN: Sn,
  394. T_sompensate_list: JSON.stringify(T_sompensate_list)
  395. },
  396. success: function (result) {
  397. console.log(result)
  398. // return false;
  399. }
  400. });
  401. return false;
  402. });
  403. {{end}}
  404. // //监听指定开关
  405. // form.on('switch(switchTest)', function(data){
  406. // layer.msg('开关checked:'+ (this.checked ? 'true' : 'false'), {
  407. // offset: '6px'
  408. // });
  409. // layer.tips('温馨提示:请注意开关状态的文字可以随意定义,而不仅仅是ON|OFF', data.othis)
  410. // });
  411. //表单取值
  412. // layui.$('#LAY-component-form-getval').on('click', function(){
  413. // var data = form.val('example');
  414. // alert(JSON.stringify(data));
  415. // });
  416. var loading = layer.load(0, {
  417. shade: false,
  418. time: 99 * 1000
  419. });
  420. var timestamp_V = (new Date()) / 1000;
  421. var Sn = getQueryString("Sn")
  422. var Id = getQueryString("Id")
  423. $("#T_devName").html(getQueryString("Sn_name"))
  424. var websocket = null;
  425. var ok_websocket1 = false;
  426. var ok_websocket2 = false;
  427. var ok_websocket_data = false;
  428. function Timeout_1 (){
  429. //要执行的代码
  430. if(!ok_websocket1){
  431. layer.open({
  432. text:"连接失败",
  433. btn: '立即重新登录',
  434. content: "请退出账号重新登录!",
  435. yes: function(index, layero){
  436. //do something
  437. window.parent.parent.location.href ='../Login';
  438. layer.close(index); //如果设定了yes回调,需进行手工关闭
  439. }
  440. });
  441. }
  442. }
  443. setTimeout(Timeout_1,8000);//5秒后执行
  444. function Timeout_2 (){
  445. //要执行的代码
  446. if(!ok_websocket2){
  447. layer.open({
  448. text:"无响应",
  449. btn: '重新试试',
  450. content: "设备主机无响应,请重新试试,若有疑问请联系工作人员!",
  451. yes: function(index, layero){
  452. //do something
  453. layer.close(index); //如果设定了yes回调,需进行手工关闭
  454. }
  455. });
  456. }
  457. }
  458. setTimeout(Timeout_2,20000);//5秒后执行
  459. //判断当前浏览器是否支持WebSocket
  460. if ('WebSocket' in window) {
  461. url = window.location.host
  462. console.log("url:",url)
  463. if(url.indexOf("baozhida") != -1){
  464. websocket = new WebSocket("wss://"+window.location.host+"/ws/join?User_tokey="+$.cookie('User_tokey'));
  465. }else {
  466. websocket = new WebSocket("ws://"+window.location.host+"/ws/join?User_tokey="+$.cookie('User_tokey'));
  467. }
  468. } else {
  469. alert('Dont support websocket')
  470. }
  471. console.log(getQueryString("Sn"))
  472. //连接发生错误的回调方法
  473. websocket.onerror = function () {
  474. console.log("error");
  475. };
  476. //连接成功建立的回调方法
  477. websocket.onopen = function () {
  478. console.log("open");
  479. send("{\"Sn\":\"" + getQueryString("Sn") + "\"}")
  480. // f_Read_DeviceParameter();
  481. };
  482. //接收到消息的回调方法
  483. websocket.onmessage = function (event) {
  484. console.log(event.data)
  485. var obj = JSON.parse(event.data);
  486. console.log(obj.type)
  487. ok_websocket1 = true
  488. if(obj.Code == 200){
  489. f_Read_DeviceParameter();
  490. console.log(getQueryString("Sn").length , "KF00360016323051023".length)
  491. if(getQueryString("Sn").length > "KF00360016323051023".length){
  492. setTimeout(function(){
  493. console.log("f_Read_DeviceParameter 1200")
  494. f_Read_DeviceParameter();
  495. },1200);
  496. setTimeout(function(){
  497. console.log("f_Read_DeviceParameter 1400")
  498. f_Read_DeviceParameter();
  499. },1400);
  500. setTimeout(function(){
  501. console.log("f_Read_DeviceParameter 1600")
  502. f_Read_DeviceParameter();
  503. },1600);
  504. }
  505. }
  506. if (obj.sn != Sn) {
  507. return
  508. }
  509. // if (obj.type == 0) {
  510. // for (let i = 0; i < obj.sensor.length; i++) {
  511. //
  512. // console.log("== ",Number(obj.sensor[i].id) , Number(Id))
  513. // if (Number(obj.sensor[i].id) == Number(Id)) {
  514. // console.log("== ok ")
  515. // // T_en =false
  516. // // if(obj.sensor[i].en == 1){
  517. // // T_en =true
  518. // // }
  519. // // T_free =false
  520. // // if(obj.sensor[i].free == 1){
  521. // // T_free =true
  522. // // }
  523. // if (timestamp_V != obj.sensor[i].UT) {
  524. //
  525. //
  526. // $("#T_t").html("温度:" + obj.sensor[i].T.toFixed(2) + "℃")
  527. // $("#T_rh").html("湿度:" + obj.sensor[i].RH.toFixed(1) + "%")
  528. // $("#T_Tlower").html("限制:" + obj.sensor[i].Tlower + "℃")
  529. // $("#T_Tupper").html(obj.sensor[i].Tupper + "℃")
  530. // $("#T_RHlower").html("限制:" + obj.sensor[i].RHlower + "%")
  531. // $("#T_RHupper").html(obj.sensor[i].RHupper + "%")
  532. // $("#T_time").html("更新时间:" + timestampToTime(obj.sensor[i].UT) + " 更新间隔:" + Math.abs(timestamp_V - obj.sensor[i].UT).toFixed(0) + "s")
  533. //
  534. // console.log(timestamp_V, obj.sensor[i].UT, " 更新间隔:" + (timestamp_V - obj.sensor[i].UT) + "s")
  535. // timestamp_V = obj.sensor[i].UT
  536. //
  537. //
  538. // }
  539. //
  540. //
  541. //
  542. // break
  543. // }
  544. // }
  545. // }
  546. if (obj.type == 3) {
  547. switch (obj.msid % 10) {
  548. case 1:
  549. // obj.base.devName
  550. // form.val('example', {
  551. // "S_sn": obj.sn
  552. // , "S_devName": obj.base.devName
  553. //
  554. // });
  555. break
  556. case 2:
  557. ok_websocket2 = true
  558. for (let i = 0; i < obj.sensor.length; i++) {
  559. console.log("== ",Number(obj.sensor[i].id) , Number(Id))
  560. if (Number(obj.sensor[i].id) == Number(Id)) {
  561. console.log("== ok ")
  562. ok_websocket_data = true
  563. $("#Pu_DeviceParameter_Sensor_id").html("在线-修改数据")
  564. T_en = false
  565. if (obj.sensor[i].en == 1) {
  566. T_en = true
  567. }
  568. T_free = false
  569. if (obj.sensor[i].free == 1) {
  570. T_free = true
  571. }
  572. if(obj.sensor[i].name == "*") {
  573. form.val('example', {
  574. "S_id": Id
  575. , "S_Tlower": obj.sensor[i].Tlower
  576. , "S_Tupper": obj.sensor[i].Tupper
  577. , "S_RHlower": obj.sensor[i].RHlower
  578. , "S_RHupper": obj.sensor[i].RHupper
  579. , "S_en": T_en
  580. , "S_free": T_free
  581. });
  582. }else {
  583. form.val('example', {
  584. "S_id": Id
  585. , "S_name": obj.sensor[i].name
  586. , "S_Tlower": obj.sensor[i].Tlower
  587. , "S_Tupper": obj.sensor[i].Tupper
  588. , "S_RHlower": obj.sensor[i].RHlower
  589. , "S_RHupper": obj.sensor[i].RHupper
  590. , "S_en": T_en
  591. , "S_free": T_free
  592. });
  593. }
  594. layer.close(loading)
  595. }
  596. }
  597. break
  598. }
  599. }
  600. if (obj.type == 4) {
  601. switch (obj.msid % 10) {
  602. case 2:
  603. if(obj.set == 1){
  604. layer.close(loading)
  605. layer.msg('配置参数成功!', {
  606. offset: '6px'
  607. });
  608. //关闭当前frame
  609. parent.layer.close(parent.layer.getFrameIndex(window.name));
  610. parent.location.reload();
  611. }else {
  612. layer.close(loading)
  613. layer.msg('配置参数失败!', {
  614. offset: '6px'
  615. });
  616. }
  617. break
  618. case 3:
  619. layer.close(loading)
  620. layer.msg('配置参数成功!', {
  621. offset: '6px'
  622. });
  623. //关闭当前frame
  624. parent.layer.close(parent.layer.getFrameIndex(window.name));
  625. parent.location.reload();
  626. break
  627. }
  628. }
  629. //
  630. // if(obj && "memberstatus"==obj.type){
  631. // console.log(obj.data)
  632. // table.reload('test', {
  633. // elem: '#test'
  634. // ,data: JSON.parse(obj.data)
  635. // });
  636. // }
  637. };
  638. //连接关闭的回调方法
  639. websocket.onclose = function () {
  640. console.log("close");
  641. };
  642. //监听窗口关闭事件,当窗口关闭时,主动去关闭websocket连接,防止连接还没断开就关闭窗口,server端会抛异常。
  643. window.onbeforeunload = function () {
  644. websocket.close();
  645. console.log("onbeforeunload");
  646. };
  647. //关闭连接
  648. function closeWebSocket() {
  649. websocket.close();
  650. console.log("onbeforeunload");
  651. window.clearInterval(intervalId);
  652. }
  653. //发送消息
  654. function send(message) {
  655. websocket.send(message);
  656. }
  657. });
  658. </script>
  659. </body>
  660. <style>
  661. .tab_show {
  662. background-color: #CCE9FF;
  663. border-radius: 5px;
  664. padding: 4px;
  665. }
  666. </style>
  667. </html>