Indoor location on locked device (iOS)

Hi everyone,

I’m very new to the Estimote indoor location API, but am already quite impressed with what is possible.

Anyway, I’m trying to build an app which tracks at which workstation a user is working. I’ve already mapped our office using 6 beacons and am now trying to have the app report at which workstation the user is working.

However, I can’t seem to get the current (x,y) position for the user when the device is locked (the updates from IndoorLocationManager stop). I found an old thread which mentioned that this might not be possible, is this still true? And would it be possible to enable position updates on a locked device?

My use case has workstations spaced apart ±2 meters, which is why I want to use indoor location, instead of simple ranging, as I understood that indoor location is most likely more accurate(?). The tracking should be non intrusive, i.e. the user should just be able to keep the iPhone in his/her pocket. Also impact on battery life is not much of an issue for this case.

TL;DR: Is there a possibility to track indoor location on a locked device?

Thanks in advance,

In fact, it is!

Two caveats:

  • It works only with our brand new Location Beacons, since we’re using one of the new Estimote packets we introduced in firmware 4.x, and at this time, only Location Beacons are compatible with firmware 4.x.

  • In the background, we don’t have all the access to sensors and very responsive Bluetooth scanning methods that we do in the foreground, so the accuracy is slightly less.

Would love to know your thoughts and feedback about this feature!

Thanks for your kind and quick reply!

Could you comment on the loss of accuracy? What would be the best case and typical accuracy?

It is a shame though since we’ve just bought some of the “old” type beacons, so if the accuracy is not better than by simple ranging I might try that first. Ranging does not have a limit on the amount of beacons like zoning does right? I could have 30 beacons and still see which are probably closest?

In the background, the accuracy really depends on the amount of beacons deployed. As a rule of thumb, take the size of the room, then divide it by the number of beacons, and that’s the accuracy. It’s still better than regular ranging.

Ah okay thanks. Does that mean that for a 30m^2 room I would need 15 beacons for ±2m accuracy? Would all of those need to be placed at the walls are spread throughout the room?

For this use case, I’d install one beacon per each workstation, so the accuracy will be highest around them, allowing you to detect which workstation the user is at.

Thanks for your reply and the tips! I will try that.

Just to be sure, the beacons at the workstations would also have to be placed vertically at chest hight right?
And no changes to the code using the IndoorLocationManager would have to be made? Just reprogram the Location, with the beacons inside the location (at the workstations) added additionally to the ones on the wall?

Chest height works best, yes, but rather than height, it’s more important to position them vertically, with the little dot facing up—exactly like shown in the Indoor app.

And yup, you will only need to adjust the location—the code in your app can stay the same.

Okay awesome, thank you for your time!

We will order a few sets of the new location beacons to try this out. Is it possible to return the ‘old style’ beacons?

You can always return you dev kits within 15 days. If that time has already passed, hit us at, and we’ll see what we can do.


Thanks again for the previous replies.

We’ve ordered the new beacons, but are having some trouble using them. When ranging for the beacons their proximity is unavailable a lot (CLProximity.Unknown) and their RSSI reported as 0. For most beacons this is the case in over half the readings. With the ‘old’ beacons we did not have this problem, their proximity would sometimes be reported as unknown, but definitely not as often.

Wehn trying to use indoor location, the location manager manages to get a fix ones, after which it fails with:
Error Domain=com.estimote Code=1 "Can't determine position outside the location." UserInfo={NSLocalizedDescription=Can't determine position outside the location.}

The beacons are hung in the exact same place as the old beacons, and the location setup is the same as the old setup (just changed the beacon ID’s to those of the new beacons). I have already verified that these IDs are set up correctly. All beacons are set to broadcast at 4dB (max power) at 1000ms intervals.

Could you perhaps advice on why indoor location is not working with the new beacons (given that none of the other settings have changed) and what we can improve to fix this.

Thanks in advance

After reading round on the forum a bit more I turned off custom timing for all beacons (setting their interval to 100ms), which seems to have fixed the ranging issue.

However, the issue with indoor location still exists, could you please advice?

Hi PimJager!

Indoor Location uses a different packet for new beacons. Most probably this is the case - you need to have the Estimote Location packet enabled and set to +4 dBm and 200 ms advertising interval.

Hi Marcin,

Thanks for the quick reply. I enabled ‘Estimote Location’ packets through the app, and set the broadcasting power and interval to 4dB and 200ms through the website (and then of course applied the changes on the beacons). The packets are called ‘Here & Now’ on the website right?

Anyway, this has sadly not fixed my issue, I still get the same error. What are other things I could try?

One other thing I noticed is that usually it manages to get one or two successful location updates (didUpdatePosition) before calling the fail method (didFailToUpdatePositionWithError). And sometimes when waiting for a long time (several minutes) it manages to get get another location update before failing again.

Hi Marcin,

Could you please advise on this issue? As we currently can not make any progress and are unable to resolve the issue ourselves.

Thanks in advance

Hi PimJager!

Sorry for the delay, the forum notification have slipped past other emails :slight_smile:

The Here & Now is a totally different packet - you can read about it more here:

The packet you are looking for is Estimote Location packet:

Dear Marcin,

Thank you for your reaction. I cannot believe I missed that.

I enabled the estimote location packages through the cloud website. However I noticed that those settings are not transfered to the beacon by the estimote app (even though the beacons are stated as ‘Synced with Cloud’). So I then enabled the location packages through the app for all beacons, but in the app I can’t set the interval or broadcasting power for the location packets (for iBeacons these are set to 100ms and 4dB).

However, even after setting these I still get the same error as before, it now appears to be a bit later, (after a few seconds, or about a dozen updates), but the error is still there.

What could be other issues? Could one of the beacons be faulty? I have already tried excluding one beacon when setting up the location (trying this for every beacon), but this did not resolve the issue.

Could you please advice?

With kind regards,


Hi PimJager!

The Estimote app unfortunately turns on very specific settings for the Estimote Location packet namely sets it to the -12 dBm.

To apply the changes a bit around, but working way is to change the settings in Estimote Cloud (they will be marked as pending) and only connect to the beacon. Upon connection the settings are synced with Estimote Cloud. You can double check it in the web panel that for that specific beacon pending settings are no longer pending :slight_smile:

The -12 dBm power setting is the reason of the behaviour you describe.