网关 MCU 通用对接协议

更新时间:2022-11-24 09:20:17下载pdf

涂鸦 Wi-Fi 串口协议是针对涂鸦 Wi-Fi 模组定制的串口协议,主要用于涂鸦 Wi-Fi 模组与其它 MCU 串口直连完成串口通信。

串口协议通信示意图如下。

网关 MCU 通用对接协议

串口通信要求

  • 波特率:115200
  • 数据位:8
  • 奇偶校验:无
  • 停止位:1
  • 数据流控:无
  • MCU:用户控制板控制芯片,与涂鸦模组通过串口对接。

帧格式

字段 长度(字节) 说明
帧头 2 固定为 0x55aa
版本 1 MCU 软件版本号,升级扩展时使用
命令字 1 具体的命令字
数据长度 2 采用大端模式
数据 取决于具体数据 传输的数据
校验和 1 从帧头开始按字节求和,得出的结果对 256 求余。

状态数据单元格式

数据段 长度(字节) 说明
dpid 1 功能点序号
type 1 对应开放平台上功能点具体的数据类型:
  • raw:raw 型功能点(模组输入)
    • 表示值:0x00
    • 长度(字节):N
  • bool:布尔型,取值为 0x00 或 0x01
    • 表示值:0x01
    • 长度(字节):1
  • value:对应 int 类型,大端表示
    • 表示值:0x02
    • 长度(字节):4
  • string:对应字符串
    • 表示值:0x03
    • 长度(字节):N
  • enum:枚举类型,取值范围 0~255
    • 表示值:0x04
    • 长度(字节):1
  • bitmap:故障型,长度大于 1 字节时,大端表示
    • 表示值:0x05
    • 长度(字节):1、2 或 4
len 2 长度对应 value 的字节数(大端)
value 1/2/4/N hex 表示,大于 1字节采用大端传输

基础协议

查询产品信息

产品信息由 PID(产品 ID)和 MCU 软件版本号构成。

  • PID:对应涂鸦 IoT 平台的产品标识,由涂鸦 IoT 平台生成,用于云端记录产品相关信息。
  • MCU 软件版本号:采用点分十进制形式,格式为:x.x.x,x 为十进制数并且 0<=x<=99。

模组发送

字段 长度(字节) 说明
帧头 2 0x55aa
版本 1 支持以下两个版本:
  • 0x00:不支持获取产品 PID
  • 0x01:支持获取产品 PID
命令字 1 0x01
数据长度 2 0x0000
数据 0
校验和 1 从帧头开始按字节求和,然后将得出的结果对 256 求余

示例:0x55aa 00 01 0000 00

MCU 返回

字段 长度(字节) 说明
帧头 2 0x55aa
版本 1 0x00 或 0x01
命令字 1 0x01
数据长度 2 N
数据 取决于具体数据 参见示例
校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

示例:{"v":"1.0.0", "m":1, "cap":0, "p":"mhnmpqzf7ntzm***", "n":0, "s":0, "a":0}

  • v:MCU 版本号。示例为:1.0.0。

  • m:配网方式。

    • 0:默认配网

    说明:常配网工作模式。模组出厂上电后处于待配网状态,如果不对模组进行配网操作改变网络状态,模组会一直保持

    • 1:低功耗

    说明:当模组处于配网状态三分钟后未被用户配走模组便退出配网状态,进入低功耗状态,需要重新收到重置命令才会重新进入配网模式。

    • 2:特殊配网(防误触配网)

    说明:当收到MCU的命令重置后,三分钟都没有配上网,模组会重连原来配置的WiFi。其余和低功耗配网表现一致。

  • cap:设备支持的能力,取值为十六进制转十进制后的数值。比特位对应功能如下:

    • bit0:支持本地群组
    • bit1:支持本地场景
    • bit2:支持功能点(网关带有DP功能)
    • bit4:支持 MCU 升级
    • bit5:群组控制指令支持 sub_id
    • bit7: 取消心跳管理,该位置位后网关不再发送心跳包,由 MCU 主动
      控制子设备的在线/离线状态

      说明:例如,设备不支持本地群组(bit0 为 0),不支持本地场景(bit1 为 0),但支持功能点(bit2 为 1),即十六进制数据为 0000 0000 0000 0100,即 cap 值为 4。

  • p:产品 PID。示例中 PID 为 mhnmpqzf7ntz****

  • n(可选):配网模式。

    • 无该字段:SmartConfig 和 AP 配网模式互相切换。

    • 0:SmartConfig 和 AP 配网模式共存。

      说明:选择此配网模式后,重置 Wi-Fi 选择配网模式 指令操作失效,重置后依然为 SmartConfig 和 AP 共存的配网模式。

    • 1:仅支持 AP 配网模式。

      说明:产品只能通过 AP 连接的方式进行设备配网。选择此配网模式后,重置 Wi-Fi 选择配网模式 指令操作失效,重置后依然为 AP 配网模式。

  • s(可选):是否为安防网关,需要安防能力支持,默认不支持安防能力。

    • 0:普通网关,无安防能力。
    • 1:安防网关,具备安防能力。
  • a(可选):设备功能能力值。数据是 1 字节 8 位的数据,每个数位对应一个种功能。MCU 必须使用对应的功能。

    • bit0:例如,表示安防网关功能时,是否支持安防报警信息显示:0 表示不支持;1 表示支持。

      说明:新对接的网关需要强制设置为 1,以减少 MCU 开发量,对应命令为0xC104

    • bit1~7:预留功能点。必须设置为默认填充 0。

查询 MCU 设定模组的工作模式

模组工作模式主要针对如何指示 Wi-Fi 的工作状态以及如何重置 Wi-Fi,主要分两种方式。

  • MCU 与模组配合处理

    • Wi-Fi 工作状态显示:由 MCU 提供显示支持。
    • Wi-Fi 重置: MCU 检测出 Wi-Fi 的重置需求,通过串口通知模组重置 Wi-Fi。
  • 模组自处理:

    • Wi-Fi 工作状态显示:通过 Wi-Fi 的 GPIO 引脚驱动 LED 显示。
    • Wi-Fi 重置:通过检测 GPIO 输入需求处理。Wi-Fi 检测 GPIO 入口低电平持续 5s 以上触发 Wi-Fi 重置。指示灯与按钮所使用的 GPIO 管脚由以下命令配置。

模组发送

字段 长度(字节) 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x02
数据长度 2 0x0000
数据 0
校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

示例:0x55aa 00 02 0000 01

MCU 返回

字段 长度(字节) 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x02
数据长度 2
  • 0x0000:MCU 与模组配合处理模式,MCU 需实现重置 Wi-Fi 选择配置模式中提及的功能。
  • 0x0004:模组自处理模式。
数据 0/2 数据长度为 4,Port 范围为 0~3 依次代表 A~D。Pin 范围为 0~7。
  • Data[0]:Wi-Fi 指示灯 port
  • Data[1]:Wi-Fi 指示灯 pin
  • Data[2]:重置按键 port
  • Data[3]:重置按键 pin
校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

示例:

  • 0x55aa 00 02 0000 04( MCU 与模组配合处理)
  • 0x55aa 00 02 0004 0103 0102 0C(模组自处理,指示灯 0x0103:PB_3,重置按钮 0x0102:PB_2)

报告设备联网状态

说明:如果模组工作模式为模组自处理,则 MCU 无需实现本协议。

  • 当模组检测到 MCU 重启或 MCU 断线再上线的过程,则主动下发 Wi-Fi 状态至 MCU。
  • 当模组的 Wi-Fi 状态发生变化,主动下发 Wi-Fi 状态至 MCU。
设备联网状态 描述 状态值
状态1 SmartConfig 配置状态 0x00
状态2 AP 配置状态 0x01
状态3 Wi-Fi 已配置但未连上路由器 0x02
状态4 Wi-Fi 已配置且连上路由器 0x03
状态5 已连上路由器且连接到云端 0x04
状态6 Wi-Fi 设备处于低功耗模式 0x05
状态7 SmartConfig 和 AP 共存配置状态 0x06

模组自处理工作模式相应的 LED 显示分别为:

  • 1:间隔闪烁 250ms
  • 2:间隔闪烁 1500ms
  • 3:熄灭状态
  • 4:长亮状态
  • 5:长亮状态
  • 6:熄灭状态
  • 7 :间隔闪烁 250ms

模组发送

字段 长度(字节) 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x03
数据长度 2 0x0001
数据 1 显示 Wi-Fi 工作状态。
0x00:状态1
0x01:状态2
0x02:状态3
0x03:状态4
0x04:状态5
0x05:状态6
0x06:状态7
校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

示例:0x55aa 00 03 0001 00 03

MCU 返回

