David G. Young 14 Jul 2015 Permalink
With Eddystone™, the new beacon format from Google, developers making beacon-enabled apps now have more options than ever. If you’re looking to build a new beacon-enabled app, or if you already have beacon apps, it’s important to understand what Eddystone can do.
Eddystone has significant differences from the other major standards. The first Bluetooth LE beacon type to gain popularity was the Apple-proprietary iBeacon™ standard starting in late 2013. It has since been joined by the open-source AltBeacon standard and the various, closed proprietary systems. Now Eddystone adds yet another open source standard to the mix.
|Range||~50 meters||~50 meters||~50 meters||~50 meters|
|Official Android Support||YES||YES||Unofficial||YES|
|Official iOS Support||YES||YES||YES||YES|
|Identifiers||10 byte namespace||16 byte id1||16 byte UUID||single|
|6 byte instance||2 byte id2||2 byte major|
|2 byte id3||2 byte minor|
|Interoperable with iBeacon?||NO||YES||YES||NO|
|Introduced||July 2015||July 2014||June 2013||Various|
Since all of these beacon types are based on Bluetooth LE, they all have a similar radio range of up to 50 meters. Where they start to differ is in how you use them. All of these beacon types work on iOS, but Apple provides no official support for iBeacon on the Android platform. The AltBeacon standard adds that official support through a beacon standard that is open source and cross-platform.
The new Eddystone standard doesn’t provide the same iBeacon interoperability, because the identifier layout of Eddystone is incompatible with the iBeacon standard. Where both iBeacon and AltBeacon use a three-part identifier that totals 20 bytes, Eddystone uses a two-part identifier totalling only 16 bytes. This can make it tricky to use Eddystone alongside existing or new iBeacon-based systems. This decision, however, allows Google to put some innovative capabilities into Eddystone.
Eddystone supports the concept of telemetry, a special type of beacon transmission that contains metadata about how the beacon is operating. This includes both battery level and temperature.
Eddystone also supports the multi-beacon concept. This means that a single hardware beacon sends out multiple transmissions that can be used independently. The telemetry packet transmission, separate from the main identifier packet, is one example of this. While Google is not the first company to invent multi-beacons (Radius Networks developed an iBeacon/AltBeacon interleaving model over a year ago), it is the first one to combine multi-beacons into a single standard.
The multi-beacon consists of three separate beacon frames:
In addition to the above, Eddystone actually uses a fourth frame, which is a standard iBeacon frame. The primary purpose of this frame is so Eddystone can leverage the iBeacon standard’s special ability to wake up iOS apps in the background, at which time they can start consuming the three frames above. That said, there’s nothing stopping you from using the iBeacon frame for your own purposes.
Not all of these frames have to be used at the same time. In fact, beacons based on Eddystone can be configured to turn off some of these frames to save battery power or reduce noise.
The first choice you probably want to make is whether you want to use the Eddystone-URL capability. The main advantage of Eddystone-URL is that it allows you to build your app and then have completely different people deploy beacons that send your app to specific URLs. If this capability matches your use case, then it is a good choice. For more general beacon use cases you probably want to stick to Eddystone-UID.
With that decision out of the way, you can decide whether you want to use telemetry. Eddystone-TLM typically isn’t transmitted as often as the other frames—about once per second. It therefore has less of an impact on battery and radio noise. If you know you won’t be using telemetry, you can always disable it.
Eddystone has a two part identifier that consists of a 10 byte namespace identifier and a 6 byte instance identifier. You typically use the namespace ID to signify your company or organization, so you know when a beacon is yours.
You can generate a namespace identifier with a UUID generator. But because standard UUIDs are 16 byte identifiers and namespace identifiers are only 10 bytes, you drop the middle six bytes from the UUID. This technique is especially useful if you already have an iBeacon Proximity UUID assigned for your company or organization, allowing you to use an equivalent organizational identifier for both formats. Below is an example of such a conversion.
iBeacon Proximity UUID: 2f234454-cf6d-4a0f-adf2-f4911ba9ffa6 Eddystone Namespace ID: 0x2f234454f4911ba9ffa6
Google also prescribes a second technique for generating a UID out of a URL. So you can algorithmically convert a domain name you own like http://www.radiusnetworks.com into a unique namespace id. Because this technique uses a one way hashing algorithm, there is no way to convert the namespace id back to a URL. You can use tools like RadBeacon Android to generate namespace identifiers from both URLs and UUIDs, and configure the field directly into the beacon.
The instance identifier is meant to uniquely identify a specific beacon. You usually will want to put a serial number in each one of these. If you have two beacons, you can give the first one an instance id of 1, and the second one an instance id of 2. Because the field is 6 bytes long (48 bits), there are 248 = 281 trillion combinations. That’s a lot of beacons.
For the purposes of this example, we will assume that the beacon is using a namespace ID of
0x2f234454f4911ba9ffa6 (the Radius Networks default) and an instance id of 1. These are the same identifiers that are pre-configure into the Beacons with ship with Eddystone support.
If you want to get started with Eddystone, you can buy a developer kit that includes hardware beacons from our Radius Networks store. These beacons can be configured with our free Android RadBeacon config app, which allows you to set the identifiers and URL (in case you are using Eddystone-URL) and set transmitter power and other options.
To learn more details about how you can build an app with Eddystone, see our companion post Building Apps With Eddystone.
Visit us here to access to more Radius Networks products that support Eddystone.