BlueBeacon Advertising Packets format

BlueUp has developed a custom firmware for its BLE beacons (BlueBeacon series) that simultaneously supports iBeacon and Eddystone technologies (with full support of Eddystone specifications, including GATT and EID frame), together with other technologies such as Quuppa for precise localization of beacons and BlueUp Sensors for environment sensing.

The total number of time slots available for these packets is 8: 4 for Eddystone frames, and 4 for other frames (iBeacon, Quuppa, BlueUp Sensors). These packets are individually configurable for data, transmission power and advertising interval, and are always non-connectable.

The format of these packets is strictly compliant to the specifications of each technology:

  • iBeacon
  • Eddystone (UID, URL, TLM, EID)
  • Quuppa: proprietary format
  • Sensors

Interleaved with (and independently from) these packets, BlueBeacon beacons periodically broadcast an Advertising Packet that contains the following information:

  • local name Service, with the unique identifier of the device, composed by manufacturer name (“BlueUp”), model number (2 digits) and serial number (6 digits)
  • battery Service, with estimated status of the battery (expressed in %)
  • 16-bit custom Service, with beacon-status flags, identifying the enabled advertising-packet technologies (iBeacon, Eddystone, Quuppa, BlueUp Sensors)

This Advertising Packet is broadcast at fixed non-modifiable power (-8dBm) and with a periodic interval according the following rule:

  • v5.x firmware: every 300msec for 5 minutes after power-up (or every disconnection) and, subsequently, every 2 seconds
  • v6.x firmware: every 300msec for 30sec after power-up (or every disconnection) and, subsequently, every 2 seconds

This solution allows to balance between a short response delay for configuring the beacon after power-up and an ultra-low energy consumption during operating life.

The Advertising Packet allows to uniquely identify the beacon (manufacturer name, model and serial numbers are always printed on the sticker applied on the beacon) and access to its status (battery level, configured packets), without connecting to it. It is noted that this packet is always broadcast (unless the beacon is configured in “Anonymous Mode”), also when no slot is configured for advertising packets (Eddystone, iBeacon, Quuppa or BlueUp Sensors frames).

When (and only when) the beacon is connectable (by default, beacons are always connectable unless configured in “Non-Connectable Mode”), it also broadcast a Scan-Response Packet, that contains the Eddystone configuration GATT service UUID as a 128-bit Service UUID.

BlueUp Advertising Packet

Byte Value (hex) Property Description Comments
0 0x02 Fixed AD Lenght Length of packet data
1 0x01 Fixed AD Type: Flags
2 0x06 Fixed BR/EDR Not Supported /
LE General Discoverable
3 0x04 Fixed AD Length
4 0x16 Fixed AD Type: Service Data
5 0x0F Fixed Battery Service UUID (1st byte)
6 0x18 Battery Service UUID (2nd byte)
7 - Variable Battery value Battery %, from 0x64 (100%) to 0x00 (0%)
8 0x04 Fixed AD Length
9 0x16 Fixed AD Type: Service Data
10 0x00 Fixed Custom Service UUID (1st byte) Custom 16-bit service UUID (0x8800)
11 0x88 Custom Service UUID (2nd byte)
12 - Variable Advertised frames flags Logical OR between:
0x01: Eddystone packet
0x02: iBeacon packet
0x04: Quuppa packet
0x08: BlueUp Sensors packet
0x10: BlueUp Safety packet
0x20: RFU
0x40: Alarm supported
0x80: Alarm active
13 0x11 Fixed AD Length
14 0x09 Fixed AD Type: Complete Local Name
15 0x42 Fixed ASCII Character “B” Complete Local Name “BlueUp-nn-ssssss”, where
-BlueUp is manufacturer name
-nn (2 decimal digits) is model number
-ssssss (6 dec. digits) is serial number
(serial number ranges from 000000 to 999999)
16 0x6C ASCII Character “l”
17 0x75 ASCII Character “u”
18 0x65 ASCII Character “e”
19 0x55 ASCII Character “U”
20 0x70 ASCII Character “p”
21 0x2D ASCII Character “-”
22 - Variable Model number (ASCII Characters)
23 - Model number (ASCII Characters)
24 0x2D Fixed ASCII Character “-”
25 - Variable Serial Number (ASCII Characters)
26 - Serial Number (ASCII Characters)
27 - Serial Number (ASCII Characters)
28 - Serial Number (ASCII Characters)
29 - Serial Number (ASCII Characters)
30 - Serial Number (ASCII Characters)

