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.

[参考译文] CC2530:ZCL 报告属性

Guru**** 2589300 points


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

https://e2e.ti.com/support/wireless-connectivity/zigbee-thread-group/zigbee-and-thread/f/zigbee-thread-forum/837038/cc2530-zcl-reporting-atrributes

器件型号:CC2530

大家好、

我´m 根据 ZCL 基础实施消息报告属性、使用"push"方法属性报告、器件本身会在属性更改时发送报告。 在本例中、我使用  ZCL_CLUSTER_ID_GEN_ON_OFF、但当我检查器件通过无线方式发送的消息时 、我看到 ZCL 参数格式错误。 可以在所连接的 PIC 上看到它。

我已在我的应用文件中配置了参数、如下所示:

/*********
*全局变量
*/
zclReportCmd_t rptcmd;

Init 在 ZCL 群集参数中配置:
//报告属性配置

rptcmd.numAttr = 1;

rptcmd.attrList[0].attrID = ATTRID_ON_OFF;//群集生成开/关中包含的 OnOff 属性 ID 为0 (rptcmd.attrl =

zuature.attraboly*);zu.attrature.ature.ature.ature.ature.attrl = zu.ature.ature.zu.ature.ature.ature.zr000Id=zu.zu.zrnature.zu.trl Id=zu.z




ZCL 报告 CMD 包含在 My app OnOffCB 中: 
static void zclTTa0003_OnOffCB( uint8 cmd )
{afIncomingMSGPback_t
*pPtr = zcl_getRawAFMsg();

zclTTa0003_DstAddr.addr.shortAddr = pPPTR->srcAddr.shortAddr.shortAdtr;


//打开
命令( if =
)
zclTTa0003_OnOff = lIGHT_ON;
seqNumb++;
zcl_SendReportCmd (TTa0003_Endpoint、&zclTTa0003_DstAddr、ZCL_CLUSTER_ID_GEN_ON_OFF、&rptcmd、 zcl_frame_client_Server_DIR,false,seqNumb );

}
//如果
(cmd == command_off)
{
zclTTa0003_OnOff = light_off;
seqNumb++;
zcl_SendReportCmd (&a0003_enders, zclTTa0003_on_cldeg_cl_dr、zcl_dtendr_cl_un_cl_dtrl、z_dtend_dr ZCL_FRAME_CLIENT_SERVER_DIR、false、0);

} 

我在 ZigBee 集群库快速参考中看到、正如您在下面看到的、zcl_SendReportCMD 中包含的所有参数都是正确的、但我在 Wireshark 中执行 cat 命令、该文件附带了格式错误的参数。  

