This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

Zigbee-Device not being found by Philips Hue Bridge on Factory Reset

Dear support team & community

Our company tries to integrate communications between our NRF52840-based product and a Philips Hue Bridge gateway.
We successfully connect, bind and exchange ZLL & Zigbee HA frames.

In the process of development, we encountered the problem, that if

  1. our NRF52840-based device (Zigbee HA, On/Off) is deleted in the Philips Hue app while being turned off
  2. and while our device is factory reset during booting (zb_set_nvram_erase_at_start(true);)

our device will connect to the Philips Hue Bridge's network, but won't be found in a scan for new devices in the Philips Hue App.

To be found again by the Philips Hue Bridge, our product needs to change its MAC-Address.

For us, this is not an acceptable way to workaround the problem, as it requires a complex procedure to detect when to trigger a MAC-switch and do a reboot of the device, which causes disconnection of BLE communications with our own Smartphone App (we use Multiprotocol BLE + Zigbee which is working flawlessly).

An original factory reset Philips Hue Lightbulb behaves correctly in the same scenario.

We did some protocol sniffing, comparing communications for

  • a factory reset device (failing find, but network connection successful)
  • a fresh device (new MAC-address, successful)
  • a factory reset Philips Hue Lamp (same MAC-address, successful)

In the failing case we encountered several differences:

  • The Philips Hue Bridge does not send a "Node Descriptor Request" packet: Therefore the Philips Hue Gateway does not list our device.
  • Our device sends "Mgmt Permit Joining Req" packets directly after device announcement. This is not the case in the other scenarios. We cannot explain how this can be since our device was factory reset and strongly suspect this to be cause of our problems.
  • Our device sends a "Device Announcement" packet with the NWK Header's frame control flag "Source IEEE Address Included" being set, which is not the case for the Philips Hue Lightbulb. We do not think this to be relevant, as the device announcement packets from a fresh device with new MAC-address have the same flag set (yet working flawlessly).
  • We see some early "Route Request: ManyToOne No RRT" frames

Do you have some ideas what might cause our problems? How would we be able to prevent our own device from sending "Mgmt Permit Joining Req" packets? Do you need more information?

 

Best regards

Markus Wegmann, Technokrat GmbH

A factory reset device (failing find, but network connection successful). Note the "Mgmt Permit Joining Req" packets after device announcement:

Failing bind (no Node Descriptor Request by gateway)

Parents
  • Hi Markus.

    I have forwarded this to the development team as I need some help with this case.

    Best regards,

    Andreas

  • Hi.

    I've talked with the development team.

    A way to solve this issue is to not use zb_set_nvram_erase_at_start(true);

    Instead of using this, use the reset routine that is used in the CLI example: zb_bdb_reset_via_local_action(zb_uint8_t param).

    /**
     * @brief Perform a factory reset via local action
     *
     * See Base Device Behavior specification chapter 9.5 for details.
     *
     * @code
     * > bdb factory_reset
     * Done
     * @endcode
     */
    static void cmd_zb_factory_reset(nrf_cli_t const * p_cli, size_t argc, char **argv)
    {
        if (nrf_cli_help_requested(p_cli))
        {
            print_usage(p_cli, argv[0], "factory_reset - Perform factory reset");
            return;
        }
    
        zb_bdb_reset_via_local_action(0U);
        print_done(p_cli, ZB_FALSE);
    }
    /**
     *  @brief Perform "Reset with a Local Action" procedure (as described in BDB spec, chapter 9.5).
     *  The device will perform the NLME leave and clean all ZigBee persistent data except the outgoing NWK
     *  frame counter and application datasets (if any).
     *  The reset can be performed at any time once the device is started (see @ref zboss_start).
     *  After the reset, the application will receive the @ref ZB_ZDO_SIGNAL_LEAVE signal.
     *
     *  @param param - buffer reference (if 0, buffer will be allocated automatically)
     */
    void zb_bdb_reset_via_local_action(zb_uint8_t param);

    Best regards,

    Andreas

  • Hi Andreas

    Many thanks to you and the development team. zb_bdb_reset_via_local_action(zb_uint8_t param) is doing its job.

    Best regards

    Markus

Reply Children
No Data
Related