Skip to content

3.1 简单描述符 ​

一句话理解

简单描述符 = 设备的一张"服务名片"。每张名片回答三个问题:我是谁(端点号)、我属于什么场景(Profile)、我具体能干什么(Cluster 簇)。

为什么需要简单描述符 ​

ZigBee 设备通常不只有一个功能。比如一个 ZigBee 温湿度传感器,它提供"温湿度监测"这个服务。要让网络里的其他设备知道"它提供什么服务、服务在哪里入口",就需要一份说明书——这份说明书在 Z-Stack 3.0 里就是简单描述符(Simple Descriptor)。

简单来说:简单描述符描述一个设备某一方面的服务(功能 / 应用)。一个设备可以有多张"名片",每张名片对应一个端点号。

结构分析:名片上写了什么 ​

简单描述符本质上就是一个结构体,它在 Z-Stack 3.0 中的定义如下:

c
typedef struct
{
  uint8  EndPoint;           // 端点号:这张名片的编号
  uint16 AppProfId;          // 应用场景 ID(如家居自动化)
  uint16 AppDeviceId;        // 设备类型 ID(如插座、灯、传感器)
  uint8  AppDevVer:4;        // 版本号(开发者自定义)
  uint8  Reserved:4;         // 保留字段(暂时忽略)
  uint8  AppNumInClusters;   // 输入簇(In Cluster)的个数
  cId_t *pAppInClusterList;  // 指向输入簇列表的指针
  uint8  AppNumOutClusters;  // 输出簇(Out Cluster)的个数
  cId_t *pAppOutClusterList; // 指向输出簇列表的指针
} SimpleDescriptionFormat_t;

字段通俗讲解 ​

🔢
端点号 EndPoint
名片的编号(0~255)。同一设备里每个简单描述符都有不同的端点号,靠它就能找到对应名片。
🏠
AppProfId(Profile ID)
名片属于哪个"应用场景":家居自动化、智能照明、智慧零售……ZigBee 联盟为每个场景定义了标准 ID。
🔌
AppDeviceId(Device ID)
名片对应什么"设备类型":插座、灯、传感器……同样由联盟统一定义 ID,是互联互通的基础。
🏷️
AppDevVer / Reserved
版本号由开发者自己定;保留字段暂时忽略即可。
📚
Cluster(簇)
描述服务的具体内容,分输入簇(In Cluster)和输出簇(Out Cluster)。一张名片可含多个 Cluster,共同描述服务。

类比理解

把简单描述符想成饭店的菜单:

  • 端点号 = 菜单编号(几号桌的菜单)
  • Profile ID = 菜系(川菜馆 / 粤菜馆)
  • Device ID = 招牌菜类型(火锅 / 甜品)
  • Cluster = 具体菜品(麻辣锅、清汤锅……)

别的设备一看菜单,就知道"这家店能点什么菜、怎么下单"。

应用示例:为设备创建一个简单描述符 ​

设备的简单描述符在 zcl_samplesw_data.c 文件中创建(工程位置:SampleSwitch → App → zcl_samplesw_data.c)。

可以在这个文件中找到设备所包含的简单描述符,代码如下:

c
SimpleDescriptionFormat_t zclSampleSw_SimpleDesc =
{
  SAMPLESW_ENDPOINT,                    // int EndPoint;          端点号
  ZCL_HA_PROFILE_ID,                    // uint16 AppProfId[2];   家居自动化场景
  ZCL_HA_DEVICEID_ON_OFF_LIGHT_SWITCH,  // uint16 AppDeviceId[2]; 设备类型 ID
  SAMPLESW_DEVICE_VERSION,              // int AppDevVer:4;       版本号
  SAMPLESW_FLAGS,                       // int AppFlags:4;        保留字段
  ZCLSAMPLESW_MAX_INCLUSTERS,           // byte AppNumInClusters; 输入簇个数
  (cId_t *)zclSampleSw_InClusterList,   // byte *pAppInClusterList;
  ZCLSAMPLESW_MAX_OUTCLUSTERS,          // byte AppNumOutClusters; 输出簇个数
  (cId_t *)zclSampleSw_OutClusterList   // byte *pAppOutClusterList;
};

逐项解读 ​

  • SAMPLESW_ENDPOINT:在 zcl_samplesw.h 中定义的端点号:
c
#define SAMPLESW_ENDPOINT 8   // 这个工程使用端点号 8
  • ZCL_HA_PROFILE_ID:由 ZigBee 联盟定义,表示智能家居领域的 Profile ID。

  • ZCL_HA_DEVICEID_ON_OFF_LIGHT_SWITCH:设备类型 ID,表示这是一个智能开关/插座,值由 ZigBee 联盟定义。不同公司开发同类型设备时必须使用同一个 ID,这是互联互通的基础。

  • SAMPLESW_DEVICE_VERSION:版本号(zcl_samplesw_data.c 中定义):

