作者:admin于 2018年08月24日 发布在分类 / 产品相关 / 云平台 / 三方接入 下,并于 2018年10月25日 编辑
    2018-10-25 16:02:10版本: MIOC 标准接入协议 网关与云端-MQTT-架构V2.0
    历史版本

    修改日期 修改人 备注
    2020-07-16 10:58:58[当前版本] admin 修正
    2020-07-16 10:32:15 admin 增加设备发现协议
    2019-05-16 15:59:58 admin 增加遗愿消息
    2019-01-02 14:36:28 admin 修正协议

    一、建立与MQTT服务器的连接


    HOST : auth.mqtt.9iot.cn

    PORT : 1883


    USERNAME : 请登录厂商运营系统查看。

    PASSWORD 请登录厂商运营系统查看。


    CLIENT ID : 请根据设备情况,写入设备全球唯一标识。一般为设备/WIFI 模块MAC地址。 16字节,不足末尾补零。


    二、MQTT发布与订阅 TOPIC 格式约定


    设备端:


    发布  : /${cust_id}/${product_id}/${client_id}/update

           订阅 : /${cust_id}/${product_id}/${client_id}/get

           故障上报: /${cust_id}/${product_id}/${client_id}/alert


    客户端 :

    发布  : /${cust_id}/${product_id}/${client_id}/set

    订阅 : /${cust_id}/${product_id}/${client_id}/get

    三、指令说明。


    1)协议结构说明

    字段

    大小(byte)

    描述

    协议头

    version

    2

    版本号   此处为0002

    length

    2

    数据包大小

    header_crc

    2

    协议头校验码

    协议体

    body

    Length - 8

    数据体

    body_crc

    2

    数据体校验码










    Version :  版本号(公有协议 0001 开始,私有协议 0501开始)

    Length : 完整协议包大小

    Header_crc : 协议头校验码。采用的多项式为CRC-16/CCITT的16位循环校验码


    Body : 数据体,以下为数据体结构定义

    字段

    大小(byte)

    描述

    PackageType

    1

    协议包类型

    Command

    2

    应用命令字

    Data

    不定长

    数据




    PackageType :协议包类型,用于应用层消息逻辑处理方式。以下为协议包类型值约定:


    字节值

    描述

    0x00

    Message,无需回复协议包类型

    0x01

    Get,需回复协议包类型,用于请求获取数据回复

    0x02

    Set,需回复协议包类型,用于设置数据需返回设置成功与否

    0x03

    Result,无需回复协议包类型,用于set/get类型正确回复包,序列号与set和get包相同

    0x04

    Error,无需回复协议包类型,用于set/get类型错误回复包,序列号与set和get包相同




    Command : 应用命令字,以下为值约定:

    数据包类型

    command

    source数据来源

    设备登录认证

    0x0001

    设备

    设备数据上传

    0x0002

    设备

    发送设备控制指令

    0x0003

    Server

    时间同步

    0x0004

    设备

    心跳包

    0xFFFF

    设备

    发送设备查询指令

    0X0005

    Server

    数据透传

    0x0010

    Server/设备




    2)设备与服务端建立连接之后,应首先发送设备认证数据包。以下为设备认证指令说明与实例:

    分类

    描述

    长度[字节]

    字段名

    数据样例

    Header

    2

    VERSION/版本

    0002

    2

    LENGTH/长度

    0000

    2

    Header_CRC/头部校验码

    0000

    PayLoad

    1

    PackgeType   / 协议包类型

    01

    2

    Command / 数据包类型

    0001



    16 MAC ADDRESS /设备标识

    0000000000000001000

    0 ( ASCII 不足末尾补零)



    8 Suite ID / 套件标识
    01(不足末尾补零)  当设备为单品或者网关时全部为00

    20

    USERNAME / 用户名对应APPID

    [BG73ivJHX6OFxxxxXXXX]

    ASCII

    16

    PASSWORD / 密码对应PRODUCT_ID

    5D31FF4CA98943E9955A025C9CAC23F3

    1

    Device Type / 设备类型

    00 网关固定为00

    2

    PayLoad_CRC / 数据体校验码

    0000


    RES:


    分类

    描述

    长度

    字段名

    数据样例

    Header

    2

    version

    0002

    2

    length

    0000

    2

    header_crc

    0000

    Payload

    Defination

    1

    PackageTypeee

    03

    2

    Command

    0001

    Date


    1

    RES

    00(成功) 01(认证失败)

    Tail

    2

    CRC

    0000










    设备(Device Type)类型说明:

    设备

    标识(1byte)

    网关 0x00

    电视

    0x01

    0x02

    空调

    0x03

    空气净化器

    0x04

    插座

    0x05

    单开开关

    0x06

    扫地机器人

    0x07

    窗帘

    0x08

    加湿器

    0x09

    风扇

    0x0A

    暖奶机

    0x0B

    豆浆机

    0x0C

    电热水壶

    0x0D

    饮水机

    0x0E

    电饭煲

    0x0F

    热水器

    0x10

    烤箱

    0x11

    净水器

    0x12

    冰箱

    0x13

    机顶盒

    0x14

    洗衣机

    0x16

    智能床

    0x17

    香薰机

    0x18

    0x19

    空气开关

    0x1A

    温度传感器

    0x1B

    烟雾传感器

    0x1C

    可燃气体传感器

    0x1D

    PM2.5传感器

    0x1E

    人体传感器

    0x1F

    光照传感器

    0x20

    雨水传感器

    0x21




















































    3)设备认证通过之后,应根据实际持续情况上报心跳包:

    此处应结合接入设备和上层应用的实际情况,合理选择心跳包上传频率及方案。一般情况下,如设备在接受云端指令之外的动作触发(如机械或者红外等方案),应即时通过心跳方式将当前状态上报上来。

    如设备某些参数时刻变化,如传感器类设备,则建议按一定时间间隔上报最新状态。


    分类

    描述

    长度[字节]

    字段名

    数据样例

    Header

    2

    VERSION/版本

    0002

    2

    LENGTH/长度

    0000

    2

    Header_CRC/头部校验码

    0000

    PayLoad

    1

    PackgeType   / 协议包类型

    00

    2

    Command / 数据包类型

    FFFF



    8 Suite ID / 套件标识 01...

    1

    Device Type / 设备类型

    00

    不定长

    结合实际情况,一般可将设备当前状态值上报上来

    0000

    2

    PayLoad_CRC / 数据体校验码

    0000


    心跳发送约定

    1、设备上电入网,认证通过,立即发送至少一次心跳

    2、设备状态改变(包括且不限于,MIOC系统控制/外界条件触发/传统渠道如遥控、功能按钮),立即发送至少一次

    3、一定时间间隔,如60s


    4)云端接受各客户终端的控制请求,向设备发送控制指令:


    分类

    描述

    长度[字节]

    字段名

    数据样例

    Header

    2

    VERSION/版本

    0002

    2

    LENGTH/长度

    0000

    2

    Header_CRC/头部校验码

    0000

    PayLoad

    1

    PackgeType   / 协议包类型

    02

    2

    Command / 数据包类型

    0003

    1

    Device Type / 受控设备类型

    套件类型:01

    单品类型:02



    8 Suite ID / 套件标识

    1A01[不足末尾补零

    ]

    若受控设备为单品,则此值全部为0



    1 Control Type / 控制类型 01

    2

    Control Value / 控制设值

    0001

    2

    PayLoad_CRC / 数据体校验码

    0000


    设备应反馈控制结果:


    分类

    描述

    长度[字节]

    字段名

    数据样例

    Header

    2

    VERSION/版本

    0002

    2

    LENGTH/长度

    0000

    2

    Header_CRC/头部校验码

    0000

    PayLoad

    1

    PackgeType   / 协议包类型

    03

    2

    Command / 数据包类型

    0002

    1

    Control Type / 控制类型

    01

    1

    Control Value / 控制设值

    00

    1

    RESULT / 控制结果

    00[SUCCESS]

    01[FAILD]

    2

    PayLoad_CRC / 数据体校验码

    0000


    5)云端接受各客户终端的查询请求,向设备发送查询指令:


    分类

    描述

    长度[字节]

    字段名

    数据样例

    Header

    2

    VERSION/版本

    0002

    2

    LENGTH/长度

    0000

    2

    Header_CRC/头部校验码

    0000

    PayLoad

    1

    PackgeType   / 协议包类型

    02

    2

    Command / 数据包类型

    0005

    1

    Query Type / 查询类型

    01 [为查询所有状态值]

    2

    PayLoad_CRC / 数据体校验码

    0000


    设备应反馈查询结果:


    分类

    描述

    长度[字节]

    字段名

    数据样例

    Header

    2

    VERSION/版本

    0002

    2

    LENGTH/长度

    0000

    2

    Header_CRC/头部校验码

    0000

    PayLoad

    1

    PackgeType   / 协议包类型

    03

    2

    Command / 数据包类型

    0002

    1

    Device Type / 设备类型

    01

    不定长

    结合实际情况

    0000

    2

    PayLoad_CRC / 数据体校验码

    0000

    6)云端接受各客户终端的请求,向网关发起进入套件配对模式指令

    分类

    描述

    长度[字节]

    字段名

    数据样例

    Header

    2

    VERSION/版本

    0002

    2

    LENGTH/长度

    0000

    2

    Header_CRC/头部校验码

    0000

    PayLoad

    1

    PackgeType   / 协议包类型

    02

    2

    Command / 数据包类型

    0003

    1

    Device Type / 受控设备类型

    套件类型:01



    8

    Suite ID / 套件标识

    此时全部为零



    1

    Control Type / 控制类型

    18

    2

    Control Value / 控制设值

    0000

    2

    PayLoad_CRC / 数据体校验码

    0000



    设备应反馈控制结果:


    分类

    描述

    长度[字节]

    字段名

    数据样例

    Header

    2

    VERSION/版本

    0002

    2

    LENGTH/长度

    0000

    2

    Header_CRC/头部校验码

    0000

    PayLoad

    1

    PackgeType   / 协议包类型

    03

    2

    Command / 数据包类型

    0002



    8 Suite ID / 套件标识 此时全部为零

    1

    Control Type / 控制类型

    18

    2

    Control Value / 控制设值

    0000

    1

    RESULT / 控制结果

    00[SUCCESS]

    01[FAILD]

    2

    PayLoad_CRC / 数据体校验码

    0000


    7)云端接收客户端指令,向网关发起套件解绑指令

    分类

    描述

    长度[字节]

    字段名

    数据样例

    Header

    2

    VERSION/版本

    0002

    2

    LENGTH/长度

    0000

    2

    Header_CRC/头部校验码

    0000

    PayLoad

    1

    PackgeType   / 协议包类型

    02

    2

    Command / 数据包类型

    0003

    1

    Device Type / 受控设备类型

    套件类型:01



    8

    Suite ID / 套件标识

    需解绑套件标识



    1

    Control Type / 控制类型

    19

    2

    Control Value / 控制设值

    0000

    2

    PayLoad_CRC / 数据体校验码

    0000



    设备应反馈控制结果:


    分类

    描述

    长度[字节]

    字段名

    数据样例

    Header

    2

    VERSION/版本

    0002

    2

    LENGTH/长度

    0000

    2

    Header_CRC/头部校验码

    0000

    PayLoad

    1

    PackgeType   / 协议包类型

    03

    2

    Command / 数据包类型

    0002



    8 Suite ID / 套件标识 解绑套件标识

    1

    Control Type / 控制类型

    19

    2

    Control Value / 控制设值

    0000

    1

    RESULT / 控制结果

    00[SUCCESS]

    01[FAILD]

    2

    PayLoad_CRC / 数据体校验码

    0000


    8)OTA升级:


    a、检查对应可接入设备的最新版本

    https://mioc.9iot.cn/api/base/standard/v1/ota/versioncheck?mac=5CCF7FCCF2390000

    MAC 设备MAC地址


    返回示例

    RES:



    {
        "item":null,
        "version":null,
        "xt_userinfo_realName":null,
        "mtdpimg_base_url":null,
        "mtdpimg_base_path_url":null,
        "mtdpsources_base_url":null,
        "mtdpsources_base_path_url":null,
        "xt_attachmentPath":null,
        "sessionId":null,
        "firmware_id":"7A7B4BA1BB304AAFAE2D696189E0DA35",
        "firmware_name":"test3",
        "firmware_version":"3",
        "size":"4096",
        "url":"https://mioc.9iot.cn/xtCommonController/downFile?xt_attachment_id=88F0A49C908D46108AEEBB9C206AF685",
        "signtype":"1",
        "description":"test 3",
        "access_device_id":"97BA42A50BFE4AC68D59CCCF226D6456",
        "path":"88F0A49C908D46108AEEBB9C206AF685"
    }


    其中:


    firmware_version 为最新固件版本号,请设备端自行与当前版本号进行比对,是否需要更新

    size  为最新固件包大小,byte

    url    为最新固件包下载地址,通过版本号的比对,如需更新则使用此地址进行固件下载

    signtype 为密钥算法 暂未启用



    9)云端要求设备重发认证指令:

    分类        

    描述       

    长度[字节]        

    字段名                    

    数据样例      

    Header

    2

    VERSION/版本

    0001

    2

    LENGTH/长度

    0000

    2

    Header_CRC/头部校验码

    0000

    PayLoad

    1

    PackgeType   / 协议包类型

    02

    2

    Command / 数据包类型

    0003



    1 Device Type / 受控设备类型
    02


    8 Suite ID/套件标识
    此处全部00


    1 Contorl Type/控制类型
    7C

    2

    Contorl value/控制设值

    0000

    2 PayLoad_CRC / 数据体校验码 0000

    设备重新认证:

    重发认证包


    MIOTO WIKI-V3.2.0