Files
UdpPlugWebsocket/html/switch.htm
2019-11-27 23:57:48 +08:00

207 lines
6.2 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html lang="en" >
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=480" />
<title>Websocket开关</title>
<link rel="stylesheet" href="css/normalize.min.css">
<link rel="stylesheet" href="css/style.css">
<SCRIPT src="./main/jquery-1.8.3.min.js"></SCRIPT>
<script src="./main/reconnecting-websocket.min.js" ></script>
<SCRIPT src="main/JustGage.js"></SCRIPT>
</head>
<body>
<h1>Websocket 开关控制器<a href="www.miuser.net" target="blank"></a></h1>
<!-- Inspiration https://dribbble.com/shots/525358-Buttons-Lights-Shadows?list=searches&tag=toggle_button&offset=10 -->
<h2 class="headingOuter"><div align="center" id="online" >点击控制电源插座</div></h2>
<div class="toggle toggle--knob">
<input type="checkbox" checked onclick="setSwitch()" id="toggle--knob" class="toggle--checkbox">
<label class="toggle--btn" for="toggle--knob"><span class="toggle--feature" data-label-on="on" data-label-off="off"></span></label>
</div>
<h2><div align="center" id="device_online" >设备状态未知</div></h2>
<h2><div align="center" id="ID" >ID:0000000000 </div><div align="center" id="msg" >created by miuser</div></h2>
</body>
<script>
var socket;
var TTL;
var remoteSWStatus
// window.onerror=function (message) {
// try{
// console.log(message);
// }
// catch(ex){}
// }
var repeatLoopUpdateSwitch
window.onload = function(){
try{
connect();
var ID=getUrlParam("ID");
$("#ID").html("ID:"+ID);
document.getElementsByTagName("title")[0].innerText = "开关 ID:"+ID;
repeatLoopUpdateSwitch=setInterval("LoopUpdateSwitch()",3000)
}
catch(ex){}
}
window.onbeforeunload = function() {
try {
socket.close();
socket = null;
} catch(ex) {}
};
//从URL参数栏取得参数
function getUrlParam(name)
{
var reg = new RegExp("(^|&)"+ name +"=([^&]*)(&|$)"); //构造一个含有目标参数的正则表达式对象
var r = window.location.search.substr(1).match(reg); //匹配目标参数
if (r!=null) return decodeURI(r[2]); return null; //返回参数值
}
//连接websocket
function connect() {
var host = "ws://box.miuser.net:9000/";
socket = new ReconnectingWebSocket(host);
try {
socket.onopen = function(msg) {
//alert("连接成功!");
$("#msg").html("服务器连接成功");
HeartBeat();
};
socket.onmessage = function(rsv) {
var respond=rsv.data.toString();
var source=respond.substring(7,9);
var len=parseInt(respond.substring(2,4));
var content=respond.substring(39,len-2);
if (source==="01")
{
if(content==="Air208ONOK")
{
remoteSWStatus="ON"
}
if(content==="Air208OFFOK")
{
remoteSWStatus="OFF"
}
TTL=600;
sendstatus="Done";
}
};
socket.onclose = function(msg) {
//alert("socket closed!")
$("#msg").html("伺服器连接异常");
};
} catch(ex) {
log(ex);
}
}
function HeartBeat() {
var ID=getUrlParam("ID");
var MM=getUrlParam("MM");
var msg = "004832A08"+ID+MM+"1234Air208STAT05";
socket.send(msg);
}
setInterval("HeartBeat()",300000);
function OnlineDetect() {
if (TTL>0)
{
$("#device_online").html("设备正常");
}else
{
$("#device_online").html("设备离线");
}
TTL=TTL-1;
}
setInterval("OnlineDetect()",1000);
function SendCMD(cardcmd)
{
var ID=getUrlParam("ID");
var MM=getUrlParam("MM");
if(cardcmd=="on") socket.send("004832A08"+ID+MM+"1234Air208ON05");
if(cardcmd=="off") socket.send("004932A08"+ID+MM+"1234Air208OFF05");
}
var repeatLoopExeCMD
function setSwitch()
{
sendstatus="";
//先执行一次再每3s执行一次
LoopExeCMD();
repeatLoopExeCMD=setInterval("LoopExeCMD()",3000)
}
//发送指令,直到状态被同步
function LoopExeCMD()
{
//设备不在线则不发送
if (TTL<0) return;
//sw是反向的true 是 关闭false 是打开
var sw=document.getElementById("toggle--knob")
if ((sw.checked === true) &&(remoteSWStatus!="OFF"))
{
SendCMD("off");
$("#online").html("正在更新开关状态...");
remoteSWStatus="UNKNOWN";
}
else if ((sw.checked === false) &&(remoteSWStatus!="ON"))
{
SendCMD("on");
$("#online").html("正在更新开关状态...");
remoteSWStatus="UNKNOWN";
}else
{
if (remoteSWStatus=="ON")
{
$("#online").html("开关状态:打开");
}
if (remoteSWStatus=="OFF")
{
$("#online").html("开关状态:关闭");
}
clearInterval(repeatLoopExeCMD);
}
}
//更新程序打开时的开关状态
function LoopUpdateSwitch()
{
//设备不在线则不发送
if (TTL<0) return;
//sw是反向的true 是 关闭false 是打开
var sw=document.getElementById("toggle--knob")
if ((remoteSWStatus!="ON")&&(remoteSWStatus!="OFF"))
{
HeartBeat();
$("#online").html("正在更新开关状态...");
remoteSWStatus="UNKNOWN";
}
else
{
if (remoteSWStatus=="ON")
{
$("#online").html("开关状态:打开");
$("#toggle--knob").attr("checked",false);
}
if (remoteSWStatus=="OFF")
{
$("#online").html("开关状态:关闭");
$("#toggle--knob").attr("checked",true);
}
clearInterval(repeatLoopUpdateSwitch);
}
}
</script>
</html>