Model numbers

Model Name Model Number
Mini 01
Maxi 02
USB 03
Forte / Forte+ 04
Tag 05
Board 06
Card 08
Badge - Holder 08
Ultra 09
SafeX / SafeX Lite 10
Bangle 11
Brick 12
TagX 20

Scan - Response packet

Byte Value (hex) Property Description Comments
0 0x11 Fixed AD Lenght Length of packet data
1 0x07 Fixed AD Type: Flags Complete List of 128-bit Service Class UUIDs
2 0x95 Fixed 128-bit Service UUID (1st byte) Eddystone Configuration GATT Service UUID:
a3c87500-8ed3-4bdf-8a39-a01bebede295 (little-endian)
(see: https://github.com/google/eddystone/tree/master/configuration-service)
3 0xE2 128-bit Service UUID (2nd byte)
4 0xED 128-bit Service UUID (3d byte)
5 0xEB 128-bit Service UUID (4th byte)
6 0x1B 128-bit Service UUID (5th byte)
7 0xA0 128-bit Service UUID (6th byte)
8 0x39 128-bit Service UUID (7th byte)
9 0x8A 128-bit Service UUID (8th byte)
10 0xDF C128-bit Service UUID (9th byte)
11 0x4B 128-bit Service UUID (10th byte)
12 0xD3 128-bit Service UUID (11th byte)
13 0x8E 128-bit Service UUID (12th byte)
14 0x00 128-bit Service UUID (13th byte)
15 0x75 128-bit Service UUID (14th byte)
16 0xC8 128-bit Service UUID (15th byte)
17 0xA3 128-bit Service UUID (16th byte)

iBeacon

BlueBeacons periodically broadcast an Advertising Packet, with an advertising interval that can be set to a value between 100 msecs and 1 second (at steps of 100 msecs). Default value is 400 msecs, except of BlueBeacon USB where it is 100 msecs). Apple iBeacon technology specifications require 100 msecs.

Advertising Packet is formatted according to iBeacon technology specifications. Advertising Packet contains the identifier of the beacon (20 bytes), which is composed by:

  • Proximity UUID (16 bytes);
  • Major number (2 bytes);
  • Minor number (2 bytes).

Additionally, Advertising Packet contains (last byte) the calibrated RSSI (Received Signal Strength Indicator), which represents the power received by the smartphone at distance of 1 meter, in front of the beacon. This value is used to estimate the proximity from the beacon. Calibrated RSSI is automatically updated when TX power level is modified. By default, the iBeacon measured power value is auto-set by the beacon, based on the used TX power value.

In iOS, Advertising Packet data is only accessible using CoreLocation APIs.

Byte Value (hex) Property Description Comments
0 0x02 Fixed AD Lenght Length of packet data
1 0x01 Fixed AD Type: Flags
2 0x06 Fixed BR/EDR Not Supported /
LE General Discoverable
3 0x1A Fixed AD Length
4 0xFF Fixed AD Type: Manufacturer specific data
5 0x4C Fixed Manufacturer data (1st byte) Apple Company ID
6 0x00 Manufacturer data (2nd byte)
7 0x02 Manufacturer data (3rd byte) Beacon Type
8 0x15 Manufacturer data (4th byte)
9 - Variable Proximity UUID (1st byte) Proximity UUID
10 - Proximity UUID (2nd byte)
11 - Proximity UUID (3rd byte)
12 - Proximity UUID (4th byte)
13 - Proximity UUID (5th byte)
14 - Proximity UUID (6th byte)
15 - Proximity UUID (7th byte)
16 - Proximity UUID (8th byte)
17 - Proximity UUID (9th byte)
18 - Proximity UUID (10th byte)
19 - Proximity UUID (11th byte)
20 - Proximity UUID (12th byte)
21 - Proximity UUID (13th byte)
22 - Proximity UUID (14th byte)
23 - Proximity UUID (15th byte)
24 - Proximity UUID (16th byte)
25 - Variable Major number (1st byte) Major number
26 - Major number (2nd byte)
27 - Variable Minor number (1st byte) Minor number
28 - Minor number (2nd byte)
29 - Variable Measured Power RSSI at 1 meter in front of the beacon

