您好!
我想在路由器中创建一个包含 自定义可写属性的自定义群集。 我希望能够从协调器中修改该属性。 实现这一目标的步骤是什么?
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
您好!
我想在路由器中创建一个包含 自定义可写属性的自定义群集。 我希望能够从协调器中修改该属性。 实现这一目标的步骤是什么?
Panagiotis、您好!
虽然默认情况下 TI 的 ZCL 内不支持特定于制造商的集群/属性/命令、但下面 是一篇相关的 E2E 文章、介绍了如何手动添加此功能以满足此要求: https://e2e.ti.com/support/wireless-connectivity/zigbee-and-thread/f/158/t/870940
此致、
Ryan
Ryan Brown1 我记得您在旧版 CC26x2 SDK 中有一篇有关此主题的 SimpleLink 学术文章,但该链接现在不起作用。 由于这是一个常见问题、您是否会将指南带回到哪里?
因此、我应该执行这两个线程中的代码:
WEBENCH工具/CC2652R:z-stack zcl.c 的一些改进- Zigbee 和 Thread 论坛- Zigbee 和 Thread - TI E2E 支持论坛
该主题中的两个 zcl 文件:
和来自以下内容的 bdb_reporting 文件:
RTOS/CC2652R:修复 SDK 代码以支持制造商群集和制造商属性。 - Zigbee 和 Thread 论坛- Zigbee 和 Thread - TI E2E 支持论坛
对吗?
我还定义了自定义群集和属性
{
ZCL_CLUSTER_ID_CUSTOM_PANAGIOTIS,
{ // Attribute record
ATTRID_PANAGIOTIS,
ZCL_DATATYPE_UINT16,
ACCESS_CONTROL_READ | ACCESS_CONTROL_WRITE | ACCESS_REPORTABLE,
(void *)&zclSampleLight_Custom
}
},
{
ZCL_CLUSTER_ID_CUSTOM_PANAGIOTIS,
{ // Attribute record
ATTRID_CLUSTER_REVISION,
ZCL_DATATYPE_UINT16,
ACCESS_CONTROL_READ,
(void *)&zclSampleLight_custom_clusterRevision
}
},
这就是它们的显示方式

它们不显示真实名称的原因与自定义群集/属性在默认情况下不受支持这一事实有什么关系、还是其他问题?
下面是 我迄今为止已经执行的代码: https://drive.google.com/file/d/1_J4yzBdjw_mMgw-gDI9-y-9yJ8gzPkQG/view?usp=sharing
我还实施了在 ZR_Light: WEBENCHTools/CC2652R:z-stack 的 zcl.c - Zigbee 和 Thread 论坛- Zigbee 和 Thread - TI E2E 支持论坛中找到的代码
以及来自此(第二种方法)的代码: WEBENCH工具/CC2652R:如何构建 z-stack 以支持制造商特定的集群、制造商特定的属性和制造商特定的命令- Zigbee 和 Thread 论坛- Zigbee 和 Thread - TI E2E 支持论坛
我无法获取要输入的代码:在 ZR Light 中的 static ZStatus_t zclGeneral_HdlInforing (zclInforing_t *pInMsg)
我缺少什么吗?
你有什么建议吗?
您引用的代码未显示 zclGeneral_HdlInforing? 您的代码是否调用 zclGeneral_RegisterUnsupportCallback 以注册 zclGeneral_HdlIncoming 、与 ZCL_cluster_ID_custom_Panagiotis 值相比、zcl_registerPlugin 的开始/结束群集 ID 是什么?
此致、
Ryan
我 对 zclGeneral_HdlInforing 进行了一些更改
static ZStatus_t zclGeneral_HdlIncoming( zclIncoming_t *pInMsg )
{
ZStatus_t stat = ZSuccess;
if ( zcl_ClusterCmd( pInMsg->hdr.fc.type ) )
{
// Is this a manufacturer specific command?
stat = ZFailure;
if ( pInMsg->hdr.fc.manuSpecific == 0 )
{
if ( zcl_matchClusterId( pInMsg ) ) //match cluster ID support.
{
stat = zclGeneral_HdlInSpecificCommands( pInMsg );
}
else
{
stat = ZFailure;
}
}
else
{
// We don't support any manufacturer specific command.
stat = ZFailure;
}
if( stat == ZFailure)
{
if( zclGenUnsupportCallback )
{
stat = zclGenUnsupportCallback( pInMsg );
}
}
}
else
{
// Handle all the normal (Read, Write...) commands -- should never get here
stat = ZFailure;
}
return ( stat );
}
我更改 了 zclGeneral_RegisterCmdCallback 和 zclGeneral_RegisterUnsupportCallback 中 zcl_registerPlugin 的结束群集 ID 以包括我的群集 ID。
我还删除了从 WEBENCHTools/CC2652R 获取的代码:如何制作 z-stack 以支持特定于制造商的集群、特定于制造商的属性和特定于制造商的命令- Zigbee 和 Thread 论坛- Zigbee 和 Thread - TI E2E 支持论坛、 因为它在任何地方都未使用
现在它可以正常工作、除非我打开 LED、我的属性将其值更改为+ 256、而当我关闭 LED 时、它将恢复为其原始值。
如果您看到我发送的代码、我认为开/关不会影响 我的代码。 我还检查了开/关代码、但没有任何问题。 为什么会发生这种情况?
进一步调试 该项目、以确切确定哪个函数将属性值(我假设您是指 zclSampleLight_Custom)更改256、然后计算 Light 应用程序和自定义代码之间的相关性。 ZCL_CLUSTER_ID_CUSTOM_Panagiotis 和 ATTRID_Panagiotis 不应与 SAMPLELIGHT_终结 点上保存的任何其他群集/属性 ID 值重叠 、也许您可以考虑注册第二个终结点。
此致、
Ryan
您应该为定制集群添加制造代码、您可以下载我的 SDK https://gitee.com/zigbee_luo/simplelink_sdk_2022.git 并浏览当前的 SDK 6.20文件夹
您应该将 ZDO_MANU_CODE 值定义为 项目中的制造代码。 如果 cluster-id 大于0xFC00, 则在节点收到 ZCL-frame 时将匹配制造商代码。
在我的 SDK 中、您可以根据需要发送任何包含制造代码的 ZCL-COMMAND (读取属性、写入属性、特定命令...)。