Skip to content

Commit e8123c3

Browse files
bdracoCopilot
andauthored
[changelog] 2025.12.0: Add missing memory optimizations, fix descriptions (#5764)
* [changelog] 2025.12.0: Add missing memory optimizations, fix descriptions * [changelog] 2025.12.0: Add missing memory optimizations, fix descriptions * [changelog] 2025.12.0: Add missing memory optimizations, fix descriptions * [changelog] 2025.12.0: Add missing memory optimizations, fix descriptions * Update content/changelog/2025.12.0.md Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update content/changelog/2025.12.0.md Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update content/changelog/2025.12.0.md Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
1 parent 3292dad commit e8123c3

File tree

1 file changed

+33
-43
lines changed

1 file changed

+33
-43
lines changed

content/changelog/2025.12.0.md

Lines changed: 33 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,13 @@ params:
2121
## Release Overview
2222

2323
<!-- RELEASE_OVERVIEW_START -->
24-
ESPHome 2025.12.0 introduces API action responses for bidirectional communication with Home Assistant, conditional package inclusion for dynamic configurations, and HUB75 LED matrix display support. This release delivers significant memory optimizations saving up to 10KB of IRAM on ESP32 devices, eliminates socket latency on ESP8266, and adds 8 new components including the CC1101 sub-GHz transceiver and USB CDC-ACM support. LVGL receives multiple usability improvements, and the WiFi component has been refactored for instant callback-based updates across all platforms.
24+
ESPHome 2025.12.0 introduces API action responses for bidirectional communication with Home Assistant, conditional package inclusion for dynamic configurations, and HUB75 LED matrix display support. This release delivers significant memory optimizations saving up to 10KB of IRAM on ESP32 devices, eliminates per-packet heap allocations in API connections and socket latency on ESP8266, and adds 8 new components including the CC1101 sub-GHz transceiver and USB CDC-ACM support. LVGL receives multiple usability improvements, and the WiFi component has been refactored for instant callback-based updates across all platforms.
2525
<!-- RELEASE_OVERVIEW_END -->
2626

2727
<!-- FEATURE_HIGHLIGHTS_START -->
2828
## API Action Responses
2929

30-
ESPHome actions can now send structured responses back to clients like Home Assistant, enabling true bidirectional communication where actions return success/error status and JSON data payloads ([#12136](https://github.com/esphome/esphome/pull/12136)).
30+
The [Native API](/components/api) now supports actions that send structured responses back to clients like Home Assistant, enabling true bidirectional communication where actions return success/error status and JSON data payloads ([#12136](https://github.com/esphome/esphome/pull/12136)).
3131

3232
**Key Features:**
3333

@@ -54,7 +54,7 @@ api:
5454
5555
## Conditional Package Inclusion
5656
57-
The configuration system now supports conditional package inclusion, a long-awaited feature that enables dynamic configuration based on substitution variables ([#11605](https://github.com/esphome/esphome/pull/11605)).
57+
The [packages](/components/packages) system now supports conditional inclusion, a long-awaited feature that enables dynamic configuration based on substitution variables ([#11605](https://github.com/esphome/esphome/pull/11605)).
5858
5959
**Key Features:**
6060
@@ -84,18 +84,6 @@ The new [hub75](/components/display/hub75) component brings native support for H
8484
- **LVGL compatible** - Works seamlessly with LVGL for rich graphical interfaces
8585
- **Board presets** - Pre-configured settings for popular boards like Apollo Automation M1
8686

87-
```yaml
88-
display:
89-
- platform: hub75
90-
id: matrix
91-
panel_width: 64
92-
panel_height: 64
93-
clock_speed: 20MHz
94-
r1_pin: 1
95-
g1_pin: 5
96-
# ... additional pins
97-
```
98-
9987
## CC1101 Sub-1GHz Transceiver
10088

10189
The new [cc1101](/components/cc1101) component adds support for the Texas Instruments CC1101 Sub-1GHz transceiver, enabling 433MHz remote control integration and other sub-GHz wireless applications ([#11849](https://github.com/esphome/esphome/pull/11849)).
@@ -107,16 +95,6 @@ The new [cc1101](/components/cc1101) component adds support for the Texas Instru
10795
- **Core integration** - Designed to work with `remote_receiver` and `remote_transmitter` components
10896
- **Robust initialization** - Non-blocking state machine with proper chip reset handling
10997

110-
```yaml
111-
cc1101:
112-
id: cc1101_transceiver
113-
cs_pin: GPIO5
114-
frequency: 433.92MHz
115-
modulation: ASK/OOK
116-
bandwidth: 203kHz
117-
symbol_rate: 5000
118-
```
119-
12098
## USB CDC-ACM Support
12199

122100
The new [usb_cdc_acm](/components/usb_cdc_acm) component enables USB virtual serial port functionality on ESP32-S2 and ESP32-S3 devices ([#11687](https://github.com/esphome/esphome/pull/11687)).
@@ -146,21 +124,13 @@ The UART component now supports a `wake_loop_on_rx` flag that wakes the main loo
146124

147125
**Key Benefits:**
148126

149-
- **Z-Wave Proxy performance** - Reduces latency by ~10ms, bringing wired Ethernet performance within milliseconds of direct USB/serial connection ([#12135](https://github.com/esphome/esphome/pull/12135))
150-
- **Real-time serial applications** - Any component requiring fast response to incoming serial data can now achieve sub-millisecond wake times
127+
- **Z-Wave Proxy performance** - Reduces latency by ~10ms for WiFi-connected [ZWA-2 devices](https://www.home-assistant.io/blog/2025/10/13/portable-z-wave-with-wifi-and-poe/), building on the USB-connected Ethernet/PoE optimizations from 2025.11.0 ([#12135](https://github.com/esphome/esphome/pull/12135))
128+
- **Real-time serial applications** - Any component requiring fast response to incoming serial data can now achieve sub-millisecond wake times by enabling this flag in their code
151129
- **Automatic infrastructure** - The socket wake infrastructure is automatically enabled when any UART requests RX wake
152130

153131
## ESP8266 Socket Latency Elimination
154132

155-
ESP8266 devices now respond to network requests with the same speed as ESP32 devices ([#12397](https://github.com/esphome/esphome/pull/12397)).
156-
157-
**The Problem:**
158-
159-
ESP8266 used polling for socket data, sleeping up to 16ms before discovering incoming data. This affected every API request and Home Assistant command.
160-
161-
**The Solution:**
162-
163-
The loop now wakes within microseconds of data arriving using ESP8266's `esp_schedule()` mechanism, matching ESP32 and LibreTiny behavior. This is automatic for all ESP8266 devices with no configuration needed.
133+
ESP8266 previously had higher network latency than ESP32 and LibreTiny because it used polling for socket data, sleeping up to 16ms before discovering incoming data. This affected every API request and Home Assistant command. The loop now wakes within microseconds of data arriving using ESP8266's `esp_schedule()` mechanism, bringing ESP8266 to near parity with ESP32 and LibreTiny. This is automatic for all ESP8266 devices with no configuration needed ([#12397](https://github.com/esphome/esphome/pull/12397)).
164134

165135
## Memory and IRAM Optimizations
166136

@@ -184,7 +154,27 @@ These changes prepare ESPHome for ESP-IDF 6.0 where flash placement becomes the
184154

185155
**Dashboard Import Optimization:**
186156

187-
- **~20 bytes per device** - Package import URL now stored as pointer to flash instead of heap-allocated string ([#11951](https://github.com/esphome/esphome/pull/11951))
157+
- **Eliminates URL heap allocation**:
158+
- Package import URL is now stored as a pointer to `.rodata` instead of a heap-allocated `std::string`.
159+
- On ESP32, `.rodata` resides in flash, providing RAM savings.
160+
- On ESP8266, `.rodata` is in RAM, but this still avoids heap overhead.
161+
- ([#11951](https://github.com/esphome/esphome/pull/11951))
162+
163+
**API Connection Optimizations:**
164+
165+
The API connection layer received significant optimizations to reduce heap fragmentation and memory churn:
166+
167+
- **Eliminated per-packet heap allocation** - Previously every API packet received required a new heap allocation. The receive buffer is now reused across packets, with excess capacity released after initial sync completes. This reduces heap fragmentation on busy devices. For quiet devices, the initial sync memory spike is released rather than held for the lifetime of the connection. (Connections can last for months.) ([#12133](https://github.com/esphome/esphome/pull/12133))
168+
- **Zero-copy API commands** - Select and light effect commands now process strings directly from protobuf buffer without heap allocation ([#12329](https://github.com/esphome/esphome/pull/12329), [#12384](https://github.com/esphome/esphome/pull/12384))
169+
- **Flash storage for device info** - Device info strings stored in flash on ESP8266 ([#12173](https://github.com/esphome/esphome/pull/12173))
170+
- **Flash storage for state subscriptions** - Home Assistant state subscriptions stored in flash instead of heap ([#12008](https://github.com/esphome/esphome/pull/12008))
171+
- **Reduced service call storage** - Home Assistant service call strings use less heap ([#12151](https://github.com/esphome/esphome/pull/12151))
172+
- **APINoiseContext optimization** - Removed shared_ptr overhead ([#11981](https://github.com/esphome/esphome/pull/11981))
173+
- **Loop-based reboot timeout** - Avoids scheduler heap churn ([#12291](https://github.com/esphome/esphome/pull/12291))
174+
175+
**Sensor Timeout Filter Optimization:**
176+
177+
- **Eliminates scheduler heap churn** - Timeout filters now use a loop-based implementation instead of scheduler timeouts. This is particularly important for LD2410/LD2420/LD2450 users with many timeout filters, where the old implementation caused ~70 heap operations/second and constant scheduler pool exhaustion when someone was in range of the sensor ([#11922](https://github.com/esphome/esphome/pull/11922))
188178

189179
## New Hardware Support
190180

@@ -226,7 +216,7 @@ Multiple enhancements improve the LVGL experience:
226216
- **Enhanced arc widget** - More arc parameters available in update actions ([#12066](https://github.com/esphome/esphome/pull/12066))
227217
- **Scroll properties** - Added missing scroll-related configuration options ([#11901](https://github.com/esphome/esphome/pull/11901))
228218

229-
## Climate and Component Enhancements
219+
## Component Enhancements
230220

231221
**Gree Climate:**
232222

@@ -270,11 +260,11 @@ Multiple enhancements improve the LVGL experience:
270260
<!-- BREAKING_CHANGES_USERS_START -->
271261
### Component Changes
272262

273-
- **Micronova**: The `update_interval` configuration has moved from the hub to individual entities, allowing different update intervals per sensor. Remove `update_interval` from the `micronova:` hub section and add it to each sensor/text_sensor entity instead. [#12226](https://github.com/esphome/esphome/pull/12226)
274-
275-
- **Micronova**: The `memory_location` configuration is now restricted to read memory locations (0x00-0x79). If you have values above 0x79, subtract 0x80 (e.g., 0x80 becomes 0x00, 0xA0 becomes 0x20). The `memory_write_location` option on number entities has been removed as it's now calculated automatically. [#12318](https://github.com/esphome/esphome/pull/12318)
276-
277-
- **Micronova**: Custom button and sensor entities now require explicit `memory_location` and `address` configuration - the misleading default values have been removed. [#12371](https://github.com/esphome/esphome/pull/12371)
263+
- **Micronova**: Multiple configuration changes ([#12226](https://github.com/esphome/esphome/pull/12226), [#12318](https://github.com/esphome/esphome/pull/12318), [#12371](https://github.com/esphome/esphome/pull/12371)):
264+
- `update_interval` moved from hub to individual entities - remove from `micronova:` section and add to each sensor/text_sensor
265+
- `memory_location` now restricted to read locations (0x00-0x79) - subtract 0x80 from values above 0x79
266+
- `memory_write_location` removed from number entities (now calculated automatically)
267+
- Custom button/sensor entities now require explicit `memory_location` and `address` configuration
278268

279269
- **Prometheus**: Light color metrics (`light_color_*`) are now only generated if the light component supports those color modes. This reduces memory usage on ESP8266 but may affect monitoring setups that expected all metrics regardless of light capabilities. [#9530](https://github.com/esphome/esphome/pull/9530)
280270

0 commit comments

Comments
 (0)