Safety

“Safety” packet is an Advertising packet supported by BlueBeacon-series beacons, developed for safety applications. Safety packet contains information about internal data of the beacon, including:

  • battery status
  • button activation
  • motion detection
  • man-down detection

Safety Packet is formatted according to iBeacon technology specifications, with Minor number used in a custom way. The identifier of the beacon is reduced to 18 bytes, and composed by:

  • Proximity UUID (16 bytes);
  • Major number (2 bytes);

Minor number (2 bytes) is used to advertise internal status, with the following format:

  • Battery level (1 byte);
  • Safety flags (1 byte)

Additionally, Safety Packet contains (last byte) the calibrated RSSI (Received Signal Strength Indicator), which represents the power received by the smartphone at distance of 1 meter, in front of the beacon. This value is used to estimate the proximity of the beacon. Calibrated RSSI is automatically updated when TX power level is modified.

In iOS, Safety Packet data is only accessible using CoreLocation APIs (as any iBeacon frame).

Byte Value (hex) Property Description Comments
0 0x02 Fixed AD Lenght Length of packet data
1 0x01 Fixed AD Type: Flags
2 0x04 Fixed BR/EDR Not Supported /
LE General Discoverable
3 0x1A Fixed AD Length
4 0xFF Fixed AD Type: Manufacturer specific data
5 0x4C Fixed Manufacturer data (1st byte)
6 0x00 Manufacturer data (2nd byte)
7 0x02 Manufacturer data (3rd byte)
8 0x15 Manufacturer data (4th byte)
9 - Variable Proximity UUID (1st byte) Proximity UUID is used to identify the beacon
(usually a set of beacons share the same UUID).
10 - Proximity UUID (2nd byte)
11 - Proximity UUID (3rd byte)
12 - Proximity UUID (4th byte)
13 - Proximity UUID (5th byte)
14 - Proximity UUID (6th byte)
15 - Proximity UUID (7th byte)
16 - Proximity UUID (8th byte)
17 - Proximity UUID (9th byte)
18 - Proximity UUID (10th byte)
19 - Proximity UUID (11th byte)
20 - Proximity UUID (12th byte)
21 - Proximity UUID (13th byte)
22 - Proximity UUID (14th byte)
23 - Proximity UUID (15th byte)
24 - Proximity UUID (16th byte)
25 - Variable Major number (1st byte) Major number is used to identify the beacon
(there must not be a pair of beacons with the same UUID and major)
26 - Major number (2nd byte)
27 - Variable Minor number (1st byte) Battery level
28 - Minor number (2nd byte) Safety flags
29 - Variable Measured Power RSSI at 1 meter in front of the beacon

