Parsing Estimote Telemetry

Hello everyone, I’m trying to read the data sent by Estimote Telemetry. I have a Bluetooth Gateway and some Estimote Location Beacons. I configured the beacons to send only the Estimote Telemetry package.

In the gateway I receive two different packets from the same beacon: I think they are Frame A and Frame B.

This is what I get:

{“id”:“e4:6d:83:2e:6d:96”,“rssi”:-58,“distance”:0.842869,“servicedata”:“12130b412fb582477e01df89dd19c73259f85e41”,“servicedatauuid”:“0000fe9a-0000-1000-8000-00805f9b34fb”}

{“id”:“e4:6d:83:2e:6d:96”,“rssi”:-58,“distance”:0.842869,“servicedata”:“12130b412fb582477e00ff003e2650f000”,“servicedatauuid”:“0000fe9a-0000-1000-8000-00805f9b34fb”}

If I understand correctly the shortest Service Data is frame A, while the longest one is Frame B.

Could someone explain to me how to extract the ambient temperature from frame B?

Thanks, Enrico.

Here is a Estimote Telemetry specification in a form of a Node.js code: https://github.com/Estimote/estimote-specs

Thanks it was very helpful. I translated it into java and it works perfectly.

There is one last thing I would like to ask:

when servicedatauuid is 0000feaa-0000-1000-8000-00805f9b34fb means that it is Eddystone TLM (feaa) ?

when servicedatauuid is 0000fe9a-0000-1000-8000-00805f9b34fb means that it is Estimote TLM (fe9a) ?

So the first 4 bytes indicate the type of data I am receiving ?

Thanks, Enrico.

I don’t know what platform you are using or how BLE packet is provided to you (is is raw or already parsed into AD fields) so I’m not able to what first 4 bytes you are referring to.
Values that you provided are special 128-bit UUIDs used to encode 16-bit service UUIDs (more about it here). Only two bytes are meaningful:
0000fe9a-0000-1000-8000-00805f9b34fb
0000feaa-0000-1000-8000-00805f9b34fb
In BLE advertisement only those 2 bytes are transmitted and they are first two bytes of Service Data AD field. More about BLE packet structure you can find here.

Thanks, everything is much clearer now.

There is one last thing I would like to understand. Even if my beacons are turned upside down they still send data. I enabled “Flip to Sleep Mode”. Here is an example:

{“id”:“e7:c5:87:e5:6b:21”,“rssi”:-85,“distance”:15.12852,“servicedata”:“006082ef78796c7978038d39cbc7fd3a36935440”,“servicedatauuid”:“0000fe9a-0000-1000-8000-00805f9b34fb”}

What’s this ?

Thanks, Enrico.

This is connectivity packet. It is advertised always regardless of settings.