字段 长度(字节) 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x03
数据长度 2 0x0000
数据 0
校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

示例:0x55aa 00 03 0000 02

重置 Wi-Fi

说明:如果模组工作模式为模组自处理,则 MCU 无需实现本协议。

  • 重置 Wi-Fi 状态转化如下图所示。

    网关 MCU 通用对接协议

  • 模组自处理 Wi-Fi 重置方法:Wi-Fi 检测 GPIO 入口低电平持续 5s 以上触发 Wi-Fi 重置。

MCU 发送

字段 长度(字节) 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x04
数据长度 2 0x0000
数据 0
校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

示例:0x55aa 00 04 0000 03

模组返回

字段 长度(字节) 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x04
数据长度 2 0x0000
数据 0
校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

示例:0x55aa 00 04 0000 03

重置 Wi-Fi 并选择配置模式

说明:如果模组工作模式为模组自处理,则 MCU 无需实现本协议。

MCU 接入用户可选择性的实现该协议。

MCU 发送

字段 长度(字节) 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x05
数据长度 2 0x0001
数据 1 0x00:进入SmartConifg配置模式
0x01:进入AP配置模式
校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

示例:0x55aa 00 05 0001 00 05,进入SmartConfig配置模式

模组返回

字段 长度(字节) 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x05
数据长度 2 0x0000
数据 0
校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

示例:0x55aa 00 05 0000 04

允许子设备入网

App 发送允许入网指令至网关,允许子设备在指定时间内接入网络。

模组发送

字段 长度(字节) 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x06
数据长度 2 0x0000
数据 0
校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

MCU 返回

字段 长度(字节) 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x06
数据长度 2 0x0000
数据 0
校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

关闭子设备入网

App 发送关闭入网指令至网关。

模组发送

字段 长度(字节) 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x07
数据长度 2 0x0000
数据 0
校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

MCU 返回

字段 长度(字节) 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x07
数据长度 2 0x0000
数据 0
校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

添加子设备

  • MCU 发送子设备入网请求至 Wi-Fi。

  • pk_type 为可选字段,默认值为1。

  • channel 对于子设备需要 OTA 功能时一定要传输,默认为10。硬件开发>新增自定义固件>升级通道号

    注意:channel 配置错误可能导致 OTA 功能异常。

MCU 发送

字段 长度(字节) 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x08
数据长度 2 N
数据 N
  • 数据示例:
    {
    “pk_type”:xx
    “sub_id”:“xxxx”,
    “pid”:“xxxx”,
    “ver”:“x.x.x”,
    “channel”:xxx,
    “ota”:x
    }
  • 参数说明:
    • pk_type: 用户自定义产品类型,可不传。
    • sub_id: 子设备标识,通常为 MAC 地址,芯片 ID 等,需要保证唯一性。不能为0000.0000等表示网关本身的通用标识。
    • pid: 产品 ID。
    • ver:版本号,例如:1.0.0
    • channel:通道号。对应于涂鸦云创建产品后,上传拓展固件的升级通道号。默认值为 10。
    • ota:表示子设备是否支持 OTA 能力,默认不支持。0:表示不支持;1:表示支持。
校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

模组返回

