Skip to content

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

Merged
TrevorSchirmer merged 2 commits into
betafrom
unified/firmware-channel
Jul 22, 2026
Merged

Unified firmware: runtime Bluetooth Proxy switch + Stable/Beta channel OTA#99
TrevorSchirmer merged 2 commits into
betafrom
unified/firmware-channel

Conversation

@bharvey88

Copy link
Copy Markdown
Contributor

Version: 26.7.12.1

What does this implement/fix?

Ports the MSR-1 unified-firmware redesign (shipped there as 26.7.9.1 — ApolloAutomation/MSR-1#100, ApolloAutomation/MSR-1#103, ApolloAutomation/MSR-1#104) to MTR-1. One image per channel replaces the standard/_BLE build split:

  • bluetooth_proxy + esp32_ble_tracker now compile into every variant. A new "Bluetooth Proxy" switch (default off, persisted) starts/stops scanning at runtime; esp32_improv on the Factory image keeps working because the BLE stack stays up.
  • New "Firmware Channel" select (Stable/Beta) + apply_ota_source: a direct set_source_url swap. No ble_firmware selector, no manifest-matching guard, and no pre-OTA BLE disable (ESPHome's OTA quiesces BLE itself).
  • 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).
  • MTR-1_BLE.yaml stays for existing BLE installs; substitution overrides keep them on the firmware-ble/ manifests.
  • beta-channel/ wrappers default the select to Beta; new build-beta.yml publishes manifest-standard.json / manifest-ble.json (absolute asset URLs) to a rolling beta-fw pre-release. The tag is deliberately not named beta: a tag sharing a branch name shadows the branch for git fetch and ESPHome remote packages.
  • build.yml: the end-user MTR-1.yaml image now publishes to firmware/; the improv Factory image moves to firmware-factory/; static/index.html repointed to match. install.apolloautomation.com needs the same repoint when this ships to main (mirrors Point MSR-1 installer at the factory image (restores Wi-Fi setup step) installer#16). This also makes firmware-ble/manifest.json real on Pages once beta merges to main — today the BLE update entity points at a manifest main never published.

Flash fit: 4MB ESP32-C3 like MSR-1 (base unified there measured 94.1%, Factory 95.5%); CI here re-measures all three variants. If a build overflows, the documented valves are dropping captive_portal, then web_server on Factory only.

Supersedes #98.

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

…-only OTA

One firmware image per channel replaces the build-time _BLE split:
bluetooth_proxy + esp32_ble_tracker compile into every variant and a
"Bluetooth Proxy" switch (default off, persisted) starts/stops scanning
at runtime. The Firmware Channel select swaps the OTA manifest URL
directly - no ble_firmware selector, no manifest-matching guard, no
pre-OTA BLE disable (ESPHome's OTA quiesces BLE itself).

- http_request consolidated into Core.yaml with the proven buffer sizes
  (rx 5120 for GitHub's ~3.6KB CSP header line, tx 2048 for the
  ~850-char signed-redirect query)
- apply_ota_source is channel-only; MTR-1_BLE.yaml keeps legacy devices
  on the firmware-ble manifests via substitution overrides
- beta-channel/ wrappers default the select to Beta; build-beta.yml
  publishes manifest-standard.json + manifest-ble.json to the rolling
  beta-fw pre-release (absolute URLs)
- build.yml now serves the end-user MTR-1.yaml image at firmware/ and
  moves the improv Factory image to firmware-factory/ (installer page
  repointed)
- version 26.7.12.1

Ported from MSR-1 26.7.9.1 (ApolloAutomation/MSR-1 #100, #103, #104).
Supersedes #98.

🤖 Generated with [Claude Code](https://claude.com/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: 55 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: 6c3a1ed1-8fb4-46c6-be81-9d866a580935

📥 Commits

Reviewing files that changed from the base of the PR and between ba86738 and 236345a.

📒 Files selected for processing (9)
  • .github/workflows/build-beta.yml
  • .github/workflows/build.yml
  • Integrations/ESPHome/Core.yaml
  • Integrations/ESPHome/MTR-1.yaml
  • Integrations/ESPHome/MTR-1_BLE.yaml
  • Integrations/ESPHome/MTR-1_Factory.yaml
  • Integrations/ESPHome/beta-channel/MTR-1.yaml
  • Integrations/ESPHome/beta-channel/MTR-1_BLE.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.

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)
@TrevorSchirmer
TrevorSchirmer merged commit 6b91614 into beta Jul 22, 2026
10 checks passed
@TrevorSchirmer
TrevorSchirmer deleted the unified/firmware-channel branch July 22, 2026 17:00
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