How the estimate works
A beacon advertises a measured power: the RSSI a receiver should see at 1 m. The receiver compares the current RSSI with that value and converts the ratio into a distance with an empirically fitted curve. iOS does this internally; Android beacon libraries use similar curves fitted to measurements.
Why it's rough
- Calibration: the 1 m value must be measured per beacon model (and ideally per installation). A wrong value shifts every estimate.
- Noise: RSSI jumps by several dB between packets due to reflections, orientation and interference.
- Bodies and walls: a phone in a pocket, a person in between or a metal shelf changes RSSI far more than a meter of distance does.
- Receivers differ: different phones report different RSSI for the same signal.
- Apple's own
accuracyvalue is a one-sigma uncertainty, not a distance guarantee, and Apple advises against using it for precise location.
What works in practice
- Use zones (immediate, near, far) or "closest beacon" decisions rather than meters.
- Smooth RSSI over several seconds (moving average or a simple Kalman filter) before deciding, and add hysteresis so zone changes don't flicker.
- Calibrate on site with the phones your users actually carry.
- For room-level presence, compare RSSI of the same device across several fixed receivers (the strongest receiver wins) instead of converting to distance.
- If you need real positioning accuracy, look at technologies built for it (e.g. Bluetooth direction finding or UWB) rather than RSSI alone.
Sources: Stack Exchange (CC BY-SA 4.0) — see links.