From f4721761a9aee6f9c7e1379606fda41bed1b370b Mon Sep 17 00:00:00 2001 From: Brandon Harvey <8107750+bharvey88@users.noreply.github.com> Date: Wed, 10 Jun 2026 21:56:55 -0500 Subject: [PATCH 1/5] Add HTTP request OTA update system from R_PRO-1 Port the managed firmware update system from R_PRO-1 to all MSR-2 variants: - Add http_request OTA platform alongside the existing esphome OTA - Add update component pulling the firmware manifest from GitHub Pages - Add safe_mode for recovery from failed updates --- Integrations/ESPHome/MSR-2.yaml | 13 +++++++++++++ Integrations/ESPHome/MSR-2_BLE.yaml | 13 +++++++++++++ Integrations/ESPHome/MSR-2_Factory.yaml | 13 +++++++++++++ 3 files changed, 39 insertions(+) diff --git a/Integrations/ESPHome/MSR-2.yaml b/Integrations/ESPHome/MSR-2.yaml index 78fdd46..7757e65 100644 --- a/Integrations/ESPHome/MSR-2.yaml +++ b/Integrations/ESPHome/MSR-2.yaml @@ -36,6 +36,8 @@ logger: ota: - platform: esphome id: ota_default + - platform: http_request + id: ota_managed wifi: @@ -46,5 +48,16 @@ wifi: ssid: "Apollo MSR2 Hotspot" +http_request: + verify_ssl: true + +safe_mode: + +update: + - platform: http_request + id: update_http_request + name: Firmware Update + source: https://apolloautomation.github.io/MSR-2/firmware/manifest.json + packages: core: !include Core.yaml diff --git a/Integrations/ESPHome/MSR-2_BLE.yaml b/Integrations/ESPHome/MSR-2_BLE.yaml index 480104e..7a23b62 100644 --- a/Integrations/ESPHome/MSR-2_BLE.yaml +++ b/Integrations/ESPHome/MSR-2_BLE.yaml @@ -40,6 +40,8 @@ wifi: ota: - platform: esphome id: ota_esphome + - platform: http_request + id: ota_managed bluetooth_proxy: active: true @@ -47,5 +49,16 @@ esp32_ble_tracker: scan_parameters: active: false +http_request: + verify_ssl: true + +safe_mode: + +update: + - platform: http_request + id: update_http_request + name: Firmware Update + source: https://apolloautomation.github.io/MSR-2/firmware-ble/manifest.json + packages: core: !include Core.yaml diff --git a/Integrations/ESPHome/MSR-2_Factory.yaml b/Integrations/ESPHome/MSR-2_Factory.yaml index 04b3aae..011d87f 100644 --- a/Integrations/ESPHome/MSR-2_Factory.yaml +++ b/Integrations/ESPHome/MSR-2_Factory.yaml @@ -47,6 +47,19 @@ logger: ota: - platform: esphome id: ota_esphome + - platform: http_request + id: ota_managed + +http_request: + verify_ssl: true + +safe_mode: + +update: + - platform: http_request + id: update_http_request + name: Firmware Update + source: https://apolloautomation.github.io/MSR-2/firmware/manifest.json packages: core: !include Core.yaml From 7ce645e8e21ba3d92969c865ac39c2ef897465c8 Mon Sep 17 00:00:00 2001 From: Brandon Harvey <8107750+bharvey88@users.noreply.github.com> Date: Wed, 10 Jun 2026 21:56:55 -0500 Subject: [PATCH 2/5] Build and publish the BLE variant to its own firmware-ble manifest --- .github/workflows/build.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 6b7e07a..6d5ab44 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -26,7 +26,8 @@ jobs: device-name: msr-2 yaml-files: | Integrations/ESPHome/MSR-2_Factory.yaml - firmware-names: "2_Factory:firmware" + Integrations/ESPHome/MSR-2_BLE.yaml + firmware-names: "2_Factory:firmware,2_BLE:firmware-ble" core-yaml-path: Integrations/ESPHome/Core.yaml esphome-version: stable # Bypass check if manually triggered with bypass option From 40cdaaf46c7c2d223c719f5bd05a8a3fcbb5c50c Mon Sep 17 00:00:00 2001 From: Brandon Harvey <8107750+bharvey88@users.noreply.github.com> Date: Wed, 10 Jun 2026 21:56:55 -0500 Subject: [PATCH 3/5] Check for updates when WiFi connects The http_request update component polls every 6h and the first poll fires before the network is up, so a freshly booted device would not see an available update for 6 hours. Trigger a manifest check as soon as WiFi connects. --- Integrations/ESPHome/MSR-2.yaml | 2 ++ Integrations/ESPHome/MSR-2_BLE.yaml | 2 ++ Integrations/ESPHome/MSR-2_Factory.yaml | 2 ++ 3 files changed, 6 insertions(+) diff --git a/Integrations/ESPHome/MSR-2.yaml b/Integrations/ESPHome/MSR-2.yaml index 7757e65..0180d5c 100644 --- a/Integrations/ESPHome/MSR-2.yaml +++ b/Integrations/ESPHome/MSR-2.yaml @@ -40,6 +40,8 @@ ota: id: ota_managed wifi: + on_connect: + - component.update: update_http_request power_save_mode: none diff --git a/Integrations/ESPHome/MSR-2_BLE.yaml b/Integrations/ESPHome/MSR-2_BLE.yaml index 7a23b62..b74387e 100644 --- a/Integrations/ESPHome/MSR-2_BLE.yaml +++ b/Integrations/ESPHome/MSR-2_BLE.yaml @@ -34,6 +34,8 @@ dashboard_import: import_full_config: false wifi: + on_connect: + - component.update: update_http_request ap: ssid: "Apollo MSR2 Hotspot" diff --git a/Integrations/ESPHome/MSR-2_Factory.yaml b/Integrations/ESPHome/MSR-2_Factory.yaml index 011d87f..f61d670 100644 --- a/Integrations/ESPHome/MSR-2_Factory.yaml +++ b/Integrations/ESPHome/MSR-2_Factory.yaml @@ -39,6 +39,8 @@ esp32_improv: authorizer: none wifi: + on_connect: + - component.update: update_http_request ap: ssid: "Apollo MSR2 Hotspot" From 4f42b5ada24c79305ece3c0a1448310ac2db98a1 Mon Sep 17 00:00:00 2001 From: Brandon Harvey <8107750+bharvey88@users.noreply.github.com> Date: Wed, 10 Jun 2026 21:56:56 -0500 Subject: [PATCH 4/5] Raise min_version to 2025.11.0 to match R_PRO-1's update-system floor --- Integrations/ESPHome/MSR-2.yaml | 2 +- Integrations/ESPHome/MSR-2_BLE.yaml | 2 +- Integrations/ESPHome/MSR-2_Factory.yaml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Integrations/ESPHome/MSR-2.yaml b/Integrations/ESPHome/MSR-2.yaml index 0180d5c..6f83199 100644 --- a/Integrations/ESPHome/MSR-2.yaml +++ b/Integrations/ESPHome/MSR-2.yaml @@ -25,7 +25,7 @@ esphome: name: "ApolloAutomation.MSR-2" version: "${version}" - min_version: 2025.2.0 + min_version: 2025.11.0 dashboard_import: package_import_url: github://ApolloAutomation/MSR-2/Integrations/ESPHome/MSR-2.yaml diff --git a/Integrations/ESPHome/MSR-2_BLE.yaml b/Integrations/ESPHome/MSR-2_BLE.yaml index b74387e..6e9e103 100644 --- a/Integrations/ESPHome/MSR-2_BLE.yaml +++ b/Integrations/ESPHome/MSR-2_BLE.yaml @@ -25,7 +25,7 @@ esphome: name: "ApolloAutomation.MSR-2_BLE" version: "${version}" - min_version: 2025.2.0 + min_version: 2025.11.0 logger: diff --git a/Integrations/ESPHome/MSR-2_Factory.yaml b/Integrations/ESPHome/MSR-2_Factory.yaml index f61d670..791c36e 100644 --- a/Integrations/ESPHome/MSR-2_Factory.yaml +++ b/Integrations/ESPHome/MSR-2_Factory.yaml @@ -25,7 +25,7 @@ esphome: name: "ApolloAutomation.MSR-2_Factory" version: "${version}" - min_version: 2025.2.0 + min_version: 2025.11.0 dashboard_import: From e129a045fde1cbdb5be7c7e9d111f18cfedb46b5 Mon Sep 17 00:00:00 2001 From: Brandon Harvey <8107750+bharvey88@users.noreply.github.com> Date: Wed, 10 Jun 2026 22:33:55 -0500 Subject: [PATCH 5/5] Release notes: compact formatting for the HA update dialog Home Assistant shows only the first 255 characters of an ESPHome release summary, so boilerplate is expensive and ## headings render oversized in the update dialog: - Render category titles and What's Changed in bold instead of H2 - Drop the star-the-repo footer - Drop the Full Changelog line: it semver-truncates 4-part versions (always links ...X.Y.Z.1) - the shared build workflow now appends a correct compare link instead --- .github/release-drafter.yml | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/.github/release-drafter.yml b/.github/release-drafter.yml index 5fb32e3..436184d 100644 --- a/.github/release-drafter.yml +++ b/.github/release-drafter.yml @@ -2,6 +2,7 @@ name-template: 'Release v$NEXT_PATCH_VERSION' tag-template: "$RESOLVED_VERSION" change-template: "- #$NUMBER $TITLE @$AUTHOR" sort-direction: ascending +category-template: '**$TITLE**' categories: - title: "🚨 Breaking changes" @@ -25,11 +26,9 @@ include-labels: no-changes-template: '- No changes' +# The shared build workflow appends a Full Changelog compare link to the +# release body (release-drafter cannot render 4-part version tags). template: | - ## What's Changed + **What's Changed** $CHANGES - - **Full Changelog**: https://github.com/ApolloAutomation/MSR-2/compare/$PREVIOUS_TAG...$RESOLVED_VERSION.1 - - Be sure to 🌟 this repository for updates! \ No newline at end of file