bluetooth-lowenergycharacteristics

Polar H7 unresolved service and characteristics (what are they for?)


I am developing an app that uses a polar H7 heart rate monitor. I initially had some trouble with discovering it's services because i would get a large object and the hex-codes didn't mean anything to me.

Now i have resolved almost all services and characteristics but there are some i haven't figured out yet.

Here is a simplified object containing the service/characteristicUuid's and their name/functionality:

// first layer keys are serviceUuid's
// second layer keys are characteristicUuid's
// with their respective name/description as values
{
"1800"    /* Generic Access */                      : {
    "2a00": "Device Name",
    "2a01": "Appearance",
    "2a02": "Peripheral Privacy Flag",
    "2a03": "Reconnection Address",
    "2a04": "Peripheral Preferred Connection Parameters"
},
"1801"    /* Generic Attribute */                   : {
    "2a05": "Service Changed"
},
"180d"    /* Heart Rate */                          : {
    "2a37": "Heart Rate Measurement",
    "2a38": "Body Sensor Location"
},
"180a"    /* Device Information */                  : {
    "2a23": "System ID",
    "2a24": "Model Number String",
    "2a25": "Serial Number String",
    "2a26": "Firmware Revision String",
    "2a27": "Hardware Revision String",
    "2a28": "Software Revision String",
    "2a29": "Manufacturer Name String"
},
"180f"    /* Battery Service */                     : {
    "2a19": "Battery Level"
},
"6217ff4b-fb31-1140-ad5a-a45545d7ecf3" /* unknown */: {
    "6217ff4c-c8ec-b1fb-1380-3ad986708e2d": "unknown", /* read:true */ // value = uInt16Array [3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
    "6217ff4d-91bb-91d0-7e2a-7cd3bda8a1f3": "unknown" /* write:true, indicate:true, descriptors:{ descriptorUuid: "2902" }*/
}}

I couldn't find any documentation for the last serviceUuid and it's characteristicUuid's. I don't know what i'm missing so i can't tell if it's of any importance to my project.


Solution

  • The ones you are unfamiliar with are vendor specific UUID's. Vendors can define their own custom UUID's

    These may or may not be of importance to your project, depending on what you want to extract from the device. If it's just the heart rate you are interested in, it should be no problem and you can follow the Bluetooth standard for it. There may be extra data in those custom UUID's you would like to extract.

    Extracting data from those vendor specific UUID's is a matter of trial and error though, unless you can get specifications from the vendor themselves.