The reported beacon distance updates very slowly


We’re trying to use the distance property of a set of Estimate beacons to determine their proximity to an iPhone placed in the centre of a room. The room has a radius of approximately 7 to 10 meters. The users walk around with the beacons in the room and the iPhone tracks each user’s distance.

The issue we’re facing is that while the distance itself is relatively accurate, the time it takes for the beacon’s reported distance to adjust to the actual distance of the user is quite long. For example, if the user moves a few meters away from the iPhone the reported distance will keep rising very slowly (± 20cm at a time) over the course of 10 to 30 seconds before the reported distance will eventually match that of the user. The opposite, wherein the user moves closer to the iPhone, somehow seems to work a lot faster (although it still takes some time).

Ideally, the reported distance should match the actual user’s distance within 5 to 10 seconds. We already tried various broadcast and advertising interval settings, but without much success. Our guess is that this wait is caused by various filtering algorithms in the SDK that are pretty conservative about the distance they report when the beacons are further out.

Is there any way that we can make the distance update faster (even if this may come with lesser accuracy)?

You could give startEstimoteBeaconDiscovery a try. This method’s based on the Apple’s Core Bluetooth API, as opposed to ranging which is based on the Core Location framework. CL comes with some built-in distance smoothing which affects the responsiveness.

The only (though quite important) downside—this method doesn’t compute distances for you, it only yields raw RSSI (signal strength) values, so you’d have to do your own math to translate this into distances.