概述
HTML,JSP等前端显示层页面可以通过直接调用封装在javascript中的函数集合即WebSocketSDK与智城云WebSocket服务器直接通讯,从而实现用户登录,设备列表抓取,设备状态查看,设备控制等操作。
名词解释
名词 |
含义 |
client |
websocket初始化客户端 |
loginParam |
登录参数列表对象 |
listenners |
系统事件监听器函数列表对象 |
callbackList |
客户端操作回调函数列表对象 |
MachtalkClient |
websocket客户端初始化函数 |
WebSocketSDK安装
点击下载WebSocketSDK
把machtalk_ws_sdk.js文件复制到项目内,并在JSP页面内引用如:<script src="./machtalk_ws_sdk.js"></script>
系统函数说明
setCookie(name, value, hours, path)
本函数用于设置cookie值,保存登录状态或者其他一些页面状态缓存。
参数名称 |
说明 |
name |
cookie名称 |
value |
cookie值 |
hours |
从目前开始计时的失效小时数 |
path |
指定cookie访问路径 |
调用说明
1
| setCookie("key",value, 2, "/");
|
消息响应
无
无
getCookieValue(name)
本函数用于获取设置的cookie值,如果cookie值不存在则返回空。
1
| var value = getCookieValue("key");
|
无
无
deleteCookie(name, path)
本函数用于删除已经设置的cookie值,在系统异常时常用
参数名称 |
说明 |
name |
cookie名称 |
path |
指定cookie访问路径 |
1
| deleteCookie("key","/");
|
无
无
MachtalkClient(id, params, subscribeStatus, listeners, callbacks)
核心函数,用于初始化websocket客户端链接,初始化订阅,注册监听器以及回调函数,执行登录操作等。
参数名称 |
说明 |
id |
用户id,这里专指用户电话号码 |
params |
登录参数对象,如果是初次登录必须包含用户名密码pid等,如果是二次登录,则需要传入系统鉴权token |
subscribeStatus |
设备消息订阅标志,如果不想接受设备相关消息,置为false |
listeners |
用户自己组装的监听器列表 |
callbacks |
用户自己组装的回调函数列表 |
- 调用说明
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| // 登录参数 var params = { "id": usr,//用户名或者手机号码 "usr": usr,//用户名或者手机号码 "pwd": pwd,//md5加密后的密码 "platformId": pid, //平台id "token": null, //登录鉴权信息 } // 监听列表 var listenners = { "kickoff": userKickOffListener,//用户登录状态被踢监听函数 "online": deviceOnlineListener,//设备上线监听函数 "offline": deviceOfflineListener,//设备下线监听函数 "post": devicePostListener,//设备上报信息监听函数(操作设备回调函数,查询设备状态回调函数) "alarm": deviceAlarmListener,//设备上报告警监听函数 "fault": deviceFaultListener //设备上报故障监听函数 } // 回调列表 var callbackList = { //系统异常回调函数 "error": errorCallBack,//系统异常状态回调函数 "close": closeCallBack,//服务器连接关闭异常回调函数 //用户登录回调函数 "loginSuccess": loginSuccessCallBack,//登录成功回调函数 "loginFailure": loginFailureCallBack,//登录失败回调函数 //获取设备列表回调函数 "getDevs": getDevsCallBack,//获取设备列表回调函数
//以下为微信登录关联失败专用回调函数,一般web页面可不处理 "unsubscribWxError": unsubscribWxErrorCallBack,//登录并关联微信失败,用户未绑定到微信回调函数,非微信可不处理 "webchatBindError": webchatBindErrorCallBack,//登录并关联微信失败,用户没绑定到app回调函数,非微信可不处理 "existBindError": existBindErrorCallBack,//登录并关联微信失败,已经关联到该用户,非微信可不处理 "otherBind": otherBindCallBack//登录并关联微信失败,该用户已被其他微信号绑定,非微信可不处理 } var client = new MachtalkClient(id, params, true, listenners, callbackList); //在客户端初始化完毕时登录操作自动执行,用户需要在回调列表中的loginSuccess或者失败函数中进行回调操作。 //第一次登录时,需要设置cookie,将系统返回的健全token存入cookie中,以便后面的页面二次鉴权使用。 //登录操作以及回调详见下面详细描述。
|
login()
本函数属于内部函数,需要在初始化var client = new MachtalkClient(…)后才能调用。本函数在初始化client后自动调用。
成功时
1 2 3 4 5 6 7
| { "apikey": "32位字符串", "cmd": "resp", "mid": mid, "success": 1, "token":"ws_+32位字符串" }
|
参数说明
参数名称 |
说明 |
cmd |
命令类型,此处为resp |
mid |
消息序号 |
apikey |
服务器生成的一个随机数,用于其他数据接口鉴权 |
success |
鉴权结果,1 |
token |
成功鉴权后返回的一个令牌信息,可以用来后期鉴权 |
失败时
1 2 3 4 5 6
| { "msg": "错误描述", "cmd": "resp", "mid": mid, "success": 0 }
|
参数说明
参数名称 |
说明 |
cmd |
命令类型,此处为resp |
mid |
消息序号 |
success |
鉴权结果,0 |
msg |
错误描述枚举:1、您正在执行重新登录操作,原登录失效 2、系统异常,请重新登录 3、用户尚未关注微信 4、用户尚未关联app账号 5、获取用户信息异常 6、没有找到该用户 7、该微信已关联用户,请不要重复绑定 8、该用户已被其他微信号绑定 9、用户名或者密码错误 10、参数错误,缺少用户名,密码或者平台id 11、系统异常,请稍候再试 12、登陆失败,请检查登录参数 |
1 2 3 4 5 6 7 8 9
| "loginSuccess": function (data) { //登录成功后保存cookie信息 setCookie("key", data.token, 2, "/"); //查询设备列表 client.getDevs(); }, "loginFailure": function (data) { window.location.href = "index.html"; }
|
getDevs()
本函数属于内部函数,需要在初始化var client = new MachtalkClient(…)后才能调用。查询设备列表时调用该函数。
调用说明
client.getDevs();
消息响应
成功时
1 2 3 4 5 6
| { "cmd": "resp", "mid": mid, "success": 1, "devList": [devObj1, devObj2..] //devObj为json对象,包含did,name,firm,product,model,online等字段 }
|
参数说明
参数名称 |
说明 |
cmd |
命令类型,此处为resp |
mid |
消息序号 |
devList |
设备列表 |
did |
设备id |
name |
设备名称 |
firm |
设备所属厂商 |
product |
设备所属产品 |
model |
设备型号 |
online |
设备在线状态 |
失败时
1 2 3 4 5 6
| { "msg": "错误描述", "cmd": "resp", "mid": mid, "success": 0 }
|
参数说明
参数名称 |
说明 |
cmd |
命令类型,此处为resp |
mid |
消息序号 |
success |
鉴权结果,0 |
msg |
错误描述枚举:1、请先进行登录操作 2、获取设备列表失败 |
- 示例说明
首先需要初始化回调函数,并作为入参初始化MachtalkClient。回调函数参考WebSocketSDK回调和监听函数说明。
1 2 3 4
| "getDevs": function (data) { // 对空指针进行过滤 renderDeviceList(data.devList); }
|
query(to)
本函数属于内部函数,需要在初始化var client = new MachtalkClient(…)后才能调用。查询设备状态时调用该函数。
调用说明
client.query(to);
消息响应
成功时
1 2 3 4 5 6 7 8 9 10 11
| { "cmd": "resp", "mid": mid, "code": 0, "as": { "1": 2, "2": 3, …… }, "fids": [1, 23, 45] }
|
参数说明
参数名称 |
说明 |
cmd |
命令类型,此处为resp |
mid |
消息序号 |
code |
操作结果码,为0表示操作成功,非0表示错误码信息 |
as |
as(attributes)表示设备属性集合,集合对象中每个键值对表示设备的一个属性。键值对的键为设备属性的编号,键值对中的值表示设备属性的值。比如空调有两个属性:开关和模式,用 1表示开关,2表示模式。而开关有两个状态(开和关),表示为1和0,模式有四个状态(制冷、制热、换气、除湿),表示为1,2,3,4,如果此时空调的状态为打开,模式为除湿,则可以表示为: “as”:{“1”:1,”2”:4} |
fids |
当设备出现故障时,携带故障码列表 |
失败时
1 2 3 4 5 6
| { "msg": "错误描述", "cmd": "resp", "mid": mid, "success": 0 }
|
参数说明
参数名称 |
说明 |
cmd |
命令类型,此处为resp |
mid |
消息序号 |
success |
鉴权结果,0 |
msg |
错误描述枚举:1、请先进行登录操作 2、获取设备状态失败 |
- 示例说明
首先需要初始化回调函数,并作为入参初始化MachtalkClient。回调函数参考WebSocketSDK回调和监听函数说明。1 2 3 4
| "query": function (data) { // 渲染当前设备卡片的显示 renderDevice(data); }
|
opt(to,as)
本函数属于内部函数,需要在初始化var client = new MachtalkClient(…)后才能调用。操作设备时调用该函数。
参数名称 |
说明 |
to |
需要操作的设备id |
as |
设备属性以及操作值列表,json对象,key为属性id,value为属性值 |
1 2
| var as = {"10": "1"}; client.opt(to, as);
|
成功时
1 2 3 4 5 6 7 8 9 10 11
| { "cmd": "post", "mid": mid, "from": "deviceId", "as": { "1": 2, "2": 3, …… }, "fids": [1, 23, 45] }
|
参数说明
参数名称 |
说明 |
cmd |
命令类型,此处为offline |
mid |
当客户端操作设备时,需要对操作设备的命令进行响应,mid的值与控制命令的mid相同,以便标识当前消息时对控制命令的响应,举例如下:设备收到操作设备的命令如下:{“cmd”:”opt”,”mid”:mid,”as”:{“1”:3}}则如果设备响应成功,进行回复时,发送如下内容:{“cmd”:”post”,”mid”:mid,”as”:{“1”:3}}另外:如果是设备主动上报状态变化,无需携带mid |
from |
此处为设备ID,用于标识消息的来源,from的值与opt命令中的to保持一致 |
as |
(attributes缩写)设备属性集合,集合对象中每个键值对表示设备的一个属性。键值对的键为设备属性的编号,键值对中的值表示设备属性的值。比如空调有两个属性:开关和模式,用 1表示开关,2表示模式。而开关有两个状态(开和关),表示为1和0,模式有四个状态(制冷、制热、换气、除湿),表示为1,2,3,4,如果此时空调的状态为打开,模式为除湿,则可以表示为: “as”:{“1”:1,”2”:4} |
fids |
当设备出现故障时,携带故障码列表 |
失败时
1 2 3 4 5 6
| { "msg": "错误描述", "cmd": "resp", "mid": mid, "success": 0 }
|
参数说明
参数名称 |
说明 |
cmd |
命令类型,此处为resp |
mid |
消息序号 |
success |
鉴权结果,0 |
msg |
错误描述枚举:1、请先进行登录操作 2、获取设备状态失败 |
首先需要初始化回调函数,并作为入参初始化MachtalkClient。回调函数参考WebSocketSDK回调和监听函数说明。
1 2 3 4
| "post": function (data) { //更新渲染当前设备卡片的显示 renderDevice(data); }
|
系统回调和监听函数说明
userKickOffListener(data)
本函数用于处理登录用户被踢掉的情况,一般需要清除相关缓存,跳转页面。
参数名称 |
说明 |
cmd |
命令类型,此处为kickoff,为data中的属性 |
- 示例说明
1 2 3 4 5 6 7 8
| var listeners = {}; function userKickOffListener(data) { if(data.cmd == "kickoff"){ alert("您的帐号在其他地点登录,您已被迫下线,如需使用请重新登录!"); deleteCookie("key"); } } listeners["kickoff"] = userKickOffListener;
|
devicePostListener(data)
本函数用于处理设备上报信息以及操作设备返回消息,查询设备状态返回消息
- 消息格式
第一种是查询设备状态返回的消息内容,cmd命令类型为resp
1 2 3 4 5 6 7 8 9 10 11
| { "cmd":"resp", "mid":mid, "code":0, "as":{ "1":2, "2":3, …… } "fids":[1,23,45] }
|
第二种是操作设备返回的或者设备主动上报的消息内容,cmd命令类型为post
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| { "cmd": "post", "mid": 1, "from": "deviceId", "as": { "1": 2, "2": 3 }, "fids": [ 1, 23, 45 ] }
|
参数名称 |
说明 |
cmd |
命令类型,为resp时是查询设备状态返回消息;为post时是操作设备返回或者设备主动上报消息内容。 |
code |
查询操作返回时存在,操作结果码,为0表示操作成功,非0表示错误码信息 |
mid |
当客户端操作设备时,需要对操作设备的命令进行响应,mid的值与控制命令的mid相同,以便标识当前消息时对控制命令的响应 |
from |
操作设备返回时或者设备主动上报消息时携带,此处为设备ID,用于标识消息的来源,from的值与opt命令中的to保持一致 |
as |
(attributes缩写)设备属性集合,集合对象中每个键值对表示设备的一个属性。键值对的键为设备属性的编号,键值对中的值表示设备属性的值。比如空调有两个属性:开关和模式,用 1表示开关,2表示模式。而开关有两个状态(开和关),表示为1和0,模式有四个状态(制冷、制热、换气、除湿),表示为1,2,3,4,如果此时空调的状态为打开,模式为除湿,则可以表示为: “as”:{“1”:1,”2”:4} |
fids |
当设备出现故障时,携带故障码列表 |
- 调用说明
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| var listeners = {}; function devicePostListener(data) { // 设备id var deviceId = data.from; var valueList = data.as; if (valueList == null || valueList == "" || valueList == undefined) { return; } else { // 假如设备属性key为1代表设备开关机,那么可以做如下操作 if (valueList["1"] != null && valueList["1"] != "" && valueList["1"] != undefined) { renderDeviceOn(deviceId, valueList["1"]); } } } listeners["post"] = devicePostListener;
|
deviceAlarmListener(data)
本函数用于处理设备上报告警,一般需要给出弹框等提示。
1 2 3 4 5 6 7 8
| { "cmd":"alarm", "from":"deviceId", "aid":[10,5,6], "ts":"timestamp", "title":"alarm title", "msg":"alarm message" }
|
参数名称 |
说明 |
cmd |
命令类型,此处为alarm |
from |
此处为设备ID,用于标识消息的来源 |
aid |
(attribute id缩写)设备属性编号信息,定义成三元组形式,三元组的第一个元素为属性编号;第二个元素为属性值;第三个元素表示告警级别,1、2、3、4保留未使用 5:表示设备通知消息 6:表示设备告警消息 |
ts |
时间戳(1970年1月1日0点0分0秒到现在的秒数) |
title |
表示告警标题,有的话带上 |
msg |
表示告警对应的文字描述信息,用于在客户端显示告警信息 |
- 示例说明
1 2 3 4 5 6 7
| var listeners = {}; function deviceAlarmListener(data) { if(data.cmd == "alarm"){ alert(data.msg); } } listeners["alarm"] = deviceAlarmListener;
|
deviceFaultListener(data)
本函数用于处理设备故障上报,一般需要给出弹框等提示。
1 2 3 4 5 6
| { "cmd":"fault", "from":"deviceId", "ts":"timestamp", "fids":[110,119,120] }
|
参数名称 |
说明 |
cmd |
命令类型,此处为fault |
from |
此处为设备ID,用于标识消息的来源 |
fids |
故障码的集合 |
ts |
时间戳(1970年1月1日0点0分0秒到现在的秒数) |
- 示例说明
1 2 3 4 5 6 7 8
| //根据具体故障码给出相应提示 var listeners = {}; function deviceFaultListener(data) { if(data.cmd == "fault"){ alert("deviceId为"+data.from+"的设备发生了故障"); } } listeners["fault"] = deviceFaultListener;
|
deviceOnlineListener(data)
本函数用于处理设备上线,一般需要进行页面渲染或者上线提示。
1 2 3 4
| { "cmd": "online", "from": "deviceid" }
|
参数名称 |
说明 |
cmd |
命令类型,此处为online |
from |
设备ID,用于标识哪个设备上线 |
- 示例说明
1 2 3 4 5 6 7 8
| var listeners = {}; function deviceOnlineListener(data) { if(data.cmd == "online"){ // 查询设备状态 client.query(data.from); } } listeners["online"] = deviceOnlineListener;
|
deviceOfflineListener(data)
本函数用于处理设备下线,一般需要进行页面渲染或者下线提示。
1 2 3 4
| { "cmd": "offline", "from": "deviceid" }
|
参数名称 |
说明 |
cmd |
命令类型,此处为offline |
from |
设备ID,用于标识哪个设备下线 |
- 示例说明
1 2 3 4 5 6 7 8
| var listeners = {}; function deviceOfflineListener(data) { if(data.cmd == "offline"){ // 渲染下线设备页面显示 renderDeviceOffLine(data.from); } } listeners["offline"] = deviceOfflineListener;
|
loginSuccessCallBack(data)
本函数用于处理用户登录成功的页面渲染或者设备列表查询或者设备状态查询。
1 2 3 4 5 6 7
| { "apikey": "32位字符串", "cmd": "resp", "mid": mid, "success": 1, "token":"ws_+32位字符串" }
|
参数名称 |
说明 |
cmd |
命令类型,此处为resp |
mid |
消息序号 |
apikey |
服务器生成的一个随机数,用于其他数据接口鉴权 |
success |
鉴权结果,1 |
token |
成功鉴权后返回的一个令牌信息,可以用来后期鉴权 |
- 示例说明
1 2 3 4 5 6 7 8
| var callBackList = {}; function loginSuccessCallBack(data) { // 保存token setCookie("token", data.token, 2, "/"); // 查询设备列表进行渲染 client.getDevs(); } callBackList["loginSuccess"] = loginSuccessCallBack;
|
loginFailureCallBack(data)
本函数用于处理用户登录失败后的提示或者重新登录操作。
1 2 3 4 5 6
| { "msg": "错误描述", "cmd": "resp", "mid": mid, "success": 0 }
|
参数名称 |
说明 |
cmd |
命令类型,此处为resp |
mid |
消息序号 |
success |
鉴权结果,0 |
msg |
错误描述枚举:1、您正在执行重新登录操作,原登录失效 2、系统异常,请重新登录 3、用户尚未关注微信 4、用户尚未关联app账号 5、获取用户信息异常 6、没有找到该用户 7、该微信已关联用户,请不要重复绑定 8、该用户已被其他微信号绑定 9、用户名或者密码错误 10、参数错误,缺少用户名,密码或者平台id 11、系统异常,请稍候再试 12、登陆失败,请检查登录参数 |
- 示例说明
1 2 3 4 5 6 7 8
| var callBackList = {}; function loginFailureCallBack(data) { // 删除token deleteCookie("token"); // 失败提示 alert(data.msg); } callBackList["loginFailure"] = loginFailureCallBack;
|
getDevsCallBack(data)
本函数用于处理查询设备列表后的页面渲染。
1 2 3 4 5 6
| { "msg": "错误描述", "cmd": "resp", "mid": mid, "success": 0 }
|
参数名称 |
说明 |
cmd |
命令类型,此处为resp |
mid |
消息序号 |
success |
鉴权结果,0 |
msg |
错误描述枚举:1、您正在执行重新登录操作,原登录失效 2、系统异常,请重新登录 3、用户尚未关注微信 4、用户尚未关联app账号 5、获取用户信息异常 6、没有找到该用户 7、该微信已关联用户,请不要重复绑定 8、该用户已被其他微信号绑定 9、用户名或者密码错误 10、参数错误,缺少用户名,密码或者平台id 11、系统异常,请稍候再试 12、登陆失败,请检查登录参数 |
- 示例说明
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| var callBackList = {}; function getDevsCallBack(data) { var devList = data.devs; if (devList == null || devList.length == 0) { //设备列表为空 return; } else { //渲染设备列表 for (var i = 0; i < devList.length; i++) { var device = devList[i]; var model = device.firm + device.product + device.model; //查询设备状态 if (device.online == 0) { //设备不在线 renderCLOffLine(device.did); } else { //设备在线,发送查询设备状态命令 client.query(device.did); } } } } callBackList["getDevs"] = getDevsCallBack;
|
errorCallBack(data)
本函数用于处理系统异常,通常给出弹框提示或者页面跳转。
- 示例说明
1 2 3 4 5 6
| var callBackList = {}; function errorCallBack(data) { deleteCookie("token"); alert("系统异常,请刷新页面重新登录"); } callBackList["error"] = errorCallBack;
|
closeCallBack(data)
本函数用于处理websocket链接关闭或者长连接服务链接断开的异常。
- 示例说明
1 2 3 4 5 6
| var callBackList = {}; function closeCallBack(data) { deleteCookie("token"); alert("系统异常,请刷新页面重新登录"); } callBackList["close"] = closeCallBack;
|
unsubscribWxErrorCallBack(data)
本函数用于处理登录并关联微信失败,用户未绑定到微信,非微信可不处理。
- 示例说明
1 2 3 4 5
| var callBackList = {}; function unsubscribWxErrorCallBack(data) { alert("登录并关联微信失败,用户未绑定到微信"); } callBackList["unsubscribWxError"] = unsubscribWxErrorCallBack;
|
webchatBindErrorCallBack(data)
本函数用于处理登录并关联微信失败,用户没绑定到app,非微信可不处理。
- 示例说明
1 2 3 4 5
| var callBackList = {}; function webchatBindErrorCallBack(data) { alert("登录并关联微信失败,用户没绑定到app"); } callBackList["webchatBindError"] = webchatBindErrorCallBack;
|
existBindErrorCallBack(data)
本函数用于处理登录并关联微信失败,已经关联到该用户,非微信可不处理。
- 示例说明
1 2 3 4 5
| var callBackList = {}; function existBindErrorCallBack(data) { alert("登录并关联微信失败,已经关联到该用户"); } callBackList["existBindError"] = existBindErrorCallBack;
|
otherBindCallBack(data)
本函数用于处理登录并关联微信失败,该用户已被其他微信号绑定,非微信可不处理。
- 示例说明
1 2 3 4 5
| var callBackList = {}; function otherBindCallBack(data) { alert("登录并关联微信失败,该用户已被其他微信号绑定"); } callBackList["otherBind"] = otherBindCallBack;
|
完整例程
调用WebSocketSDK相关函数时,首先需要引用如下javascript类库:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172
| <script src="http://cdn.bootcss.com/stomp.js/2.3.3/stomp.min.js"></script> <script src="https://cdn.bootcss.com/sockjs-client/1.1.4/sockjs.min.js"></script> <!DOCTYPE html> <html> <head> <title>stomp</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <script src="http://cdn.bootcss.com/stomp.js/2.3.3/stomp.min.js"></script> <script src="https://cdn.bootcss.com/sockjs-client/1.1.4/sockjs.min.js"></script> <script src="./machtalk_ws_sdk.js"></script> <script type="text/javascript"> var client; function login() { var usr = document.getElementById("usr").value; var pwd = document.getElementById("pwd").value; var platformId = document.getElementById("platformId").value; var id = usr; var flag = false; if (usr == null || usr == undefined || usr == "") { setMessageInnerHTML("请先输入账号"); return; }
if (pwd == null || pwd == undefined || pwd == "") { setMessageInnerHTML("请先输入密码"); return; } if (usr != null && usr != undefined && usr != "" && pwd != null && pwd != undefined && pwd != "") { flag = true; } if (platformId == null || platformId == undefined || platformId == "") { setMessageInnerHTML("请先输入pid"); return; } if (!flag) { setMessageInnerHTML("请先输入账号和密码,或openid,或token登陆"); return; }
//1、定义登录参数 var params = { "id": id, "usr": usr, "pwd": pwd, "platformId": platformId }
//2、定义监听列表 var listenners = { "kickoff": function (data) { setMessageInnerHTML("您的登录状态被T,后台返回数据为:" + JSON.stringify(data)); }, "online": function (data) { setMessageInnerHTML("设备上线,后台返回数据为:" + JSON.stringify(data)); }, "offline": function (data) { setMessageInnerHTML("设备下线,后台返回数据为:" + JSON.stringify(data)); }, "post": function (data) { setMessageInnerHTML("设备上报数据,后台返回数据为:" + JSON.stringify(data)); }, "alarm": function (data) { setMessageInnerHTML("设备上报告警,后台返回数据为:" + JSON.stringify(data)); }, "fault": function (data) { setMessageInnerHTML("设备上报故障,后台返回数据为:" + JSON.stringify(data)); } }
//3、定义回调列表 var callbackList = { "error": function (data) { setMessageInnerHTML("系统异常"); }, "close": function (data) { setMessageInnerHTML("cs链接异常,需要重新连接websocket或者刷新页面重连"); }, "loginSuccess": function (data) { setMessageInnerHTML("您收到了登录反馈消息,登录成功,后台返回数据为:" + JSON.stringify(data)); }, "loginFailure": function (data) { setMessageInnerHTML("您收到了登录反馈消息,登录失败,后台返回数据为:" + JSON.stringify(data)); }, "unsubscribWxError": function (data) { setMessageInnerHTML("您收到了登录反馈消息,登录失败,后台返回数据为:" + JSON.stringify(data)); }, "webchatBindError": function (data) { setMessageInnerHTML("您收到了登录反馈消息,登录失败,后台返回数据为:" + JSON.stringify(data)); }, "existBindError": function (data) { setMessageInnerHTML("您收到了登录反馈消息,登录失败,后台返回数据为:" + JSON.stringify(data)); }, "otherBind": function (data) { setMessageInnerHTML("您收到了登录反馈消息,登录失败,后台返回数据为:" + JSON.stringify(data)); }, "opt": function (data) { setMessageInnerHTML("您收到了opt反馈消息,登录失败,后台返回数据为:" + JSON.stringify(data)); }, "getDevs": function (data) { setMessageInnerHTML("您收到了getDevs反馈消息,后台返回数据为:" + JSON.stringify(data)); }, "query": function (data) { setMessageInnerHTML("您收到了query反馈消息,后台返回数据为:" + JSON.stringify(data)); } } //4、初始化客户端 client = new MachtalkClient(id, params, listenners, callbackList); }
//5、查询设备列表 function getDevs() { if (client == null) { setMessageInnerHTML("请先登录"); return; } client.getDevs(function (data) { setMessageInnerHTML("getDevs反馈,data" + JSON.stringify(data)); }); setMessageInnerHTML("发送getDevs命令"); }
//6、查询设备状态 function query() { if (client == null) { setMessageInnerHTML("请先登录"); return; } var to = "120000001000000015"; client.query(to, function (data) { setMessageInnerHTML("query反馈,data" + JSON.stringify(data)); }); setMessageInnerHTML("发送query命令to,120000001000000015"); }
//7、操作设备 function opt() { if (client == null) { setMessageInnerHTML("请先登录"); return; } var as = { "1": 1 }; var to = ",120000001000000015"; client.opt(to, as, function (data) { setMessageInnerHTML("opt反馈,data" + JSON.stringify(data)); }); setMessageInnerHTML("发送opt命令to,120000001000000015,as" + JSON.stringify(as)); }
function setMessageInnerHTML(innerHTML) { document.getElementById('message').innerHTML += innerHTML + '<br/>'; } </script> </head> <body> 用户名<input type="text" id="usr" value="18660473575"/> 密码<input type="text" id="pwd" value="b51a070455d29c06927e3b8d7727ec1a"/> platformId<input type="text" id="platformId" value="6"/> <button onclick="login()">登录</button> <button onclick="getDevs()">查询设备列表</button> <button onclick="query()">查询设备状态</button> <button onclick="opt()">操作设备</button> <hr/> <div id="message"></div> </body> </html>
|
`