Treadmill via BLE auslesen

Ziel ist es, die (für mich) relevanten Daten aus einem Laufband (Treadmill) auszulesen und weiter zu verarbeiten. Interessant sind dabei im ersten Schritt folgende Werte:
  1. Instantaneous Speed = Momentan Geschwindigkeit in Stundenkilometern [uint16, 0.01 km/h] -> 2 Byte
  2. Total Distance = Gesamtstrecke in Metern [uint24, m] -> 3 Byte
  3. Inclination = Steigung in Prozent [sint16, 0.1 %] -> 2 Byte
  4. Ramp Angle Setting = XXX in Prozent [sint16, 0.1 %] -> 2 Byte
  5. Total Energy = Kalorienverbrauch in Kilokalorien [uint16, kcal] -> 2 Byte
  6. Energy per Hour = Kalorienverbrauch in Kilokalorien pro Stunde [uint16, kcal] -> 2 Byte
  7. Energy per Minute = Kalorienverbrauch in Kilokalorien pro Minute [uint8, kcal] -> 1 Byte
  8. Heart Rate = Herzfrequenz in Schläge pro Minute [uint8, Beats/m] -> 1 Byte
  9. Elapsed Time = vergangene Zeit in Sekunden [uint16, s] -> 2 Byte
Zu finden unter der Service UUID 0x1826 (Fitness Machine) und darunter die Character UUID 0x2acd (Treadmill Data) Was die Kalorienwerte angeht: das sind KEINE gemessenen Werte sondern – aus den Angaben zur Person und anderen gemessenen Werten – irgendwie errechnete ! Via Android nRF Connect App ermittelte Werte sehen dann z.B. so aus:

Service UUID komplett:   00001826-0000-1000-8000-00805f9b34fb

Character UUID komplett: 00002acd-0000-1000-8000-00805f9b34fb

Value: 8C-05-64-00-14-00-00-00-00-00-00-05-00-E7-00-03-00-5B-00

Nehmen wir die Daten mal der Reihe nach auseinander (LowByte, HighByte !):

13-12-11-0F-0E-0D-0C-0B-0A-09-08-07-06-05-04-03-02-01-00 = Byte Position 8C-05-64-00-14-00-00-00-00-00-00-05-00-E7-00-03-00-5B-00 = Daten
Bit Positionen: FEDCBA98   76543210
8C-05 = 058C = %0000.0101-1000.1100 = Flags mit folgender Bedeutung:
0 More Data 0
1 Average Speed 0
2 Total Distance 1
3 Inclination and Ramp Angle Setting 1
4 Elevation Gain 0
5 Instantaneous Pace 0
6 Average Pace 0
7 Expended Energy 1
8 Heart Rate 1
9 Metabolic Equivalent 0
10 Elapsed Time 1
11 Remaining Time 0
12 Force on Belt and Power Output 0
13 unused 0
14 unused 0
15 unused 0
Bit 0 must be 0. Bit 2, bit 7, and bit 10 must be 1 (they are mandatory workout parameters) For treadmill supporting the inclination feature, bit 3 and bit 4 must be present Info kommt von hier: 64-00 Instantaneous Speed = 0x0064 = 100 = 100 * 0.01 = 1.0 km/h 14-00-00 Total Distance = 0x000014 = 20 m 00-00 Ramp = 0x0000 = 0 % ? 00-00 Inclination = 0x0000 = 0 % 05-00 Total Energy = 0x0005 = 5 kcal E7-00 Energy Per Hour = 0x00E7 = 231 kcal 03 Energy Per Minute = 3 kcal 00 Heart Rate = 00 Beats/m 5B-00 Elapsed Time = 0x005B = 91 s Weiter interessant ist bzw. wäre es, wenn das Laufband (hier Kettler Alpha Run 600) das Setzen der Geschwindigkeit und der Steigung „remote“ zulässt – wir werden sehen …