- 通讯模型
- 通讯流程
- 约定 3.1. 协议阅读说明 3.2. 云端Web Socket服务地址 3.3. 注意事项
-
通讯协议 4.1. 用户登陆 4.2. 设备上线下线通知 4.3. 浏览器与云端的数据交互(数据透传) 4.4. 标准数据点操作(读、写、通知) 4.5. 心跳 4.6. 非法消息通知 v1.0.4
-
通讯模型
浏览器(Javascript)可以通过Web Socket API与云端直接通讯。浏览器(Javascript)通过 Web Socket API,可以控制设备和实时接收设备上报的数据。
- 通讯流程
浏览器(Javascript)通过Web Socket API与云端通讯主要包括以下的通讯过程。
用户登陆。用户通过从Http API获得的uid和token登陆云端。 接收设备上线下线消息。只有绑定设备后才能控制设备。 发送和接收设备业务逻辑数据。 心跳。浏览器(Javascript)定期向云端发送心跳,云端回复心跳响应。 3. 约定
3.1. 协议阅读说明
●
3.2. 云端Web Socket服务地址
ws://
在与云端进行Web Socket交互前,用户必须已注册并已绑定了设备。
与云端交互的数据均为JSON字符串,以UTF-8的方式编码。可以通过JSON.stringify(json)把Javascript对象转化为字符串再发送给云端,或通过var res = JSON.parse(evt.data)把接收到的字符串数据转化成Javascript对象。
Web Socket的测试程序请使用http://
4.1. 用户登陆
浏览器(Javascript)必须登陆后才能和云端作进一步的交互。
浏览器 ⇒ 云端。浏览器向云端发送以下的JSON字符串。
{
"cmd": "login_req",
"data":
{
"appid":
{ "cmd": "login_res", "data": { "success": true | false (true为登陆成功,false登陆失败) } } 4.2. 设备上线下线通知
当设备上线或下线时,云端会主动发送通知到浏览器。
云端 ⇒ 浏览器。云端向浏览器发送以下的JSON字符串通知设备上线或下线。
{
"cmd": "s2c_online_status",
"data":
{
"did":
浏览器可以和云端交互任意符合协议的数据。协议的格式为请参考其它协议文档。 当用户在登 陆时参数"p0_type"的值等于"custom"时,只能以这种方式和云端交互数据。
浏览器 ⇒ 云端。浏览器向云端发送以下的JSON字符串。
{
"cmd": "c2s_raw",
"data":
{
"did":
} 若想云端往设备转发数据,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字段中。登陆参数"p0_type"的值等于"attrs_v4"时,设备以“透传业务指令”上报的数据会以本指令发往浏览器。
{
"cmd": "s2c_raw",
"data":
{
"did":
4.4. 标准数据点操作(读、写、通知)
当用户在登陆时参数"p0_type"的值等于"attrs_v4"时,云端会以标准数据点协议的方式和浏览器交互。
浏览器 ⇒ 云端。浏览器向云端发送以下的JSON字符串,读取目标设备当前的状态。陆参数"p0_type"的值等于"custom"时不允许使用本指令。
{
"cmd": "c2s_read",
"data":
{
"did":
{
"cmd": "c2s_write",
"data":
{
"did":
{
"cmd": "s2c_noti",
"data":
{
"did":
"attrs":
{
"name1":
}
}
}
4.5. 心跳
浏览器和云端建立Web Socket连接后,需要在登陆参数"heartbeat_interval"指定的时间间隔内,定期向云端发送心跳。云端收到后会回复心跳。
浏览器 ⇒ 云端。浏览器向云端发送以下的JSON字符串。
{ "cmd": "ping" } 云端 ⇒ 浏览器。云端向浏览器回复以下的JSON字符串。
{ "cmd": "pong" } 4.6. 非法消息通知
当浏览器向云端发送的消息不合法或收到设备上报的数据不合法时,云端会下发此消息通知浏览器。
云端 ⇒ 浏览器。云端向浏览器发送以下的JSON字符串通知有非法消息。
{
"cmd": "s2c_invalid_msg",
"data":