【Zigbee 科普系列】 - 3 入网流程

Zigbee 子设备开发


Post Reply
zeso
Posts: 132

Zigbee 设备的入网流程,大体包括: 发现网关,请求关联,交换密钥,更新链接密钥。


熟悉 zigbee 开发的同学都知道,一个 zigbee 设备要想加入到一个 zigbee 网络中进行数据交互,必须先进行配网操作,也就是设备的Association过程,本文通过一个门磁设备,详细分析标准 3.0 设备入网过程,以及基于涂鸦 SDK 开发设备入网时的特点和体验优化。

首先来看一张标准 3.0 设备入网时的交互流程图。

Image

基于 TuyaOS 开发框架下的 zigbee 设备完全符合标准 3.0 入网规范,流程分为如下步骤:

1.Permit Join Request

在正式进入入网交互之前,coordinater 发出Permit Joining Request广播,允许设备入网。

报文包含允许时长,是否为信任中心等参数。

Image

2.Beacon Request

触发设备进入配网状态,此时设备会在指定信道依次发送Beacon Request。考虑效率和与 WiFi 信道干扰问题,一般会先选择优先信道(如 11,15,20,25,26)进行扫网,再选择次选信道进行(12,13,14,16,17,18,19,21.22,23,24)扫网。

3.Beacon

在收到Beacon Request后,同一信道的不同 PAN 的协调器会发出Beacon回应,

报文中包含 PAN ID、是否允许入网、节点深度、是否接入当前设备类型等参数。

Image

4.Association Request

待入网设备收到后会筛选出合适的网络,并对其发出Association Request请求入网。

报文中携带自身设备类型,长地址,设备能力等信息。

Image

5.Association Response

收到Association Request后,协调器将根据当前资源情况决定是否允许其加入,若允许并返回Association response

报文中包含:目标网络 PAN ID、分配给入网设备的短地址等信息。

Image

6.Transport key: NWK key

协调器将 NWK key 通过默认 Link key 进行加密,而此处 Link key 是预配置 Pre-configured 的,可使用 ZigBeeAlliance09(5A:69:67:42:65:65:41:6C:6C:69:61:6E:63:65:30:39)或是利用 install code 生成。NWK key 用于后期网络层通信的加密。

Image

7.Device Announce

子设备入网成功后会发出Device Announce广播,声明其已成为该网络新设备。

报文包含器长地址、短地址、设备能力等信息。

Image

8.Read Attributes:涂鸦网关特有

协调器收到入网设备的Device Announce之后,会读设备 Basic cluster 下的 5 个属性。

Image

9.Read Attributes Response:涂鸦网关特有

设备回复协调器 5 个属性值,通过Manufacturer NameMode ID,作为协调器的 zigbee 网关可以获取到设备的产品类型和支持的 DP 列表并上报云端,同时涂鸦智能 APP 上能够立即同步设备加网成功画面,此过程一般仅耗时 2s 左右。

Image

10.Node Descriptor Request

如果入网设备是一个符合zigbee3.0协议的设备,需要向信任中心发起Node Descriptor Request,查询信任中心是否支持zigbee3.0

Image

11.Node Descriptor Response

信任中心回复Node Descriptor Response报文包含:状态码、节点类型、设备能力等信息。协调器是否支持zigbee3.0可以通过Server Mask Capabilities字段的Bit[9-15]:Stack Compliance Revision获取。具体可以参考联盟最新的Zigbee Specification

Image

Request key(Link key):如果查询到信任中心支持zigbee3.0,那么子设备向协调器请求新的 Link key 以替换前面Pre-configured Link key

Image

协调器返回新的TC Link key

Image

14.Verify key

子设备发出Verify Key Resquest请求校验 Link key

Image

15.Confirm key

协调器返回校验结果Verify Key Confirm,可以看到此条报文中已使用新的TC Link key

Image

2.通过路由节点入网

在实际应用中,设备离网关较远时,往往是通过多跳,通过别的路由设备中继入网的,如下图所示流程

Image

2.1 Update Device

中继节点会发出Update device通知协调器有一个设备需要入网,这个包是使用APS 加密的,密钥是这个设备的TC link key

Image

2.2 Tunnel:Transport Key