Battey Level (byte #27)

Contains an encoded battery voltage. Voltage value (in mV) can be conputed using the following relation:

MathJax TeX Test Page $$ Battery Voltage (mV) = BATT \cdot 10 + 1700 $$

Safety Flags (byte #28)

Contains safety flags encoded as follows:

7 6 5 4 3 2 1 0
RFU RFU RFU RFU MD MV BL BS

BS = Button Pressed (short pressure) flag

BL = Button Pressed (long pressure) flag

MV = Motion detection flag

MD = Man-Down flag

Example: Byte #27

7 6 5 4 3 2 1 0
1 0 0 0 0 0 0 1

Battery = (10000001) base 2 = 0x81 = 129

Battery voltage (mV) = (19 x 10) +1700 = 1290 + 1700 = 2990 mV

Byte #28

7
6 5 4 3 2 1 0
0 0 0 0 0 1 0 0

Safety flags:

  • MD = 0 (no man-down event detected)
  • MV = 1 (motion detected)
  • BL = 0 (no button long detected)
  • BS = 0 (no button short detected)

Eddystone

Eddystone is an open beacon format from Google for Bluetooth Low Energy (BLE) beacons. The Eddystone Specification includes a number of broadcast frame types: UID, URL, TLM, EID.

Eddystone - UID

The Eddystone – UID frame broadcasts a unique 16-byte Beacon ID, composed by:

  • 10-byte Namespace ID
  • 6-byte Instance ID

The Beacon ID may be useful when mapping a device to a record in an external storage. The Namespace ID may be used to group a particular set of beacons, while the Instance ID identifies individual devices in a group.

Byte Value (hex) Property Description Comments
0 0x02 Fixed AD Lenght Length of packet data
1 0x01 Fixed AD Type: Flags
2 0x06 Fixed BR/EDR Not Supported /
LE General Discoverable
3 0x03 Fixed AD Length
4 0x03 Fixed AD type: Complete list of
16-bit Service Class UUIDs
5 0xAA Fixed Eddystone UUID (1st byte) Eddystone UUID
6 0xFE Eddystone UUID (2nd byte)
7 0x17 Fixed AD Length Manufacturer data (3rd byte)
8 0x16 Fixed AD Type: Service Data
9 0xAA Fixed Eddystone UUID (1st byte) Eddystone UUID
10 0xFE Eddystone UUID (1st byte)
11 0x00 Fixed Frame Type (UID)
12 - Variable Ranging Data Calibrated TX Power at 0 m
13 - Variable Namespace ID (1st byte) Namespace ID
14 - Namespace ID (2nd byte)
15 - Namespace ID (3d byte)
16 - Namespace ID (4th byte)
17 - Namespace ID (5th byte)
18 - Namespace ID (6th byte)
19 - Namespace ID (7th byte)
20 - Namespace ID (8th byte)
21 - Namespace ID (9th byte)
22 - Namespace ID (10th byte)
23 - Variable Instance ID (1st byte) Instance ID
24 - Instance ID (2nd byte)
25 - Instance ID (3d byte)
26 - Instance ID (4th byte)
27 - Instance ID (5th byte)
28 - Instance ID (6th byte)
29 0x00 Fixed RFU
30 0x00 Fixed RFU

Eddystone - URL

The Eddystone-URL frame broadcasts a URL using a compressed encoding format in order to fit more within the limited advertisement packet. The Encoded URL field is a variable length field, ranging from 1 up to 17 bytes, depending on the encoded URL length.

Byte Value (hex) Property Description Comments
0 0x02 Fixed AD Lenght Length of packet data
1 0x01 Fixed AD Type: Flags
2 0x06 Fixed BR/EDR Not Supported /
LE General Discoverable
3 0x03 Fixed AD Length
4 0x03 Fixed AD type: Complete list of
16-bit Service Class UUIDs
5 0xAA Fixed Eddystone UUID (1st byte) Eddystone UUID
6 0xFE Eddystone UUID (2nd byte)
7 - Variable AD Length Manufacturer data (3rd byte)
8 0x16 Fixed AD Type: Service Data
9 0xAA Fixed Eddystone UUID (1st byte) Eddystone UUID
10 0xFE Eddystone UUID (1st byte)
11 0x10 Fixed Frame Type (URL)
12 - Variable Ranging Data Calibrated TX Power at 0 m
13 - Variable URL Scheme
14 - Variable Encoded URL (1st byte) Encoded URL
15 - Encoded URL (2nd byte)
16 - Encoded URL (3rd byte)
17 - Encoded URL (4th byte)
18 - Encoded URL (5th byte)
19 - Encoded URL (6th byte)
20 - Encoded URL (7th byte)
21 - Encoded URL (8th byte)
22 - Encoded URL (9th byte)
23 - Encoded URL (10th byte)
24 - Encoded URL (11th byte)
25 - Encoded URL (12th byte)
26 - Encoded URL (13th byte)
27 - Encoded URL (14th byte)
28 - Encoded URL (15th byte)
29 - Encoded URL (16th byte)
30 - Encoded URL (17th byte)

Eddystone - TLM

The Eddystone-TLM frame broadcasts telemetry information about the beacon itself, such as battery voltage, device temperature, and count of broadcast packets.

  • Battery voltage is the current battery charge in millivolts, expressed in 1mV per bit. If not supported (for example in a USB-powered beacon) the value should be zero.
  • Beacon Temperature is the temperature in Celsius degrees sensed by the beacon and expressed in a signed 8.8 fixed-point notation. If not supported, the value should be set to 0x8000, -128°C.
  • Advertising PDU Count is the running count of advertisement frames of all types emitted by the beacon since power-up or reboot, useful for monitoring performance metrics that scale per broadcast frame. If this value is reset (e.g. on reboot), the current field must also be reset.
  • Time since power-up / Reboot is a 0.1 second resolution counter that represents time since beacon power-up or reboot. If this value is reset (e.g. on reboot), the Advertising PDU Count field must also be reset.

Unencrypted Advertisement Format

Byte Value (hex) Property Description Comments
0 0x02 Fixed AD Lenght Length of packet data
1 0x01 Fixed AD Type: Flags
2 0x06 Fixed BR/EDR Not Supported /
LE General Discoverable
3 0x03 Fixed AD Length
4 0x03 Fixed AD type: Complete list of
16-bit Service Class UUIDs
5 0xAA Fixed Eddystone UUID (1st byte) Eddystone UUID
6 0xFE Eddystone UUID (2nd byte)
7 0x11 Fixed AD Length
8 0x16 Fixed AD Type: Service Data
9 0xAA Fixed Eddystone UUID (1st byte) Eddystone UUID
10 0xFE Eddystone UUID (1st byte)
11 0x20 Fixed Frame Type (TLM)
12 0x00 Fixed TLM Version
13 - Variable Battery Voltage (1st byte) UINT16_BE
14 - Battery Voltage (2nd byte)
15 - Variable Temperature (1st byte) UINT16_BE, Fixed Point 8.8.
Temp [°C] = Temperature / 256
16 - Temperature (2nd byte)
17 - Variable Advertising PDU Count UINT32_BE
18 -
19 -
20 -
21 - Variable Time since Power-on / Reboot [0.1 s] UINT32_BE
22 -
23 -
24 -

Encrypted Advertisement Format

Byte Value (hex) Property Description Comments
0 0x02 Fixed AD Lenght Length of packet data
1 0x01 Fixed AD Type: Flags
2 0x06 Fixed BR/EDR Not Supported /
LE General Discoverable
3 0x03 Fixed AD Length
4 0x03 Fixed AD type: Complete list of
16-bit Service Class UUIDs
5 0xAA Fixed Eddystone UUID (1st byte) Eddystone UUID
6 0xFE Eddystone UUID (2nd byte)
7 0x15 Fixed AD Length
8 0x16 Fixed AD Type: Service Data
9 0xAA Fixed Eddystone UUID (1st byte) Eddystone UUID
10 0xFE Eddystone UUID (1st byte)
11 0x20 Fixed Frame Type (TLM)
12 0x01 Fixed TLM Version
13 - Variable Encrypted TLM Data
14 -
15 -
16 -
17 -
18 -
19 -
20 -
21 -
22 -
23 -
24 -
25 - Variable Salt
26 -
27 - Variable Message Integrity Check
28 -

Eddystone – EID

Byte Value (hex) Property Description Comments
0 0x02 Fixed AD Lenght Length of packet data
1 0x01 Fixed AD Type: Flags
2 0x06 Fixed BR/EDR Not Supported /
LE General Discoverable
3 0x03 Fixed AD Length
4 0x03 Fixed AD type: Complete list of
16-bit Service Class UUIDs
5 0xAA Fixed Eddystone UUID (1st byte) Eddystone UUID
6 0xFE Eddystone UUID (2nd byte)
7 0x0D Fixed AD Length
8 0x16 Fixed AD Type: Service Data
9 0xAA Fixed Eddystone UUID (1st byte) Eddystone UUID
10 0xFE Eddystone UUID (1st byte)
11 0x30 Fixed Frame Type (EID)
12 - Variable Ranging Data Calibrated TX Power at 0 m
13 - Variable Ephemeral Identifier
14 -
15 -
16 -
17 -
18 -
19 -
20 -

Sensor

BlueBeacon beacons with second-generation firmware (ver. 5.0 or higher), support a new frame type, Sensors packet.

Sensors packet is identified by a 16-byte Service UUID 0x181A (the UUID for standard Environmental Sensing Service defined by Bluetooth specifications has been adopted).

Sensors packet is individually configurable for interval (from 100 msec to 5 secs) and transmission power (from -40dBm to +4dBm).

Sensors packet is accessible using native Bluetooth Low Energy libraries for iOS or Android:

  • CoreBluetooth for iOS (link)
  • Bluetooth LE for Android (link)

Sensor - Legacy

Accelerometer Data are present only on beacons having the accelerometer mounted.

  • Accelerometer Data are Little-Endian encoded in range [-512, 511]. To obtain values in mg unit:
    $$mg = value \cdot (4000/1024)$$
  • Beacons without environmental sensors will set the Temperature, Humidity and Pressure values to all zeros.
  • Environmental Sensors Data are all Little-Endian encoded.
    • Temperature is expressed as a 16-bit signed integer in 0.01 Celsius degrees units
    • Humidity is expressed as a 16-bit signed integer in 0.01 percentage units
    • Pressure is expressed as a 16-bit signed integer in 0.1 Pascal units
Byte Value (hex) Property Description Comments
0 0x02 Fixed AD Lenght Length of packet data
1 0x01 Fixed AD Type: Flags
2 0x06 Fixed BR/EDR Not Supported /
LE General Discoverable
3 - Variable AD Length
4 0x16 Fixed AD Type: Service Data
5 0x1A Fixed Environmental Sensing
Service UUID
6 0x18
7 0x6E Fixed Temperature UUID UINT16_LE
8 0x2A
9 - Variable Temperature Value INT16_LE
Temp [°C] = Temperature / 100
10 -
11 0x6F Fixed Humidity UUIDs UINT16_LE
12 0x2A
13 - Variable Humidity Value UINT16_LE
Humidity [%] = Humidity / 100
14 -
15 0x6D Fixed Pressure UUID UINT16_LE
16 0x2A
17 - Variable Pressure Value UINT16_LE
Pressure [Pa] = Pressure / 10
18 -
19 -
20 -
21 0xAC Fixed Accelerometer UUID UINT16_LE
22 0xCE
23 - Variable Accelerometer X-Axis UINT16_LE
Acc.X [mg] = (AccX)*(4000/1240)
24 -
25 - Variable Accelerometer Y-Axis UINT16_LE
Acc.Y [mg] = (AccY)*(4000/1240)
26 -
27 - Variable Accelerometer Z-Axis UINT16_LE
Acc.Z [mg] = (AccZ)*(4000/1240)
28 -

Sensor - Advanced

Accelerometer data are present only on beacons that have the accelerometer mounter. To configure the beacon to send accelerometer data, the accelerometer has to be configured in “Continuous Sampling” mode.

Beacons can have different sensors, so the length of the packet is variable depending on which sensors are present on the beacon. If a sensor is not present on the beacon, the data related to that sensor will not be included in the packet.

Byte Value (hex) Property Description Comments
0 0x02 Fixed AD Lenght Length of packet data
1 0x01 Fixed AD Type: Flags
2 0x06 Fixed BR/EDR Not Supported /
LE General Discoverable
3 - Variable AD Length
4 0xFF Fixed AD Type: Manufacturer Data
5 0x59 Fixed BlueUp company ID
6 0x08
7 0x02 Fixed Advanced Sensor Packet ID
8 - Variable Device ID Device ID = (Model Number * 1000000) + Serial Number
9 -
10 -
11 -
12 - Variable Battery Voltage Battery [mV] = (Battery *10) +1700
- 0x6E Fixed Temperature Sensor ID
- - Variable Temperature UINT16_BE, Fixed point 8.8
Temp [°C] = Temperature / 256
- -
- 0x6F Fixed Humidity Sensor ID
- - Variable Humidity UINT16_BE, Fixed point 8.8
Humidity [%] = Humidity / 256
- -
- 0x6D Fixed Pressure Sensor ID
- - Variable Pressure UINT16_BE, Fixed point 8.8
Pressure [kPa] = Pressure / 256
- -
- 0x6C Fixed CO2 Sensor ID
- - Variable CO2 [ppm] UINT16_BE
- -
- 0xAC Fixed Accelerometer UUID
- - Variable Accelerometer X-Axis UINT16_BE, Fixed point 8.8
Acc.X [mg] = Accelerometer X / 256
- -
- - Variable Accelerometer Y-Axis UINT16_BE, Fixed point 8.8
Acc.Y [mg] = Accelerometer Y / 256
- -
- - Variable Accelerometer Z-Axis UINT16_BE, Fixed point 8.8
Acc.Z [mg] = Accelerometer Z / 256
- -