The Kontakt.io Location packet is only broadcasted on one of the three BLE advertising channels (37, 38, 39), which greatly benefits RSSI level signal stability and results in less battery power consumption. This packet is connectable and can be used to establish BLE connectivity features.
The Location frame is designed specifically to improve the accuracy of the RSSI readings which is essential for systems that need to compute the location/position of various assets. Additionally, on accelerometer-equipped beacons, it can also indicate if a beacon is moving or not which is also very useful for positioning systems.
Normally, Bluetooth Low Energy advertising packets are transmitted almost simultaneously (<10ms interval) on channels 37, 38, 39. However, working with multiple channels may be difficult to provide stable and accurate information (RSSI values) that's needed for location tracking systems. Different channels often provide slightly different RSSI values even if a beacon is in the same position due to the different interference levels on each channel. Often devices like mobile phones will also not allow for distinguishing which channel the packet was captured.
On the other hand, Location packets are a little less likely to be picked up by receivers compared to standard, multi-channel packets. However, this effect is only noticeable in environments with a high number of BLE signals - more than 100 at the same time. In normal environments, you will not experience any difference between the time required to connect to a single- or multi-channel frame.
Location packets are broadcasted from the single channel that is picked randomly when a beacon is configured and stays the same unless it's restarted or a new configuration is applied. If a particular channel works better in your environment, resulting in less interference, the Location frame can be changed to broadcast on a specific channel. This can be done by creating a custom beacon configuration via our Device Management API create config endpoint (locationFrameChannel).
Byte offset |
Default/sample value |
Description |
---|---|---|
0 |
|
Block length - 15+ bytes (18+ including BLE packet header) |
1 |
|
Block type - service data |
2 |
|
Kontakt.io UUID |
3 |
|
Continuation |
4 |
|
Payload identifier |
5 |
|
Battery level; ff when not applicable |
6 |
|
Nominal Tx power (not Tx Power Level) that is set through beacon configuration (Int8) |
7 |
|
BLE channel used for broadcasting Location Packet - |
8 |
|
Device model identifier (UInt8) |
9 |
|
Flags bit mask - index 0: beacon moving or not, indices 1-7: reserved for future use |
10 |
|
Local time as a uint32 timestamp in unix epoch format. |
11 |
|
Continuation |
12 |
|
Continuation |
13 |
|
Continuation |
14 |
|
1/256 fractions of a second, encoded as a uint8 single byte. Decode the value and divide by 256 to get the fractional value in seconds. |
15 |
|
Room ID as a uint16 |
16 |
|
Continuation |
17 |
|
Unique ID; 108xabc |
18 |
|
Continuation |
19 |
|
Continuation |
20 |
|
Continuation |
21 |
|
Continuation |
22 |
|
Continuation |
23 |
|
Continuation |
24 |
|
Continuation |