Briefly... how feasible is it to engineer a device that can change modes on a single network from a Router (ZR) to an End Device (ZED) without requiring a reflash or upgrade of firmware?
In detail... I've read AN724 (Designing for Multiple Networks on a Single ZigBee Chip), and at first blush, it would seem that this should provide the basic support necessary; that is, it shows that a single load of EmberZNet firmware can support both ZR and ZED roles. The trick is that I want the node to operate in one mode or the other exclusively, selected at boot time (probably by jumper or other non-volatile means), and do so on the same network regardless of roles. I'm not looking to switch roles rapidly; the likely use case is an installer setting a DIP switch on a unit to set it to be a ZR or ZED device. My goal is to avoid having two SKUs for a given device, i.e. two different firmware loads for what is essentially the same device.
I realize that this will require some network management; before a switch, the ZR will likely need to announce that it is leaving the network so that it can rejoin as a ZED, and vice versa. A node can't just switch roles spontaneously and expect the rest of the network to behave correctly. Within the application and the stack, how I see this working is that "Network A" is assigned to the ZR role, "Network B" is assigned to the ZED role, and at any given time, either Network A or Network B is disabled (I don't need to be time-slicing between both roles on the same network). But they would both be assigned to the same PAN ID with the same keys, etc.
Has this been done before? Is there support buried in the stack for just this sort of scenario? Any suggestions as to how I would go about this? Thanks.
We've had a couple customers try to do this with a multi-network configuration as you suggest, but I haven't heard anything back about how it went or whether they took this all the way to production.
There *is* a stack-supported option to switch between sleepy and non-sleepy end device, though, if you're comfortable doing that (forfeiting the mesh routing benefit while on line power). See emberFindAndRejoinNetworkWithNodeType() in stack/include/network-formation.h.