c
#define SAMPLESW_DEVICE_VERSION 1
  • SAMPLESW_FLAGS:保留字段,暂时忽略(值为 0)。

  • ZCLSAMPLESW_MAX_INCLUSTERS / MAX_OUTCLUSTERS:支持的最大输入簇 / 输出簇数量。

  • zclSampleSw_InClusterList / OutClusterList:输入簇列表 / 输出簇列表,指向实际定义的簇数组。

小结

一张名片 = 端点号 + 场景 + 设备类型 + 一串功能(簇)。之后通信时,对方设备正是靠这张名片知道"这个端点能做什么、该怎么跟它说话"。

内容来源:紫甲 IoT《ZigBee 3.0 开发指南》第四部分·3.1 简单描述符,原站链接


本章自测 ​

一、单项选择题(每题 4 分,共 40 分) ​

  1. 在 Z-Stack 3.0 中,用来描述设备某一方面服务(功能 / 应用)、被形象地称为设备"服务名片"的是(A. 简单描述符 B. 节点描述符 C. 功率描述符 D. 端点描述符) 答案:A

  2. 关于一个 ZigBee 设备可以拥有的简单描述符数量,下列说法正确的是(A. 只能有一张 B. 每张名片对应一个端点号,可以有多张 C. 必须有且仅有两张 D. 数量由网络地址决定) 答案:B

  3. 简单描述符结构体 SimpleDescriptionFormat_t 中,标识这张"名片编号"的字段是(A. AppProfId B. AppDeviceId C. EndPoint D. AppDevVer) 答案:C

  4. 字段 AppProfId 的作用是(A. 描述设备的硬件版本号 B. 标识名片所属的应用场景(Profile)ID C. 标识输入簇的个数 D. 保留字段) 答案:B

  5. 关于 AppDeviceId(设备类型 ID),下列说法正确的是(A. 由各公司自行随意定义 B. 只在本设备内部使用,对外无意义 C. 由 ZigBee 联盟统一定义,不同公司开发同类型设备必须使用同一 ID,是互联互通的基础 D. 与设备互联互通无关) 答案:C

  6. 结构体中 AppDevVer:4 与 Reserved:4 两个位域字段合起来占用的位数是(A. 4 位 B. 8 位 C. 16 位 D. 32 位) 答案:B

  7. 简单描述符中,指向输入簇列表与输出簇列表的两个指针字段分别是(A. pAppInClusterList 与 pAppOutClusterList B. AppProfId 与 AppDeviceId C. EndPoint 与 AppDevVer D. AppNumInClusters 与 AppNumOutClusters) 答案:A

  8. 在 SampleSwitch 工程中,设备的简单描述符 zclSampleSw_SimpleDesc 是在哪个文件中创建的(A. zcl_samplesw.c B. zcl_samplesw_data.c C. AF.h D. zcl_general.c) 答案:B

  9. SampleSwitch 工程使用的端点号 SAMPLESW_ENDPOINT 被定义为(A. 0 B. 1 C. 8 D. 255) 答案:C

  10. 示例代码中 ZCL_HA_PROFILE_ID 表示的是(A. 照明领域的 Profile ID B. 智能家居(家居自动化)领域的 Profile ID C. 安防报警领域的 Profile ID D. 组播组的 Group ID) 答案:B

二、问答题(每题 20 分,共 60 分) ​

  1. 题干:用自己的话说明"简单描述符"在 ZigBee 设备中的作用,以及一张简单描述符主要包含哪些信息? 参考答案要点:
  • 简单描述符是设备的一张"服务名片",向网络中其他设备说明本端点提供什么服务、服务入口在哪里。
  • 一张名片 = 端点号 + 应用场景(Profile ID)+ 设备类型(Device ID)+ 版本号 + 一串功能簇(输入簇 / 输出簇)。
  • 一个设备可以有多张名片,每张对应一个端点号;通信时对方设备正是靠这张名片知道"这个端点能做什么、该怎么跟它说话"。
  1. 题干:简单描述符中的"输入簇(In Cluster)"和"输出簇(Out Cluster)"各起什么作用?相关字段有哪些? 参考答案要点:
  • 簇(Cluster)描述服务的具体内容,一张名片可含多个簇,共同描述该端点提供的服务。
  • 字段 AppNumInClusters / AppNumOutClusters 分别记录输入簇、输出簇的个数。
  • pAppInClusterList / pAppOutClusterList 为指针,分别指向输入簇列表、输出簇列表数组。
  1. 题干:为什么说 AppDeviceId(设备类型 ID)是 ZigBee 设备互联互通的基础? 参考答案要点:
  • 设备类型 ID 由 ZigBee 联盟统一规定(如开关、灯、插座、传感器等各有固定 ID)。
  • 不同公司开发同类型设备时必须使用同一个 Device ID。
  • 只有大家都按统一编号描述设备类型,其他设备 / 网关才能识别并理解对方提供的服务,实现跨厂商互联互通。

aioteer · 物联网专业课程群

💬AI 伴学配置