本文档介绍浏览器(Javascript)通过Web Socket API与机智云云端直接通讯,从而控制设备和实时接收设备上报的数据的方法。
1、可通过淘宝或天猫网站购买卓虎硬件设备。
淘宝:
天猫:
2、注册卓虎智能APP
在腾讯应用宝中搜索“卓虎智能”,并下载安装,安装完成后打开APP进行注册。
使用统一的APPID:1d5b0ff021614f42a44954c362d65992。
通过Http API获得的uid和token,调试步骤参考《卓虎-机智云OpenAPI开发指南》第2节的类容。
接口结构体如下:
POST
Header:'Content-Type: application/json'
'Accept: application/json'
'X-Gizwits-Application-Id: 1d5b0ff021614f42a44954c362d65992'
Body:{
"username": "你的app登录账号",
"password": "你的app登录密码",
"lang": "en"
}
请求URL:https://api.gizwits.com/app/login
响应体:
{
"token": "你的token",
"uid": "你的uid",
"expire_at": 1589611982
}
响应码:200
通过Http API获得的绑定设备信息,试步骤参考《卓虎-机智云OpenAPI开发指南》第3节的类容。
接口结构体如下:
GET
Header:'Accept: application/json'
'X-Gizwits-Application-Id: 1d5b0ff021614f42a44954c362d65992'
'X-Gizwits-User-token: 登录时获得的token'
请求URL:https://api.gizwits.com/app/bindings?limit=20&skip=0
响应体:
{
"devices": [
{
"protoc": 3,
"ws_port": 8080,
"port_s": 8883,
"wifi_soft_version": "04020801",
"gw_did": "",
"sleep_duration": 0,
"port": 1883,
"product_key": "41e95421a36f41b5ad2565b1c7391522",
"state_last_timestamp": 1575042577,
"role": "special",
"is_sandbox": false,
"type": "normal",
"product_name": "WiFi单相开关电测模块LCD版",
"is_disabled": false,
"host": "m2m.gizwits.com",
"dev_alias": "2",
"mesh_id": null,
"is_online": false,
"dev_label": [],
"wss_port": 8880,
"remark": "",
"did": "你的设备did",
"mac": "你的设备mac",
"passcode": "TTPDISLOPV",
"is_low_power": false
}
]
}
响应码:200
机智云WebsocketAPI说明链接:http://docs.gizwits.com/zh-cn/Cloud/WebsocketAPI.html
在线Websocket测试工具:http://coolaf.com/tool/chattest
浏览器(Javascript)必须登陆后才能和云端作进一步的交互。
1、非加密连接地址:ws://<host>:<ws_port>/ws/app/v1
2、加密连接地址:wss://<host>:<wss_port>/ws/app/v1
注:其中的<host>、<ws_port>、<wss_port>分别为第3.3节中获取的绑定设备列表中的host、ws_port、wss_port字段的值
调试结果如图:
浏览器 ⇒ 云端。浏览器向云端发送以下的JSON字符串。
{ |
注:设备uid和token为第3.2节中获取的绑定设备列表中的uid、token字段的值。
云端 ⇒ 浏览器。云端向浏览器回复以下的JSON字符串。
{ |
调试结果如图:
用户只有订阅了已绑定的设备消息,才可以接收与设备相关的消息。
浏览器 ⇒ 云端。浏览器向云端发送以下的JSON字符串定阅设备消息。
{ |
注:设备did为第3.3节中获取的绑定设备列表中的did字段的值。
云端 ⇒ 浏览器。云端向浏览器发送以下的JSON字符串返回定阅结果。
{ |
调试结果如图:
订阅成功后就可以获取到设备信息啦!
浏览器和云端建立Web Socket连接后,需要在登陆参数”heartbeat_interval”指定的时间间隔内,定期向云端发送心跳。云端收到后会回复心跳。
浏览器 ⇒ 云端。浏览器向云端发送以下的JSON字符串。
{ |
云端 ⇒ 浏览器。云端向浏览器回复以下的JSON字符串。
{ |
调试结果如图:
浏览器 ⇒ 云端。浏览器向云端发送以下的JSON字符串。
{ "cmd": "c2s_raw", "data": { "did": <str>, (目标设备的did) "raw": [<byte>, <byte>, ...] (自定义业务逻辑指令的内容,以byte数组方式传送,每个byte的范围必须为 0~255。该内容必须要以[0, 0, 0, 3, varLen(1~4B), 0, 0, 144]开头) }
} |
云端 ⇒ 浏览器。当云端收到设备上传的数据后,云端向浏览器转发以下的JSON字符串,数据放在raw字段中。
{
|
调试结果如图:
浏览器 ⇒ 云端。浏览器向云端发送以下的JSON字符串,读取目标设备当前的状态。
{
|
浏览器 ⇒ 云端。浏览器向云端发送以下的JSON字符串,控制目标设备(更改目标设备的状态)。
{ |
云端 ⇒ 浏览器。设备收到读取指令或状态发生变化后,会主动发送当前状态到云端,云端向浏览器转发以下的JSON字符串
{
|
控制设备开关调试: