207 lines
6.2 KiB
HTML
207 lines
6.2 KiB
HTML
|
|
<!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>
|