For my setup I am running Micropython on XBee3 Zigbee modules acting as routers, my controller is using the Python API.
I am only able to get the NI parameter from a remote xbee after performing a network_discovery from the controller node running the Python API.
If I power up an additional node after running the discovery process I am unable to get the NI parameter that comes with the RemoteXBee object which is part of the XBeeMessage object.
What I am trying to do is populate a dictionary with the NI values as the key and the RemoteXBee oject as the value. The only success I have had with this is from having to run a network discovery from the controller which then blocks all execution on the controller.
Try running a non blocking read. Then make sure that the JV and JN values are enabled on your routers. This will allow the nodes information to be provided as they join.
I do have JV enabled I will experiment with JN. As far as the non blocking read are you talking about implementing the callback in the python xbee library.
If so that is what I have set up. In that callback I take the I try reading the NI value from the remote_device attribute of the message and that is what is returning None.
If that isn’t what you are talking about then I need to do some more reading because the only mention I saw of blocking while reading is when receiving data by polling.
That would have been in a Micro Python or Python interface.
You do need to make sure that the NI value to be entered on the device for it to show up. Have you verified that each node has an assigned NI value on it?