Skip to content

docs(apple): native HRM Enroll for Apple Watch, drop BluetoothLE app workflow#323

Merged
DTTerastar merged 1 commit into
ESPresense:mainfrom
Terastar-Paperclip:docs/apple-watch-native-enroll
May 11, 2026
Merged

docs(apple): native HRM Enroll for Apple Watch, drop BluetoothLE app workflow#323
DTTerastar merged 1 commit into
ESPresense:mainfrom
Terastar-Paperclip:docs/apple-watch-native-enroll

Conversation

@Terastar-Paperclip
Copy link
Copy Markdown
Contributor

@Terastar-Paperclip Terastar-Paperclip commented May 11, 2026

Summary

Closes ESPA-71 (Apple Watch).

Current firmware emulates a Heart Rate Monitor (BLE service 0x180D with encrypted-read characteristic 0x2A37) during enrollment, so iOS and watchOS pair to it natively from Settings → Bluetooth. The previous workflow required a third-party BluetoothLE / Bluetooth Terminal companion app on both phone and watch; that's no longer necessary.

This PR updates the three docs surfaces that pointed users at the old flow:

  • apple.mdx — rewrote the Apple Watch section as a 5-step native pair, clarified the HRM emulation in the lead paragraph, fixed iWatchApple Watch, restructured the Enrollment heading hierarchy (was ## Enrollment then ## iPhone / iPads as siblings — now H3 children), added a "Last verified against firmware v4.0.6 on 2026-05-11" footer.
  • devices.md — Apple Watches row note changed from "Use iCloud keychain to get IRK" to "Pair to retrieve IRK" (now matches the iPhone row).
  • guides/enrolling-devices.md — Apple Watch row in the triage table flipped from ⚠️ Mixed to ✅ Settled; the section's "no fully-settled solution" caution replaced with the native recipe, with Mac Keychain kept as a labeled fallback for older firmware.

Verified by reading firmware source src/Enrollment.cpp on ESPresense/ESPresense@main:

  • Enrollment::Setup() creates Heart Rate service 0x180D with characteristic 0x2A37 (NIMBLE_PROPERTY::NOTIFY | NIMBLE_PROPERTY::READ_ENC).
  • Enrollment::Loop() switches advertising to connectable HRM mode while enrolling is true.
  • 120 s enrollment window matches what's documented (enrollingEndMillis = millis() + 120000).

Test plan

  • npm run build (with Node 22) — clean, 35 pages generated, /apple/, /devices/, and /guides/enrolling-devices/ all built without errors.
  • Eyeball check at desktop and mobile widths on Cloudflare Pages preview once this PR builds.
  • Spot-check an actual Apple Watch pairing against an ESPresense v4.0.6 node (deferring to @DTTerastar or a community volunteer — the firmware behavior is verified from source).

🤖 Generated with Claude Code

Summary by CodeRabbit

Documentation

  • Updated Apple device enrollment documentation with enhanced guidance on fingerprint collisions and clarified enrollment workflows
  • Simplified Apple Watch pairing process by replacing previous workarounds with native watchOS Bluetooth settings support
  • Expanded device compatibility guidance and added streamlined troubleshooting steps for improved enrollment experience

Review Change Stack

…for Apple Watch

Current firmware emulates a Heart Rate Monitor (BLE 0x180D) during
enrollment, so iOS and watchOS pair to it directly from Settings >
Bluetooth -- the BluetoothLE / Bluetooth Terminal companion-app
workaround is no longer required.

- apple.mdx: rewrite Apple Watch section for the native pair flow,
  clarify the HRM emulation in the lead paragraph, fix "iWatch" to
  "Apple Watch", restructure Enrollment heading hierarchy, add
  last-verified footer (v4.0.6, 2026-05-11).
- devices.md: change Apple Watches note from "Use iCloud keychain to
  get IRK" to "Pair to retrieve IRK".
- guides/enrolling-devices.md: flip Apple Watch row in triage table
  from mixed to settled, replace the "no settled solution" caution
  with the native pair recipe, keep Mac Keychain as a labeled fallback.

Closes ESPA-71.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented May 11, 2026

Caution

Review failed

Pull request was closed or merged during review

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 24ccc887-6ed5-4978-9b09-7280053aa977

📥 Commits

Reviewing files that changed from the base of the PR and between e86f6ed and 6518669.

📒 Files selected for processing (3)
  • src/content/docs/apple.mdx
  • src/content/docs/devices.md
  • src/content/docs/guides/enrolling-devices.md

Walkthrough

This PR updates Apple device enrollment documentation across three guides to modernize Apple Watch pairing instructions. The main apple.mdx file is rewritten to simplify the Apple Watch workflow by replacing the Bluetooth Terminal app workaround with native watchOS Bluetooth settings pairing, while also clarifying fingerprint collision concerns and device advertising behavior. The devices.md compatibility table and enrolling-devices.md guide are updated to reflect the new Apple Watch enrollment procedure and mark it as settled with a documented Mac Keychain fallback.

Changes

Apple Device Enrollment Documentation

Layer / File(s) Summary
Apple Device Overview and Prerequisites
src/content/docs/apple.mdx
Introductory section revised to explain fingerprint collisions, explicitly recommend the IRK enrollment flow with firmware requirements, and clarify device advertising behavior when iOS screen is off.
iPhone and iPad Enrollment Walkthrough
src/content/docs/apple.mdx
iPhone/iPad enrollment section is streamlined with adjusted subsection title, step-by-step instructions, and formatting for the 2-minute enrollment window and secure pairing process.
Apple Watch Enrollment in Main Guide
src/content/docs/apple.mdx
Apple Watch enrollment section is rewritten: replaces the detailed Bluetooth Terminal app workaround with a direct watch Bluetooth pairing workflow from watchOS settings, includes brief restart troubleshooting if pairing does not start within ~30 seconds.
Documentation Reference Footer
src/content/docs/apple.mdx
Adds verification footer documenting the last tested firmware version (ESPresense v4.0.6) and verification date (2026-05-11).
Device Compatibility Table Updates
src/content/docs/devices.md
Updates the "Known working" devices table with two Apple Watches entries reflecting the new pairing guidance: changes references from iCloud keychain usage to "Pair to retrieve IRK" instruction.
Enrollment Guide and Triage
src/content/docs/guides/enrolling-devices.md
The enrolling-devices.md guide is updated to mark Apple Watch enrollment as ✅ Settled with fallback option in the triage table, and the Apple Watch section is rewritten with the new native pairing workflow, ~30s retry instruction, note that Bluetooth Terminal is no longer needed, and Mac Keychain fallback for devices that do not prompt for pairing.
🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly and specifically describes the main changes: updating Apple Watch documentation to use native HRM (Heart Rate Monitor) enrollment and removing the BluetoothLE app workflow.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@DTTerastar DTTerastar merged commit 2ad7839 into ESPresense:main May 11, 2026
1 of 2 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.

3 participants