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.

节点发送 ZCL 广播命令 无效

Expert 1480 points

请问

想实现一个节点设备(路由或终端)对网络所有设备发送 ZCL 命令广播,比如 zclGeneral_SendOnOff_CmdOn, 调用此命令时配置地址如下

afAddrType_t zclSampleSw_BDstAddr;
zclSampleSw_BDstAddr.addrMode = (afAddrMode_t)Addr16Bit;
zclSampleSw_BDstAddr.endPoint = SAMPLESW_ENDPOINT;
zclSampleSw_BDstAddr.addr.shortAddr = 0xFFFC;  (或者 0XFFFF)

但是命令总是发送不出去

发现  zcl_SendCommand -> AF_DataRequest()

if ( (req.dstAddr.addrMode == Addr16Bit) &&
(req.dstAddr.addr.shortAddr == NLME_GetShortAddr()) )
{
afDataConfirm( srcEP->endPoint, *transID, stat );
}

条件不满足, 后来修改 zclSampleSw_BDstAddr.addrMode = Addr16Bit 还是不行,应该是NLME_GetShortAddr() 错误,

希望不要修改底层函数,有什么其他方式可以 发送 ZCL 广播命令吗?

谢谢!

  • 最开始配置是

    zclSampleSw_BDstAddr.addrMode = (afAddrMode_t)AddrBroadcast;

    后来修改为

    zclSampleSw_BDstAddr.addrMode = (afAddrMode_t)Addr16Bit;

  • 又做了分组测试,

    协调器可以对网络内各个组 发命令控制,

    但是节点向自己组内其他节点发 组控制命令,还是没有反应。

  • if ( (req.dstAddr.addrMode == Addr16Bit) &&
    (req.dstAddr.addr.shortAddr == NLME_GetShortAddr()) )
    {
    afDataConfirm( srcEP->endPoint, *transID, stat );
    }

    上面这个条件不应该进去的,因为这个进去的话,只是适用于同一个设备两个endpoint之间的通信,相当于自己发送数据给自己。

    你是看抓包数据没有发到空中吗? ZCL命令的参数都对吗?cluster注册都对吧?