Skip to content

Commit a72d90f

Browse files
authored
Merge branch 'next' into jesserockz-2025-428
2 parents 2dbe7f7 + 5179a2b commit a72d90f

File tree

9 files changed

+186
-52
lines changed

9 files changed

+186
-52
lines changed

content/changelog/2025.9.0.md

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,25 @@ developer tools while maintaining backward compatibility for most use cases.
2727
- **Improved sensor support** with enhanced BL0940 power monitoring capabilities
2828
- **Component improvements** including restructured Inkplate e-paper display support
2929

30+
<!-- markdownlint-disable-next-line MD026 -->
31+
## 🎉 Welcome Jonathan to the Open Home Foundation Team!
32+
33+
We're excited to announce that Jonathan ([@swoboda1337](https://github.com/swoboda1337)) has joined the
34+
Open Home Foundation as a **full-time developer on ESPHome**!
35+
36+
Jonathan has been a long-standing and valued contributor, and now he'll be able to focus fully on building
37+
ESPHome — helping people create smart homes that are **private, sustainable, and built on open standards**.
38+
39+
This milestone is made possible by the support of our community and the Open Home Foundation's mission to advance
40+
**open-source smart home technologies** while upholding the principles of **privacy, choice, and sustainability**.
41+
42+
If you'd like to support continued development of ESPHome and other open home projects, consider:
43+
44+
- **Supporting the Open Home Foundation**[openhomefoundation.org](https://www.openhomefoundation.org/)
45+
- **Subscribing to Home Assistant Cloud**[nabucasa.com](https://www.nabucasa.com/) to help fund open-source development
46+
47+
🚀 Welcome to the team, Jonathan — we can't wait to see what you'll help build!
48+
3049
## MIPI RGB Display Support
3150

3251
ESPHome 2025.9.0 introduces comprehensive support for MIPI RGB displays through the new
@@ -294,6 +313,35 @@ and advanced setups may require updates.
294313
- [thermostat] General clean-up, optimization, properly support "auto" mode [esphome#10561](https://github.com/esphome/esphome/pull/10561) by [@kbx81](https://github.com/kbx81)
295314
- [bl0940] extend configuration options of bl0940 device [esphome#8158](https://github.com/esphome/esphome/pull/8158) by [@dan-s-github](https://github.com/dan-s-github) (new-feature) (new-platform)
296315
- [inkplate] Rename component and fix grayscale [esphome#10200](https://github.com/esphome/esphome/pull/10200) by [@JosipKuci](https://github.com/JosipKuci) (breaking-change)
316+
- [thermostat] Rename timer enums to mitigate naming conflict [esphome#10666](https://github.com/esphome/esphome/pull/10666) by [@kbx81](https://github.com/kbx81)
317+
- Improve coverage for various core modules [esphome#10663](https://github.com/esphome/esphome/pull/10663) by [@bdraco](https://github.com/bdraco)
318+
- Update webserver local assets to 20250910-110003 [esphome#10668](https://github.com/esphome/esphome/pull/10668) by [@esphomebot](https://github.com/esphomebot)
319+
- [adc] Fix `FILTER_SOURCE_FILES` location [esphome#10673](https://github.com/esphome/esphome/pull/10673) by [@jesserockz](https://github.com/jesserockz)
320+
- Openthread Fix Factory Reset [esphome#9281](https://github.com/esphome/esphome/pull/9281) by [@rwrozelle](https://github.com/rwrozelle)
321+
- [core] Add millisecond precision to logging timestamps [esphome#10677](https://github.com/esphome/esphome/pull/10677) by [@bdraco](https://github.com/bdraco)
322+
- Add comprehensive tests for choose_upload_log_host to prevent regressions [esphome#10679](https://github.com/esphome/esphome/pull/10679) by [@bdraco](https://github.com/bdraco)
323+
- Add some more coverage for dashboard web_server [esphome#10682](https://github.com/esphome/esphome/pull/10682) by [@bdraco](https://github.com/bdraco)
324+
- [tests] Add upload_program and show_logs test coverage to prevent regressions [esphome#10684](https://github.com/esphome/esphome/pull/10684) by [@bdraco](https://github.com/bdraco)
325+
- Add additional coverage for util and writer [esphome#10683](https://github.com/esphome/esphome/pull/10683) by [@bdraco](https://github.com/bdraco)
326+
- Add additional dashboard and main tests [esphome#10688](https://github.com/esphome/esphome/pull/10688) by [@bdraco](https://github.com/bdraco)
327+
- [core] fix upload to device via MQTT IP lookup (e.g. when mDNS is disable) [esphome#10632](https://github.com/esphome/esphome/pull/10632) by [@Links2004](https://github.com/Links2004)
328+
- Add additional test coverage ahead of Path conversion [esphome#10700](https://github.com/esphome/esphome/pull/10700) by [@bdraco](https://github.com/bdraco)
329+
- [ethernet] Fix permanent component failure from undocumented ESP_FAIL in IPv6 setup [esphome#10708](https://github.com/esphome/esphome/pull/10708) by [@bdraco](https://github.com/bdraco)
330+
- [core] Optimize MAC address formatting to eliminate sprintf dependency [esphome#10713](https://github.com/esphome/esphome/pull/10713) by [@bdraco](https://github.com/bdraco)
331+
- [api] Revert unneeded GetTime bidirectional support added in #9790 [esphome#10702](https://github.com/esphome/esphome/pull/10702) by [@bdraco](https://github.com/bdraco)
332+
- [api] Optimize HelloResponse server_info to reduce memory usage [esphome#10701](https://github.com/esphome/esphome/pull/10701) by [@bdraco](https://github.com/bdraco)
333+
- [scheduler] Fix timing accumulation in scheduler causing incorrect execution measurements [esphome#10719](https://github.com/esphome/esphome/pull/10719) by [@bdraco](https://github.com/bdraco)
334+
- ina2xx should be total increasing for energy sensor [esphome#10711](https://github.com/esphome/esphome/pull/10711) by [@mikelawrence](https://github.com/mikelawrence)
335+
- [md5] Optimize MD5::get_hex() to eliminate sprintf dependency [esphome#10710](https://github.com/esphome/esphome/pull/10710) by [@bdraco](https://github.com/bdraco)
336+
- [wifi] Optimize WiFi MAC formatting to eliminate sprintf dependency [esphome#10715](https://github.com/esphome/esphome/pull/10715) by [@bdraco](https://github.com/bdraco)
337+
- [esp32_ble] Optimize BLE hex formatting to eliminate sprintf dependency [esphome#10714](https://github.com/esphome/esphome/pull/10714) by [@bdraco](https://github.com/bdraco)
338+
- [select] Use const references to avoid unnecessary vector copies [esphome#10741](https://github.com/esphome/esphome/pull/10741) by [@bdraco](https://github.com/bdraco)
339+
- [dashboard] Fix archive handler to properly delete build folders using correct path [esphome#10724](https://github.com/esphome/esphome/pull/10724) by [@bdraco](https://github.com/bdraco)
340+
- [ethernet] Conditionally compile PHY-specific code to reduce flash usage [esphome#10747](https://github.com/esphome/esphome/pull/10747) by [@bdraco](https://github.com/bdraco)
341+
- [mqtt] fix publish payload length when payload contains null characters [esphome#10744](https://github.com/esphome/esphome/pull/10744) by [@jokujossai](https://github.com/jokujossai)
342+
- [ade7880] fix channel a voltage registry [esphome#10750](https://github.com/esphome/esphome/pull/10750) by [@jokujossai](https://github.com/jokujossai)
343+
- [wizard] Fix KeyError when running wizard with empty OTA password [esphome#10753](https://github.com/esphome/esphome/pull/10753) by [@bdraco](https://github.com/bdraco)
344+
- [core] Fix clean build files to properly clear PlatformIO cache [esphome#10754](https://github.com/esphome/esphome/pull/10754) by [@bdraco](https://github.com/bdraco)
297345

298346
</details>
299347

@@ -324,6 +372,8 @@ and advanced setups may require updates.
324372
- Bump aioesphomeapi from 40.0.1 to 40.0.2 [esphome#10641](https://github.com/esphome/esphome/pull/10641) by [@dependabot[bot]](https://github.com/apps/dependabot)
325373
- Bump pytest-cov from 6.3.0 to 7.0.0 [esphome#10660](https://github.com/esphome/esphome/pull/10660) by [@dependabot[bot]](https://github.com/apps/dependabot)
326374
- Bump aioesphomeapi from 40.0.2 to 40.1.0 [esphome#10662](https://github.com/esphome/esphome/pull/10662) by [@dependabot[bot]](https://github.com/apps/dependabot)
375+
- Bump aioesphomeapi from 40.1.0 to 40.2.0 [esphome#10703](https://github.com/esphome/esphome/pull/10703) by [@dependabot[bot]](https://github.com/apps/dependabot)
376+
- Bump aioesphomeapi from 40.2.0 to 40.2.1 [esphome#10721](https://github.com/esphome/esphome/pull/10721) by [@dependabot[bot]](https://github.com/apps/dependabot)
327377

328378
</details>
329379

content/components/_index.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1049,6 +1049,7 @@ ESPHome to cellular networks. **Does not encompass Wi-Fi.**
10491049
"Status LED","components/status_led","led-on.svg","dark-invert"
10501050
"Sun","components/sun","weather-sunny.svg","dark-invert"
10511051
"Tuya MCU","components/tuya","tuya.png",""
1052+
"Z-Wave Proxy","components/zwave_proxy","z-wave.svg",""
10521053
{{< /imgtable >}}
10531054

10541055
## Cookbook

content/components/esp32.md

Lines changed: 21 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -43,14 +43,18 @@ suitable for that variant. Both may be specified (for backwards compatibility) b
4343
- **partitions** (*Optional*, filename): The name of (optionally including the path to) the file containing the
4444
partitioning scheme to be used. When not specified, partitions are automatically generated based on `flash_size`.
4545

46-
- **framework** (*Optional*): Options for the underlying framework used by ESPHome. See [Arduino framework](#esp32-arduino_framework)
47-
and [ESP-IDF framework](#esp32-espidf_framework).
46+
- **framework** (*Optional*): Options for the underlying framework used by ESPHome. See [Framework](#esp32-framework).
4847

49-
{{< anchor "esp32-arduino_framework" >}}
48+
{{< anchor "esp32-framework" >}}
5049

51-
## Arduino framework
50+
## Framework
5251

53-
This is the default framework for ESP32 chips at the moment.
52+
ESPHome supports two framework options for ESP32 chips:
53+
54+
### Arduino Framework
55+
56+
The Arduino framework is integrated as an ESP-IDF component. This provides Arduino API compatibility
57+
within the ESP-IDF build system. Arduino framework is available for ESP32 (classic), ESP32-C3, ESP32-S2, and ESP32-S3 variants.
5458

5559
```yaml
5660
# Example configuration entry
@@ -60,32 +64,11 @@ esp32:
6064
type: arduino
6165
```
6266

63-
### Configuration variables
64-
65-
- **version** (*Optional*, string): The base framework version number to use, from
66-
[ESP32 arduino releases](https://github.com/espressif/arduino-esp32/releases). Defaults to `recommended`.
67-
Additional values are:
68-
69-
- `dev` : Use the latest commit from <https://github.com/espressif/arduino-esp32>, note this may break at any time
70-
- `latest` : Use the latest *release* from <https://github.com/espressif/arduino-esp32/releases>, even if it hasn't
71-
been recommended yet.
72-
73-
- `recommended` : Use the recommended framework version.
74-
75-
- **source** (*Optional*, string): The PlatformIO package or repository to use for framework. This can be used to use a
76-
custom or patched version of the framework.
77-
78-
- **platform_version** (*Optional*, string): The version of the
79-
[pioarduino/espressif32](https://github.com/pioarduino/platform-espressif32/releases) package to use.
80-
81-
- **advanced** (*Optional*, mapping): See [Advanced Configuration](#esp32-advanced_configuration) below.
82-
83-
{{< anchor "esp32-espidf_framework" >}}
84-
85-
## ESP-IDF framework
67+
### ESP-IDF Framework
8668

87-
This is an alternative base framework for ESP32 chips; it is recommended for variants of the ESP32 like ESP32S2,
88-
ESP32S3, ESP32P4 and single-core ESP32 chips.
69+
ESP-IDF is Espressif's native development framework. It is required for ESP32-C2, ESP32-C5, ESP32-C6,
70+
ESP32-H2, and ESP32-P4 variants, as these are not supported by the Arduino framework. It is recommended for
71+
all ESP32 chips when possible. See the {{< docref "/guides/esp32_arduino_to_idf" "migration guide" >}} for help transitioning from Arduino.
8972

9073
```yaml
9174
# Example configuration entry
@@ -97,14 +80,15 @@ esp32:
9780

9881
### Configuration variables
9982

83+
- **type** (*Optional*, string): The framework type, either `esp-idf` or `arduino`. Defaults to `arduino` for ESP32 (classic), ESP32-C3, ESP32-S2, and ESP32-S3. Defaults to `esp-idf` for ESP32-C2, ESP32-C5, ESP32-C6, ESP32-H2, and ESP32-P4 (Arduino is not supported on these variants)
84+
10085
- **version** (*Optional*, string): The base framework version number to use, from
101-
[ESP32 ESP-IDF releases](https://github.com/espressif/esp-idf/releases). Defaults to `recommended`.
86+
[ESP32 ESP-IDF releases](https://github.com/espressif/esp-idf/releases) or
87+
[ESP32 arduino releases](https://github.com/espressif/arduino-esp32/releases). Defaults to `recommended`.
10288
Additional values are:
10389

104-
- `dev` : Use the latest commit from <https://github.com/espressif/esp-idf>, note this may break at any time
105-
- `latest` : Use the latest *release* from <https://github.com/espressif/esp-idf/releases>, even if it hasn't been
106-
recommended yet.
107-
90+
- `dev` : Use the latest commit, note this may break at any time
91+
- `latest` : Use the latest *release*, even if it hasn't been recommended yet.
10892
- `recommended` : Use the recommended framework version.
10993

11094
- **source** (*Optional*, string): The PlatformIO package or repository to use for the framework. This can be used to
@@ -154,9 +138,8 @@ esp32:
154138
address is not consistent with the burned-in CRC for that MAC address, resulting in an error like
155139
`Base MAC address from BLK0 of EFUSE CRC error`. **Valid only on original ESP32 with** `esp-idf` **framework.**
156140

157-
- **enable_idf_experimental_features** (*Optional*, boolean): Can be set to `true` to enable experimental features in
158-
the ESP-IDF framework. Not valid for the Arduino framework. Use of experimental features may cause instability or
159-
other issues.
141+
- **enable_idf_experimental_features** (*Optional*, boolean): Can be set to `true` to enable experimental features. Use of
142+
experimental features may cause instability or other issues.
160143

161144
**LWIP Optimization Options (ESP-IDF only):**
162145

Lines changed: 1 addition & 0 deletions
Loading

content/components/logger.md

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -104,17 +104,17 @@ hardware interfaces for logging. Many newer boards based on ESP32 variants (such
104104
are using the ESP's on-board USB hardware peripheral while boards based on older processors (such as
105105
the original ESP32 or ESP8266) continue to use USB-to-serial bridge ICs for communication.
106106

107-
| | Arduino | ESP-IDF |
108-
| -------- | --------- | ----------------- |
109-
| ESP8266 | `UART0` | N/A |
110-
| ESP32 | `UART0` | `UART0` |
111-
| ESP32-C3 | `USB_CDC` | `USB_SERIAL_JTAG` |
112-
| ESP32-C5 | `USB_CDC` | `USB_SERIAL_JTAG` |
113-
| ESP32-C6 | `USB_CDC` | `USB_SERIAL_JTAG` |
114-
| ESP32-P4 | `USB_CDC` | `USB_SERIAL_JTAG` |
115-
| ESP32-S2 | `USB_CDC` | `USB_CDC` |
116-
| ESP32-S3 | `USB_CDC` | `USB_SERIAL_JTAG` |
117-
| RP2040 | `USB_CDC` | N/A |
107+
| | Interface |
108+
| -------- | --------- |
109+
| ESP8266 | `UART0` |
110+
| ESP32 | `UART0` |
111+
| ESP32-C3 | `USB_SERIAL_JTAG` |
112+
| ESP32-C5 | `USB_SERIAL_JTAG` |
113+
| ESP32-C6 | `USB_SERIAL_JTAG` |
114+
| ESP32-P4 | `USB_SERIAL_JTAG` |
115+
| ESP32-S2 | `USB_CDC` |
116+
| ESP32-S3 | `USB_SERIAL_JTAG` |
117+
| RP2040 | `USB_CDC` |
118118

119119
{{< anchor "logger-log_levels" >}}
120120

content/components/media_player/speaker.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ It supports two different audio pipelines: announcement and media. Each audio pi
1717

1818
On-device files built directly into the firmware are played without a network connection. Encode on-device files with the configured sample rate, 1 or 2 channels, and 16 bits per sample.
1919

20-
This platform only works on ESP32 based chips using the [ESP-IDF framework](#esp32-espidf_framework).
20+
This platform only works on ESP32-based chips using the [ESP-IDF framework](#esp32-framework).
2121

2222
{{< warning >}}
2323
Audio and voice components consume a significant amount of resources (RAM, CPU) on the device.

content/components/zwave_proxy.md

Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
---
2+
description: "Instructions for setting up the Z-Wave Proxy in ESPHome."
3+
title: "Z-Wave Proxy"
4+
params:
5+
seo:
6+
description: Instructions for setting up the Z-Wave Proxy in ESPHome.
7+
image: z-wave.svg
8+
---
9+
10+
The `zwave_proxy` component allows proxying of Z-Wave data frames between a
11+
[Z-Wave Modem SoC](https://www.silabs.com/wireless/z-wave/800-series-modem-soc) and
12+
[Z-Wave JS](https://zwave-js.github.io/zwave-js/) via ESPHome's {{< docref "/components/api" >}} over
13+
the {{< docref "/components/wifi" >}} or {{< docref "/components/ethernet" >}}. This allows for more flexibility when
14+
placing your Z-Wave hardware within your home.
15+
16+
As the Z-Wave modem SoC communicates via a serial connection, you need to have a [UART](#uart) defined in your ESPHome
17+
device's configuration.
18+
19+
In addition, the `zwave_proxy` expects to proxy messages via ESPHome's {{< docref "/components/api" >}}; this is also
20+
required in your configuration.
21+
22+
{{< note >}}
23+
Number of connections
24+
25+
While ESPHome supports multiple API connections/clients, only a single client may subscribe to and receive proxied
26+
Z-Wave data frames at any given time.
27+
28+
{{< /note >}}
29+
30+
## Configuration
31+
32+
```yaml
33+
# Example configuration entry
34+
zwave_proxy:
35+
```
36+
37+
- **id** (*Optional*, [ID](#config-id)): Manually specify the ID for the `zwave_proxy`.
38+
39+
## Maximizing performance
40+
41+
Low latency is key to achieving an optimal experience with Z-Wave (or any) wireless devices.
42+
43+
It's important to understand that using the `zwave_proxy` *will* increase latency between your Z-Wave devices and
44+
Z-Wave JS -- this is simply the consequence of passing messages from one medium to another.
45+
46+
Under near-ideal conditions:
47+
48+
- With a direct serial connection to the Z-Wave modem SoC, latency may be as low as approximately 20 milliseconds (ms).
49+
- When introducing the Z-Wave proxy component, it's still possible to achieve low latency -- we've seen as low as 35
50+
ms! However, in practice, it's more realistic to expect 50-60 ms, assuming decent RF conditions.
51+
52+
In general, any duration less than 100 ms is quite acceptable in terms of latency; this value is generally a good
53+
target to keep in mind.
54+
55+
## Maximizing reliability
56+
57+
In addition to low latency, reliability is also critical to an optimal experience.
58+
59+
**A wired Ethernet connection will provide the best reliability for the Z-Wave proxy.** Ethernet offers:
60+
61+
- More stable and predictable latency
62+
- No connection drops or lag due to RF interference
63+
- Immunity to environmental conditions
64+
65+
### Wi-Fi considerations
66+
67+
Wi-Fi is impacted by:
68+
69+
- Interference from other RF devices
70+
- Environmental conditions, such as:
71+
- People/pets moving around a room
72+
- Building construction materials
73+
- Air density, quality, and even humidity
74+
75+
These factors can periodically cause momentary signal instability. While Wi-Fi devices typically recover automatically,
76+
this comes at the expense of temporarily degraded performance (latency) and, in more extreme cases, brief loss of
77+
connectivity.
78+
79+
If you choose to use Wi-Fi to bridge your Z-Wave modem to Z-Wave JS:
80+
81+
- Confirm that there is a strong, stable Wi-Fi signal available in the location you'll place your Z-Wave proxy.
82+
- Do not attempt to place your Z-Wave proxy at or near the edge of the coverage area your Wi-Fi router/access point
83+
provides. If in doubt, move it closer to your Wi-Fi router/access point.
84+
- If you find that your Z-Wave devices are not operating reliably, you might try:
85+
- moving your Z-Wave proxy closer to your Wi-Fi router/access point.
86+
- changing the Wi-Fi channel your Wi-Fi router/access point is using.
87+
- getting a better Wi-Fi router/access point. In particular, many ISP-provided Wi-Fi routers are designed to be
88+
cost-effective and are not optimized for performance.
89+
90+
## See Also
91+
92+
- {{< docref "/components/api" >}}
93+
- {{< docref "/components/ethernet" >}}
94+
- {{< docref "/components/wifi" >}}
95+
- {{< apiref "zwave_proxy/zwave_proxy.h" "zwave_proxy/zwave_proxy.h" >}}

0 commit comments

Comments
 (0)