文档中心
智城云 文档中心

概述

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值不存在则返回空。

  • 参数说明
参数名称 说明
name 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

  • 消息响应

成功时

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(…)后才能调用。查询设备状态时调用该函数。

  • 参数说明
参数名称 说明
to 需要查询状态的设备id
  • 调用说明
    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)

  • 函数说明

本函数用于处理登录用户被踢掉的情况,一般需要清除相关缓存,跳转页面。

  • 消息格式
1
2
3
{
"cmd": "kickoff"
}
  • 参数说明
参数名称 说明
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

  • 参数说明
  • 示例说明
    1
    2
    3
    4
    5
    6
    var callBackList = {};	
    function errorCallBack(data) {
    deleteCookie("token");
    alert("系统异常,请刷新页面重新登录");
    }
    callBackList["error"] = errorCallBack;

closeCallBack(data)

  • 函数说明

本函数用于处理websocket链接关闭或者长连接服务链接断开的异常。

  • 消息格式
1

  • 参数说明
  • 示例说明
    1
    2
    3
    4
    5
    6
    var callBackList = {};	
    function closeCallBack(data) {
    deleteCookie("token");
    alert("系统异常,请刷新页面重新登录");
    }
    callBackList["close"] = closeCallBack;

unsubscribWxErrorCallBack(data)

  • 函数说明

本函数用于处理登录并关联微信失败,用户未绑定到微信,非微信可不处理。

  • 消息格式
1

  • 参数说明
  • 示例说明
    1
    2
    3
    4
    5
       var callBackList = {};	
    function unsubscribWxErrorCallBack(data) {
    alert("登录并关联微信失败,用户未绑定到微信");
    }
    callBackList["unsubscribWxError"] = unsubscribWxErrorCallBack;

webchatBindErrorCallBack(data)

  • 函数说明

本函数用于处理登录并关联微信失败,用户没绑定到app,非微信可不处理。

  • 消息格式
1

  • 参数说明
  • 示例说明
    1
    2
    3
    4
    5
    var callBackList = {};	
    function webchatBindErrorCallBack(data) {
    alert("登录并关联微信失败,用户没绑定到app");
    }
    callBackList["webchatBindError"] = webchatBindErrorCallBack;

existBindErrorCallBack(data)

  • 函数说明

本函数用于处理登录并关联微信失败,已经关联到该用户,非微信可不处理。

  • 消息格式
1

  • 参数说明
  • 示例说明
    1
    2
    3
    4
    5
    var callBackList = {};	
    function existBindErrorCallBack(data) {
    alert("登录并关联微信失败,已经关联到该用户");
    }
    callBackList["existBindError"] = existBindErrorCallBack;

otherBindCallBack(data)

  • 函数说明

本函数用于处理登录并关联微信失败,该用户已被其他微信号绑定,非微信可不处理。

  • 消息格式
1

  • 参数说明
  • 示例说明
    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>

`