MC13224V - Beestack - Battery operated end-devices don't hibernate if ZigBee network is down (electrical power outage)

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

MC13224V - Beestack - Battery operated end-devices don't hibernate if ZigBee network is down (electrical power outage)

Jump to solution
1,416 Views
glaucioguia
Contributor I

Hello,

in home automation application I have a coordinator, a few routers and 1 or 2 end-devices. The coordinator and the routers have their own power supply connected to the house 110Vac. The end-devices are battery operated and need to hibernate periodically to save battery.

In case of electrical power outage (110Vac) the coordinator and all routers go down. The end-devices keep running since they have its own battery. When the outage happens, the end-devices lose their parent and start to look for a new parent. Since there is no active coordinator or router in the ZigBee network the end-devices keep continually looking for a parent and never hibernate, discharging the battery completely in a few hours.

What should I do to force the end-devices to hibernate in such situation? In my application, I'd like to hibernate for 1 minute, wake-up and look for a parent. If there's still no active parent hibernate for 1 minute again. And keep doing it every minute until the electrical power (110Vac) return.

I tried to change the value of the following constants (in ApplicationConf.h) with no success. I can control the number of network rejoin retries but I can't hibernate the MC13224V between attempts.

mDefaultValueOfNwkDiscoveryAttempts_c

mDefaultValueOfDiscoveryAttemptsTimeOut_c

mDefaultValueOfNwkOrphanScanAttempts_c

mDefaultValueOfOrphanScanAttemptsTimeOut_c

1 Solution
1,229 Views
AlanCollins
Contributor V

Hello Glaucio,

     You are in the right path.

  • First you need to change the values of the discovery and scan attemps in order to control when to stop those mechanisms.
  • Then, you hook into the ZDO manager to identify when the join process failed, so you can trigger the Hibernate. Now, for the system to go enter into hibernate you need to make sure that:
    • cPWR_UsePowerDownMode must be TRUE
    • There are no pending tasks nor events. The low power mechanism is called from the "IdleTask".
    • There are no running timers. If you are using the LEDs and Keyboard drivers, you might have running timers associated to these drivers. Please make sure to turn them off before trying to enter into sleep. example (inside IdleTask):

                         LED_StopFlash(0xFF);

                         KBD_EnableDisableKeyScan(FALSE);

                         EnterLowPower();

    • mLPMFlag must be 0, to allow sleep. The functions PWR_AllowDeviceToSleep and PWR_DisallowDeviceToSleep, will increment and decrement that flag. Make sure you are using it in the right way.

That's all that comes into my mind at this point. Let me know if you need further guidance.

Cheers,

Alan Collins

View solution in original post

0 Kudos
1 Reply
1,230 Views
AlanCollins
Contributor V

Hello Glaucio,

     You are in the right path.

  • First you need to change the values of the discovery and scan attemps in order to control when to stop those mechanisms.
  • Then, you hook into the ZDO manager to identify when the join process failed, so you can trigger the Hibernate. Now, for the system to go enter into hibernate you need to make sure that:
    • cPWR_UsePowerDownMode must be TRUE
    • There are no pending tasks nor events. The low power mechanism is called from the "IdleTask".
    • There are no running timers. If you are using the LEDs and Keyboard drivers, you might have running timers associated to these drivers. Please make sure to turn them off before trying to enter into sleep. example (inside IdleTask):

                         LED_StopFlash(0xFF);

                         KBD_EnableDisableKeyScan(FALSE);

                         EnterLowPower();

    • mLPMFlag must be 0, to allow sleep. The functions PWR_AllowDeviceToSleep and PWR_DisallowDeviceToSleep, will increment and decrement that flag. Make sure you are using it in the right way.

That's all that comes into my mind at this point. Let me know if you need further guidance.

Cheers,

Alan Collins

0 Kudos