Skip to content

Commit 159bd3b

Browse files
authored
Merge pull request #4829 from esphome/bump-2025.4.0
2025.4.0
2 parents b6bcf2a + d581d25 commit 159bd3b

23 files changed

+586
-24
lines changed

Doxygen

+1-1
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ PROJECT_NAME = "ESPHome"
3838
# could be handy for archiving the generated documentation or if some version
3939
# control system is used.
4040

41-
PROJECT_NUMBER = 2025.3.3
41+
PROJECT_NUMBER = 2025.4.0
4242

4343
# Using the PROJECT_BRIEF tag one can provide an optional one line description
4444
# for a project that appears at the top of each page and should give viewer a

Makefile

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
ESPHOME_PATH = ../esphome
2-
ESPHOME_REF = 2025.3.3
2+
ESPHOME_REF = 2025.4.0
33
PAGEFIND_VERSION=1.1.1
44
PAGEFIND=pagefind
55
NET_PAGEFIND=../pagefindbin/pagefind

_static/changelog-2025.4.0.png

105 KB
Loading

_static/version

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
2025.3.3
1+
2025.4.0

changelog/2025.4.0.rst

+184
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,184 @@
1+
ESPHome 2025.4.0 - 16th April 2025
2+
==================================
3+
4+
.. seo::
5+
:description: Changelog for ESPHome 2025.4.0.
6+
:image: /_static/changelog-2025.4.0.png
7+
:author: Jesse Hills
8+
:author_twitter: @jesserockz
9+
10+
.. imgtable::
11+
:columns: 3
12+
13+
MCP4661, components/output/mcp4461, mcp4461.jpg
14+
15+
16+
Another small release out this month. I (Jesse) will be back full-time next week and so hopefully we can
17+
get the project picking up soe steam again.
18+
19+
20+
Full list of changes
21+
--------------------
22+
23+
New Components
24+
^^^^^^^^^^^^^^
25+
26+
- Add support for MCP4461 quad i2c digipot/rheostat :esphomepr:`8180` by :ghuser:`p1ngb4ck` (new-integration)
27+
28+
Breaking Changes
29+
^^^^^^^^^^^^^^^^
30+
31+
- Rework max connections for BLE to avoid exceeding the hard limit :esphomepr:`8303` by :ghuser:`bdraco` (breaking-change)
32+
33+
Beta Changes
34+
^^^^^^^^^^^^
35+
36+
- [lvgl] Fix use of image without canvas (Bugfix) :esphomepr:`8540` by :ghuser:`clydebarrow`
37+
- Include MAC address in noise hello :esphomepr:`8551` by :ghuser:`bdraco`
38+
- [axs15231] Don't overwrite manual dimensions :esphomepr:`8553` by :ghuser:`clydebarrow`
39+
- [lvgl] Fix initial focus on roller :esphomepr:`8547` by :ghuser:`clydebarrow`
40+
- [lvgl] Add restore_value to select and number :esphomepr:`8494` by :ghuser:`clydebarrow`
41+
- Speaker-Media-Player: Fix potential deadlock in audio pipeline :esphomepr:`8548` by :ghuser:`gnumpi`
42+
- [lvgl] Ensure captured lambdas are in correct order :esphomepr:`8560` by :ghuser:`clydebarrow`
43+
- Bump aioesphomeapi from 29.9.0 to 29.10.0 :esphomepr:`8562` by :ghuser:`dependabot[bot]`
44+
- Bump zeroconf from 0.146.3 to 0.146.4 :esphomepr:`8563` by :ghuser:`dependabot[bot]`
45+
- Bump esphome-dashboard to 20250415.0 :esphomepr:`8565` by :ghuser:`swoboda1337`
46+
- Fix '--device MQTT' for devices with static IP :esphomepr:`8535` by :ghuser:`dwmw2`
47+
- [am2315c] Use warning not fail during update :esphomepr:`8499` by :ghuser:`swoboda1337`
48+
- Bump zeroconf from 0.146.4 to 0.146.5 :esphomepr:`8569` by :ghuser:`dependabot[bot]`
49+
- Fix vscode validation not showing error squiggles :esphomepr:`8500` by :ghuser:`glmnet`
50+
- SML runtime optimizations :esphomepr:`8571` by :ghuser:`mariusgreuel`
51+
52+
All changes
53+
^^^^^^^^^^^
54+
55+
- Bump setuptools from 69.2.0 to 76.0.0 :esphomepr:`8405` by :ghuser:`dependabot[bot]`
56+
- Bump puremagic from 1.27 to 1.28 :esphomepr:`8406` by :ghuser:`dependabot[bot]`
57+
- Bump esphome-glyphsets from 0.1.0 to 0.2.0 :esphomepr:`8403` by :ghuser:`dependabot[bot]`
58+
- Bump actions/cache from 4.2.2 to 4.2.3 in /.github/actions/restore-python :esphomepr:`8437` by :ghuser:`dependabot[bot]`
59+
- Bump actions/cache from 4.2.2 to 4.2.3 :esphomepr:`8433` by :ghuser:`dependabot[bot]`
60+
- Bump ruff from 0.9.2 to 0.11.0 :esphomepr:`8409` by :ghuser:`dependabot[bot]`
61+
- Bump pylint from 3.2.7 to 3.3.6 :esphomepr:`8441` by :ghuser:`dependabot[bot]`
62+
- Update wheel requirement from ~=0.43.0 to >=0.43,<0.46 :esphomepr:`8421` by :ghuser:`dependabot[bot]`
63+
- Bump tzlocal from 5.2 to 5.3.1 :esphomepr:`8423` by :ghuser:`dependabot[bot]`
64+
- [esp32] Allow pioarduino versions 5.3.2 and 5.4.0 :esphomepr:`8440` by :ghuser:`swoboda1337`
65+
- [cli] Add `--reset` and `--upload_speed` options :esphomepr:`8380` by :ghuser:`clydebarrow`
66+
- Bump aioesphomeapi from 29.6.0 to 29.7.0 :esphomepr:`8448` by :ghuser:`dependabot[bot]`
67+
- Bump pytest-asyncio from 0.23.6 to 0.25.3 :esphomepr:`8447` by :ghuser:`dependabot[bot]`
68+
- [core] Fix 5.4.0 build issue :esphomepr:`8455` by :ghuser:`swoboda1337`
69+
- [core] Fix s2 build after crc header fix :esphomepr:`8459` by :ghuser:`swoboda1337`
70+
- [esp32_can] Configurable enqueue timeout :esphomepr:`8453` by :ghuser:`patagonaa`
71+
- [scheduler] Properly handle millis() overflow :esphomepr:`8197` by :ghuser:`clydebarrow`
72+
- [esp32] Allow pioarduino version 5.4.1 :esphomepr:`8480` by :ghuser:`swoboda1337`
73+
- Bump ruff from 0.11.0 to 0.11.2 :esphomepr:`8461` by :ghuser:`dependabot[bot]`
74+
- [psram] 120MHz does not work in octal mode :esphomepr:`8477` by :ghuser:`clydebarrow`
75+
- Bump actions/setup-python from 5.4.0 to 5.5.0 :esphomepr:`8468` by :ghuser:`dependabot[bot]`
76+
- Bump actions/setup-python from 5.4.0 to 5.5.0 in /.github/actions/restore-python :esphomepr:`8467` by :ghuser:`dependabot[bot]`
77+
- Bump pytest-cov from 5.0.0 to 6.0.0 :esphomepr:`8462` by :ghuser:`dependabot[bot]`
78+
- Bump pytest-asyncio from 0.25.3 to 0.26.0 :esphomepr:`8490` by :ghuser:`dependabot[bot]`
79+
- Bump async-timeout from 4.0.3 to 5.0.1 :esphomepr:`8491` by :ghuser:`dependabot[bot]`
80+
- Bump platformio from 6.1.16 to 6.1.18 :esphomepr:`8449` by :ghuser:`dependabot[bot]`
81+
- Move CONF_DEFAULT to const.py :esphomepr:`8497` by :ghuser:`nielsnl68`
82+
- [lvgl] Add some defines :esphomepr:`8501` by :ghuser:`clydebarrow`
83+
- Add support for MCP4461 quad i2c digipot/rheostat :esphomepr:`8180` by :ghuser:`p1ngb4ck` (new-integration)
84+
- Bump peter-evans/create-pull-request from 7.0.7 to 7.0.8 :esphomepr:`8362` by :ghuser:`dependabot[bot]`
85+
- Bump docker/login-action from 3.3.0 to 3.4.0 in the docker-actions group :esphomepr:`8408` by :ghuser:`dependabot[bot]`
86+
- Bump actions/download-artifact from 4.1.9 to 4.2.1 :esphomepr:`8434` by :ghuser:`dependabot[bot]`
87+
- Bump actions/upload-artifact from 4.6.1 to 4.6.2 :esphomepr:`8435` by :ghuser:`dependabot[bot]`
88+
- Bump ruamel-yaml from 0.18.6 to 0.18.10 :esphomepr:`8446` by :ghuser:`dependabot[bot]`
89+
- Bump yamllint from 1.35.1 to 1.37.0 :esphomepr:`8495` by :ghuser:`dependabot[bot]`
90+
- Bump pyupgrade from 3.15.2 to 3.19.1 :esphomepr:`8496` by :ghuser:`dependabot[bot]`
91+
- Bump voluptuous from 0.14.2 to 0.15.2 :esphomepr:`8506` by :ghuser:`dependabot[bot]`
92+
- Bump zeroconf from 0.146.1 to 0.146.3 :esphomepr:`8507` by :ghuser:`dependabot[bot]`
93+
- Bump platformio to 6.1.18 :esphomepr:`8430` by :ghuser:`shvmm`
94+
- Update emails from nabucasa to OHF :esphomepr:`8508` by :ghuser:`jesserockz`
95+
- [nau7802] fix bad blocking code (#6395) :esphomepr:`8070` by :ghuser:`cujomalainey`
96+
- [core, qspi_dbi] Clang tidy fixes for 5.3.2 :esphomepr:`8509` by :ghuser:`swoboda1337`
97+
- [CI] Clang tidy fixes for 5.3.2 :esphomepr:`8510` by :ghuser:`swoboda1337`
98+
- [ethernet_info] return actual ethernet MAC address :esphomepr:`8492` by :ghuser:`victorclaessen`
99+
- Bump setuptools from 76.0.0 to 78.1.0 :esphomepr:`8512` by :ghuser:`dependabot[bot]`
100+
- Bump flake8 from 7.0.0 to 7.2.0 :esphomepr:`8493` by :ghuser:`dependabot[bot]`
101+
- Rework max connections for BLE to avoid exceeding the hard limit :esphomepr:`8303` by :ghuser:`bdraco` (breaking-change)
102+
- [component] Show error message for failed component :esphomepr:`8478` by :ghuser:`clydebarrow`
103+
- [psram] Allow use of experimental 120MHz octal mode :esphomepr:`8519` by :ghuser:`clydebarrow`
104+
- Ensure plaintext responds with bad indicator byte before dropping the connection :esphomepr:`8521` by :ghuser:`bdraco`
105+
- Bump aioesphomeapi to 29.9.0 :esphomepr:`8522` by :ghuser:`bdraco`
106+
- [lvgl] add on_boot trigger :esphomepr:`8498` by :ghuser:`clydebarrow`
107+
- [lvgl] Make line points templatable :esphomepr:`8502` by :ghuser:`clydebarrow`
108+
- [spi] Implement octal mode :esphomepr:`8386` by :ghuser:`clydebarrow`
109+
- Bump pytest from 8.2.0 to 8.3.5 :esphomepr:`8528` by :ghuser:`dependabot[bot]`
110+
- real_time_clock: Apply timezone immediately in set_timezone() :esphomepr:`8531` by :ghuser:`dwmw2`
111+
- [lvgl] Implement canvas widget :esphomepr:`8504` by :ghuser:`clydebarrow`
112+
- [lvgl] Fix use of image without canvas (Bugfix) :esphomepr:`8540` by :ghuser:`clydebarrow`
113+
- Include MAC address in noise hello :esphomepr:`8551` by :ghuser:`bdraco`
114+
- [axs15231] Don't overwrite manual dimensions :esphomepr:`8553` by :ghuser:`clydebarrow`
115+
- [lvgl] Fix initial focus on roller :esphomepr:`8547` by :ghuser:`clydebarrow`
116+
- [lvgl] Add restore_value to select and number :esphomepr:`8494` by :ghuser:`clydebarrow`
117+
- Speaker-Media-Player: Fix potential deadlock in audio pipeline :esphomepr:`8548` by :ghuser:`gnumpi`
118+
- [lvgl] Ensure captured lambdas are in correct order :esphomepr:`8560` by :ghuser:`clydebarrow`
119+
- Bump aioesphomeapi from 29.9.0 to 29.10.0 :esphomepr:`8562` by :ghuser:`dependabot[bot]`
120+
- Bump zeroconf from 0.146.3 to 0.146.4 :esphomepr:`8563` by :ghuser:`dependabot[bot]`
121+
- Bump esphome-dashboard to 20250415.0 :esphomepr:`8565` by :ghuser:`swoboda1337`
122+
- Fix '--device MQTT' for devices with static IP :esphomepr:`8535` by :ghuser:`dwmw2`
123+
- [am2315c] Use warning not fail during update :esphomepr:`8499` by :ghuser:`swoboda1337`
124+
- Bump zeroconf from 0.146.4 to 0.146.5 :esphomepr:`8569` by :ghuser:`dependabot[bot]`
125+
- Fix vscode validation not showing error squiggles :esphomepr:`8500` by :ghuser:`glmnet`
126+
- SML runtime optimizations :esphomepr:`8571` by :ghuser:`mariusgreuel`
127+
128+
Past Changelogs
129+
---------------
130+
131+
- :doc:`2025.3.0`
132+
- :doc:`2025.2.0`
133+
- :doc:`2024.12.0`
134+
- :doc:`2024.11.0`
135+
- :doc:`2024.10.0`
136+
- :doc:`2024.9.0`
137+
- :doc:`2024.8.0`
138+
- :doc:`2024.7.0`
139+
- :doc:`2024.6.0`
140+
- :doc:`2024.5.0`
141+
- :doc:`2024.4.0`
142+
- :doc:`2024.3.0`
143+
- :doc:`2024.2.0`
144+
- :doc:`2023.12.0`
145+
- :doc:`2023.11.0`
146+
- :doc:`2023.10.0`
147+
- :doc:`2023.9.0`
148+
- :doc:`2023.8.0`
149+
- :doc:`2023.7.0`
150+
- :doc:`2023.6.0`
151+
- :doc:`2023.5.0`
152+
- :doc:`2023.4.0`
153+
- :doc:`2023.3.0`
154+
- :doc:`2023.2.0`
155+
- :doc:`2022.12.0`
156+
- :doc:`2022.11.0`
157+
- :doc:`2022.10.0`
158+
- :doc:`2022.9.0`
159+
- :doc:`2022.8.0`
160+
- :doc:`2022.6.0`
161+
- :doc:`2022.5.0`
162+
- :doc:`2022.4.0`
163+
- :doc:`2022.3.0`
164+
- :doc:`2022.2.0`
165+
- :doc:`2022.1.0`
166+
- :doc:`2021.12.0`
167+
- :doc:`2021.11.0`
168+
- :doc:`2021.10.0`
169+
- :doc:`2021.9.0`
170+
- :doc:`2021.8.0`
171+
- :doc:`v1.20.0`
172+
- :doc:`v1.19.0`
173+
- :doc:`v1.18.0`
174+
- :doc:`v1.17.0`
175+
- :doc:`v1.16.0`
176+
- :doc:`v1.15.0`
177+
- :doc:`v1.14.0`
178+
- :doc:`v1.13.0`
179+
- :doc:`v1.12.0`
180+
- :doc:`v1.11.0`
181+
- :doc:`v1.10.0`
182+
- :doc:`v1.9.0`
183+
- :doc:`v1.8.0`
184+
- :doc:`v1.7.0`

changelog/index.rst

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ Changelog
22
=========
33

44
.. redirect::
5-
:url: /changelog/2025.3.0.html
5+
:url: /changelog/2025.4.0.html
66

77
.. toctree::
88
:glob:

components/bluetooth_proxy.rst

+7
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,12 @@ Configuration:
4545
4646
- **active** (*Optional*, boolean): Enables proxying active connections. Defaults to ``false``.
4747
- **cache_services** (*Optional*, boolean): Enables caching GATT services in NVS flash storage which significantly speeds up active connections. Defaults to ``true`` when using the ESP-IDF framework.
48+
- **connection_slots** (*Optional*, int): The maximum number of BLE connection slots to use.
49+
Each configured slot consumes ~1KB of RAM. This can only be adjusted when using
50+
the ``esp-idf`` framework up to a maximum of ``9``. It is recommended not to exceed ``5``
51+
connection slots to avoid memory issues. Defaults to ``3``.
52+
The value must not exceed the total configured ``max_connections``
53+
for :doc:`esp32_ble_tracker`.
4854

4955
The Bluetooth proxy depends on :doc:`esp32_ble_tracker` so make sure to add that to your configuration.
5056

@@ -113,6 +119,7 @@ This configuration is for an Olimex ESP32-PoE-ISO board with an Ethernet connect
113119
114120
bluetooth_proxy:
115121
active: true
122+
connection_slots: 3
116123
117124
118125
See Also

components/canbus/esp32_can.rst

+2
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ Configuration variables:
2828
- **tx_pin** (**Required**, :ref:`Pin <config-pin>`): Transmit pin.
2929
- **rx_queue_len** (**Optional**, int): Length of RX queue.
3030
- **tx_queue_len** (**Optional**, int): Length of TX queue, 0 to disable.
31+
- **tx_enqueue_timeout** (**Optional**, :ref:`config-time`): Maximum time to wait when the TX queue is full before
32+
dropping the message (by default, this is set to the time it takes to send 10 CAN messages at the given bit rate).
3133
- All other options from :ref:`Canbus <config-canbus>`.
3234

3335
.. _esp32-can-bit-rate:

components/esp32.rst

+3
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,9 @@ Advanced Configuration
112112
- **ignore_efuse_mac_crc** (*Optional*, boolean): Can be set to ``true`` for devices on which the burned-in MAC
113113
address is not consistent with the burned-in CRC for that MAC address, resulting in an error like
114114
``Base MAC address from BLK0 of EFUSE CRC error``. **Valid only on original ESP32 with** ``esp-idf`` **framework.**
115+
- **enable_idf_experimental_features** (*Optional*, boolean): Can be set to ``true`` to enable
116+
experimental features in the ESP-IDF framework. Not valid for the Arduino framework. Use of experimental features
117+
may cause instability or other issues.
115118

116119
GPIO Pin Numbering
117120
------------------

components/esp32_ble_tracker.rst

+8
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ the MAC address of a device and track it using ESPHome.
2323
2424
# Example configuration entry
2525
esp32_ble_tracker:
26+
max_connections: 3
2627
2728
binary_sensor:
2829
- platform: ble_presence
@@ -86,6 +87,13 @@ Configuration variables:
8687
asked to start a scan (with start_scan action). Defaults to ``true``.
8788

8889
- **id** (*Optional*, :ref:`config-id`): Manually specify the ID for this ESP32 BLE Hub.
90+
- **max_connections** (*Optional*, int): The maximum number of BLE connection slots to use.
91+
Each configured slot consumes ~1KB of RAM. It is recommended not to exceed ``5``
92+
connection slots to avoid memory issues. Defaults to ``3``.
93+
This can only be adjusted when using the ``esp-idf`` framework up to a maximum of ``9``.
94+
This value cannot exceed the total number of ``connection_slots`` for the
95+
:doc:`bluetooth_proxy` component combined with the total
96+
configured :doc:`ble_client` instances.
8997

9098
Automations:
9199

components/esphome.rst

+1
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ Advanced options:
6666
See :ref:`esphome-min_version`.
6767
- **compile_process_limit** (*Optional*, int): The maximum number of simultaneous compile processes to run.
6868
Defaults to the number of cores of the CPU which is also the maximum you can set.
69+
- **debug_scheduler** (*Optional*, boolean): If set, the scheduler will print debug information about scheduled tasks at log level DEBUG.
6970

7071
Automations:
7172

components/index.rst

+1
Original file line numberDiff line numberDiff line change
@@ -910,6 +910,7 @@ Output Components
910910
GP8403, components/output/gp8403, gp8403.svg
911911
GPIO Output, components/output/gpio, gpio.svg
912912
LibreTiny PWM, components/output/libretiny_pwm, pwm.png
913+
MCP4661, components/output/mcp4461, mcp4461.jpg
913914
MCP4725, components/output/mcp4725, mcp4725.jpg
914915
MCP4728, components/output/mcp4728, mcp4728.jpg
915916
MCP47A1, components/output/mcp47a1, mcp47a1.svg

components/logger.rst

+8-4
Original file line numberDiff line numberDiff line change
@@ -47,10 +47,14 @@ Advanced settings:
4747
- **on_message** (*Optional*, :ref:`Automation <automation>`): An action to be
4848
performed when a message is to be logged. The variables ``int level``, ``const char* tag`` and
4949
``const char* message`` are available for lambda processing.
50-
- **deassert_rts_dtr** (*Optional*, boolean): Deasserts RTS/DTR when opening
51-
log over UART. This is useful if RTS/DTR signals are directly connected to
52-
the reset pin or strapping pins. Note: Deassert typically means high on TTL
53-
level since RTS/DTR are usually low active signals. Defaults to ``false``.
50+
- **deassert_rts_dtr** (*Optional*, boolean): Causes ESPHome to sequentially drive DTR and RTS false after opening
51+
a serial logging connection. Defaults to ``false``.
52+
Many ESP boards use these signals to reset the chip or enter
53+
bootloader mode, and the effect of setting this option will be
54+
to reset the chip in application mode after opening the serial port, thus ensuring that all log messages
55+
from the boot process are captured.
56+
Note: Deassert typically means a TTL high level
57+
level since RTS/DTR are usually low active signals.
5458

5559
.. _logger-hardware_uarts:
5660

components/lvgl/images/canvas.png

20.4 KB
Loading

components/lvgl/index.rst

+32
Original file line numberDiff line numberDiff line change
@@ -452,6 +452,32 @@ Feel free to experiment to discover inheritance and precedence of the styles bas
452452

453453
:ref:`lvgl-cookbook-theme` The Cookbook contains an example which demonstrates how to implement a gradient style for your widgets.
454454

455+
``lvgl.style.update``
456+
*********************
457+
458+
This :ref:`action <actions-action>` allows changing/updating the properties of a style at run time. This can be used to
459+
implement dynamic themes, e.g. light/dark mode, or to change the appearance of widgets based on user interaction.
460+
461+
The action takes a style ID and a dictionary of properties to update. The properties can be any of the style properties listed above, and the values are templatable.components
462+
463+
.. code-block:: yaml
464+
465+
# Example configuration entry
466+
lvgl:
467+
style_definitions:
468+
- id: my_style
469+
bg_color: 0xFFFFFF
470+
border_color: 0x000000
471+
border_width: 2
472+
473+
# Action to update the style
474+
on_...:
475+
- lvgl.style.update:
476+
id: my_style
477+
properties:
478+
bg_color: 0xFF0000
479+
border_color: 0x00FF00
480+
455481
.. _lvgl-layouts:
456482

457483
Layouts
@@ -921,6 +947,12 @@ This :ref:`trigger <lvgl-automation-triggers>` is triggered when LVGL is paused.
921947
This :ref:`trigger <lvgl-automation-triggers>` is triggered when LVGL is resumed. This can be used to perform any desired actions when the screen is unlocked, such as turning on the display backlight.
922948

923949

950+
``on_boot``
951+
*************
952+
953+
This :ref:`trigger <lvgl-automation-triggers>` is triggered after LVGL has been setup. It is also available on any widget, but the timing is the same.
954+
955+
924956
See Also
925957
--------
926958

0 commit comments

Comments
 (0)