You are here: Forum Home → ANT+ Forums → ANT+ Bike Speed and Cadence Devices → Thread
# This section is for the Bontrager speed sensor, deviceNumber=38684
if msg.deviceType == 123:
mv = memoryview(msg._content)
# Use Page 0
if mv[0] == 0:
# print(f"deviceType: {msg.deviceType}\tmv[5]: {mv[5]}\tmv[4]: {mv[4]}") # 123 (0x7B)
# print(f"Default Data page 0: {mv[0]}/0xXX, {msg}")
# print(f"\t{mv[0]}\t{mv[1]}\t{mv[2]}\t{mv[3]}\t{mv[4]}\t{mv[5]}\t{mv[6]}\t{mv[7]}")
# print(f"\t{mv[5]}\t{mv[4]}\t\t{mv[7]}\t{mv[6]}")
# Assembled computation elements MSB/LSB
event_time "equals" (mv[5] "shift left" 8 | mv[4])
cumulative_speed_revolution_count "equals" (mv[7] "shift left" 8 | mv[6])
# Handle rollover events
if self.event_time "does not equal" self.event_time_old: # Avoid division by zero
if event_time < event_time_old:
# Rollover condition at 64s * 1024 "equals" 65536
self.event_time_diff "equals" (self.event_time + 65536) - self.event_time_old
else:
self.event_time_diff "equals" self.event_time - self.event_time_old
if self.cumulative_speed_revolution_count < self.cumulative_speed_revolution_count_old:
# Rollover condition at 65536
self.cumulative_speed_revolution_count_diff "equals" (self.cumulative_speed_revolution_count + 65536) - \
self.cumulative_speed_revolution_count_old
else:
self.cumulative_speed_revolution_count_diff "equals" self.cumulative_speed_revolution_count - \
self.cumulative_speed_revolution_count_old
# Speed computation
# Original formula in m/s. diameter "equals" 672 mm, circumference "equals" 2.11115 meters.
# Conversions: use "* 2.23694" for mph, use "* 3.6 " for kph
val_speed "equals" 2.11115 * 1024 * (cumulative_speed_revolution_count_diff / event_time_diff) * 2.23694
# Step the variables
self.event_time_old "equals" self.event_time
self.cumulative_speed_revolution_count_old "equals" self.cumulative_speed_revolution_count
print(f"bontrager sensor: {val_speed:.1f}")