From c95b2409fd6f138cc6fa8350e8f51cd61a7ec599 Mon Sep 17 00:00:00 2001 From: kmagdziak Date: Wed, 1 Oct 2025 12:12:09 -0500 Subject: [PATCH 01/24] Update Core.yaml with ids for temp and humidity --- Integrations/ESPHome/Core.yaml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Integrations/ESPHome/Core.yaml b/Integrations/ESPHome/Core.yaml index e33b5cc..00ab65e 100644 --- a/Integrations/ESPHome/Core.yaml +++ b/Integrations/ESPHome/Core.yaml @@ -237,11 +237,13 @@ sensor: accuracy_decimals: 1 temperature: name: "SEN55 Temperature" - accuracy_decimals: 1 + id: sen55_temperature filters: - lambda: return x - id(sen55_temperature_offset).state; + accuracy_decimals: 1 humidity: name: "SEN55 Humidity" + id: sen55_humidity filters: - lambda: return x - id(sen55_humidity_offset).state; accuracy_decimals: 1 From d12a913a07887b310a085e04f59ad2b06c042743 Mon Sep 17 00:00:00 2001 From: Brandon Harvey <8107750+bharvey88@users.noreply.github.com> Date: Thu, 18 Dec 2025 14:56:05 -0600 Subject: [PATCH 02/24] Fixed missing ids for mics entities and changed update_interval back to 60 second esphome defaults Fixed missing ids for mics entities and changed update_interval back to 60 second esphome defaults --- Integrations/ESPHome/Core.yaml | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/Integrations/ESPHome/Core.yaml b/Integrations/ESPHome/Core.yaml index 00ab65e..2d0b494 100644 --- a/Integrations/ESPHome/Core.yaml +++ b/Integrations/ESPHome/Core.yaml @@ -311,17 +311,23 @@ sensor: id: mics4514 nitrogen_dioxide: name: Nitrogen Dioxide + id: nitrogen_dioxide carbon_monoxide: name: Carbon Monoxide + id: carbon_monoxide hydrogen: name: Hydrogen + id: hydrogen ethanol: name: Ethanol + id: ethanol methane: name: Methane + id: methane ammonia: name: Ammonia - update_interval: 10s + id: ammonia + update_interval: 60s light: - platform: esp32_rmt_led_strip From 4e206fc4f0a261b4dfe4094d28fbaa8d1ff62e0c Mon Sep 17 00:00:00 2001 From: Brandon Harvey <8107750+bharvey88@users.noreply.github.com> Date: Thu, 18 Dec 2025 15:01:58 -0600 Subject: [PATCH 03/24] Update version in Core.yaml to 25.12.18.2 --- Integrations/ESPHome/Core.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Integrations/ESPHome/Core.yaml b/Integrations/ESPHome/Core.yaml index 2d0b494..c59f949 100644 --- a/Integrations/ESPHome/Core.yaml +++ b/Integrations/ESPHome/Core.yaml @@ -1,6 +1,6 @@ substitutions: name: apollo-air-1 - version: "25.8.6.1" + version: "25.12.18.2" device_description: ${name} made by Apollo Automation - version ${version}. esp32: From 7f8a507d4b41b42fd21a573b585b16bba7a9d757 Mon Sep 17 00:00:00 2001 From: Brandon Harvey Date: Tue, 24 Feb 2026 12:41:14 -0600 Subject: [PATCH 04/24] [apollo_air-1] Add configurable DPS310 pressure offset --- Integrations/ESPHome/Core.yaml | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/Integrations/ESPHome/Core.yaml b/Integrations/ESPHome/Core.yaml index c59f949..46e3b22 100644 --- a/Integrations/ESPHome/Core.yaml +++ b/Integrations/ESPHome/Core.yaml @@ -1,6 +1,6 @@ substitutions: name: apollo-air-1 - version: "25.12.18.2" + version: "26.2.24.1" device_description: ${name} made by Apollo Automation - version ${version}. esp32: @@ -104,7 +104,20 @@ number: update_interval: never step: 0.1 mode: box - + - platform: template + name: "DPS310 Pressure Offset" + id: dps310_pressure_offset + restore_value: true + initial_value: 0.0 + min_value: -100.0 + max_value: 100.0 + entity_category: "CONFIG" + unit_of_measurement: "hPa" + optimistic: true + update_interval: never + step: 0.1 + mode: box + - platform: template name: "Sleep Duration" id: deep_sleep_sleep_duration @@ -212,6 +225,8 @@ sensor: pressure: name: "DPS310 Pressure" id: dps310pressure + filters: + - lambda: return x + id(dps310_pressure_offset).state; temperature: id: dps310temperature update_interval: 30s From aa6e149053f46cca42c2e0bd3cfdf2827591b811 Mon Sep 17 00:00:00 2001 From: Brandon Harvey Date: Tue, 24 Feb 2026 16:30:15 -0600 Subject: [PATCH 05/24] Add NowCast AQI sensor using ESPHome aqi component Uses PM2.5 and PM10 from the SEN55 via the built-in esphome aqi platform. Returns the higher of the two sub-indices per 2024 EPA breakpoints. Named "NowCast AQI" rather than "AQI" because the device lacks ozone and SO2. --- Integrations/ESPHome/Core.yaml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Integrations/ESPHome/Core.yaml b/Integrations/ESPHome/Core.yaml index c59f949..1a84ac3 100644 --- a/Integrations/ESPHome/Core.yaml +++ b/Integrations/ESPHome/Core.yaml @@ -307,6 +307,13 @@ sensor: icon: mdi:air-filter update_interval: 10s + - platform: aqi + name: "NowCast AQI" + id: nowcast_aqi + pm_2_5: pm_2_5 + pm_10_0: pm_10_0 + calculation_type: AQI + - platform: mics_4514 id: mics4514 nitrogen_dioxide: From c2fac7760a513feeffd620d4a76bda293396d721 Mon Sep 17 00:00:00 2001 From: Brandon Harvey Date: Tue, 24 Feb 2026 16:35:39 -0600 Subject: [PATCH 06/24] Add IP address text sensor via wifi_info platform --- Integrations/ESPHome/Core.yaml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Integrations/ESPHome/Core.yaml b/Integrations/ESPHome/Core.yaml index c59f949..c5193ff 100644 --- a/Integrations/ESPHome/Core.yaml +++ b/Integrations/ESPHome/Core.yaml @@ -398,6 +398,11 @@ text_sensor: else { return std::string("Unknown");} + - platform: wifi_info + ip_address: + name: "IP Address" + id: wifi_ip + switch: - platform: factory_reset id: factory_reset_switch From c3af95d8510515f128d9456c8df26592c675b502 Mon Sep 17 00:00:00 2001 From: Brandon Harvey Date: Tue, 24 Feb 2026 16:46:08 -0600 Subject: [PATCH 07/24] Add ESPHome version and Apollo firmware version text sensors --- Integrations/ESPHome/Core.yaml | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/Integrations/ESPHome/Core.yaml b/Integrations/ESPHome/Core.yaml index c59f949..31b4bb0 100644 --- a/Integrations/ESPHome/Core.yaml +++ b/Integrations/ESPHome/Core.yaml @@ -398,6 +398,17 @@ text_sensor: else { return std::string("Unknown");} + - platform: version + name: "ESPHome Version" + hide_timestamp: true + entity_category: "diagnostic" + - platform: template + name: "Apollo Firmware Version" + id: apollo_firmware_version + lambda: |- + return {"${version}"}; + entity_category: "diagnostic" + switch: - platform: factory_reset id: factory_reset_switch From 63e3b17de8deaa2ce904103912fd2e18af5f5fcc Mon Sep 17 00:00:00 2001 From: Brandon Harvey Date: Tue, 24 Feb 2026 16:59:04 -0600 Subject: [PATCH 08/24] Modernise board spec, web server v3, and API actions - esp32: board -> variant: esp32c3 + flash_size: 4MB - web_server: add version: 3 - api: services/service -> actions/action - Remove platformio_options board_build.flash_mode from all device YAMLs - AIR-1_Factory: remove legacy BLE on_connect/on_disconnect wifi hooks Port of ApolloAutomation/MTR-1#74 (min_version bump excluded per repo conventions) --- Integrations/ESPHome/AIR-1.yaml | 3 --- Integrations/ESPHome/AIR-1_BLE.yaml | 3 --- Integrations/ESPHome/AIR-1_Factory.yaml | 8 -------- Integrations/ESPHome/Core.yaml | 12 +++++++----- 4 files changed, 7 insertions(+), 19 deletions(-) diff --git a/Integrations/ESPHome/AIR-1.yaml b/Integrations/ESPHome/AIR-1.yaml index c02a728..529654f 100644 --- a/Integrations/ESPHome/AIR-1.yaml +++ b/Integrations/ESPHome/AIR-1.yaml @@ -3,9 +3,6 @@ esphome: friendly_name: Apollo AIR-1 comment: Apollo AIR-1 name_add_mac_suffix: true - platformio_options: - board_build.flash_mode: dio - project: name: "ApolloAutomation.AIR-1" version: "${version}" diff --git a/Integrations/ESPHome/AIR-1_BLE.yaml b/Integrations/ESPHome/AIR-1_BLE.yaml index e4e8109..5ec6d3c 100644 --- a/Integrations/ESPHome/AIR-1_BLE.yaml +++ b/Integrations/ESPHome/AIR-1_BLE.yaml @@ -3,9 +3,6 @@ esphome: friendly_name: Apollo AIR-1 comment: Apollo AIR-1 name_add_mac_suffix: true - platformio_options: - board_build.flash_mode: dio - project: name: "ApolloAutomation.AIR-1" version: "${version}" diff --git a/Integrations/ESPHome/AIR-1_Factory.yaml b/Integrations/ESPHome/AIR-1_Factory.yaml index 05f140c..0133d5c 100644 --- a/Integrations/ESPHome/AIR-1_Factory.yaml +++ b/Integrations/ESPHome/AIR-1_Factory.yaml @@ -3,9 +3,6 @@ esphome: friendly_name: Apollo AIR-1 comment: Apollo AIR-1 Factory name_add_mac_suffix: true - platformio_options: - board_build.flash_mode: dio - project: name: "ApolloAutomation.AIR-1" version: "${version}" @@ -52,11 +49,6 @@ esp32_improv: authorizer: none wifi: - on_connect: - - delay: 5s - - ble.disable: - on_disconnect: - - ble.enable: ap: ssid: "Apollo AIR1 Hotspot" diff --git a/Integrations/ESPHome/Core.yaml b/Integrations/ESPHome/Core.yaml index c59f949..8f1d81c 100644 --- a/Integrations/ESPHome/Core.yaml +++ b/Integrations/ESPHome/Core.yaml @@ -4,7 +4,8 @@ substitutions: device_description: ${name} made by Apollo Automation - version ${version}. esp32: - board: esp32-c3-devkitm-1 + variant: esp32c3 + flash_size: 4MB framework: type: esp-idf @@ -25,16 +26,16 @@ api: id(reportAllValues).execute(); - deep_sleep.enter: id: deep_sleep_1 - services: - #Co2 Calibration Service - - service: calibrate_co2_value + actions: + #Co2 Calibration Action + - action: calibrate_co2_value variables: co2_ppm: float then: - scd4x.perform_forced_calibration: value: !lambda "return co2_ppm;" id: scd40 - - service: sen55_clean + - action: sen55_clean then: - sen5x.start_fan_autoclean: sen55 reboot_timeout: 0s @@ -43,6 +44,7 @@ captive_portal: web_server: port: 80 + version: 3 globals: - id: cycleCounter From ea2080589de6568dba082a2ae4fe0391d020b692 Mon Sep 17 00:00:00 2001 From: Brandon Harvey Date: Wed, 25 Feb 2026 11:26:15 -0600 Subject: [PATCH 09/24] Make DPS310 pressure offset disabled by default Co-Authored-By: Claude Sonnet 4.6 --- Integrations/ESPHome/Core.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/Integrations/ESPHome/Core.yaml b/Integrations/ESPHome/Core.yaml index 46e3b22..ee2f413 100644 --- a/Integrations/ESPHome/Core.yaml +++ b/Integrations/ESPHome/Core.yaml @@ -107,6 +107,7 @@ number: - platform: template name: "DPS310 Pressure Offset" id: dps310_pressure_offset + disabled_by_default: true restore_value: true initial_value: 0.0 min_value: -100.0 From 8908a1f6bda5f3fe931c20c020af9d898a7ed827 Mon Sep 17 00:00:00 2001 From: Brandon Harvey <8107750+bharvey88@users.noreply.github.com> Date: Wed, 25 Feb 2026 14:51:12 -0600 Subject: [PATCH 10/24] fix: remove unused id, add entity_category diagnostic to IP address sensor --- Integrations/ESPHome/Core.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Integrations/ESPHome/Core.yaml b/Integrations/ESPHome/Core.yaml index c5193ff..a0a516f 100644 --- a/Integrations/ESPHome/Core.yaml +++ b/Integrations/ESPHome/Core.yaml @@ -401,7 +401,7 @@ text_sensor: - platform: wifi_info ip_address: name: "IP Address" - id: wifi_ip + entity_category: "diagnostic" switch: - platform: factory_reset From 0e2dd581733de0fd92e6feef1defb582925fb002 Mon Sep 17 00:00:00 2001 From: Brandon Harvey <8107750+bharvey88@users.noreply.github.com> Date: Wed, 25 Feb 2026 15:04:45 -0600 Subject: [PATCH 11/24] fix: restore id: wifi_ip (needed for ESPHome automations) --- Integrations/ESPHome/Core.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/Integrations/ESPHome/Core.yaml b/Integrations/ESPHome/Core.yaml index a0a516f..fb44a06 100644 --- a/Integrations/ESPHome/Core.yaml +++ b/Integrations/ESPHome/Core.yaml @@ -401,6 +401,7 @@ text_sensor: - platform: wifi_info ip_address: name: "IP Address" + id: wifi_ip entity_category: "diagnostic" switch: From 797ee73a7970b9919820181e71e182780c56ba39 Mon Sep 17 00:00:00 2001 From: Brandon Harvey <8107750+bharvey88@users.noreply.github.com> Date: Wed, 25 Feb 2026 15:08:52 -0600 Subject: [PATCH 12/24] fix: add device_class: aqi to NowCast AQI sensor --- Integrations/ESPHome/Core.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/Integrations/ESPHome/Core.yaml b/Integrations/ESPHome/Core.yaml index 1a84ac3..c33a780 100644 --- a/Integrations/ESPHome/Core.yaml +++ b/Integrations/ESPHome/Core.yaml @@ -313,6 +313,7 @@ sensor: pm_2_5: pm_2_5 pm_10_0: pm_10_0 calculation_type: AQI + device_class: aqi - platform: mics_4514 id: mics4514 From 7072df1592eebd366827aead4b48c9d300e853a4 Mon Sep 17 00:00:00 2001 From: Brandon Harvey <8107750+bharvey88@users.noreply.github.com> Date: Thu, 26 Feb 2026 07:01:20 -0600 Subject: [PATCH 13/24] fix: add NaN guard to DPS310 pressure offset filter lambda --- Integrations/ESPHome/Core.yaml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Integrations/ESPHome/Core.yaml b/Integrations/ESPHome/Core.yaml index ee2f413..99a02dc 100644 --- a/Integrations/ESPHome/Core.yaml +++ b/Integrations/ESPHome/Core.yaml @@ -227,7 +227,9 @@ sensor: name: "DPS310 Pressure" id: dps310pressure filters: - - lambda: return x + id(dps310_pressure_offset).state; + - lambda: |- + float offset = id(dps310_pressure_offset).state; + return isnan(offset) ? x : x + offset; temperature: id: dps310temperature update_interval: 30s From 1397beba703492f5f22d7c5603fe2b7289216373 Mon Sep 17 00:00:00 2001 From: Brandon Harvey <8107750+bharvey88@users.noreply.github.com> Date: Thu, 26 Feb 2026 07:01:31 -0600 Subject: [PATCH 14/24] fix: add entity_category diagnostic to ESPHome Version sensor --- Integrations/ESPHome/Core.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/Integrations/ESPHome/Core.yaml b/Integrations/ESPHome/Core.yaml index 31b4bb0..27ba718 100644 --- a/Integrations/ESPHome/Core.yaml +++ b/Integrations/ESPHome/Core.yaml @@ -402,6 +402,7 @@ text_sensor: name: "ESPHome Version" hide_timestamp: true entity_category: "diagnostic" + entity_category: "diagnostic" - platform: template name: "Apollo Firmware Version" id: apollo_firmware_version From a691d9aea91f4937025736afe6d39039da8831e1 Mon Sep 17 00:00:00 2001 From: Brandon Harvey <8107750+bharvey88@users.noreply.github.com> Date: Thu, 26 Feb 2026 07:01:32 -0600 Subject: [PATCH 15/24] fix: add update_interval: never to static Apollo Firmware Version sensor --- Integrations/ESPHome/Core.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/Integrations/ESPHome/Core.yaml b/Integrations/ESPHome/Core.yaml index 27ba718..6971206 100644 --- a/Integrations/ESPHome/Core.yaml +++ b/Integrations/ESPHome/Core.yaml @@ -408,6 +408,7 @@ text_sensor: id: apollo_firmware_version lambda: |- return {"${version}"}; + update_interval: never entity_category: "diagnostic" switch: From c8279a481f01f51289756100d4b6b86a3d433751 Mon Sep 17 00:00:00 2001 From: Brandon Harvey <8107750+bharvey88@users.noreply.github.com> Date: Thu, 26 Feb 2026 07:05:35 -0600 Subject: [PATCH 16/24] fix: remove duplicate entity_category keys in ESPHome Version sensor --- Integrations/ESPHome/Core.yaml | 1 - 1 file changed, 1 deletion(-) diff --git a/Integrations/ESPHome/Core.yaml b/Integrations/ESPHome/Core.yaml index 6971206..25b04be 100644 --- a/Integrations/ESPHome/Core.yaml +++ b/Integrations/ESPHome/Core.yaml @@ -402,7 +402,6 @@ text_sensor: name: "ESPHome Version" hide_timestamp: true entity_category: "diagnostic" - entity_category: "diagnostic" - platform: template name: "Apollo Firmware Version" id: apollo_firmware_version From 8648c7857d04b49f9a76403ea22bb6dde954d690 Mon Sep 17 00:00:00 2001 From: Brandon Harvey <8107750+bharvey88@users.noreply.github.com> Date: Thu, 26 Feb 2026 10:49:44 -0600 Subject: [PATCH 17/24] fix: publish apollo_firmware_version in reportAllValues before deep sleep --- Integrations/ESPHome/Core.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/Integrations/ESPHome/Core.yaml b/Integrations/ESPHome/Core.yaml index 25b04be..e6c0bcb 100644 --- a/Integrations/ESPHome/Core.yaml +++ b/Integrations/ESPHome/Core.yaml @@ -552,3 +552,4 @@ script: - component.update: pm2_5_to_4 - component.update: pm4_to_10 - component.update: voc_quality + - component.update: apollo_firmware_version From c1de808a0cad0b291c6792461b7fabc5fc1b3000 Mon Sep 17 00:00:00 2001 From: Brandon Harvey <8107750+bharvey88@users.noreply.github.com> Date: Thu, 26 Feb 2026 10:56:15 -0600 Subject: [PATCH 18/24] fix: correct lambda body indentation in DPS310 pressure filter --- Integrations/ESPHome/Core.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Integrations/ESPHome/Core.yaml b/Integrations/ESPHome/Core.yaml index 99a02dc..c8889b0 100644 --- a/Integrations/ESPHome/Core.yaml +++ b/Integrations/ESPHome/Core.yaml @@ -228,8 +228,8 @@ sensor: id: dps310pressure filters: - lambda: |- - float offset = id(dps310_pressure_offset).state; - return isnan(offset) ? x : x + offset; + float offset = id(dps310_pressure_offset).state; + return isnan(offset) ? x : x + offset; temperature: id: dps310temperature update_interval: 30s From 5c481fedccbf301fc0e17802773ddf75b0315313 Mon Sep 17 00:00:00 2001 From: Brandon Harvey <8107750+bharvey88@users.noreply.github.com> Date: Mon, 2 Mar 2026 15:22:31 -0600 Subject: [PATCH 19/24] Bump version to 26.3.2.1 --- Integrations/ESPHome/Core.yaml | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/Integrations/ESPHome/Core.yaml b/Integrations/ESPHome/Core.yaml index c10d45a..35922e1 100644 --- a/Integrations/ESPHome/Core.yaml +++ b/Integrations/ESPHome/Core.yaml @@ -1,6 +1,6 @@ substitutions: name: apollo-air-1 - version: "26.2.24.1" + version: "26.3.2.1" device_description: ${name} made by Apollo Automation - version ${version}. esp32: @@ -88,7 +88,7 @@ number: min_value: -70.0 max_value: 70.0 entity_category: "CONFIG" - unit_of_measurement: "°C" + unit_of_measurement: "°C" optimistic: true update_interval: never step: 0.1 @@ -240,19 +240,19 @@ sensor: - platform: sen5x id: sen55 pm_1_0: - name: "PM <1µm Weight concentration" + name: "PM <1µm Weight concentration" id: pm_1_0 accuracy_decimals: 1 pm_2_5: - name: "PM <2.5µm Weight concentration" + name: "PM <2.5µm Weight concentration" id: pm_2_5 accuracy_decimals: 1 pm_4_0: - name: "PM <4µm Weight concentration" + name: "PM <4µm Weight concentration" id: pm_4_0 accuracy_decimals: 1 pm_10_0: - name: "PM <10µm Weight concentration" + name: "PM <10µm Weight concentration" id: pm_10_0 accuracy_decimals: 1 temperature: @@ -288,41 +288,41 @@ sensor: update_interval: 10s - platform: template - name: "PM 0.3 To 1 µm" + name: "PM 0.3 To 1 µm" id: pm0_3_to_1 disabled_by_default: true lambda: return id(pm_1_0).state; - unit_of_measurement: "µg/m³" + unit_of_measurement: "µg/m³" state_class: measurement icon: mdi:air-filter update_interval: 10s - platform: template - name: "PM 1 To 2.5 µm" + name: "PM 1 To 2.5 µm" id: pm1_to_2_5 disabled_by_default: true lambda: return std::max(0.0f, id(pm_2_5).state - id(pm_1_0).state); - unit_of_measurement: "µg/m³" + unit_of_measurement: "µg/m³" state_class: measurement icon: mdi:air-filter update_interval: 10s - platform: template - name: "PM 2.5 To 4 µm" + name: "PM 2.5 To 4 µm" id: pm2_5_to_4 disabled_by_default: true lambda: return std::max(0.0f, id(pm_4_0).state - id(pm_2_5).state); - unit_of_measurement: "µg/m³" + unit_of_measurement: "µg/m³" state_class: measurement icon: mdi:air-filter update_interval: 10s - platform: template - name: "PM 4 To 10 µm" + name: "PM 4 To 10 µm" id: pm4_to_10 disabled_by_default: true lambda: return std::max(0.0f, id(pm_10_0).state - id(pm_4_0).state); - unit_of_measurement: "µg/m³" + unit_of_measurement: "µg/m³" state_class: measurement icon: mdi:air-filter update_interval: 10s From 26aa86da427c06779be857d549643aaf7adcb9bc Mon Sep 17 00:00:00 2001 From: Brandon Harvey <8107750+bharvey88@users.noreply.github.com> Date: Mon, 2 Mar 2026 15:47:41 -0600 Subject: [PATCH 20/24] Fix: restore UTF-8 special chars, keep version bump to 26.3.2.1 --- Integrations/ESPHome/Core.yaml | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/Integrations/ESPHome/Core.yaml b/Integrations/ESPHome/Core.yaml index 35922e1..8be7348 100644 --- a/Integrations/ESPHome/Core.yaml +++ b/Integrations/ESPHome/Core.yaml @@ -88,7 +88,7 @@ number: min_value: -70.0 max_value: 70.0 entity_category: "CONFIG" - unit_of_measurement: "°C" + unit_of_measurement: "°C" optimistic: true update_interval: never step: 0.1 @@ -240,19 +240,19 @@ sensor: - platform: sen5x id: sen55 pm_1_0: - name: "PM <1µm Weight concentration" + name: "PM <1µm Weight concentration" id: pm_1_0 accuracy_decimals: 1 pm_2_5: - name: "PM <2.5µm Weight concentration" + name: "PM <2.5µm Weight concentration" id: pm_2_5 accuracy_decimals: 1 pm_4_0: - name: "PM <4µm Weight concentration" + name: "PM <4µm Weight concentration" id: pm_4_0 accuracy_decimals: 1 pm_10_0: - name: "PM <10µm Weight concentration" + name: "PM <10µm Weight concentration" id: pm_10_0 accuracy_decimals: 1 temperature: @@ -288,41 +288,41 @@ sensor: update_interval: 10s - platform: template - name: "PM 0.3 To 1 µm" + name: "PM 0.3 To 1 µm" id: pm0_3_to_1 disabled_by_default: true lambda: return id(pm_1_0).state; - unit_of_measurement: "µg/m³" + unit_of_measurement: "µg/m³" state_class: measurement icon: mdi:air-filter update_interval: 10s - platform: template - name: "PM 1 To 2.5 µm" + name: "PM 1 To 2.5 µm" id: pm1_to_2_5 disabled_by_default: true lambda: return std::max(0.0f, id(pm_2_5).state - id(pm_1_0).state); - unit_of_measurement: "µg/m³" + unit_of_measurement: "µg/m³" state_class: measurement icon: mdi:air-filter update_interval: 10s - platform: template - name: "PM 2.5 To 4 µm" + name: "PM 2.5 To 4 µm" id: pm2_5_to_4 disabled_by_default: true lambda: return std::max(0.0f, id(pm_4_0).state - id(pm_2_5).state); - unit_of_measurement: "µg/m³" + unit_of_measurement: "µg/m³" state_class: measurement icon: mdi:air-filter update_interval: 10s - platform: template - name: "PM 4 To 10 µm" + name: "PM 4 To 10 µm" id: pm4_to_10 disabled_by_default: true lambda: return std::max(0.0f, id(pm_10_0).state - id(pm_4_0).state); - unit_of_measurement: "µg/m³" + unit_of_measurement: "µg/m³" state_class: measurement icon: mdi:air-filter update_interval: 10s From f33a39d0775ceed34edfb900376f7ed11cfaf986 Mon Sep 17 00:00:00 2001 From: Brandon Harvey Date: Wed, 4 Mar 2026 07:50:54 -0600 Subject: [PATCH 21/24] fix: update apollo_firmware_version on every HA client connection The sensor uses update_interval: never and only updated via reportAllValues, which is gated behind the prevent_sleep=OFF branch of on_client_connected. Since prevent_sleep defaults to RESTORE_DEFAULT_ON, the sensor never got a value in always-on mode and showed "unknown" in HA. Fix by calling component.update unconditionally at the start of on_client_connected, before the 90s delay and sleep conditional. --- Integrations/ESPHome/Core.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/Integrations/ESPHome/Core.yaml b/Integrations/ESPHome/Core.yaml index 8be7348..1897d6f 100644 --- a/Integrations/ESPHome/Core.yaml +++ b/Integrations/ESPHome/Core.yaml @@ -11,6 +11,7 @@ esp32: api: on_client_connected: + - component.update: apollo_firmware_version - delay: 90s - if: condition: From 9b21aeee7ce04dd8cf147722b07d1c71382f8676 Mon Sep 17 00:00:00 2001 From: bharvey88 <8107750+bharvey88@users.noreply.github.com> Date: Fri, 6 Mar 2026 11:53:22 -0600 Subject: [PATCH 22/24] fix: use text_sensor.template.publish for Apollo Firmware Version sensor The sensor was showing "unknown" because component.update silently fails when the component's is_ready() check returns false. Replaced with text_sensor.template.publish which calls publish_state() directly. Also removed update_interval: never so the lambda fires every 60s as a periodic fallback. --- Integrations/ESPHome/Core.yaml | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/Integrations/ESPHome/Core.yaml b/Integrations/ESPHome/Core.yaml index 1897d6f..e88d15e 100644 --- a/Integrations/ESPHome/Core.yaml +++ b/Integrations/ESPHome/Core.yaml @@ -11,7 +11,9 @@ esp32: api: on_client_connected: - - component.update: apollo_firmware_version + - text_sensor.template.publish: + id: apollo_firmware_version + state: "${version}" - delay: 90s - if: condition: @@ -441,7 +443,6 @@ text_sensor: id: apollo_firmware_version lambda: |- return {"${version}"}; - update_interval: never entity_category: "diagnostic" switch: @@ -586,4 +587,6 @@ script: - component.update: pm2_5_to_4 - component.update: pm4_to_10 - component.update: voc_quality - - component.update: apollo_firmware_version + - text_sensor.template.publish: + id: apollo_firmware_version + state: "${version}" From 97370396062644b420c19c4948c50f1ca8cda101 Mon Sep 17 00:00:00 2001 From: bharvey88 <8107750+bharvey88@users.noreply.github.com> Date: Fri, 6 Mar 2026 16:51:13 -0600 Subject: [PATCH 23/24] fix: publish firmware version once on boot instead of polling Per ESPHome dev feedback: the version is a compile-time constant, so publish it once on_boot rather than using a lambda with periodic updates. Removed publish from on_client_connected and reportAllValues script. --- Integrations/ESPHome/AIR-1.yaml | 3 +++ Integrations/ESPHome/Core.yaml | 9 +-------- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/Integrations/ESPHome/AIR-1.yaml b/Integrations/ESPHome/AIR-1.yaml index 529654f..60ffefa 100644 --- a/Integrations/ESPHome/AIR-1.yaml +++ b/Integrations/ESPHome/AIR-1.yaml @@ -11,6 +11,9 @@ esphome: on_boot: priority: 500 then: + - text_sensor.template.publish: + id: apollo_firmware_version + state: "${version}" - lambda: |- id(deep_sleep_1).set_sleep_duration(id(deep_sleep_sleep_duration).state * 60 * 1000); - if: diff --git a/Integrations/ESPHome/Core.yaml b/Integrations/ESPHome/Core.yaml index e88d15e..64a2eba 100644 --- a/Integrations/ESPHome/Core.yaml +++ b/Integrations/ESPHome/Core.yaml @@ -11,9 +11,6 @@ esp32: api: on_client_connected: - - text_sensor.template.publish: - id: apollo_firmware_version - state: "${version}" - delay: 90s - if: condition: @@ -441,8 +438,7 @@ text_sensor: - platform: template name: "Apollo Firmware Version" id: apollo_firmware_version - lambda: |- - return {"${version}"}; + update_interval: never entity_category: "diagnostic" switch: @@ -587,6 +583,3 @@ script: - component.update: pm2_5_to_4 - component.update: pm4_to_10 - component.update: voc_quality - - text_sensor.template.publish: - id: apollo_firmware_version - state: "${version}" From 3dca160677c863efb6bcdbb479f35a6a798f8bee Mon Sep 17 00:00:00 2001 From: Trevor Schirmer Date: Thu, 17 Jul 2025 16:13:01 -0400 Subject: [PATCH 24/24] Update Pipeline --- .github/workflows/ci.yml | 2 +- .github/workflows/weekly.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index bcad83a..49ebe1f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -16,7 +16,7 @@ jobs: uses: ApolloAutomation/Workflows/.github/workflows/label-check.yml@main ci: - name: Building ${{ matrix.file }} + name: Building ${{ matrix.file }} / ESPHome ${{ matrix.esphome-version }} / ESPHome ${{ matrix.esphome-version }} runs-on: ubuntu-latest strategy: matrix: diff --git a/.github/workflows/weekly.yml b/.github/workflows/weekly.yml index fc6ecd3..4e3d67b 100644 --- a/.github/workflows/weekly.yml +++ b/.github/workflows/weekly.yml @@ -6,7 +6,7 @@ on: jobs: build: - name: Building ${{ matrix.file }} + name: Building ${{ matrix.file }} / ESPHome ${{ matrix.esphome-version }} / ESPHome ${{ matrix.esphome-version }} runs-on: ubuntu-latest strategy: matrix: