Skip to content

docs: add a Stages SB20 section to 22_devices_detail.md - #4852

Merged
cagnulein merged 1 commit into
cagnulein:masterfrom
cauldnz:docs/sb20-device-detail
Jul 26, 2026
Merged

docs: add a Stages SB20 section to 22_devices_detail.md#4852
cagnulein merged 1 commit into
cagnulein:masterfrom
cauldnz:docs/sb20-device-detail

Conversation

@cauldnz

@cauldnz cauldnz commented Jul 26, 2026

Copy link
Copy Markdown
Contributor

The SB20 is a common bike with no entry in the device docs. Everything here is
from measurement on a real SB20 or from regular day-to-day use.

  • Driver: advertises Stages Bike <NNNN>, handled by ftmsbike. No display of
    its own, so setup happens in the Stages app.
  • Power/cadence: standard FTMS Indoor Bike Data (0x2AD2), flags 0x00c5. Worth
    noting bit 0 of those flags means instantaneous speed is NOT present, so the
    speed QZ shows is derived rather than reported by the bike.
  • Auto resistance: fully supported over FTMS and reliable in regular use,
    including QZ-managed Peloton Power Zone workouts. Documented with the actual
    control-point exchange and its success responses.
  • Rare issue: the bike can end up publishing a stripped Indoor Bike Data frame
    (flags 0x0011, distance only) with CSC stopped, so QZ correctly shows 0 W /
    0 rpm because that is genuinely all the bike is sending. A power-cycle
    restores it. Included because the symptom reads as a QZ bug when it is not.
    The trigger is NOT confirmed — a plausible cause is another consumer holding
    an FTMS control connection (a head unit or watch paired as a trainer rather
    than as sensors) — so it is written as a possibility, not a diagnosis.

Also relevant to the Equipment Compatibility wiki page, whose Stages row
currently reads Stages | ? | Yes | Yes | Yes | Yes | ? | No. Two corrections
worth making there: the model is the SB20, and Auto Resistance is Yes,
not No — ERG works and is relied on daily. HRM is still genuinely unknown to me,
so I would leave that as ? rather than guess.

Co-Authored-By: Claude Opus 5 noreply@anthropic.com

The SB20 is a common bike with no entry in the device docs. Everything here is
from measurement on a real SB20 or from regular day-to-day use.

- Driver: advertises `Stages Bike <NNNN>`, handled by `ftmsbike`. No display of
  its own, so setup happens in the Stages app.
- Power/cadence: standard FTMS Indoor Bike Data (0x2AD2), flags `0x00c5`
  (instantaneous cadence, instantaneous power, average power).
- Auto resistance: fully supported over FTMS and reliable in regular use,
  including QZ-managed Peloton Power Zone workouts. Documented with the actual
  control-point exchange and its success responses.
- Rare issue: the bike can end up publishing a stripped Indoor Bike Data frame
  (flags `0x0011`, distance only) with CSC stopped, so QZ correctly shows 0 W /
  0 rpm because that is genuinely all the bike is sending. A power-cycle
  restores it. Included because the symptom reads as a QZ bug when it is not.
  The trigger is NOT confirmed — a plausible cause is another consumer holding
  an FTMS *control* connection (a head unit or watch paired as a trainer rather
  than as sensors) — so it is written as a possibility, not a diagnosis.

Also relevant to the Equipment Compatibility wiki page, whose Stages row
currently reads `Stages | ? | Yes | Yes | Yes | Yes | ? | No`. Two corrections
worth making there: the model is the **SB20**, and **Auto Resistance is Yes**,
not No — ERG works and is relied on daily. HRM is still genuinely unknown to me,
so I would leave that as `?` rather than guess.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@cagnulein

Copy link
Copy Markdown
Owner

Thanks!

@cagnulein
cagnulein merged commit aa7054a into cagnulein:master Jul 26, 2026
28 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants