涂鸦 Zigbee 门锁对接接入标准

概述

Zigbee 门锁对接是将门锁 mcu 和 Zigbee 设备通过串口协议完成数据交互,由于门锁的功能相对比较多,而且国内门锁厂家之间的功能点都存在一定的差异,Zigbee 标准协议中定义的功能已经满足不了要求,实现,因此采用私有协议实现。此时 Zigbee 设备主要的作用是充当 mcu 和 Zigbee 网关的传输通道,即把网关下发的数据按照串口协议的格式封装好,下发给 mcu,同时把从串口中接收到的 mcu 数据封装成 Zigbee zcl 层的数据格式发送给 Zigbee 网关,再由网关完成和涂鸦云的数据交互。简单的理解,即利用 Zigbee 网络将 mcu 接入到涂鸦云,从而实现门锁和涂鸦的对接。

image.png

名词解释

名词
解释
Zigbee SDK    基于芯科 Zigbee 协议栈经过裁剪、优化后封装的涂鸦 ZigbeeSDK。
Attribute Attribute (属性)是一个反映物理数量或状态的数据值
Cluster Cluster (群集)是包含一个或多个属性( attribute )的群集
EndPoint EndPoint (端点)是协议栈应用层的入口,即入口地址,也可以理解应用对象存在的地方,它是为实现一个设备描述而定义的一组群集
Device Id Zigbee 中为每一种设备定义的序号
弱电设备 是指使用电池供电的设备,在 Zigbee 协议中被称为 sleep end device 的设备
强电设备 是指使用市电或者从市电稳压后的电源供电的设备,在 Zigbee 协议中被称为 router 的设备
PID product ID,在涂鸦 IoT 平台创建的每一个产品都会产生一个唯一的产品编号,关联了产品具体的功能点、APP 控制面板、出货信息等所有跟这个产品相关的信息。
SOC system on chip,硬件本身无 MCU,控制程序写入联网模块中。
SDK Software Development Kit,软件开发工具包,辅助开发某一类软件的相关文档、范例和工具的集合。为了鼓励开发者使用其系统或者语言,许多 SDK 是免费提供的,涂鸦的也是。
固件 Firmware,就是写入 EROM(可擦写只读存储器)或 EEPROM (电可擦可编程只读存储器)中的程序。固件是指设备内部保存的设备“驱动程序”,通过固件,操作系统才能按照标准的设备驱动实现特定机器的运行动作,比如光驱、刻录机等都有内部固件。固件是担任着一个系统最基础最底层工作的软件。
OTA 固件空中升级,zigbee 模块固件可以通过 OTA 使用远程升级。
mcu OTA Mcu 的固件可以通过 zigbee 实现空中升级,需要 mcu 端支持该功能。
DP 用于和涂鸦云端实现数据交互定义的一套数据格式,具体格式参加下表。

Zigbee设备功能描述

Zigbee协议版本

产品为基于标准的 Zigbee 3.0 协议

Profile Id 0x0104
Device Id 0x000a

Endpoint

endpoint 描述
1 用于应用数据交互时的 endpoint

支持的Clusters

SMART_PLUG (0x0051)
SMART_PLUG (0x0051) Output Clusters (Client)
Basic (0x0000) OTA (0x0019)
Time (0x000A)
Private cluster (0XEF00)

Basic Cluster

Attributes:

ID name Data Type Range Default
0x0000 ZCL Version uint8 -0x20 0x00-0xff 0x03
0x0001 Application Version uint8 -0x20    0x00-0xff ie: 0b 01 00 0001 = 1.0.1 即 0x41 为 1.0.1 OTA 功能会用到该版本号,在 OTA 开始阶段,网关会读取 OTA 包的版本号推送给设备。在 OTA 成功重启后,网关会读取版本号来确定是否升级成功。只能往更高的版本升级。
0x0002 Stack Version uint8 -0x20 0x00-0xff 0x02
0x0003 Hardware Version uint8 -0x20 0x00-0xff 0x01
0x0004 Manufacturer Name   string -0x42 0-32 bytes XXX…XXX (长度为 16 个字节,由 8 字节前缀和 8 字节的 PID 组成) 0-7 bytes:_TZF320_ 8-16 bytes:PID(由产品经理在平台或者自助创建和提供)
0x0005 Modle Identifier string -0x42 0-32 bytes TY0A02 该字段为了网关快速识别设备类型用,提升体验
0x0007 Power Source enum8-0x30 0x00-0xff depends on your product
0xfffd Cluster Revision uint16 -0x21 0x0000-0xffff    0x0001

Commands:

ID name Direction Description
0x00 Reset to factory default C->S C: client S:server