协调器收到中继节点发出的Update device通知后,会发出Tunnel:Transport Key,通过中继节点传递密钥,这个包是使用APS 加密的,密钥是该网络 nwk key
中继节点收到该包后,会解析该包内容,并通过发送transport keynwk key发送给入网设备

Image

3.分布式网络入网

分布式网络不存在信任中心,入网设备可以通过原网络中任意路由节点直接入网,路由节点通过transport key将由Distributed security global link key加密的nwk key传递给入网设备

Image

Image

入网设备会检查transport keyAPS Payload里的Source Address字段,如果是全FF则表示该网络为分布式网络,后续行为需遵循分布式网络流程

2.通过路由节点入网

在实际应用中,设备离网关较远时,往往是通过多跳,通过别的路由设备中继入网的,如下图所示流程

Image

2.1 Update Device

中继节点会发出Update device通知协调器有一个设备需要入网,这个包是使用APS 加密的,密钥是这个设备的TC link key

Image

2.2 Tunnel:Transport Key

协调器收到中继节点发出的Update device通知后,会发出Tunnel:Transport Key,通过中继节点传递密钥,这个包是使用APS 加密的,密钥是该网络 nwk key
中继节点收到该包后,会解析该包内容,并通过发送transport keynwk key发送给入网设备

Image

3.分布式网络入网

分布式网络不存在信任中心,入网设备可以通过原网络中任意路由节点直接入网,路由节点通过transport key将由Distributed security global link key加密的nwk key传递给入网设备

Image

Image

入网设备会检查transport keyAPS Payload里的Source Address字段,如果是全FF则表示该网络为分布式网络,后续行为需遵循分布式网络流程

Tuya OS 相关函数介绍

1 主动调用类

Code: Select all

BOOL_T tal_zg_join_start(UINT_T timeout_ms);

调用该函数后设备将先进行离网,离网完成后会开始进行扫网

Code: Select all

OPERATE_RET tal_zg_join_config(TAL_ZG_JOIN_CFG_T *config);

该函数可以配置设备配网策略:

Code: Select all

auto_join_power_on_flag         置为TRUE则设备上电时没有网络将主动开启扫网
auto_join_remote_leave_flag     置为TRUE则设备被远程删除后将主动开启扫网
join_timeout                    为上述两种主动开启扫网的持续时间,单位是ms

2 回调处理类

Code: Select all

VOID_T tal_zg_nwk_status_changed_callback(TAL_ZG_NWK_STATUS_E status)

该函数是网络状态变化回调函数:

Code: Select all

typedef enum {
    TAL_ZG_NWK_IDLE = 0,             初始化状态,底层使用
    TAL_ZG_NWK_POWER_ON_LEAVE,       上电不在网
    TAL_ZG_NWK_POWER_ON_ONLINE,      上电在网
    TAL_ZG_NWK_JOIN_START,           开始扫网
    TAL_ZG_NWK_JOIN_TIMEOUT,         扫网超时
    TAL_ZG_NWK_JOIN_OK,              入网成功
    TAL_ZG_NWK_LOST,                 与父节点失联,低功耗设备特有状态
    TAL_ZG_NWK_REJOIN_OK,            重入成功,低功耗设备特有状态
    TAL_ZG_NWK_REMOTE_LEAVE,         被远程删除
    TAL_ZG_NWK_LOCAL_LEAVE,          本地操作离网
    TAL_ZG_NWK_MF_TEST_LEAVE,        产测阶段离网
    TAL_ZG_NWK_ZLL_JOINED,           加入到一个ZLL网络,底层使用,ZLL状态有相关回调通知
    TAL_ZG_NWK_ZLL_LEAVE,            在ZLL网络中被删除,底层使用,ZLL状态有相关回调通知
} TAL_ZG_NWK_STATUS_E;

本系列贴包含内容:

  1. Zigbee 科普 - 1 简介
  2. Zigbee 科普 - 2 网络模型
  3. Zigbee 科普 - 3 入网流程
  4. Zigbee 科普 - 4 数据模型
  5. Zigbee 科普 - 5 安全模型
  6. Zigbee 科普 - 6 OTA 流程
  7. Zigbee 科普 - 7 路由介绍
Last edited by zeso on 2022年 Dec 20日 12:33, edited 1 time in total.

我的栈溢不出。

niezheyuan
Posts: 65

Re: 【Zigbee】zigbee设备入网分析

精华帖,thumb up

Post Reply