是否有人想知道如何修复它?

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

    您好、Alexander、

    我使用 类似的参数评估了 zcl_SendReportCmd API、并成功发送了命令、监听器日志中没有任何错误(已附加以进行比较、在 Ubiqua 中捕获)。  是否可以共享监听器日志文件?  您能否提供属性字段和数据包帧?  目标 ZC 设备是否能够正确解析和处理传入的数据包?  您还可以考虑 BDB 报告和 Zstackapi_BdbRepChangedAttrValueReq API: http://dev.ti.com/tirex/explore/node?node=AJeGnyIqlkquNAYMtLtovQ__pTTHBmu__LATEST e2e.ti.com/.../zcl_5F00_sendreportcmd_5F00_successful.cubx

    此致、
    Ryan  

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

    您好、Ryan、非常感谢您的支持!

    我´ll 回答您的问题!

    1.您是否会看到附加了日志、与我对 PIC 的理解相同。

    2。 我使用的属性:

    ZCL 属性: ATTRID_ON_OFF

    在我的 App_data.c
    
    ZCL_cluster_ID_GEN_ON_OFF 中定义、
    {//属性记录
    ATTRID_ON_OFF、
    ZCL_datatype_Boolean、
    ACCESS_CONTRAL_READ、 
    (空*)&zclTTa0003_OnOff }

    3.我使用商用 ZC (网关),我无法确认他是否收到了良好的消息,但我在 Wireshark 上看不到任何响应。

    感谢您分享 BDB 报告、我从未见过!

    BR、

    Alex

    e2e.ti.com/.../my-wireshark_5F00_log_5F00_2019_5F00_0609.zip

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

    尝试以下代码发送开/关状态报告。

    rptcmd.numAttr = 1;

    rptcmd.attrList[0].attrID = ATTRID_ON_OFF;

    rptcmd.attrList[0].datatype = ZCL_datatype_uint8;

    rptcmd.attrList[0].attrData =(uint8*)&zclSampleLight_OnOff;

    zcl_SendReportCmd (SAMPLELIGHT_EndPoint、0、

    ZCL_CLUSTER_ID_GEN_ON_OFF、&rptcmd、

    ZCL_FRAME_CLIENT_SERVER_DIR、false、0);

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

    您好、Yk 先生、非常感谢您的帮助!

    我已经按照您的说明进行了配置、我已经看到、当您 使用 ZCL 报告属性(0x0a)时、直接包含_DstAddr=0时、消息不会发送。 之后、我像 之前一样采用了&zclTTa0003_DstAddr。 但仍然没有数据类型、包括、我认为这是因为 Wireshark 解码为格式错误的消息/参数。  

    我还将 ZCL 参数更改为电平控制、并观察到相同的行为。 如您在所附 Wireshark 消息中所见。  

    您可以在下面的 PIC 中看到"Get from Quick Watch"、"Attributes"参数字段为空!

    我包括下面用于发送上次报告属性消息的代码。

    //在 ZCL 报告属性
    zclTTa0003_DstAddr.addrMode =(afAddrMode_t) Addr16Bit;zclTTa0003_DstAddr.addr.shortAddr.Adcmd
    = 0;
    zclTTa0003_DstAddr.dst=1;//由 Gateway 发送的端点;zclattrattrl.attrl
     =0[rattr.attr.attrl
    
    =
    0;zrattr.attrl 0_attr.attr.attrl 0_u.attrl 0_u.attrl = 0;zu.attr.attr.attrl 0_u.attr.attrl 0_attrl 0_u.attr.attr.attrl 0_u.attr.attr.attr.attr.attrl = 0;z.attr.attr.attr.attr.attr.attr.attrl
    
    
    //level control
    //rptcmd.numAttr = 1;
    //rptcmd.attrList[0].attrID = ATTRID_LEVEL_CURRENT_LEVEL;//群集生成开/关中包含的 OnOff 的属性 ID 为0 (ZigBee 群集库规范)
    //rptcmd.attrList[0].datatype = Zint8;
    rttu.atel_u0008;/rttatru.atel_ru.atype = Zu0008; 

    static void zclTTa0003_OnOffCB( uint8 cmd )
    {afIncomingMSGPacket_t
    *pPtr = zcl_getRawAFMsg();
    
    
    //如果
    (cmd = command_on)
    {
    zclTTa0003_OnOff = lIGHT_ON;
    seqNumb++;
    zcl_SendReportCmd (TTa0003_Endpoint、&zclTTa0003_DstAddr、ZCL_CLUSTER_ID_GEN_ON_OFF、&rptcmd、 ZCL_FRAME_CLIENT_SERVER_DIR,false,seqNumb);
    //zcl_SendReportCmd (TTa0003_Endpoint,&zclTTa0003_DstAddr,ZCL_cluster_ID_GEN_LEVEL_CONTROL, &rptcmd、ZCL_FRAME_CLIENT_SERVER_DIR、false、seqNumb);
    
    }
    //如果
    (cmd = COMMAND_OFF)
    {
    zclTTa0003_OnOff = light_OFF;
    seqNumb++,则关闭其他灯;
    zcl_SendReportCmd (TTa0003_Endpoint、&zclTTa0003_DstAddr、ZCL_CLUSTER_ID_GEN_ON_OFF、&rptcmd、ZCL_FRAME_CLIENT_SERVER_DIR、false、 seqNumb);
    //zcl_SendReportCmd (TTa0003_endpoint、&zclTTa0003_DstAddr、ZCL_CLUSTER_ID_GEN_LEVEL_CONTROL、&rptcmd、ZCL_FRAME_CLIENT_SERVER_DIR、 false,seqNumb );
    } 


    请、您是否了解如何解决该问题? 

    e2e.ti.com/.../my-wireshark_5F00_log_5F00_2019_5F00_0609_5F00_d.zip

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

    请尝试以下代码。

    zclReportCmd_t *pReportCmd;
    
    pReportCmd = osal_mem_alloc (sizeof (zclReportCmd_t)+ sizeof (zclReport_t)));
    if (pReportCmd!= NULL)
    {
    pReportCmd->numAttr = 1;
    pReportCmd->attrList[0].attrID = ATTRID_ON_OFF;
    pReportCmd->atList[0].datatype = ZCL_datatype_uint8;
    pReportCmd->attrList[0].attrData =(uint8*)&zclSampleLight_OnOff;
    
    zcl_SendReportCmd (SAMPLELIGHT_终结 点、0、ZCL_CLUSTER_ID_GEN_ON_OFF、
    pReportCmd、ZCL_FRAME_SERVER_CLIENT_DIR、TRUE、seqnum++);
    }
    
    osal_mem_free (pReportCmd);
    

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

    如 YK 所示,您可以参考 bdb_RepReport 中的示例

    此致、
    Ryan

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

    你好,黄先生,非常感谢你的帮助。 在我实施了您发送给我的最后一个代码后、我成功地发送了 ZCL 报告属性

    如所附的 PIC 所示。

    、非常感谢您的帮助!

    此致、

    Alex