Private cluster

为满足通用对接的要求,采用一个私有的 cluster 并定义一类用于传输数据的私有 cluster command 实现数据的交互。其中 APS 层中的 Destination Endpoint : 0x01, ClusterID : 0xEF00,Profile ID : 0x0104,Source Endpoint : 0x01。

在 zcl 层中,使用私有的 private command id 来表示不同的数据交互命令,在 ZCL 的 payload 中 定义私有的帧格式, 采用 sequence number (2byte) + user data 的形式。

image.png

Zcl head 的帧格式可以参考下表。

字段 长度(bit) value 说明
Frame type 2 01 Command is Specific to a Cluster
Manufacture specific 1 0 Manu Code Not included in zcl
Direction 1 0/1 0: GW->Zigbee 1: Zigbee->GW
Disable default response 1 0/1 默认为 1,只有设备数据主动上报时才为 0,此时网关会主动回一个 Response 报文,作为上报成功的标记
Reserved 3 000 保留

Private command id

命令枚举 Value 说明
TY_DATA_ REQUEST 0x00 网关侧数据下发
TY_DATA_RESPONE 0x01 mcu 侧对于数据请求的回
TY_DATA_REPORT 0x02 MCU 侧数据主动上报
TUYA_MCU_VERSION_REQ 0x10 Gw->Zigbee 网关查询 mcu 版本
TUYA_MCU_VERSION_RSP 0x11 Zigbee->Gw mcu 返回版本或主动上报版本
TUYA_MCU_OTA_NOTIFY 0x12 Gw->Zigbee 网关通知 mcu 升级
TUYA_OTA_BLOCK_DATA_REQ 0x13 Zigbee->Gw 请求 mcu 的升级包
TUYA_OTA_BLOCK_DATA_RSP 0x14 Gw->Zigbee 网关返回请求的升级包
TUYA_MCU_OTA_RESULT 0x15 Zigbee->Gw 返回 muc 的升级结果
TUYA_DYNA_PWD_KEY 0x20 动态密码 key(双向)
TUYA_REPORT_LOG 0x23 记录型状态上报(双向)
TUYA_MCU_SYNC_TIME 0x24 时间同步(双向)
TUYA_INTERNET STATUS 0x25 网关联网状态
TUYA_ZCL_INTERNET_STAT_ACK 0x26 mcu 对网关的联网状态的 ack (模块->网关)
TUYA_ZCL_SESSIONE_KEY_REQ 0x40 sessionKey 请求(模块->网关)
TUYA_ZCL_SESSIONE_KEY_RSP 0x41 网关发送密文 HMA_RA+AES_RB (网关->模块)
TUYA_ZCL_SESSIONE_KEY_ACK 0x42 模块回复模块发送 HMAC_RB (双向)
TUYA_ZCL_DYNA_PWD_REQ 0x43 请求获取动态密码 key (模块->网关)

Frame of command id

image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png

DP 数据格式

数据段 长度( byte ) 说明
DPID 1 Datapoint 序号
type 对应开放平台上某 datapoint 具体的数据类型,通过如下“表示值”标识
类型 表示值 长度(字节) 说明
raw 0x00 N 对应于 raw 型 datapoint (模块透传)
bool 0x01 1 value 范围:0x00/0x01
value 0x02 4 对应 int 类型,大端表示
string 0x03 N 对应于具体字符串
enum 0x04 1 枚举类型,范围 0-255
bitmap 0x05 1/2/4 长度大于 1 字节时,大端表示
len 2 长度对应 value 的字节数
Value 1/2/4/N hex 表示,大于 1 字节采用大端传输

Over The Air Upgrade

Attributes:

ID name Data Type Range Default
0x0000 Upgrade Server ID EUI64-0xF0 0xffffffffffffffff
0x0001 File Offset uint32-0x23 0x00000000
0x0002 Current File Version uint32-0x23 0x00000000
0x0006 Image Upgrade Status enum8-0x30 0x00
0x0007 Manufacturer ID uint16 -0x21 0x1002
0x0008 Image Type ID uint16 -0x21 0x1602
0x0009 Min Block Request Period uint16 -0x21 0x0000
0xfffd Cluster revision int16-0x29 0x0000 -0xffff 0x0001

Commands:

ID name Direction Description
0x00 Image Notify S->C
0x01 Query Next Image Request C->S
0x03 Image Block Request C->S
0x06 Upgrade End Request C->S

串口协议

涂鸦 Zigbee 模块与 MCU 之间的 UART 通信数据帧由帧头(Front),版本(Ver),命令字(Cmd),数据长度(Length),数据(Data)和校验和(Check)组成,定义和描述如下所示:

