Welcome to drohoO !
软件下载  |  咨询热线:17798243918
机智云云端WebSocketAPI开发指南

点击下载此文档


1、 概述

本文档介绍浏览器(Javascript)通过Web Socket API与机智云云端直接通讯,从而控制设备和实时接收设备上报的数据的方法

2、 卓虎硬件及APP

1、可通过淘宝或天猫网站购买卓虎硬件设备。

淘宝:

https://shop198103868.taobao.com/shop/view_shop.htm?spm=a1z0k.7628869.0.0.6ea43db2H9N0NJ&shop_id=198103868

天猫:

https://drohoo.tmall.com/search.htm?spm=a1z10.1-b-s.w5001-23966200193.6.646823660B1DwA&search=y&scene=taobao_shop

2、注册卓虎智能APP

在腾讯应用宝中搜索“卓虎智能”,并下载安装,安装完成后打开APP进行注册。

       

 

3、 获取登录信息

3.1、 获取APPID

使用统一的APPID1d5b0ff021614f42a44954c362d65992

3.2、 获取uidtoken

通过Http API获得的uidtoken调试步骤参考《卓虎-机智云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

3.3、 获取绑定设备信息

通过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

4、 云端socket登录

机智云WebsocketAPI说明链接:http://docs.gizwits.com/zh-cn/Cloud/WebsocketAPI.html

在线Websocket测试工具:http://coolaf.com/tool/chattest

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

4.1、 云端socket地址

1非加密连接地址ws://<host>:<ws_port>/ws/app/v1
2加密连接地址wss://<host>:<wss_port>/ws/app/v1

注:其中的<host><ws_port><wss_port>分别3.3节中获取的绑定设备列表中的hostws_portwss_port字段的值

调试结果如图:

 

4.2、 用户登录

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

{
    "cmd": "login_req",
    "data":
    {
        "appid": "1d5b0ff021614f42a44954c362d65992",
        "uid": "登录时获取的uid",
        "token": "登录时获取的token",
        "p0_type": "attrs_v4",
        "heartbeat_interval": 180,
        "auto_subscribe": false
    }
}

注:设备uidtoken3.2节中获取的绑定设备列表中的uidtoken字段的值

 

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

{
    "cmd": "login_res",
    "data":
    {
        "success": true | false true为登陆成功,false登陆失败)
    }
}

调试结果如图:

 

 

 

5、 订阅设备消息

用户只有订阅了已绑定的设备消息,才可以接收与设备相关的消息。

浏览器 云端。浏览器向云端发送以下的JSON字符串定阅设备消息。

{
    "cmd": "subscribe_req",
    "data":
    [
        {"did": 设备did1 },
        {"did": 设备did2 },
        ……
    ]
}

注:设备did3.3节中获取的绑定设备列表中的did字段的值

 

云端 浏览器。云端向浏览器发送以下的JSON字符串返回定阅结果。

{
    "cmd": "subscribe_res",
    "data":
    {
        "success":
        [
            {
                "did": <str>,(对应请求的设备did1
                "error_code": 0,0表示成功)
                "msg": <str>(描述文本)
            },
            {
                "did": <str>,(对应请求的设备did2
                "error_code": 0,0表示成功)
                "msg": <str>(描述文本)
            },
            ……
         ],
         “failed”:
         [
            {
                "did": <str>,(对应请求的设备did1
                "error_code": <int>,(订阅失败的错误码)
                "msg": <str>(描述文本)
            },
            {
                "did": <str>,(对应请求的设备did2
                "error_code": <int>,(订阅失败的错误码)
                "msg": <str>(描述文本)
            },
            ……
         ]
    }
}

调试结果如图:

 

订阅成功后就可以获取到设备信息啦!

6、 心跳

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

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

{
    "cmd": "ping"
}

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

{
    "cmd": "pong"
}

调试结果如图:

 

7、 数据透传

浏览器 云端。浏览器向云端发送以下的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字段中。

{
    "cmd": "s2c_raw",
    "data":
    {
        "did": <str>,(数据来源设备的did)
        "raw": [<byte>, <byte>, ...](自定义业务逻辑指令的内容,以byte数组方式传送,每个byte的范围必须为 0~255)
    }
}

 

调试结果如图:

 

 

 

8、 数据点操作

8.1、 读数据

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

{
    "cmd": "c2s_read",
    "data":
    {
        "did": <str>,(目标设备的did
        "names": [<str>, <str>, …] (变长数据点可选参数:传入需要读取的数据点名称,参数省略表示读取全部数据点;定长数据点读操作忽略该参数)
    }
}

 

8.2、 写命令

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

{
    "cmd": "c2s_write",
    "data":
    {
        "did": <str>,(目标设备的did)
        "attrs":
        {
            "name1": <value1>, (“name1”指数据点的标识名(name),<value1>指数据点的值。值可以为true/false(布尔型),Unicode编码的字符串如u62bd(枚举型),数字(数值型),byte数组[23,2,3](扩展类型)
            "name2": <value2>,
            ...
        }}}

8.3、 云端回复

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

{
    "cmd": "s2c_noti",
    "data":
    {
        "did": <str>,(数据来源设备的did)         
        "attrs":
        {
            "name1": <value1>, (“name1”指数据点的标识名(name)<value1>指数据点的值。值可以为true/false(布尔型)Unicode编码的字符串如u62bd(枚举型),数字(数值型),byte数组[23,2,3](扩展类型)
            "name2": <value2>,
             ...          
        }
    }
}

 

控制设备开关调试:

 

结束