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.

[参考译文] LAUNCHXL-CC26X2R1:Zed_genericapp 赢了#39;t 向协调器报告

Guru**** 2466550 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/zigbee-thread-group/zigbee-and-thread/f/zigbee-thread-forum/1107232/launchxl-cc26x2r1-zed_genericapp-won-t-report-to-coordinator

器件型号:LAUNCHXL-CC26X2R1

您好!

我想构建一个终端设备、将属性数据报告回连接到 zigbee2mqtt 的集中器。

我克隆了 zed_genericapp 并添加了两个属性: ATTRID_basic_model_identifier (zigbee2mqtt 的 mandantory)和:

unsigned char zclGenericApp_iov_stateText[256];

...

{
ZCL_CLUSTER_ID_GENERAL_MULTISTATE_VALUE_BASIC,
{ // Attribute record
ATTRID_IOV_BASIC_STATE_TEXT,
ZCL_DATATYPE_CHAR_STR,
(ACCESS_CONTROL_READ | ACCESS_CONTROL_WRITE | ACCESS_REPORTABLE),
(void *)zclGenericApp_iov_stateText,
}
},

还将 ZCL_CLUSTER_ID_General_multistate_value_basic 添加到 了 zclGenericApp_InClusterList。

通过这个设置、我能够从 zigbee2mqtt 中设置一个新值、并请求该值返回。

现在、我想在按键时报告该值。 我将 zclGenericApp_processKey 修改为:

if(_btn == gRightButtonHandle)
{

// Zstackapi_bdbResetLocalActionReq(appServiceTaskId);
ZStatus_t status = bdb_RepChangedAttrValue(
GENERICAPP_ENDPOINT,
ZCL_CLUSTER_ID_GENERAL_MULTISTATE_VALUE_BASIC,
ATTRID_IOV_BASIC_STATE_TEXT
);
}

在该函数中、我遇到了一个问题、

if( FLAGS_CHECKFLAG( bdb_reportingClusterEndpointArray[indexClusterEndpoint].flags, BDBREPORTING_HASBINDING_FLAG_MASK ) == BDBREPORTING_FALSE )

因此不会发送报告。

这意味着什么? 无绑定? 我之前已经完成了"左按钮"、我认为它可以很好地连接到集中器。 虽然没有绑定请求、但存在关联请求/响应、密钥交换、节点描述符请求/响应。

感谢您的任何帮助...

此致、
Frithjof

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 、Frithjof、

    假定发送报告的设备应具有包含 所使用的群集和属性 ID 的绑定。  MT 命令 ZDO_BIND_REQ (用于 ZNP)或 Z-Stack API Zstackapi_ZdoBindReq (ZCL 项目)如果无法通过 BDB 查找和绑定实现自动绑定、应有助于创建手动绑定。  您还可以使用 Zstackapi_BdbRepAddAttrCfgRecordDefaultToListReq 将属性记录添加到报告列表。  我建议您查看 Zigbee 基础项目开发 SimpleLink Academy 实验、并在  实施定制解决方案之前尝试使用 zed_temperaturesensor 或 zed_light 生成报告以使其正常工作。  您还可以参阅 zigbee2mqtt Github 讨论板 以了解有关此系统的问题。

    此致、
    Ryan

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Ryan、

    感谢您提供的建议阅读。

    结果,zigbee2mqtt 不会请求与该群集绑定。

    借助 SimpleLink Academy 中的信息(第2部分:发送原始数据)、我最终解决了我的问题并发送了手工制作的"属性报告"命令。

    zstack_afDataReq_t pReq;
    ...
    // hand-craft a report attributes command
    pPayload[0] = 0b0001000; // frame control field
    //  - disable default response: false
    //   - direction: server to client
    //    - manufacturer specific: false
    //     -- frame type: profile-wide
    pPayload[1] = sequence_number;
    pPayload[2] = ZCL_CMD_REPORT;
    OsalPort_memcpy ( pPayload+3, &attribute_id, 2 );
    pPayload[5] = attribute_datatype;
    pPayload[6] = len;
    OsalPort_memcpy ( pPayload+7, bytes, len );
    
    pReq.n_payload = len + 7;
    pReq.pPayload = pPayload;
    
    ret = Zstackapi_AfDataReq(appServiceTaskId, &pReq);
    

    我从 Wireshark 输出中猜测了有效载荷标头。

    是否有有关这七个字节有效载荷标头的文档?

    谢谢、

    Frithjof

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    这可以从 Zigbee 集群库规范中推断出来、 此处是修订版6 、但支持的最新版本是 ZCLv7。

    此致、
    Ryan