Octets:2 1 2 1 2 Variable 1
Front Ver Seq Cmd Length Data Check

帧格式说明

字段 说明
帧头(Front) 2 个字节的前导符,固定为 0x55aa
版本(Ver) 串口通信协议版本,升级扩展用,当前版本为 0x03
业务序列号(Seq) 业务的序列号(1~0xfff0)
命令字(Cmd) 具体帧类型,参见下表
数据长度(Length) 传输的有效数据长度
数据(Data) 传输的有效数据
校验和(Check) 数据校验,从帧头开始按字节求和得出的结果对 256 求余

Cmd描述表

CMD id 说明 方向
0x00 睡眠唤醒 (Zigbee<—>mcu)
唤醒响应 (mcu<—>zigbee)
0x01 产品信息查询 (zigbee—>mcu)
产品信息响应 (mcu—>zigbee)
0x02 产品信息查询 (zigbee—>mcu)
Zigbee 状态查询响应 (zigbee—>mcu)
0x03 Zigbee 设备重置 (mcu—>zigbee)
Zigbee 设备重置响应 (zigbee—>mcu)
0x04 数据指令下发 (zigbee—>mcu)
数据指令下发响应 (mcu—>zigbee)
0x05 数据事物上报 (zigbee—>mcu)
数据事物上报相应 (zigbee—>mcu)
0x06 Zigbee 状态通知 (zigbee—>mcu)
0x07 请求动态密码 (mcu—>zigbee)
请求动态密码的响应 (zigbee—>mcu)
0x08 mcu 离线密码上报 (zigbee—>mcu)
离线密码响应 (mcu—>zigbee)
0x09 zigbee 模块功能测试 (mcu—>zigbee)
测试应答 (zigbee—>mcu)
0x0a zigbee 发送 mcu 版本查询 (zigbee—>mcu)
mcu 应答 (mcu—>zigbee)
0x0b OTA 升级通知 (zigbee—>mcu)
mcu 应答 (mcu—>zigbee)
0x0c OTA 固件内容请求 (mcu—>zigbee)
zigbee 应答 (zigbee—>mcu)
0x0d OTA 固件升级结果上报 (mcu—>zigbee)
zigbee 应答 (zigbee—>mcu)
0x23 记录型状态上报的数据格式(包含时间戳) (mcu—>zigbee)
记录型状态上报的数据格式的响应 (zigbee—>mcu)
0x24 mcu 时间同步请求 (mcu—>zigbee)
网关时间同步的请求或响应 (zigbee—>mcu)

具体串口协议内容参考一下的链接

Zigbee 设备流程机制

组网流程的要求

(1) Mcu 发送配置指令,开启模块配网

(2) Beacon request 信道扫描间隔大于 200ms,优先扫描优先信道

(3) 扫描时间不超过 3 分钟

(4) 配网成功之后,data request 时间为 250ms,持续 1 分钟,之后切换为 5s。

设备断电启动流程的要求

(1) 断电启动之后,需要重新同步网络状态给 mcu,同时需要请求时间戳,并把请求到的时间戳发送给 mcu。

(2) 如果存在离线数据( mcu 在模块离线时,上传给模块的记录型数据),在模块上电并 rejoin 成功,且处于连接服务器状态时,将保存的数据逐一发送给网关。

链路维护的要求

(1) 模块需在 2 分钟左右时间内,上报心跳,心态内容为设备版本号

数据上报的要求

(1) 如果开启了 APS 层的重传建议把 Disable Default Response 设置成 1,避免太多 ack。

(2) 重传数据的 Transaction Sequence Number 需要保持一致

(3) 重传间隔大于 250ms,重传持续时间建议低于 3s

(4) 避免频繁 rejoin

特殊功能说明

开发方式

  1. 基于涂鸦 Zigbee SDK 开发:

    (1)你只需修改 demo 样例的模块型号和硬件配置即可完成上述功能,包括群组,场景均实现

    (2)涂鸦提供完整的烧录,授权,产测流程和软硬件工具

涂鸦 Zigbee SDK 使用说明

烧录授权、产测工具使用说明

  1. 自行开发-非涂鸦 Zigbee 模块:

    (1) 需要完整实现上述技术细节

    (2)完成设备授权

  2. 使用涂鸦完整授权工具授权

通过模块和上位机串口通信授权

串口通信协议文档

串口通信实例代码

使用涂鸦授权 SDK 授权

  1. 自行开发-涂鸦 Zigbee 模块:

    (1)只需要实现固件功能细节

    (2)购买授权过的涂鸦 Zigbee 模块即可