RSSI for monitoring

There’s one thing I don’t understand much, how can I tell how near or far a beacon is from my phone using RSSI? Can I use RSSI for monitoring?

I have the current code:

public String setMonitoringListener(){
	try {
		this.beaconManager.setMonitoringListener(new BeaconManager.MonitoringListener(){
			@Override
			public void onEnteredRegion(Region arg0, List<Beacon> arg1) {
				Beacon nearestBeacon = arg1.get(0);
				if(nearestBeacon.getRssi() > -60){
					monitoredRegionStatus = "enter:" + nearestBeacon.getMajor() + ":" + nearestBeacon.getMinor();
				} else {
					monitoredRegionStatus = "nobeaconyet";
				}
			}

			@Override
			public void onExitedRegion(Region arg0) {
				monitoredRegionStatus = "exit";
			}
			
		});
	} catch (Exception e){
		Log.d("Exception: ", e.toString());
		return "Exception: " + e.toString();
	}
	return monitoredRegionStatus;
}

Is this a valid way of doing it? Should I change something? In this case the RSSI > -60 is closer and if I give it a number like -30 would be further away, am I right? Hope someone could clear this up for me.

Best to use the computeProximity and computeAccuracy methods from the Utils class:

http://estimote.github.io/Android-SDK/JavaDocs/com/estimote/sdk/Utils.html#computeProximity-com.estimote.sdk.Beacon-

1 Like

Thank you very much! This helped me a lot. I have another question now though, is there, at all, any way of knowing the direction the app user is facing? I know this is a huge stretch, but I’d like to know if there’s anyway of knowing that.

I don’t know if SDK have any methods for that, but I think it should be possibile to compute that basing on proximity parameters (knowing how far from the beacon is the user located) and mobile device sensors (e.g. accelerometer, magnetometer, etc.). Moreover, it’s good to think how would you define “direction” of the user. Probably, you should define limited area in the first place and define direction respecting area definition.

1 Like

I would define it as, if the device’s top part is pointint at the beacon, then it’s looking forward. What I have to do is this: place 3 beacons in a determined area, when I reach beacon A, the app should tell me which way to go to reach beacon B, so, if my device is pointing at beacon A it would say “turn left”, but if my device’s left-side is the side “looking” at beacon A, the app should say “turn around”. I hope I can explain myself with this xD But you did give me an idea using the accelerometer! I’ll look into it, thanks!

Your post explains a lot. I looks like you need something like indoor location functionality. Estimote provides something like that, but only for iOS. Unfortunately, right now you need to implement this functionality by yourself on Android if you want to have it on such devices :).

Well, I’m making the app on Unity, I don’t know much about iOS development, so I created the library for Android to test it out first. Then a workmate will create the iOS library. It’s unfortunate that Estimote doesn’t provide it for Android directly, but at least there’s a way of doing it for Android, even if it’ll take more time :smile:

Our new beacons, Location Beacons, have magnetometer built-in, so you can know the orientation of the beacon relative to the magnetic north. Then you can use the magnetometer in the smartphone to do the same. And finally, compare the two, and based on that you should be able to figure out the smartphone’s direction relative to the beacon.

Location Beacons will start shipping later this month. The SDK 4.0 (iOS) and 0.10.0 (Android) which support them are already live on our GitHub, but I guess you’d need to somehow bridge them with Unity.