It is typical scenario:
Host App->(serial port)->ZigBee dongle with NCP as coordinator->(ZigBee mesh network)->20 ZigBee lights.
Most ZigBee lights are in close proximity and hence are the neighbors of the coordinator.
The requirement is to turn all lights on or off, it is possible that the user send the commands very quickly.
Method 1: The coordinator send unitcasts to 20 ZigBee lights in order, but the user experience is not the best becasuse it may take longer time for the last light being controlled.
So I'm considering to use the below method.
Method 2: Since the broadcast (multicast is a kind of broadcast) should be used sparingly, and most lights are in close proximity (as the neighbors of the coordinator), I want to use multicast with radius 1 and nonmember radius 0 (See ezspSendMulticast() method), then send unicasts to all lights again (maybe more effciently, I may only send unicasts to those lights which are not neighbors of the coordinator by checking the neighbor table of the coordinator). It works well. When the light receives the packet, it doesn't re-tranismit it again since the radius is decreased to zero.
So my questions are:
1) Is the Method 2 the best practice for my scenario? If not, what is suggested?
2) In Method 2, since the light will broadcast the packet again, as per nwkMaxBroadcastRetries policy, the coordinator will retry to send another two same packets. Is there any way to optimize it?
Zigbee supports ZCL group command which you can add a device to a specific group and use groupcast to send message to specific group.