-
Notifications
You must be signed in to change notification settings - Fork 693
Capturing Bluetooth Logs
This is the single highest-impact thing a 5.0/MG owner can do right now. WHOOP 5.0/MG currently gives NOOP (and every other third-party app) only live heart rate — recovery, strain, sleep and history don't come through yet. A real Bluetooth capture from a 5.0/MG owner is what will change that.
Why this works, in one line: a capture from one 5.0 owner (#174) showed the official app stores a set of "
enable_r22_*_packets" config keys on the strap — these switch on the deep data streams NOOP never receives. We now need to see the official app set those and use them, so NOOP can do the same.
A Bluetooth HCI snoop log records the raw packets between the official WHOOP app and your strap — on your own device, with your own data. Three captures, in priority order:
-
A "set" capture — pairing the strap fresh in the official app. This catches the command that
configures the strap (the
enable_r22_packetswrite). Most valuable. - A "sync" capture — the official app pulling a night's history. Wear the strap overnight, then open the official app in the morning and let it sync fully. This catches the deep packets actually streaming, and whatever command starts them.
- The GATT table. Two minutes in the free nRF Connect app: connect to your strap, screenshot the list of services and characteristics. Maps every channel for us.
Any one of these helps. All three would likely crack it.
A capture contains no account credentials or passwords — it's the Bluetooth traffic to a device you own. It can contain things the app displays on the strap (e.g. calendar event titles it pushes for notifications), so glance through it and redact anything personal before sharing. A capture trimmed to just the WHOOP connection is perfect.
- Enable Developer options (Settings → About phone → tap Build number 7 times).
- Settings → System → Developer options → Enable Bluetooth HCI snoop log → set to Enabled (or Filtered).
- Turn Bluetooth off and back on so logging starts on a clean slate.
- Do the thing you're capturing — pair the strap fresh in the official WHOOP app, or sync in it.
- Pull the log:
- Easiest: Developer options → Take bug report → Interactive. When it's done, share the zip and
the file we want is inside it as
FS/data/misc/bluetooth/logs/btsnoop_hci.log(path varies by phone; search the zip forbtsnoop). - Some phones write it directly to internal storage as
btsnoop_hci.log.
- Easiest: Developer options → Take bug report → Interactive. When it's done, share the zip and
the file we want is inside it as
- Turn the snoop log off again afterwards (it logs all Bluetooth, so don't leave it running).
iPhone needs a Mac for this (it's the supported Apple route):
- Install Additional Tools for Xcode from the Apple Developer downloads (free Apple ID), which includes PacketLogger, or install the Bluetooth logging profile from developer.apple.com (Profiles → Bluetooth) onto the iPhone.
- With the profile installed, reboot the iPhone, reproduce the pairing/sync in the official app.
- Connect the iPhone to the Mac, open PacketLogger, and capture / export the session as a
.pklg.
(If that's fiddly, an Android capture from any Android phone paired to the same strap is just as good.)
If you've got Wireshark, open the btsnoop_hci.log / .pklg directly.
Useful filters:
-
btatt— just the GATT (attribute) traffic. -
btatt.opcode.method == 0x12 || btatt.opcode.method == 0x52— writes (app → strap commands). - Look for writes right after pairing, near where the strap's debug console mentions "persistent config key" — note the characteristic UUID/handle, the opcode, and the value bytes.
You don't need to decode anything — sharing the capture (or even a screenshot of those write rows) is plenty.
- Attach it to issue #174 (the R22 investigation), or
- Open a new issue with your strap model, or
- For a quick question first, the Discussions tab.
This is, very literally, the work that unlocks WHOOP 5.0/MG for everyone. Thank you. 🙏
See also: Data We Need · Protocol · Strap Support and Pairing
NOOP is an independent, unofficial, non-commercial interoperability project — not affiliated with, endorsed by, or sponsored by WHOOP, Inc. "WHOOP" is a trademark of WHOOP, Inc., used nominatively. Works only with a device you own; not a medical device; every metric is an approximation, not medical advice. · Privacy and Security · Donations · Releases