Page 1 of 1

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

Posted: 2022年 Dec 17日 12:45
by zeso

本文内容:

介绍 Zigbee 子设备加入网关的流程

通过本文学习可以了解到 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

本系列贴包含内容:

  1. Zigbee 科普 - 1 开篇介绍
  2. Zigbee 科普 - 2 网络模型
  3. Zigbee 科普 - 3 入网流程
  4. Zigbee 科普 - 4 数据模型
  5. Zigbee 科普 - 5 安全模型
  6. Zigbee 科普 - 6 OTA 流程
  7. Zigbee 科普 - 7 路由介绍

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

Posted: 2022年 Dec 17日 20:08
by niezheyuan

精华帖,thumb up


Re: [Zigbee 科普系列】 - 3 入网流程

Posted: 2023年 Jun 7日 14:20
by huanghuan

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则表示该网络为分布式网络,后续行为需遵循分布式网络流程


Re: [Zigbee 科普系列】 - 3 入网流程

Posted: 2023年 Jun 7日 14:21
by huanghuan

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;