Zigbee Cluster Library Configure Reporting Command

Hello, 

In the past months, I'm being developing Zigbee Routers-based applications and so far everything is going well.

I've already a few devices installed without OTA capabilities, and recently I noticed that some attributes are being reported too often without being needed.

So, I went through the ZCL and I found out that it might be possible to workaround this issue without the need for firmware updates on the router's side.

Well, apparently I should be able to send this "Configure Reporting Command" from the coordinator side, specifying the desired reportable change (2.5.7).

However, I'm not having too much luck on that and I've also noticed strange behavior. 

So, with:

 - Minimum report interval = 0x0

 - Maximum report interval = 0x0

 - Reportable change = 0xA

 - Timeout = 0x0

I've noticed that, even when the temperature value changes with 10 more degrees from the last reportable value, I'm not receiving anything. Also, if I hit the reset button on the router, it leaves the Zigbee network and re-joins again (only happens when using this command).

Any suggestion?

Thanks in advance,

Best regards,

Fernando Fontes

Parents
  • Hi again

    Please check out how the leave network functions in I.E. our light switch example project handles this by setting the rejoin parameter to ZB_FALSE:

    /**@brief Perform local operation - leave network.
     *
     * @param[in]   param   Reference to ZigBee stack buffer that will be used to construct leave request.
     */
    static void light_switch_leave_nwk(zb_uint8_t param)
    {
        zb_ret_t zb_err_code;
    
        /* We are going to leave */
        if (param)
        {
            zb_buf_t                  * p_buf = ZB_BUF_FROM_REF(param);
            zb_zdo_mgmt_leave_param_t * p_req_param;
    
            p_req_param = ZB_GET_BUF_PARAM(p_buf, zb_zdo_mgmt_leave_param_t);
            UNUSED_RETURN_VALUE(ZB_BZERO(p_req_param, sizeof(zb_zdo_mgmt_leave_param_t)));
    
            /* Set dst_addr == local address for local leave */
            p_req_param->dst_addr = ZB_PIBCACHE_NETWORK_ADDRESS();
            p_req_param->rejoin   = ZB_FALSE;
            UNUSED_RETURN_VALUE(zdo_mgmt_leave_req(param, NULL));
        }
        else
        {
            zb_err_code = ZB_GET_OUT_BUF_DELAYED(light_switch_leave_nwk);
            ZB_ERROR_CHECK(zb_err_code);
        }
    }

    Best regards,

    Simon

Reply
  • Hi again

    Please check out how the leave network functions in I.E. our light switch example project handles this by setting the rejoin parameter to ZB_FALSE:

    /**@brief Perform local operation - leave network.
     *
     * @param[in]   param   Reference to ZigBee stack buffer that will be used to construct leave request.
     */
    static void light_switch_leave_nwk(zb_uint8_t param)
    {
        zb_ret_t zb_err_code;
    
        /* We are going to leave */
        if (param)
        {
            zb_buf_t                  * p_buf = ZB_BUF_FROM_REF(param);
            zb_zdo_mgmt_leave_param_t * p_req_param;
    
            p_req_param = ZB_GET_BUF_PARAM(p_buf, zb_zdo_mgmt_leave_param_t);
            UNUSED_RETURN_VALUE(ZB_BZERO(p_req_param, sizeof(zb_zdo_mgmt_leave_param_t)));
    
            /* Set dst_addr == local address for local leave */
            p_req_param->dst_addr = ZB_PIBCACHE_NETWORK_ADDRESS();
            p_req_param->rejoin   = ZB_FALSE;
            UNUSED_RETURN_VALUE(zdo_mgmt_leave_req(param, NULL));
        }
        else
        {
            zb_err_code = ZB_GET_OUT_BUF_DELAYED(light_switch_leave_nwk);
            ZB_ERROR_CHECK(zb_err_code);
        }
    }

    Best regards,

    Simon

Children
No Data
Related