字段 长度(字节) 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x08
数据长度 2 0x0001
数据 1 0x00 接收请求
0x01 拒绝请求 (子设备实际是否入网成功,详见返回添加设备结果
校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

删除子设备

App 发送关闭入网指令至网关。

模组发送

字段 长度(字节) 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x09
数据长度 2
数据 取决于具体数据
  • 数据示例:
    {
    “sub_id”:“xxxx”,
    “devkey”:“xxx”,
    “tp”:xx
    }
  • 参数说明:
    • sub_id:需要删除的子设备 ID。
    • Devkey:可选,设备密钥,用于子设备移除。
    • tp:
      • 0: 移除子设备。
      • 1:App 恢复出厂设置。
校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

MCU 返回

字段 长度(字节) 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x09
数据长度 2 0x0000
数据 0
校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

心跳检测

Wi-Fi 模组定时查询子设备心跳。查询周期和子设备数量相关,子设备数量越多,子设备心跳查询间隔越频繁。

网关 MCU 通用对接协议

模组发送

字段 长度(字节) 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x0A
数据长度 2
数据 取决于具体数据
  • 数据示例:{ “sub_id”:“xxxx” }
  • 参数说明:sub_id 为子设备 ID。
校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

MCU 返回

说明: 在线的设备需要回复心跳,连续 2 个心跳周期不回复,则识别为设备离线。

字段 长度(字节) 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x0A
数据长度 2
数据 取决于具体数据
  • 数据示例:{ “sub_id”:“xxxx”,“lp”:x }
  • 参数说明:
    • sub_id:子设备ID
    • lp:子设备功耗类型
      • 0:标准功耗设备
      • 1:低功耗设备
校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

查询状态

用于同步子设备状态。

模组发送

字段 长度(字节) 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x0B
数据长度 2
数据 0
校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

MCU 返回状态上报

下发命令

控制命令下发。

  • 功能点命令或状态数据部分除 raw 类型外,其他类型均属于 obj 型。
  • 可同时下发多个功能点命令
  • 命令下发为异步处理协议,对应于 MCU 的状态上报

功能点命令或状态数据单元格式见此处说明。

模组发送

字段 长度(字节) 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x0C
数据长度 2
数据 取决于具体数据
  • 数据示例:id_len(1byte) + sub_id(nbyte)+ datapoint
  • 参数说明:
    • id_len: 子设备 ID 长度
    • sub_id: 子设备 ID。
      说明:当 sub_id 为 0000 时,代表命令下发至网关自身(主设备)的功能点
    • datapoint: 控制命令功能点的集合
校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

状态上报

子设备接收到命令下发后进行回复或接收到状态变化后主动推送该指令。
功能点命令或状态数据单元格式见此处说明。
MCU 发送

字段 长度(字节) 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x0D
数据长度 2
数据 取决于具体数据
  • 数据示例:id_len(1byte) + sub_id(nbyte)+ datapoint
  • 参数说明:
    • id_len: 子设备 ID 长度
    • sub_id: 子设备 ID。
      说明:当 sub_id 为 0000 时,代表命令下发至网关自身(主设备)的功能点
    • datapoint: 控制命令功能点的集合
校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

加入群组

支持将子设备加入本地群组。

模组发送

字段 长度(字节) 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x0E
数据长度 2
数据 取决于具体数据
  • 数据示例:子设备12、34 和 56 加入群组 01,数据显示为{ "gid":"01", "cids":["12","34","56"] }
  • 参数说明:
    • gid:群组 ID
    • cids:加入群组的子设备 ID 集合
校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

MCU 返回

字段 长度(字节) 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x0E
数据长度 2
数据 取决于具体数据
  • 数据示例:{ "gid":"12", "cids":["12","34","56"], "rets":[0,0,0] }
  • 参数说明:
    • gid:表示群组 ID
    • cids:加入群组的子设备集合
    • rets:返回结果结合
      • 0:添加成功
      • 1:超过群组数上限
      • 2:子设备超时
      • 3:设置值超出范围
      • 4:写文件错误
      • 5:其他错误
校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

群组子设备删除

本地群组子设备删除。

模组发送

字段 长度(字节) 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x0F
数据长度 2
数据 取决于具体数据
  • 数据示例:子设备 12 从群组 01 中删除,{ "gid":"01", "cids":["12"] }
  • 参数说明:
    • gid:群组 ID
    • cids:子设备 ID 集合
校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

MCU 返回

字段 长度(字节) 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x0F
数据长度 2
数据 取决于具体数据
  • 数据示例:{ "gid":"01", "cids":["12"], "rets":[0] }
  • 参数说明:
    • gid:表示群组 ID
    • cids:加入群组的子设备集合
    • rets:返回结果结合
      • 0:添加成功
      • 1:超过群组数上限
      • 2:子设备超时
      • 3:设置值超出范围
      • 4:写文件错误
      • 5:其他错误
校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

获取系统格林威治时间

MCU 发送

字段 长度(字节) 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x10
数据长度 2 0x0000
数据 0 示例:0x55aa 00 10 0000 0F
校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

模组返回

字段 长度(字节) 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x10
数据长度 2 0x0007
数据 7
  • 数据示例:0x55aa 00 10 0007 01 10 04 13 05 06 07 50即格林威治时间 2016 年 4 月 19 日 5 时 6 分 7 秒。
  • 参数说明:
    • Data[0]:是否获取时间成功,0 表示失败,1 表示成功
    • Data[1]:年份,0x00 表示 2000年
    • Data[2]:月份,范围为 1~12
    • Data[3]:日期,范围为 1~31
    • Data[4]:小时,范围为 1~23
    • Data[5]:分,范围为 1~59
    • Data[6]:秒,范围为 1~59
    说明:日期的范围为 1~31,即十六进制的 01~1f。十六进制 13 对应十进制数值为 19,即日期为 19 日。
校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

获取本地时间

MCU 发送

字段 长度(字节) 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x11
数据长度 2 0x0000
数据 0
校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

模组返回

字段 长度(字节) 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x11
数据长度 2 0x0008
数据 8
  • 数据示例:0x55aa 00 10 0007 01 10 04 13 05 06 07 02 54即格林威治时间 2016 年 4 月 19 日 5 时 6 分 7 秒 周二。
  • 参数说明:
    • Data[0]:是否获取时间成功,0 表示失败,1 表示成功
    • Data[1]:年份,0x00 表示 2000年
    • Data[2]:月份,范围为 1~12
    • Data[3]:日期,范围为 1~31
    • Data[4]:小时,范围为 1~23
    • Data[5]:分,范围为 1~59
    • Data[6]:秒,范围为 1~59
    • Data[7]:星期,范围为 1~7,1 表示周一
校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

说明

  • 设备在国内激活:返回北京时间(东8区)。
  • 设备在国外激活:返回设备所处时区时间。

批量添加设备

批量添加同一个 PID 的多个子设备。单次批量添加的子设备的上限为 32 。

MCU 发送

字段 长度(字节) 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x12
数据长度 2
数据 取决于具体数据
  • 数据示例:
    { "pid":" xxxx", "cids":["12","34","56"], "ver":"x.x.x","channel":xxx,"ota":x}
  • 参数说明:
    • pid:产品 ID
    • cids:子设备 ID 集合
    • ver:版本号,例如1.0.0
    • channel:子设备升级通道号,对应于 IoT 平台创建产品后上传拓展固件的升级通道号,默认为 10
    • ota:子设备是否支持 OTA 能力,默认不支持
      • 0:不支持
      • 1:支持
校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

模组返回

字段 长度(字节) 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x12
数据长度 2
数据 1
  • 00:数据接收成功。
  • 01:数据接收或者解析失败。
校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

返回添加设备结果

设备添加完成后,通知 MCU 添加结果。

模组发送

字段 长度(字节) 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x13
数据长度 2 N
数据 N
  • 数据示例:
    {
    “cids”:[“12”,“34”,“56”],
    “rets”:[0,0,0],
    “key”:[“xxxx”,“xxx”],
    “virt_id”: [“xxxx”,“xxx”]
    }
  • 参数说明:
    • cids:子设备 ID 集合
    • channel:子设备升级通道号,对应于 IoT 平台创建产品后上传拓展固件的升级通道号,默认为 10
    • ota:子设备是否支持 OTA 能力,默认不支持
      • 0:不支持
      • 1:支持
    • key:密钥,可选,目前仅单点设备支持该字段
    • virt_id:虚拟 ID,可选,目前仅单点设备支持该字段
校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

MCU 返回

字段 长度(字节) 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x13
数据长度 2 0000
数据 0
校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

控制群组指令下发

模组发送

字段 长度(字节) 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x14
数据长度 2
数据 取决于具体数据
  • 数据示例:id_len(1byte) + grp_id(nbyte)+ datapoint
  • 参数说明:
    • id_len: 群组 ID 长度
    • grp_id: 群组 ID。
    • datapoint: 控制命令功能点的集合
校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

MCU 返回

字段 长度(字节) 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x14
数据长度 2 0000
数据 0
校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

Wi-Fi功能性测试

扫描指定的 SSID: tuya_mdev_test,返回扫描结果和信号强度百分比。

MCU 发送

字段 长度(字节) 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x15
数据长度 2 0x0000
数据 Data
校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

模组返回

字段 长度(字节) 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x15
数据长度 2 0x0002
数据 2
  • Data[0]:
    • 0x00:失败
    • 0x01:成功
  • Data[1]:
    • Data[0] 为 0x00:Data[1] 表示信号强度 (0-100, 0信号最差,100信号最强)
    • Data[0] 为 0x01:
      • Data[1]为 0x00:表示未扫描到指定的 SSID
      • Data[1]为 0x01:表示模组未烧录授权 Key
校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

获取 Wi-Fi 状态

MCU 可根据此条命令获取 Wi-Fi 状态。具体 Wi-Fi 状态见 报告设备联网状态。网关在网络初始化完成前不会回复Wi-Fi 状态。

MCU 发送

字段 长度(字节) 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x16
数据长度 2 0x0000
数据 0
校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

模组返回

字段 长度(字节) 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x16
数据长度 2 0x0001
数据 1 Wi-Fi工作状态:
0x00:状态1
0x01:状态2
0x02:状态3
0x03:状态4
0x04:状态5
0x05:状态6
0x06:状态7
校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

恢复出厂设置(可选)

本地(离线)恢复出厂指令,会导致云端信息和本地信息不同步,必须在设备在线状态下使用或者设备第一次激活前使用。

MCU 发送

字段 长度(字节) 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x17
数据长度 2 0x0000
数据 0
校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

报告移除状态

网关收到移除或者恢复出厂命令时,会向 MCU 报告状态。

  • 如果仅收到移除指令,网关只会移除配网,并不会删除子设备信息。下次联网时,子设备信息仍会在 App 上显示。
  • 如果收到恢复出厂指令,网关会移除配网并且清除所有子设备信息。

模组发送

字段 长度(字节) 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x18
数据长度 2 0x0001
数据 1
  • 0x00:本地恢复出厂设置
  • 0x01:远程移除
  • 0x02:本地移除
  • 0x03:远程恢复出厂设置
  • 0x04:清除数据,但是网关不离网
校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

本地删除子设备

MCU 发送删除子设备指令。

MCU 发送

字段 长度(字节) 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x19
数据长度 2
数据 取决于具体数据 示例:{ “sub_id”:“xxx” }
校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

模组返回

字段 长度(字节) 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x19
数据长度 2 0x0001
数据 1
  • 0x00:删除成功
  • 0x01:删除失败
校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

本地允许/关闭添加子设备

MCU 发送

字段 长度(字节) 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x1A
数据长度 2 0x0003
数据 3
  • Data[0]:
    • 00:关闭子设备添加
    • 01:允许子设备添加
  • Data[1]: 允许添加时间(高字节)
  • Data[2]: 允许添加时间(低字节)
校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

模组返回

字段 长度(字节) 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x1A
数据长度 2 0x0001
数据 1
  • 00:成功
  • 01:失败
校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

获取模组内存

获取 Wi-Fi 模组剩余内存。

MCU 发送

字段 长度(字节) 说明
帧头 2 0x55aa
版本 1 0x03
命令字 1 0x1B
数据长度 2 0x0000
数据 0
校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

模组返回

字段 长度(字节) 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x1B
数据长度 2 0x0004
数据 4 数据长度为 4 字节,大端格式。例如,00 00 28 00 代表剩余 10240 字节内存。
校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

查询子设备列表

MCU 可查询网关下所有子设备的列表。当列表数据大于 255 字节时分包发送。

MCU 发送

字段 长度(字节) 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x1C
数据长度 2 0x0000
数据 0
校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

模组返回

字段 长度(字节) 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x1C
数据长度 2
数据 取决于具体数据
  • 数据示例:id(1byte)+sub_num(1byte)+sub1_len(1byte)+sub1_id+….. subn_len(1byte)+subn_id(1byte)
  • 参数说明:
    • id:
      • 07:
        • false:所有子设备地址已经发送完成。
        • true:后续仍有子设备地址,下一数据包中发送。
      • 00~06:包序号,从 0 开始。
    • sub_num:本数据包中包含的子设备数量。
    • sub1_len:子设备 ID 长度。
    • sub1_id:子设备 ID。
校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

远程升级服务

IoT 平台提供可视化配置选项,支持用户自行选择升级方式。模组仅作为支持 MCU 升级的数据传输通道,不对数据内容进行解析。

说明: Wi-Fi 模组发送完所有的升级包后发送 01 命令字查询产品信息 ,MCU 需要在一分钟内回复产品信息中的软件版本号和升级后的 MCU 版本号的合集。版本号需要和在涂鸦后台配置升级的版本号保持一致。

  • MCU 远程升级方式:

    • App 提醒升级:App 端提供升级提醒弹窗,用户在 App 确认是否升级。
    • App 强制升级:App 端提供升级提醒弹窗,确认升级后才可以进行其他操作。
    • App 检测升级:App 端不提供升级提醒弹窗,用户需在 App 端自行检测固件版本,进行升级。
  • App 自动升级(原静默升级):App 端不提供提醒弹窗,固件上电后一分钟内进行升级检测,如果检测到高版本升级包则自动升级包下载和安装。自第一次上电后,每隔 24 小时进行升级检测。

  • MCU 升级相关流程图:

    网关 MCU 通用对接协议

MCU 启动升级

模组发送

字段 长度(字节) 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x1D
数据长度 2 0x0004
数据 4 升级文件大小,大端模式
校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

MCU 返回

字段 长度(字节) 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x1D
数据长度 2 0x0001
数据 1 升级包分包传输大小:
  • 0x00:默认值,256 字节(兼容旧固件)
  • 0x01:512 字节
  • 0x02:1024 字节
  • 0x03:128 字节
  • 0x04:64 字节
  • 0x05:32 字节
校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

MCU 升级包传输

  • 升级包传输数据格式:包偏移(unsigned short) + 包数据。
  • MCU 若收到该帧数据长度为 4 且包偏移大于等于固件大小,则包传输结束。

模组发送

字段 长度(字节) 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x1E
数据长度 2 0x0004+m,m 为偏移字节
数据 offset_addr(4byte)+ pack(mbyte) offset_addr: 包偏移地址
pack: 数据包内容
校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

例如,若要升级的文件大小 530Byte。(最后一包数据可不回复。)

  • 第一包数据,包偏移为 0x00000000,数据包长度为 256

    0x55aa 00 1e 0104 00000000 xx…xx XX

  • 第二包数据,包偏移为 0x00000100,数据包长度为 256

    0x55aa 00 1e 0104 00000100 xx…xx XX

  • 倒数第二包数据,包偏移为 0x00000200,数据包长度为 18

    0x55aa 00 1e 0016 00000200 xx…xx XX

  • 最后一包,包偏移为 0x00000212,数据包长度为 0

    0x55aa 00 1e 0004 00000212 XX

MCU 返回

字段 长度(字节) 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x1E
数据长度 2 0x0000
数据 0
校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

子设备启动升级

模组发送

字段 长度(字节) 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x1F
数据长度 2
数据 取决于具体数据
  • 数据示例:id_len(1byte) + sub_id(nbyte)+ file_size(4byte)
  • 参数说明:
    • id_len: 子设备 ID 长度
    • sub_id: 子设备 ID
    • file_size: 升级文件大小,大端模式
校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

MCU 返回

字段 长度(字节) 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x1F
数据长度 2 0x0001
数据 1 升级包分包传输大小:
  • 0x00:默认 256字节(兼容旧固件)
  • 0x01:512字节
  • 0x02:1024字节
  • 0x03:128字节
  • 0x04:64 字节
  • 0x05:32 字节
校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

子设备升级包传输

  • 升级包传输数据格式:包偏移(unsigned short) + 包数据。
  • MCU若收到该帧数据长度为4且包偏移大于等于固件大小,则包传输结束。

模组发送

字段 长度(字节) 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x20
数据长度 2
数据 取决于具体数据
  • 数据示例:id_len(1byte) + sub_id(nbyte)+ offset_addr(4byte)+ pack(mbyte)
  • 参数说明:
    • id_len:子设备 ID 长度
    • sub_id:子设备ID
    • offset_addr:偏移地址
    • pack:数据包
校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

示例:sub_id 为 1234,需要升级的文件大小 530 Byte。(最后一包数据可不回复。)

  • 第一包数据,包偏移为 0x00000000,数据包长度为 256。

    0x55aa 00 20 0109 04 31 32 33 34 00000000 xx…xx XX

  • 第二包数据,包偏移为 0x00000100,数据包长度为 256。

    0x55aa 00 20 0109 04 31 32 33 34 00000100 xx…xx XX

  • 倒数第二包数据,包偏移为 0x00000200,数据包长度为 18。

    0x55aa 00 20 001B 04 31 32 33 34 00000200 xx…xx XX

  • 最后一包,包偏移为 0x00000212,数据包长度为 0。

    0x55aa 00 20 0009 04 31 32 33 34 00000212 XX

MCU 返回

字段 长度(字节) 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x20
数据长度 2 0x0000
数据 0
校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

查询子设备版本号

模组发送

字段 长度(字节) 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x21
数据长度 2
数据 取决于具体数据
  • 数据示例:{"sub_id":"xxx"}
  • 参数说明:sub_id 即子设备 ID
校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

MCU 返回

字段 长度(字节) 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x21
数据长度 2
数据 取决于具体数据
  • 数据示例:{"sub_id":"xxx", "ver":"xx.xx.xx"}
  • 参数说明:
    • sub_id:子设备 ID
    • ver: 子设备固件版本号
校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

控制群组指令下发(带sub_id)

模组发送

字段 长度(字节) 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x22
数据长度 2
数据 取决于具体数据
  • 数据示例:grp_len(1byte) + grp_id(nbyte)+ sub_len(1byte) + sub_id(mbyte)+ datapoint
  • 参数说明:
    • grp_len:群组 ID 长度
    • grp_id:群组 ID
    • sub_len:群组中指定子设备 ID 长度
    • sub_id:子设备 ID
    • datapoint:控制命令数据点集合
校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

MCU 返回

字段 长度(字节) 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x22
数据长度 2 0000
数据 0
校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

串口配网(一体式)

MCU 发送

字段 长度(字节) 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x23
数据长度 2
数据 取决于具体数据
  • 数据示例:{ "s":"xxx", "p":"yyy", "t":"zzz" }
  • 参数说明:
    • s:SSID
    • p:密码
    • t:Token,由 App 生成
校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

模组返回

字段 长度(字节) 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x23
数据长度 2 0x0001
数据
  • 0x00:成功
  • 0x01:不在配网状态
  • 0x02:非法的 JSON 数据
校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

串口透传配网(分布式)

Wi-Fi 发送广播包

数据包由 Wi-Fi 模组透传给 MCU 模组进行广播。

模组发送

字段 长度(字节) 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x24
数据长度 2
数据 取决于具体数据 广播包数据
校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

MCU 返回

字段 长度(字节) 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x24
数据长度 2 0x0002
数据 2 状态返回:
data[0]:
0x00:success
0x01:fail
data[1]:
0:success:
fail: 失败原因
校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

MCU 发送配网信息

数据包由App通过MCU透传给Wi-Fi。

MCU 发送

字段 长度(字节) 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x25
数据长度 2
数据 data 加密数据
校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

模组回复

字段 长度(字节) 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x25
数据长度 2 0x0000
数据 0
校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

Wi-Fi 上报配网信息

数据包由 Wi-Fi 通过 MCU 透传至 App。

模组发送

字段 长度(字节) 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x26
数据长度 2 N
数据 取决于具体数据 加密数据
校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

MCU 回复

字段 长度(字节) 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x26
数据长度 2 0x0000
数据
校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

MCU 连接状态

MCU 会将与手机连接的状态主动推送给 Wi-Fi 模组。

MCU 发送

字段 长度(字节) 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x27
数据长度 2 0x0001
数据 1 连接状态:
0x00:连接断开
0x01:连接建立
校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

Wi-Fi 模组主动断开连接

模组发送

字段 长度(字节) 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x28
数据长度 2 0x0000
数据 0
校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

MCU 回复

字段 长度(字节) 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x28
数据长度 2 0x0000
数据 0
校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

查询 DP 状态

模组发送

字段 长度(字节) 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x29
数据长度 2 N
数据 取决于具体数据
  • 数据示例:{ "sub_id":"xxx", "dpid":[xx,xx,xx] }
  • 参数说明:
    • sub_id: 设备 ID
    • dpid: 对应的 DPID 数组
校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

MCU 返回状态上报

更新子设备在线/离线状态

MCU 发送

字段 长度(字节) 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x2A
数据长度 2 N
数据 取决于具体数据
  • 数据示例:{"all":0,"cids":["xxx","xxx"],"state":1}{"all":1,""state":1}
  • 参数说明:
    • all:
      • 0:仅包含 cids 的数据
      • 1:包括所有子设备,无需 cdis 字段
    • cids:设备 ID 组
    • state:
      • 0:离线
      • 1:在线
校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

模组返回

字段 长度(字节) 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x2A
数据长度 2 0x0001
数据 1 0x00:成功
0x01:失败
校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

获取模组的MAC地址

MCU 发送

字段 长度(字节) 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x2B
数据长度 2 0x0000
数据 0
校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

模组返回

字段 长度(字节) 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x2B
数据长度 2 0x0007
数据 取决于具体数据
  • data[0]:获取 MAC 地址是否成功。
    • 0x00:成功
    • 0x01:失败
  • data[1]~data[6]:模组的 MAC 地址
校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

记录型状态实时上报(带时间)

  • 对于类似门锁等记录型的子设备,上报 DP 状态的同时也需要带上产生这些记录的时间戳。
  • 此上报接口为同步上接口,MCU 数据上报后可以等待模组返回信息以判断上报是否成功。

模组发送

字段 长度(字节) 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x2C
数据长度 2
时间 7
  • Data[0]:数据传输是否带时间标志位
    • 0x00:不带后面的时间,模组认为时间数据无效不处理
    • 0x01:上报当地时间(日期格式)
    • 0x02:上报格林威治时间(日期格式)
    • 0x03:时间数据位时间戳,精度到秒
  • Data[0]为 0x010x02
    • Data[1]:年份,0x00 表示 2000年
    • Data[2]:月份,范围为 1~12
    • Data[3]:日期,范围为 1~31
    • Data[4]:小时,范围为 1~23
    • Data[5]:分,范围为 1~59
    • Data[6]:秒,范围为 1~59
  • Data[0]为 0x03
    • data[1]~data[4]:4字节时间戳,大端格式
    • data[5]~data[6]:用 0 填充
数据 取决于具体数据
  • 数据示例:{ id_len(1byte)+sub_id(nbyte)+datapoint}
  • 参数说明:
    • id_len:子设备 ID 长度。
    • sub_id:子设备 ID。当 sub_id0000 时,表示上报网关本身的 DP(主设备)。
    • datapoint:状态命令数据点集合。
校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

MCU 返回

字段 长度(字节) 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x2C
数据长度 2 0x0001
数据 1 0:成功
1:失败
校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

查询子设备绑定状态

MCU 发送

字段 长度(字节) 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x2D
数据长度 2
数据 取决于具体数据
  • 数据示例:{"sub_id":"xxx", "d_link":x "e_val":"xxx"}
  • 参数说明:
    • d_link:是否支持双链路,即子设备是否同时支持手机和网关绑定。
      • 0:不支持
      • 1:支持
    • e_val: 加密数值,可选字段。
校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

模组回复

字段 长度(字节) 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x2D
数据长度 2 0x0007
数据 取决于具体数据
  • 数据示例:{"sub_id":"xxx", "ret":x}
  • 参数说明:
    • sub_id: 子设备 ID。
    • ret:当前子设备绑定状态:
      • 0:与网关绑定成功
      • 1:网关中存在子设备记录但是未绑定(正在绑定中或云端没有该子设备记录)
      • 3:与手机绑定,但是未和网关绑定
      • 4:未与网关绑定,与手机绑定关系未知
校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

查询群组中子设备信息

MCU 发送

字段 长度(字节) 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x2E
数据长度 2 N
数据 取决与具体数据
  • 数据示例:{ "gid":"xxx", "idx":xx}
  • 参数说明:
    • gid:群组 ID。
    • idx:查询子设备的序号。例如,0 为查询第一个子设备。
校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

模组返回

字段 长度(字节) 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x2E
数据长度 2
数据 取决于具体数据 示例:{"gid":"xxx","sub_id":"xxxx" }
校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

上报群组本地改变的 DP

MCU 发送

字段 长度(字节) 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x2F
数据长度 2 N
数据 取决于具体数据
  • 数据示例:{"gid":"xxx", "dpid":xx}
  • 参数说明:
    • gid:群组 ID。
    • dpid:群组本地有改变的 DPID,模组收到该 DP 后会查询群组设备中的该 DP 最新状态。
校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

模组返回

字段 长度(字节) 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x2F
数据长度 2 0x0001
数据 1
  • 0:成功
  • 1:失败
校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

红外类相关功能

红外类控制码发送

  • 红外码单包发送最长为 1024 字节。
  • 对应语音控制或者电视机控制等需要发送多个控制码的场景,模组会输出当前发送码的数量。MCU 在收到红外码后需要等待模组发送下一个红外码。如果超时 250ms 未收到,则将当前收到的红外码发送。
  • 红外码的发送频率默认是 38KHz。
  • 红外码发送模组等待 MCU 响应 ACK 超时时间是 1 秒。

模组发送

字段 长度(字节) 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x30
数据长度 2
数据 取决于具体数据
  • 子命令:1 字节,0x00。
  • num:1 字节
    • 高4位:发送控制码的个数。
    • 低4位:当前发送控制码的序号,0 表示第一个控制码。
  • Repeat time:1 字节,重新发送的次数。
  • Freq:4 字节, 当前红外码的频率。
  • Code len:2 字节,当前红外码总长。代码以 2 个字节计为一个单位。
  • 偏移量:2 字节,发送长控制码是需要使用偏移量通知,首包偏移量为 0。
  • 红外码:以 2 个字节为一个单位。
校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

MCU 返回

字段 长度(字节) 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x30
数据长度 2 0x0002
数据 2
  • 子命令:0x00
  • MCU 接收控制码状态:
    • 01:成功
    • 02:失败
校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

红外类控制码学习

模组发送

字段 长度(字节) 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x31
数据长度 2 0x0002
数据 2
  • 子命令:0x00
  • 学习超时时间:当前默认只支持 30 秒,即 1E。
校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

MCU 返回

字段 长度(字节) 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x31
数据长度 2 N
数据 取决于具体数据
  • 子命令:1 字节,0x00。
  • Freq:4 字节, 当前红外码的频率。
  • Code len:2 字节,当前红外码总长。代码以 2 个字节计为一个单位。
  • 偏移量:2 字节,发送长控制码是需要使用偏移量通知,首包偏移量为 0。
  • 红外码:以 2 个字节为一个单位。
校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

示例:

模组发送

55 AA 00 31 00 02 00 1E 50

MCU 返回

55 AA 00 31 00 75 00 00 00 94 FC 00 36 00 00 236f 236f 068e 0226 068e 0226 068e 0226 0226 0226 0226 0226 068e 0226 0226 0226 0226 0226 0226 0226 068e 0226 068e 0226 068e 0226 0226 0226 068e 0226 068e 0226 068e 0226 068e 0226 0226 0226 0226 0226 0226 0226 068e 0226 0226 0226 0226 0226 a9cf 236f 08ce 0226 82d5 82d5 85

取消学习

模组发送

字段 长度(字节) 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x32
数据长度 2 0
数据 0
校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

MCU 返回

字段 长度(字节) 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x32
数据长度 2 0x0001
数据 MCU 接收控制码状态:
  • 01:成功
  • 02:失败
校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

拓展功能

天气服务功能

  • 天气服务是指获取设备激活时所在城市的天气数据,目前支持 7 天内天气数据。
  • 天气服务支持 MCU 主动获取和开启模组天气服务后,模组定时主动通知。
  • 请求参数表如 w.temp,w.pm25 返回 w.temp,返回参数少于请求参数请仔细检查请求参数名是否正确。具体可参考 天气服务详细参数说明
  • w.condition的字段值可参考 天气 UTF-8编码对照表

示例

w.humidity:69,w.temp:32,w.pm25:10,w.condition:多云(UTF-8 编码 E5A49A E4BA91)

55 AA 00 21 00 40 01 0A 77 2E 68 75 6D 69 64 69 74 79 00 04 00 00 00 45 06 77 2E 74 65 6D 70 00 04 00 00 00 20 06 77 2E 70 6D 32 35 00 04 00 00 00 10 0B 77 2E 63 6F 6E 64 69 74 69 6F 6E 01 06 E5 A4 9A E4 BA 91 1E

  • 入参:{"codes":"w.temp","w.humidity", "w.sunRise", "w.sunSet", "t.local","w.date.3"}

  • 返回:{"codes": "w.temp.0":13,"w.humidity.0":100, "w.sunRise.0":2019-12-28 06:54,""w.sunSet.0":2019-12-28 17:05,"w.temp.1":13,"w.humidity.1":100, "w.sunRise.1":2019-12-28 06:54,""w.sunSet.1":2019-12-28 17:05,"w.temp.2":13,"w.humidity.2":100,"w.sunRise.2":2019-12-28 06:54,""w.sunSet.2":2019-12-28 17:05,}

模组定时更新天气服务

打开获取天气数据功能

打开获取天气数据功能。定时更新时间由 MCU 设置,最小更新间隔为 10 分钟,建议标准的更新时间为 60 分钟。考虑天气数据的实时性,最大间隔是 240 分钟。

MCU 发送

字段 长度(字节) 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x33
数据长度 2 (1+1+(L+K)+(L+K)…)
数据 取决于具体数据
  • 子命令:1 字节,0x00。
  • 定时更新间隔:1 字节
    • 0x00:默认值,更新间隔为 60 分钟。
    • 0xFF:更新间隔为 24 小时。
    • 其他:具体的间隔时间,单位为分钟。例如,0x1E 代表 30 分钟更新一次。
  • L:1 字节,表示 K 的长度。例如 L:0x06
  • K:请求参数名称。例如 K:w.temp
校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

示例55 AA 00 33 00 2C 00 00 06 77 2E 74 65 6D 70 0A 77 2E 68 75 6D 69 64 69 74 79 0A 77 2E 70 72 65 73 73 75 72 65 06 77 2E 70 6D 32 35 05 77 2E 73 6F 32 B0

模组返回

字段 长度(字节) 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x33
数据长度 2 0x0003
数据 3
  • 子命令:1 字节,0x00。
  • Data[0]:
    • 0x00:MCU 接收信息失败,具体错误原因参见 Data[1] 中错误码。
    • 0x01:MCU 接收信息成功。
  • Data[1]:
    • 0x00:无错误。
    • 0x01:数据格式非法。
    • 0x02:异常错误。
校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

下发天气数据

开启天气数据功能后模组定时下发天气数据。开启功能后会即时触发数据下发,后续以设置的时间间隔下发。

模组发送

字段 长度(字节) 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x33
数据长度 2 (1+(LKTLV)+(LKTLV)+…)
数据 取决于具体数据
  • 子命令:1 字节,0x00。
  • MCU 接收状态:
    • 接收失败,2 字节:
      • 0x00:表示失败
      • 0x01:错误码,表示参数服务没权限(确认是否购买了该参数服务)
    • 接收成功,1 字节,即 0x00。
  • L:1 字节,表示 K 的长度。例如 L:0x06
  • K:请求参数名称。例如 K:w.temp
  • T:参数类型
    • 0x00:整形
    • 0x01:字符串
  • L:字段名长度
  • V:字段取值
校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

MCU 返回

字段 长度(字节) 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x33
数据长度 2 0x0001
数据 1 子命令:0x01
校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

MCU 获取天气服务

  • MCU 主动获取天气服务时,携带需要获取的天气服务数据内容。
  • 使用频率不能小于一分钟,一分钟内的多次请求仅处理一次。
  • MCU 获取天气服务用于确认数据请求,数据下发还是通过 0x3301 的下发天气数据的命令。

MCU 发送

字段 长度 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x33
数据长度 2 (1+1+(L+K)+(L+K)…)
数据 取决于具体数据
  • 子命令:1 字节,0x02。
  • L:1 字节,表示 K 的长度。例如 L:0x06
  • K:请求参数名称。例如 K:w.temp
校验和 1 从帧头开始按字节求和得出的 结果对 256 求余

示例:55 AA 00 33 00 2B 02 06 77 2E 74 65 6D 70 0A 77 2E 68 75 6D 69 64 69 74 79 0A 77 2E 70 72 65 73 73 75 72 65 06 77 2E 70 6D 32 35 05 77 2E 73 6F 32 B1

模组返回

字段 长度(字节) 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x33
数据长度 2 0x0002
数据 1 子命令:0x02
1 执行结果:
0x00:成功
0x01:失败
校验和 1 从帧头开始按字节求和得出的 结果对 256 求余

带时区系统(格林威治)时间数据下发

MCU 发送

字段 长度(字节) 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x33
数据长度 2 0x0001
数据 1 命令字:0x03
校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

示例:55 AA 00 33 00 01 03 36

模组返回

字段 长度(字节) 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x33
数据长度 2 1+2+1+7
数据 11
  • 子命令:1 字节,0x03。
  • 时区:2 字节,示例:-750 表示西 7.5 区。
  • 夏令时:
    • 0x00:无
    • 0x01:夏令时
  • 时间数据, 7 字节:
    • Data[0]:是否获取时间成功,0 表示失败,1 表示成功
    • Data[1]:年份,0x00 表示 2000年
    • Data[2]:月份,范围为 1~12
    • Data[3]:日期,范围为 1~31
    • Data[4]:小时,范围为 1~23
    • Data[5]:分,范围为 1~59
    • Data[6]:秒,范围为 1~59
  • 校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

    心跳查询管理

    对于不需要心跳查询的场景,可以通过此命令字暂停心跳查询。

    MCU 发送

    字段 长度(字节) 说明
    帧头 2 0x55aa
    版本 1 0x00
    命令字 1 0x33
    数据长度 2 0x0002
    数据 1 子命令:0x04
    1 心跳查询状态
    0x01:恢复心跳查询
    0x00:关闭心跳查询
    校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

    示例:55 AA 00 33 00 02 04 00 38

    模组返回

    字段 长度(字节) 说明
    帧头 2 0x55aa
    版本 1 0x00
    命令字 1 0x33
    数据长度 2 1
    数据 1 子命令:0x04
    校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

    双模蓝牙相关功能

    说明:此章节类容对于对于双模平台模块有效

    蓝牙状态通知

    设备蓝牙状态 描述 状态值
    状态1 未绑定,未连接 0x00
    状态2 未绑定,已连接 0x01
    状态3 已绑定,未连接 0x02
    状态4 已绑定,已连接 0x03
    状态5 未知状态 0x04

    对于双模平台,此功能默认支持;
    模组发送

    字段 长度(字节) 说明
    帧头 2 0x55aa
    版本 1 0x00
    命令字 1 0x60
    数据长度 2 0x0002
    数据 1 子命令:0x00
    1 设备蓝牙状态
    状态1:0x00
    状态2:0x01
    状态3:0x02
    状态4:0x03
    状态5:0x04
    校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

    MCU 返回

    字段 长度(字节) 说明
    帧头 2 0x55aa
    版本 1 0x00
    命令字 1 0x60
    数据长度 2 0x0001
    数据 1 子命令:0x00
    校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

    蓝牙功能性测试(扫描指定蓝牙信标)

    说明:

    1. 模块内部目前扫描指定的蓝牙信标: ty_mdev,返回扫描结果和信号强度百分比.
    2. 这里为了最大程度防止不良品这里建议客户将路由于设备距离控制在5米左右,
      信号强度大于等于60%为合格,这里可以根据自己产线和工厂环境的情况自行调整。
      存在干扰的情况下40%也可以接受

    MCU 发送

    字段 长度(字节) 说明
    帧头 2 0x55aa
    版本 1 0x00
    命令字 1 0x60
    数据长度 2 0x0001
    数据 1 子命令:0x01
    校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

    模组返回

    字段 长度(字节) 说明
    帧头 2 0x55aa
    版本 1 0x00
    命令字 1 0x60
    数据长度 2 0x0002
    数据 1 子命令:0x01
    2 Data[0]:0x01失败, 0x00成功;
    当Data[0]为0x00,即成功时,Data[1]表示信号强度 (0-100, 0信号最差,100信号最强);
    当Data[0]为0x01,即失败时,Data[1]为0x00表示未扫描到指定的蓝牙信标,Data[1]为0x01表示模块未烧录授权key
    校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

    主动获取蓝牙状态

    说明:MCU可根据此条命令获取蓝牙状态。具体蓝牙状态见 蓝牙状态通知。网关在网络初始化完成前不会恢复蓝牙状态。

    MCU 发送

    字段 长度(字节) 说明
    帧头 2 0x55aa
    版本 1 0x00
    命令字 1 0x60
    数据长度 2 0x0001
    数据 1 子命令:0x02
    校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

    模组返回

    字段 长度(字节) 说明
    帧头 2 0x55aa
    版本 1 0x00
    命令字 1 0x60
    数据长度 2 0x0002
    数据 1 子命令:0x02
    1 设备蓝牙状态
    状态1:0x00
    状态2:0x01
    状态3:0x02
    状态4:0x03
    状态5:0x04
    校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

    安防传感扩展协议

    此部分协议为安防相关功能指令,只描述指令内容,详细的对接流程请在 IoT 平台上下载《安防网关对接流程说明》。

    当前布防模式设置

    用于设置当前的布防撤防模式。

    • 进入布防模式后,需要在撤防后,再次设置布防模式。
    • 当前此命令设置的布防延时时间无效,布防延时时间以 App 设置为准,布防延时字段数据请传 0。

    MCU 发送

    字段 长度(字节) 说明
    帧头 2 0x55aa
    版本 1 0x00
    命令字 1 0xC0
    数据长度 2 1+N
    数据 取决于具体数据
    • 子命令:0x00
    • 示例:{ mode:xxx, sub_id:xxxxx, delay:xx}
    • 参数说明:
      • mode:布防模式:
        • 0:撤防
        • 1:在家布防
        • 2:离家布防
      • sub_id:子设备 ID
      • delay:延时布防时间
        • 0:读取手机设置时间
        • 非0:延时时间,只支持设置30, 60, 90, 120, 150, 180;单位为秒
    校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

    模组返回

    字段 长度(字节) 说明
    帧头 2 0x55aa
    版本 1 0x00
    命令字 1 0xC0
    数据长度 2 2
    数据 1 子命令:0x00
    1 操作结果:
    00:成功
    非00:失败
    校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

    当前安防信息获取

    用于获取当前的安防信息。

    MCU 发送

    字段 长度(字节) 说明
    帧头 2 0x55aa
    版本 1 0x00
    命令字 1 0xC0
    数据长度 2 1
    数据 1 子命令:0x01
    校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

    模组返回

    字段 长度(字节) 说明
    帧头 2 0x55aa
    版本 1 0x00
    命令字 1 0xC0
    数据长度 2 1+N
    数据 1 子命令:0x01
    取决于具体数据
    • 示例:{操作结果} +{mode:xxx, alarm:x, countdown:x}
    • 参数说明:
      • 操作结果:
        • 0:成功
        • 1:失败
      • mode:布防模式:
        • 0:撤防
        • 1:在家布防
        • 2:离家布防
      • alarm:报警状态
        • 0:报警延时,报警中
        • 非 0:无报警
      • countdown:布放延时状态
        • 0:布防延时中
        • 非 0:无布防延时
    校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

    安防信息同步

    当通过 App 设置安防信息后,模组以此条指令同步状态给 MCU。

    模组发送

    字段 长度(字节) 说明
    帧头 2 0x55aa
    版本 1 0x00
    命令字 1 0xC0
    数据长度 2 1+N
    数据 1 子命令:0x02
    取决于具体数据
    • 示例:{“mode”:“xxx”, “delay”:xx, “sound”:x}
    • 参数说明:
      • mode:布防模式
        • 0:撤防
        • 1:在家布防
        • 2:离家布防
      • delay:延时布防时间
        • 0:无延迟
        • 非 0:延时时长,单位为秒
      • sound:是否播放声音
        • 0:需要播放
        • 非 0:不需要播放
    校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

    MCU 返回

    字段 长度(字节) 说明
    帧头 2 0x55aa
    版本 1 0x00
    命令字 1 0xC0
    数据长度 2 1
    数据 1 子命令:0x02
    校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

    设备安防事件同步

    安防事件模组通过本指令同步状态至 MCU。

    模组发送

    字段 长度(字节) 说明
    帧头 2 0x55aa
    版本 1 0x00
    命令字 1 0xC0
    数据长度 2 1+N
    数据 子命令 0x03
    取决于具体数据
    • 示例:{ “status”:x, “data”:“xxx” }
    • 参数说明:
      • status:事件
        • 0:撤防
        • 1:进入布防
        • 2:存在可忽略事件,触发声音播放
        • 3:开始倒计时
      • data:事件信息
        • 0:无倒计时
          说明:目前仅当开启报警倒计时时反馈倒计时时间。
    校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

    MCU 返回

    字段 长度(字节) 说明
    帧头 2 0x55aa
    版本 1 0x00
    命令字 1 0xC0
    数据长度 2 1
    数据 子命令 0x03
    校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

    报警状态设置

    MCU 通过安防标准DP32有状态变化时,需要将状态同步给模组。

    MCU 发送

    字段 长度(字节) 说明
    帧头 2 0x55aa
    版本 1 0x00
    命令字 1 0xC1
    数据长度 2 2
    数据 子命令 0x00
    报警状态 0:正常;
    非 0:报警中
    校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

    模组返回

    字段 长度(字节) 说明
    帧头 2 0x55aa
    版本 1 0x00
    命令字 1 0xC1
    数据长度 2 2
    数据 子命令 0x00
    操作结果 0:成功
    非 0:失败
    校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

    取消报警状态同步

    当通过 App 设置取消报警,模组以此条指令同步状态给 MCU,同时 MCU也 需要通过安防标准 DP 2上报 false

    模组发送

    字段 长度(字节) 说明
    帧头 2 0x55aa
    版本 1 0x00
    命令字 1 0xC1
    数据长度 2 2
    数据 1 子命令:0x01
    1 0:取消报警
    校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

    MCU 返回

    字段 长度(字节) 说明
    帧头 2 0x55aa
    版本 1 0x00
    命令字 1 0xC1
    数据长度 2 1
    数据 1 子命令:0x01
    校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

    设备报警信息同步

    当环境设备 DP 或者非环境设备 DP 触发了设备报警,模组以此条指令同步报警信息给 MCU,同时 MCU 也需要通过安防标准 DP 26 上报。

    • 非环境设备:与布防撤防有关,只有在布防时才报警。
    • 环境设备:与布防撤防无关,只要有触发就报警。

    模组发送

    字段 长度(字节) 说明
    帧头 2 0x55aa
    版本 1 0x00
    命令字 1 0xC1
    数据长度 2 1+N
    数据 子命令 0x02
    取决于具体数据
    • 示例:{ “type”:x, “sub_id”:“xxx”,“dp_inf”:“xxx”}
    • 参数说明:
      • type:触发报警设备类型
        • 0:非环境设备
        • 1:环境设备
      • sub_id:设备 ID
      • dpinf:触发报警 DP 信息,cJSON字符串
    校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

    MCU 返回

    字段 长度(字节) 说明
    帧头 2 0x55aa
    版本 1 0x00
    命令字 1 0xC1
    数据长度 2 1
    数据 1 子命令:0x02
    校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

    设备报警延时状态同步

    设备处于报警延时状态时,会通过此命令同步报警延时状态给 MCU。

    模组发送

    字段 长度(字节) 说明
    帧头 2 0x55aa
    版本 1 0x00
    命令字 1 0xC1
    数据长度 2 2
    数据 1 子命令:0x03
    1 报警延时状态
    0:报警延时未创建
    1:报警延时进行中
    2:报警延时结束
    校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

    MCU 返回

    字段 长度(字节) 说明
    帧头 2 0x55aa
    版本 1 0x00
    命令字 1 0xC1
    数据长度 2 1
    数据 1 子命令:0x03
    校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

    新设备报警信息显示同步

    此命令为新的设备报警信息同步,配合 01 命令字中 A 字段的 bit0 位使能,且使能后安防 0xc101 和 0xc102 命令字无需处理。

    • 当前无 GP 字段。
    • 非环境设备:非环境监测相关类设备。
    • 环境设备:环境监测相关类设备等。
    • 此命令统一用于报警信息同步命令,模组发送的数据内容不是固定的,会根据功能增加按照设备功能的支持情况,下发支持的字段数据。

    目前预留多防区网关功能的字段。当前设备不返回此字段。

    模组发送

    字段 长度(字节) 说明
    帧头 2 0x55aa
    版本 1 0x00
    命令字 1 0xC1
    数据长度 2 1+N
    数据 1 子命令:0x04
    取决于具体数据
    • 示例:{
      “type”:x,
      “sub_id”:“xxx”,
      “dp_inf”:“xxx”,
      “gp”:“xxxx”
      }
    • 参数说明:
      • type:触发报警设备类型
        • 0:非环境设备
        • 1:环境设备
      • sub_id:设备 ID
      • dpinf:触发报警 DP 信息,cJSON字符串
      • gp:预留,为多防区功能使用,同步报警设备归属的防区。
    校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

    MCU 返回

    字段 长度(字节) 说明
    帧头 2 0x55aa
    版本 1 0x00
    命令字 1 0xC1
    数据长度 2 1
    数据 子命令 0x04
    校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

    新设备报警状态同步

    此命令为新的设备报警信息同步,配合 01 命令字中 A 字段的 bit0 位使能。

    模组发送

    字段 长度(字节) 说明
    帧头 2 0x55aa
    版本 1 0x00
    命令字 1 0xC1
    数据长度 2 2
    数据 1 子命令:0x05
    Data 0:取消报警
    1:报警中
    校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

    MCU 返回

    字段 长度(字节) 说明
    帧头 2 0x55aa
    版本 1 0x00
    命令字 1 0xC1
    数据长度 2 1
    数据 1 子命令:0x05
    校验和 1 从帧头开始按字节求和,将得出的结果对 256 求余

    附录一:condition的天气UTF-8码表

    文字 编码16进制 文字 编码16进制
    E699B4 大雨 E5A4A7 E99BA8
    雷暴 E99BB7 E69AB4 沙尘暴 E6B299 E5B098 E69AB4
    小雪 E5B08F E99BAA E99BAA
    冻雾 E586BB E99BBE 暴雨 E69AB4 E99BA8
    局部阵雨 E5B180 E983A8 E998B5 E99BA8 浮尘 E6B5AE E5B098
    雷电 E99BB7 E794B5 小阵雨 E5B08F E998B5 E99BA8
    E99BA8 雨夹雪 E99BA8 E5A4B9 E99BAA
    尘卷风 E5B098 E58DB7 E9A38E 冰粒 E586B0 E7B292
    强沙尘暴 E5BCBA E6B299 E5B098 E69AB4 扬沙 E689AC E6B299
    小到中雨 E5B08F E588B0 E4B8AD E99BA8 大部晴朗 E5A4A7 E983A8 E699B4 E69C97
    E99BBE 阵雨 E998B5 E99BA8
    强阵雨 E5BCBA E998B5 E99BA8 大雪 E5A4A7 E99BAA
    特大暴雨 E789B9 E5A4A7 E69AB4 E99BA8 暴雪 E69AB4 E99BAA
    冰雹 E586B0 E99BB9 小到中雪 E5B08F E588B0 E4B8AD E99BAA
    少云 E5B091 E4BA91 小阵雪 E5B08F E998B5 E99BAA
    中雪 E4B8AD E99BAA E998B4
    冰针 E586B0 E99288 大暴雨 E5A4A7 E69AB4 E99BA8
    雷阵雨伴有冰雹 E99BB7 E998B5 E99BA8 E4BCB4 E69C89 E586B0 E99BB9 冻雨 E586BB E99BA8
    阵雪 E998B5 E99BAA 小雨 E5B08F E99BA8
    E99CBE 中雨 E4B8AD E99BA8
    多云 E5A49A E4BA91 雷阵雨 E99BB7 E998B5 E99BA8
    中到大雨 E4B8AD E588B0 E5A4A7 E99BA8 大到暴雨 E5A4A7 E588B0 E69AB4 E99BA8

    附录二:天气服务详细参数说明

    天气数据参数 含义 国内 国外 是否支持预报 十六进制
    w.temp 大气温度 支持 支持 国内支持7天内数据 77 2e 74 65 6d 70
    w.thigh 最高温度 不支持 支持 支持7天内数据 77 2e 74 68 69 67 68
    w.tlow 最低温度 不支持 支持 支持7天内数据 77 2e 74 6c 6f 77
    w.humidity 空气湿度 支持 支持 支持7天内数据 77 2e 68 75 6d 69 64 69 74 79
    w.condition 天气状况,晴、雨、雪等 支持 支持 支持7天内数据 77 2e 63 6f 6e 64 69 74 69 6f 6e
    w.conditionNum 天气状况,数字编码表示天气状况 支持 支持 支持7天内数据 77 2e 63 6f 6e 64 69 74 69 6f 6e 4e 75 6d
    w.pressure 大气气压 不支持 支持 支持7天内数据 77 2e 70 72 65 73 73 75 72 65
    w.realFeel 体感温度 不支持 支持 支持7天内数据 77 2e 72 65 61 6c 46 65 65 6c
    w.uvi 紫外线指数 不支持 支持 支持7天内数据 77 2e 75 76 69
    w.sunRise 日出 支持 支持 支持7天内数据 77 2e 73 75 6e 52 69 73 65
    w.sunSet 日落 支持 支持 支持7天内数据 77 2e 73 75 6e 53 65 74
    t.unix 格林威治时间(配合日出/日落使用) 74 2e 75 6e 69 78
    t.local 本地时间(配合日出/日落使用) 74 2e 6c 6f 63 61 6c
    w.windSpeed 风速 支持 支持 支持7天内数据 77 2e 77 69 6e 64 53 70 65 65 64
    w.windDir 风向 支持 不支持 支持7天内数据 77 2e 77 69 6e 64 44 69 72 2e 6e
    w.windLevel 风级 支持 不支持 支持7天内数据 77 2e 77 69 6e 64 4c 65 76 65 6c
    w.aqi 空气质量指数 支持 不支持 仅有当天数据 77 2e 61 71 69
    w.tips 一句话提示天气实况/专业实况。 支持 不支持 仅有当天数据 77 2e 74 69 70 73
    w.rank 详细 AQI 实况及全国排名 支持 不支持 仅有当天数据 77 2e 72 61 6e 6b
    w.pm10 PM10(可吸入颗粒物) 支持 不支持 仅有当天数据 77 2e 70 6d 31 30
    w.pm25 PM2.5(细颗粒物) 支持 不支持 仅有当天数据 77 2e 70 6d 32 35
    w.o3 臭氧浓度 支持 不支持 仅有当天数据 77 2e 6f 33
    w.no2 二氧化氮浓度 支持 不支持 仅有当天数据 77 2e 6e 6f 32
    w.co 一氧化碳浓度 支持 不支持 仅有当天数据 77 2e 63 6f
    w.so2 二氧化硫浓度 支持 不支持 仅有当天数据 77 2e 73 6f 32
    w.date.n(n表示,需要预报的天数,1<= n <=7) 需要预报天数 支持 支持 77 2e 64 61 74 65 2e 6e

    更新记录

    版本 日期 说明
    1.1.13 20201221 1:MCU以及子设备升级包传输支持更小分包
    2:增加双模模块蓝牙相关功能
    1.1.9 20200925 1:心跳检测增加低功耗类型
    2:安防增加显示信息同步和报警状态同步
    3:子设备添加增加ota和channel字段
    4:增加天气服务功能
    5:增加带时区格林时间获取命令
    6:增加心跳管理
    1.1.8 20200709 1:增加红外相关功能;
    2:产品信息中增加安防能力选择字段
    3: 心跳功能说明
    1.1.7 20200423 1:增加ap&ez共存配网状态;
    2:统一安防传感拓展协议中一些字段统一
    1.1.6 20200409 增加安防网关相关功能协议
    1.1.5 20200220 1.基础协议中,增加3.37,3.38,3.39指令
    2.在双链路扩展协议中,增加4.2.2,4.2.3,4.2.4,4.2.5,4.2.6指令
    3.在3.19命令中增加key这个可选字段。
    4.在3.24中增加04状态
    5.增加3.38指令,3.39指令
    6.删除心跳回复帧中的设置心跳时间
    1.1.4 20191212 1.产品信息加上p字段
    2.心跳间隔从60s改至180s
    1.1.3 20191202 1.产品信息加上tp字段
    2.增加双链路扩展协议 新增子设备同步
    3.更新子设备在线/离线状态
    4.产品信息增加cap字段中增加取消心跳机制标志
    5.增加获取mac的指令
    6.增加记录型实时上报接口
    7.心跳最小间隔 从30s改至60s
    1.1.2 20190713 1.增加串口配网指令(一体式)
    2.增加串口透传配网指令(分体式)
    3.增加查询dp状态指令
    4.增加sigmesh清除子设备信息指令
    5.增加sigmesh获取local ID 指令
    6.增加sigmesh更新群组地址的指令
    7.串口升级的分包兼容128byte
    1.1.1 20190529 1.增加群组控制指令带sub_id信息
    2.增加获取dev_key的指令
    3.对本地恢复出厂设置进行说明
    4.在产品信息中增加群控指令带sub_id的标志
    5.当网关为sigmesh网关时删除子设备时,增加devkey
    1.1.0 20190520 1.增加cap的bit4,是否有MCU ota功能
    2.增加远程服务指令
    3.增加获取Wi-Fi状态帧
    4.增加本地删除子设备帧
    5.增加查询子设备列表帧
    6.增加本地恢复出厂设置帧
    7.增加报告移除状态指令
    8.增加sig mesh获取源节点指令
    1.0.9 20190413 1.增加cap的bit3标识内部sigmesh。
    2.增加网络信息拉取帧
    3.增加申请网络节点帧
    4.增加添加sigmesh子设备帧
    5.增加本地允许/关闭添加子设备帧
    6.增加获取模组内存帧
    1.0.8 20190319 1.修改添加子设备后的应答。
    1.0.7 20190118 1.增加群组控制帧
    2. 将3.19返回批量添加设备结果 命令字改为0x13.
    3.增加群控指令0x014 4.增加产测指令0x15
    1.0.6 20190111 1. 增加时间(格林时间和本地时间)读取
    2. 增加批量添加子设备
    3. 增加批量添加子设备返回结果
    4. sub_id为"0000"代表网关本身。
    5. 心跳间隔时间最少30S.
    1.0.5 20181107 1.增加组操作返回结果集
    1.0.4 20181107 1. 增加本地群组子设备加组、子设备删组操作
    2. 修改查询产品信息指令,增加设备能力返回(是否支持本地群组,本地场景)
    1.0.3 20181030 1.删除产品信息中的pid信息
    2.将3.2中的端口port限制到A-D
    1.0.2 20181027 1.增加查询产品信息命令
    2.增加查询MCU工作模式命令
    3.报告设备联网状态命令
    4.增加重置Wi-Fi命令
    5.增加重置Wi-Fi-选择配置模式命令
    6.调整各个命令的命令码
    1.0.1 20181025 修改3.3子设备添加协议,增加心跳时间设置
    1.0.0 20181018 首次创建