这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 企业专区 » 机智云Gizwits » 机智云Websocket API 指南

共1条 1/1 1 跳转至

机智云Websocket API 指南

高工
2015-12-24 22:10:52     打赏

1. 通讯模型

浏览器(Javascript)可以通过Web Socket API与云端直接通讯。浏览器(Javascript)通过 Web Socket API,可以控制设备和实时接收设备上报的数据。

2. 通讯流程

浏览器(Javascript)通过Web Socket API与云端通讯主要包括以下的通讯过程。

用户登陆。用户通过从Http API获得的uid和token登陆云端。

接收设备上线下线消息。只有绑定设备后才能控制设备。

发送和接收设备业务逻辑数据。

心跳。浏览器(Javascript)定期向云端发送心跳,云端回复心跳响应。

3. 约定

3.1. 协议阅读说明

●表示字符串占位符,表示整型数据占位符。

3.2. 云端Web Socket服务地址

ws://:8080/ws/app/v1

其中的为绑定设备列表中的host字段的值,如”m2m.gizwits.com”或”sandbox.gizwits.com”,请参考获取绑定设备列表HTTP API。

3.3. 注意事项

在与云端进行Web Socket交互前,用户必须已注册并已绑定了设备。

与云端交互的数据均为JSON字符串。可以通过JSON.stringify(json)把Javascript对象转化为字符串再发送给云端,或通过var res = JSON.parse(evt.data)把接收到的字符串数据转化成Javascript对象。

Web Socket的测试程序请使用http://:8080/app(为绑定设备列表中的host字段的值),也可以查看这个网页的源代码作为示例代码参考。

4. 通讯协议

4.1. 用户登陆

浏览器(Javascript)必须登陆后才能和云端作进一步的交互。

浏览器 ⇒ 云端。浏览器向云端发送以下的JSON字符串。

{

"cmd": "login_req",

"data":

{

"appid":,

"uid":,

"token":,

"p0_type": "attrs_v4"|"custom", ("attrs_v4" 指通过标准数据点协议的方式和云端交互,见下文“标准数据点操作”部分。"custom"表示使用自定义业务逻辑协议的方式与云端交互,见下文“浏览器与云端的数据交互”部分。)

"heartbeat_interval":(心跳的时间间隔,单位为秒,值必须小于等于180)

}

}

云端 ⇒ 浏览器。云端向浏览器回复以下的JSON字符串。

{

"cmd": "login_res",

"data":

{

"success": true | false (true为登陆成功,false登陆失败)

}

}

4.2. 设备上线下线通知

当设备上线或下线时,云端会主动发送通知到浏览器。

云端 ⇒ 浏览器。云端向浏览器发送以下的JSON字符串通知设备上线或下线。

{

"cmd": "s2c_online_status",

"data":

{

"did":,(上下线设备的did)

"passcode":,(上下线设备的passcode)

"mac":,(上下线设备的mac)

"online": true | false (true表示设备上线,false表示设备下线)

}

}

4.3. 浏览器与云端的数据交互(数据透传)

浏览器可以和云端交互任意符合协议的数据。协议的格式为请参考其它协议文档。 当用户在登 陆时参数"p0_type"的值等于"custom"时,只能以这种方式和云端交互数据。

浏览器 ⇒ 云端。浏览器向云端发送以下的JSON字符串。

{

"cmd": "c2s_raw",

"data":

{

"did":, (目标设备的did)

"raw": [,, ...] (自定义业务逻辑指令的内容,以byte数组方式传送,每个byte的范围必须为 0~255。该内容必须要以[0, 0, 0, 3, varLen(1~4B), 0, 0, 144]开头)

}

}

若想云端往设备转发数据,raw的值需要加上以下的协议前缀再接上发往设备的数据,即[0, 0, 0, 3, varLen(1~4B), 0, 0, 144] + 发往设备的数据,其中的varLen为可变长度,由1~4个字节(B)表示本可变长度字段后一直到数据包结尾的字节数 ,如长度小于128B,直接用一个字节(B)表示长度即可,长度大于等于128B的编码解码方式请参考MQTT_V3.1协议的可变长度(Remaining Length)定义。

云端 ⇒ 浏览器。当云端收到设备上传的数据后,云端向浏览器转发以下的JSON字符串,数据放在raw字段中。

{

"cmd": "s2c_raw",

"data":

{

"did":,(数据来源设备的did)

"raw": [,, ...](自定义业务逻辑指令的内容,以byte数组方式传送,每个byte的范围必须为 0~255)

}

}

若该数据为设备上报的数据,raw的值会带上一个协议前缀,即[0, 0, 0, 3, varLen(1~4B), 0, 0, 145] + 设备数据,其中的varLen为可变长度,定义请参考上文。

4.4. 标准数据点操作(读、写、通知)

当用户在登陆时参数"p0_type"的值等于"attrs_v4"时,云端会以标准数据点协议的方式和浏览器交互。

浏览器 ⇒ 云端。浏览器向云端发送以下的JSON字符串,读取目标设备当前的状态。

{

"cmd": "c2s_read",

"data":

{

"did":(目标设备的did)

}

}

浏览器 ⇒ 云端。浏览器向云端发送以下的JSON字符串,控制目标设备(更改目标设备的状态)。

{

"cmd": "c2s_write",

"data":

{

"did":,(目标设备的did)

"attrs":

{

"name1":, (“name1”指数据点的标识名(name),指数据点的值。值可以为true/false(bool),UTF-8编码的字符串(enum),数字或byte数组(如 [23,2,3],用于扩展类型))

"name2":,

...

}

}

}

云端 ⇒ 浏览器。设备收到读取指令或状态发生变化后,会主动发送当前状态到云端,云端向浏览器转发以下的JSON字符串。

{

"cmd": "s2c_noti",

"data":

{

"did":,(数据来源设备的did)

"attrs":

{

"name1":, (“name1”指数据点的标识名(name),指数据点的值。值可以为true/false(bool),UTF-8编码的字符串(enum),数字或byte数组(如 [23,2,3],用于扩展类型))

"name2":,

...

}

}

}

4.5. 心跳

浏览器和云端建立Web Socket连接后,需要在登陆参数"heartbeat_interval"指定的时间间隔内,定期向云端发送心跳。云端收到后会回复心跳。

浏览器 ⇒ 云端。浏览器向云端发送以下的JSON字符串。

{

"cmd": "ping"

}

云端 ⇒ 浏览器。云端向浏览器回复以下的JSON字符串。

{

"cmd": "pong"

}




关键词: 机智云     Websocket    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]