src.bluetooth_sig.gatt.characteristics.rower_data

Rower Data characteristic implementation.

Implements the Rower Data characteristic (0x2AD1) from the Fitness Machine Service. A 16-bit flags field controls the presence of optional data fields.

Bit 0 (“More Data”) uses inverted logic: when bit 0 is 0 the Stroke Rate and Stroke Count fields ARE present; when bit 0 is 1 they are absent. All other bits use normal logic (1 = present).

References

Bluetooth SIG Fitness Machine Service 1.0 org.bluetooth.characteristic.rower_data (GSS YAML)

Classes

Name

Description

RowerData

Parsed data from Rower Data characteristic.

RowerDataCharacteristic

Rower Data characteristic (0x2AD1).

RowerDataFlags

Rower Data flags as per Bluetooth SIG specification.

Module Contents

class src.bluetooth_sig.gatt.characteristics.rower_data.RowerData

Bases: msgspec.Struct

Parsed data from Rower Data characteristic.

flags

Raw 16-bit flags field.

stroke_rate

Instantaneous stroke rate in strokes/min (0.5 resolution).

stroke_count

Total strokes since session start.

average_stroke_rate

Average stroke rate in strokes/min (0.5 resolution).

total_distance

Total distance in metres (uint24).

instantaneous_pace

Instantaneous pace in seconds per 500 m.

average_pace

Average pace in seconds per 500 m.

instantaneous_power

Instantaneous power in watts (signed).

average_power

Average power in watts (signed).

resistance_level

Resistance level (unitless, resolution 10).

total_energy

Total expended energy in kcal.

energy_per_hour

Expended energy per hour in kcal.

energy_per_minute

Expended energy per minute in kcal.

heart_rate

Heart rate in bpm.

metabolic_equivalent

MET value (0.1 resolution).

elapsed_time

Elapsed time in seconds.

remaining_time

Remaining time in seconds.

average_pace: int | None = None
average_power: int | None = None
average_stroke_rate: float | None = None
elapsed_time: int | None = None
energy_per_hour: int | None = None
energy_per_minute: int | None = None
flags: RowerDataFlags
heart_rate: int | None = None
instantaneous_pace: int | None = None
instantaneous_power: int | None = None
metabolic_equivalent: float | None = None
remaining_time: int | None = None
resistance_level: float | None = None
stroke_count: int | None = None
stroke_rate: float | None = None
total_distance: int | None = None
total_energy: int | None = None
class src.bluetooth_sig.gatt.characteristics.rower_data.RowerDataCharacteristic(info: src.bluetooth_sig.types.CharacteristicInfo | None = None, validation: src.bluetooth_sig.gatt.characteristics.characteristic_meta.ValidationConfig | None = None)

Bases: src.bluetooth_sig.gatt.characteristics.base.BaseCharacteristic[RowerData]

Rower Data characteristic (0x2AD1).

Used in the Fitness Machine Service to transmit rowing workout data. A 16-bit flags field controls which optional fields are present.

Flag-bit assignments (from GSS YAML):

Bit 0: More Data – inverted: 0 -> Stroke Rate + Count present Bit 1: Average Stroke Rate present Bit 2: Total Distance present Bit 3: Instantaneous Pace present Bit 4: Average Pace present Bit 5: Instantaneous Power present Bit 6: Average Power present Bit 7: Resistance Level present Bit 8: Expended Energy present (gates triplet: total + /hr + /min) Bit 9: Heart Rate present Bit 10: Metabolic Equivalent present Bit 11: Elapsed Time present Bit 12: Remaining Time present Bits 13-15: Reserved for Future Use

allow_variable_length: bool = True
expected_type
min_length: int = 2
class src.bluetooth_sig.gatt.characteristics.rower_data.RowerDataFlags

Bases: enum.IntFlag

Rower Data flags as per Bluetooth SIG specification.

Bit 0 uses inverted logic: 0 = Stroke Rate + Stroke Count present, 1 = absent.

AVERAGE_PACE_PRESENT = 16
AVERAGE_POWER_PRESENT = 64
AVERAGE_STROKE_RATE_PRESENT = 2
ELAPSED_TIME_PRESENT = 2048
EXPENDED_ENERGY_PRESENT = 256
HEART_RATE_PRESENT = 512
INSTANTANEOUS_PACE_PRESENT = 8
INSTANTANEOUS_POWER_PRESENT = 32
METABOLIC_EQUIVALENT_PRESENT = 1024
MORE_DATA = 1
REMAINING_TIME_PRESENT = 4096
RESISTANCE_LEVEL_PRESENT = 128
TOTAL_DISTANCE_PRESENT = 4