Skip to content

Unified firmware: runtime Bluetooth Proxy switch + Stable/Beta channel OTA#46

Open
bharvey88 wants to merge 2 commits into
betafrom
unified/firmware-channel
Open

Unified firmware: runtime Bluetooth Proxy switch + Stable/Beta channel OTA#46
bharvey88 wants to merge 2 commits into
betafrom
unified/firmware-channel

Conversation

@bharvey88

@bharvey88 bharvey88 commented Jul 12, 2026

Copy link
Copy Markdown
Contributor

Version: 26.7.12.1

What does this implement/fix?

Rebuild of #45 on the unified pattern MSR-1 shipped as 26.7.9.1 (ApolloAutomation/MSR-1#100, ApolloAutomation/MSR-1#103, ApolloAutomation/MSR-1#104). Everything #45 did, plus the fix set that landed on MSR-1 afterward:

  • New: runtime "Bluetooth Proxy" support. bluetooth_proxy + esp32_ble_tracker now compile into every image with a "Bluetooth Proxy" switch (default off, persisted, re-applied at boot). PUMP-1 never had a BLE proxy offering; as an always-on C6/8MB device it is a clean proxy candidate, and the switch defaults off so nothing changes until a user opts in.
  • "Firmware Channel" select (Stable/Beta) + apply_ota_source: a direct set_source_url swap from ota_stable_manifest / ota_beta_manifest substitutions. The channel is now also re-applied at boot (on_boot -100), so a rebooted device keeps pointing at its selected channel.
  • The #ifdef USE_ESP32_BLE disable/re-enable lambdas from Add Firmware Channel switching and serve the end-user image for OTA #45's update button are gone — ESPHome's OTA quiesces BLE itself (MSR-1 #103).
  • http_request consolidated into Core.yaml with buffer_size_rx: 5120 / buffer_size_tx: 2048 — GitHub release redirects overflow the 512-byte defaults (~3.6 KB CSP header line, ~850-char signed query string). Add Firmware Channel switching and serve the end-user image for OTA #45 had no buffer sizing; beta-channel OTA fails without it.
  • PUMP-1_Minimal's on_boot converted from mapping to list form. Mapping form replaces Core's whole on_boot list in the package merge, so the pump-safety boot init and refill-mode application never ran on the Minimal image. That was latent while Minimal was just the adoption stub; it matters now that Minimal is the fielded OTA image.
  • Same image flip as Add Firmware Channel switching and serve the end-user image for OTA #45: Minimal takes over Pages firmware/; the improv image moves to firmware-factory/; static/index.html repointed. install.apolloautomation.com needs the matching repoint when this ships to main (mirrors Point MSR-1 installer at the factory image (restores Wi-Fi setup step) installer#16).
  • Same beta-channel/ wrapper + build-beta.yml publishing to the rolling beta-fw pre-release.
  • min_version 2023.11.1 → 2025.11.0 (the update-system floor set on R_PRO-1); version 26.7.12.1.

Supersedes #45. Leaves #37, #35, and #14 alone.

Types of changes

  • Bugfix (fixed change that fixes an issue)
  • New feature (thanks!)
  • Breaking change (repair/feature that breaks existing functionality)
  • Dependency Update - Does not publish
  • Other - Does not publish
  • Website of github readme file update - Does not publish
  • Github workflows - Does not publish

Checklist / Checklijst:

  • The code change has been tested and works locally
  • The code change has not yet been tested

If user-visible functionality or configuration variables are added/modified:

  • Added/updated documentation for the web page

🤖 Generated with Claude Code

@coderabbitai

coderabbitai Bot commented Jul 12, 2026

Copy link
Copy Markdown

Warning

Review limit reached

@bharvey88, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 56 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: aea88535-182b-4121-ad8e-8bf5a57c900f

📥 Commits

Reviewing files that changed from the base of the PR and between 1cf2bfa and 903cdd8.

📒 Files selected for processing (7)
  • .github/workflows/build-beta.yml
  • .github/workflows/build.yml
  • Integrations/ESPHome/Core.yaml
  • Integrations/ESPHome/PUMP-1.yaml
  • Integrations/ESPHome/PUMP-1_Minimal.yaml
  • Integrations/ESPHome/beta-channel/PUMP-1_Minimal.yaml
  • static/index.html
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch unified/firmware-channel

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.

…l OTA

Rebuild of the earlier firmware-channel port on the pattern MSR-1 shipped
as 26.7.9.1 (ApolloAutomation/MSR-1 #100/#103/#104):

- NEW: bluetooth_proxy + esp32_ble_tracker compile into every image; a
  "Bluetooth Proxy" switch (default off, persisted, re-applied at boot)
  starts/stops scanning at runtime. Always-on C6/8MB device - a clean
  proxy candidate; nothing changes until a user turns the switch on.
- Firmware Channel select (Stable/Beta) + apply_ota_source doing a direct
  set_source_url swap from ota_stable_manifest/ota_beta_manifest subs; the
  channel is re-applied at boot (on_boot -100)
- Firmware Update button simplified: no pre-OTA BLE disable (ESPHome's OTA
  quiesces BLE itself)
- http_request consolidated into Core.yaml with the proven buffer sizes
  (rx 5120 / tx 2048 for GitHub release redirects)
- PUMP-1_Minimal on_boot converted to list form so Core's boot logic
  (pump safety init, refill-mode application) still runs on the image
  that now serves OTA
- PUMP-1_Minimal gains the managed-update machinery and takes over Pages
  firmware/ for OTA/adoption; the improv image moves to firmware-factory/
  (installer page repointed)
- beta-channel/ wrapper defaults the select to Beta; build-beta.yml
  publishes the manifest (absolute URLs) to the rolling beta-fw pre-release
- min_version 2025.11.0 (update-system floor); version 26.7.12.1

Supersedes #45.

🤖 Generated with [Claude Code](https://claude.com/claude-code)
@bharvey88
bharvey88 force-pushed the unified/firmware-channel branch from 15669c5 to 09c0945 Compare July 12, 2026 21:44
@bharvey88 bharvey88 changed the title Firmware Channel switching (unified pattern) + serve end-user image for OTA Unified firmware: runtime Bluetooth Proxy switch + Stable/Beta channel OTA Jul 12, 2026
@bharvey88

Copy link
Copy Markdown
Contributor Author

Updated: per fleet policy every product now gets the runtime Bluetooth Proxy switch, so this PR adds bluetooth_proxy + esp32_ble_tracker to Core with the standard switch (default off). Branch force-pushed; body updated.

Add an empty encryption: key to the api: block so ESPHome/HA
provisions a per-device API key on adoption, matching MSR-1. Bump
firmware version to 26.7.14.1.

🤖 Generated with [Claude Code](https://claude.com/claude-code)
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.

1 participant