Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
62 commits
Select commit Hold shift + click to select a range
3319cbf
Bump version to 2025.10.0-dev
jesserockz Sep 10, 2025
c8bb881
Merge branch 'beta' into next
jesserockz Sep 10, 2025
c6f4830
Merge branch 'current' into next
jesserockz Sep 14, 2025
d37a74d
Merge branch 'beta' into next
jesserockz Sep 15, 2025
7523de4
Merge branch 'beta' into next
jesserockz Sep 16, 2025
f6d04b0
Merge branch 'beta' into next
jesserockz Sep 16, 2025
09866b1
Merge branch 'current' into next
jesserockz Sep 17, 2025
44d305c
Update docs for Arduino as a Component (#5374)
swoboda1337 Sep 17, 2025
a2ca0c7
[zwave_proxy] Add docs (#5380)
kbx81 Sep 18, 2025
5179a2b
[zwave_proxy] Copy fixes (#5385)
kbx81 Sep 18, 2025
946db5b
[ektf2232] Rename `rts_pin` to `reset_pin` (#5358)
jesserockz Sep 19, 2025
a98da12
Merge branch 'current' into next
jesserockz Sep 19, 2025
1e64051
Merge branch 'current' into next
jesserockz Sep 19, 2025
f50b5a6
Document !literal tag (#5381)
jpeletier Sep 22, 2025
3e54c2d
[uart] Multiple ESP32 features and fixes (#5352)
brambo123 Sep 22, 2025
84e28e3
Remove arduino limiations from wifi docs (#5393)
bdraco Sep 23, 2025
965aba9
Remove Arduino-specific BLE limitations from documentation (#5379)
bdraco Sep 24, 2025
e7bbf63
Add WTS01 temperature sensor documentation and image (#4811)
alepee Sep 25, 2025
9bc3d24
Merge branch 'current' into next
jesserockz Sep 29, 2025
5b2c01e
Merge branch 'current' into next
jesserockz Sep 29, 2025
93b241c
[api] Add configurable connection limits (#5428)
bdraco Sep 30, 2025
e468591
Ethernet fixed mac (#5398)
sphen13 Sep 30, 2025
0bb9efa
Add CRC docs (#5424)
swoboda1337 Sep 30, 2025
7b72937
Merge branch 'current' into next
jesserockz Oct 1, 2025
4482c0d
Merge branch 'current' into next
jesserockz Oct 1, 2025
c1a332f
Fix leftover admonitions (#5438)
jesserockz Oct 1, 2025
ed36436
[api] Add configurable send queue limit to prevent OOM crashes (#5437)
bdraco Oct 5, 2025
2f7e5b0
[logger] Document runtime_tag_levels configuration option (#5444)
bdraco Oct 5, 2025
500f21b
[qmc5883l] Added drdy_pin option to allow it to run max rate (#5417)
mortification77 Oct 6, 2025
cb98692
Update docs for max_connections move to esp32_ble component (#5445)
bdraco Oct 6, 2025
95851c9
Added LM75B component documentation (#5320)
Beormund Oct 6, 2025
28a3067
Add demod docs (#4893)
smkent Oct 6, 2025
b1066f9
feat(modbus_controller): Add courtesy response configuration for Modb…
carlessole Oct 8, 2025
e608086
[api] Docs for action responses (#5435)
jesserockz Oct 8, 2025
825d400
[epaper_spi] Add docs (#5427)
jesserockz Oct 8, 2025
a976c7d
Merge branch 'current' into next
jesserockz Oct 8, 2025
f24d20a
Bump version to 2025.10.0b1
jesserockz Oct 8, 2025
6b84d55
Update changelog for 2025.10.0b1
jesserockz Oct 8, 2025
2930e3a
Update supporters for 2025.10.0b1
jesserockz Oct 8, 2025
0233964
fix zwave image
jesserockz Oct 8, 2025
288f1c7
add changelog seo image
jesserockz Oct 8, 2025
7a46963
add summary
jesserockz Oct 8, 2025
a21fe04
Merge pull request #5456 from esphome/bump-2025.10.0b1
jesserockz Oct 9, 2025
daec961
Merge branch 'current' into beta
jesserockz Oct 12, 2025
985e3f7
[usb_host] Fix transfer slot exhaustion at high data rates and add co…
bdraco Oct 12, 2025
6f2108f
Bump version to 2025.10.0b2
jesserockz Oct 12, 2025
5ee02b0
Update changelog for 2025.10.0b2
jesserockz Oct 12, 2025
b80bc73
Update supporters for 2025.10.0b2
jesserockz Oct 12, 2025
684520f
Merge pull request #5474 from esphome/bump-2025.10.0b2
jesserockz Oct 12, 2025
39cb891
[esp32] Update migration guide for Arduino-as-IDF-component changes (…
bdraco Oct 14, 2025
b19438f
Bump version to 2025.10.0b3
jesserockz Oct 14, 2025
f44aa48
Update changelog for 2025.10.0b3
jesserockz Oct 14, 2025
fa32616
Update supporters for 2025.10.0b3
jesserockz Oct 14, 2025
8f624e0
Merge pull request #5477 from esphome/bump-2025.10.0b3
jesserockz Oct 14, 2025
3b8281d
Cleanups to release notes (#5480)
bdraco Oct 14, 2025
a4cb276
Bump version to 2025.10.0b4
jesserockz Oct 14, 2025
acaf1c1
Update changelog for 2025.10.0b4
jesserockz Oct 14, 2025
e3befc2
Update supporters for 2025.10.0b4
jesserockz Oct 14, 2025
0b26f92
Merge pull request #5482 from esphome/bump-2025.10.0b4
jesserockz Oct 14, 2025
99db2a7
Bump version to 2025.10.0
jesserockz Oct 15, 2025
ea8d6ec
Update changelog for 2025.10.0
jesserockz Oct 15, 2025
8fac00a
Update supporters for 2025.10.0
jesserockz Oct 15, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
705 changes: 705 additions & 0 deletions content/changelog/2025.10.0.md

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion content/changelog/_index.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,4 @@ description: "Changelog"
title: "Changelog"
---

{{< redirect url="/changelog/2025.9.0.html" >}}
{{< redirect url="/changelog/2025.10.0.html" >}}
Binary file added content/changelog/images/changelog-2025.10.0.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
4 changes: 4 additions & 0 deletions content/components/_index.md
Original file line number Diff line number Diff line change
Expand Up @@ -388,6 +388,7 @@ Sensors are organized into categories; if a given sensor fits into more than one
"HYT271","components/sensor/hyt271","hyt271.jpg","Temperature & Humidity",""
"Inkbird IBS-TH1 Mini","components/sensor/inkbird_ibsth1_mini","inkbird_isbth1_mini.jpg","Temperature & Humidity",""
"Internal Temperature","components/sensor/internal_temperature","thermometer.svg","Temperature","dark-invert"
"LM75B","components/sensor/lm75b","lm75b.jpg","Temperature",""
"LPS22","components/sensor/lps22","lps22.webp","Temperature & Barometric Pressure",""
"MCP9808","components/sensor/mcp9808","mcp9808.jpg","Temperature",""
"MH-Z19","components/sensor/mhz19","mhz19.jpg","CO₂ & Temperature",""
Expand Down Expand Up @@ -416,6 +417,7 @@ Sensors are organized into categories; if a given sensor fits into more than one
"TMP102","components/sensor/tmp102","tmp102.jpg","Temperature",""
"TMP1075","components/sensor/tmp1075","tmp1075.jpg","Temperature",""
"TMP117","components/sensor/tmp117","tmp117.jpg","Temperature",""
"WTS01","components/sensor/wts01","wts01.png","Temperature",""
"XGZP68xx Series","components/sensor/xgzp68xx","6897d.jpg","Differential Pressure",""
{{< /imgtable >}}

Expand Down Expand Up @@ -724,6 +726,7 @@ Often known as "tag" or "card" readers within the community.
"MIPI DSI Displays","components/display/mipi_dsi","tab5.jpg"
"MIPI RGB Displays","components/display/mipi_rgb","indicator.jpg"
"MIPI SPI Displays","components/display/mipi_spi","t4-s3.jpg"
"ePaper SPI Displays","components/display/epaper_spi","epaper.svg"
"ILI9xxx","components/display/ili9xxx","ili9341.jpg"
"ILI9341","components/display/ili9xxx","ili9341.svg"
"ILI9342","components/display/ili9xxx","ili9342.svg"
Expand Down Expand Up @@ -1049,6 +1052,7 @@ ESPHome to cellular networks. **Does not encompass Wi-Fi.**
"Status LED","components/status_led","led-on.svg","dark-invert"
"Sun","components/sun","weather-sunny.svg","dark-invert"
"Tuya MCU","components/tuya","tuya.png",""
"Z-Wave Proxy","components/zwave_proxy","z-wave.svg",""
{{< /imgtable >}}

## Cookbook
Expand Down
108 changes: 108 additions & 0 deletions content/components/api.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,9 @@ api:
api:
port: 6053
batch_delay: 50ms # Reduce latency for real-time applications
listen_backlog: 2 # Allow 2 pending connections in queue
max_connections: 6 # Allow up to 6 simultaneous connections
max_send_queue: 10 # Maximum queued messages per connection before disconnect
encryption:
key: "YOUR_ENCRYPTION_KEY_HERE"
reboot_timeout: 30min
Expand All @@ -44,6 +47,25 @@ api:
## Configuration variables

- **port** (*Optional*, int): The port to run the API server on. Defaults to `6053`.
- **listen_backlog** (*Optional*, int): The maximum number of pending connections in the listen queue. Must be between 1 and 10.
Defaults to `1` for ESP8266/RP2040, `4` for ESP32 and other platforms. Lower values use less memory but may reject connections during bursts.
- **max_connections** (*Optional*, int): The maximum number of simultaneous API connections allowed. Must be between 1 and 20.
Defaults to `4` for ESP8266/RP2040, `8` for ESP32 and other platforms. Each connection uses approximately 500-1000 bytes of RAM.

> [!NOTE]
> Each API connection consumes approximately 500–1000 bytes of RAM while connected. ESP8266 and RP2040 devices have limited
> RAM available (ESP8266 typically has around 40KB of free RAM after boot, but this can drop to under 20KB once sensors and other components are configured; RP2040 uses LWIP raw sockets with similar constraints), so be careful not to set this value too high or it may cause out-of-memory crashes.
> The defaults are set to balance memory usage with allowing multiple simultaneous connections.

- **max_send_queue** (*Optional*, int): The maximum number of messages that can be queued for sending per connection before the connection is dropped. Must be between 1 and 64.
Defaults to `5` for ESP8266/RP2040, `8` for ESP32/BK72xx/RTL87xx/LN882x, `16` for host platform. This prevents memory exhaustion when a client is slow or network-stalled.
Each queued message uses approximately 8-12 bytes of overhead plus the message size.

> [!NOTE]
> When the send queue is full for a connection, the device will log an error and disconnect that client to prevent out-of-memory crashes.
> Slow clients, poor WiFi connections causing retries, or network congestion may trigger this. Increase this value if legitimate clients are being disconnected, but be mindful
> of memory constraints on embedded devices.

- **encryption** (*Optional*): If present, encryption will be enabled for the API. Using encryption helps to secure the
communication between the device running ESPHome and the connected client(s).

Expand Down Expand Up @@ -93,6 +115,10 @@ api:
Before using any of the actions below, you'll need to tell Home Assistant to allow your device to
perform actions.

> [!NOTE]
> Starting with ESPHome 2025.10.0, you can configure actions to receive and process responses from
> Home Assistant using `capture_response`, `on_success`, and `on_error`. See [Action Response Handling](#action-response-handling) for details.

Open the ESPHome integration page on your Home Assistant instance:

[![Open your Home Assistant instance and show the ESPHome integration.](https://my.home-assistant.io/badges/integration.svg)](https://my.home-assistant.io/redirect/integration/?domain=esphome)
Expand Down Expand Up @@ -180,6 +206,20 @@ on_...:
- **variables** (*Optional*, mapping): Optional variables that can be used in the `data_template`.
Values are [lambdas](#config-lambda) and will be evaluated before sending the request.

- **capture_response** (*Optional*, boolean): Enable capturing the response from the Home Assistant action call.
When enabled, `on_success` must be configured. Defaults to `false`.

- **response_template** (*Optional*, [templatable](#config-templatable), string): Optional Jinja template to process
the action response data. This template is evaluated on the Home Assistant side with Home Assistant's templating engine.
Requires `capture_response: true`.

- **on_success** (*Optional*, [Automation](#automation)): Optional automation to execute when the Home Assistant action
call succeeds. When `capture_response: true`, the response data is available as a `response` variable of type `JsonObjectConst`.
See [Action Response Handling](#action-response-handling).

- **on_error** (*Optional*, [Automation](#automation)): Optional automation to execute when the Home Assistant action
call fails. See [Action Response Handling](#action-response-handling).

Data structures are not possible, but you can create a script in Home Assistant and call with all
the parameters in plain format.

Expand Down Expand Up @@ -213,6 +253,74 @@ on_...:
blue: '71'
```

#### Action Response Handling

> [!NOTE]
> Action response handling is available in ESPHome 2025.10.0 and later.

You can configure actions to receive and process responses from Home Assistant. This enables bidirectional
communication where ESPHome can not only call Home Assistant actions but also handle their responses.

##### Basic Success/Error Handling

Use `on_success` and `on_error` to respond to action completion:

```yaml
on_...:
- homeassistant.action:
action: light.toggle
data:
entity_id: light.demo_light
on_success:
- logger.log: "Toggled demo light"
on_error:
- logger.log: "Failed to toggle demo light"
```

##### Capturing Response Data

To capture and process response data from actions, set `capture_response: true`. When enabled, `on_success` must be configured
and the response data is available as a [`JsonObjectConst`](https://arduinojson.org/v7/api/jsonobjectconst/) variable named `response`.

```yaml
# Example: Get weather forecast and parse JSON response
on_...:
- homeassistant.action:
action: weather.get_forecasts
data:
entity_id: weather.forecast_home
type: hourly
capture_response: true
on_success:
- lambda: |-
JsonObjectConst next_hour = response["response"]["weather.forecast_home"]["forecast"][0];
float next_temperature = next_hour["temperature"].as<float>();
ESP_LOGI("weather", "Temperature next hour: %.1f", next_temperature);
```

##### Using Response Templates

Use `response_template` to extract and format data from complex responses using Home Assistant's Jinja templating engine.
This requires `capture_response: true`.

```yaml
# Example: Extract temperature using a template
on_...:
- homeassistant.action:
action: weather.get_forecasts
data:
entity_id: weather.forecast_home
type: hourly
capture_response: true
response_template: "{{ response['weather.forecast_home']['forecast'][0]['temperature'] }}"
on_success:
- lambda: |-
float temperature = response["response"].as<float>();
ESP_LOGI("weather", "Temperature next hour: %.1f", temperature);
```

When `response_template` is used, the processed result is available in `response["response"]`.

{{< anchor "api-homeassistant_tag_scanned_action" >}}

### `homeassistant.tag_scanned` Action
Expand Down
7 changes: 3 additions & 4 deletions content/components/bluetooth_proxy.md
Original file line number Diff line number Diff line change
Expand Up @@ -49,13 +49,12 @@ bluetooth_proxy:
```

- **active** (*Optional*, boolean): Enables proxying active connections. Defaults to `true`.
- **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.
- **cache_services** (*Optional*, boolean): Enables caching GATT services in NVS flash storage which significantly speeds up active connections. Defaults to `true`.
- **connection_slots** (*Optional*, int): The maximum number of BLE connection slots to use.
Each configured slot consumes ~1KB of RAM. This can only be adjusted when using
the `esp-idf` framework up to a maximum of `9`. It is recommended not to exceed `5`
Each configured slot consumes ~1KB of RAM, with a maximum of `9`. It is recommended not to exceed `5`
connection slots to avoid memory issues. Defaults to `3`.
The value must not exceed the total configured `max_connections`
for {{< docref "esp32_ble_tracker/" >}}.
for {{< docref "esp32_ble/" >}}.

The Bluetooth proxy depends on {{< docref "esp32_ble_tracker/" >}} so make sure to add that to your configuration.

Expand Down
61 changes: 61 additions & 0 deletions content/components/display/epaper_spi.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
---
description: "Instructions for setting up ePaper SPI displays in ESPHome."
title: "ePaper SPI Display"
params:
seo:
description: Instructions for setting up ePaper SPI displays with improved architecture in ESPHome.
image: epaper.svg
---

The `epaper_spi` display platform provides a new ePaper display component architecture
with improved state management and non-blocking operation. This component implements a
queue-based state machine that eliminates blocking waits for the busy pin and provides
better integration with ESPHome's async architecture.

The communication method uses 4-wire [SPI](#spi), so you need to have an `spi:` section in your
configuration.

```yaml
display:
- platform: epaper_spi
cs_pin: GPIOXX
dc_pin: GPIOXX
busy_pin: GPIOXX
reset_pin: GPIOXX
model: 7.3in-spectra-e6
lambda: |-
it.filled_circle(it.get_width() / 2, it.get_height() / 2, 50, Color::BLACK);
```

## Configuration variables

- **cs_pin** (**Required**, [Pin Schema](#config-pin_schema)): The CS pin.
- **dc_pin** (**Required**, [Pin Schema](#config-pin_schema)): The DC pin.
- **model** (**Required**): The model of the ePaper display. Currently supported:

- `7.3in-spectra-e6` - 7.3" Spectra E6 6-color display (800×480 pixels)

- **busy_pin** (*Optional*, [Pin Schema](#config-pin_schema)): The BUSY pin. Defaults to not connected.
- **reset_pin** (*Optional*, [Pin Schema](#config-pin_schema)): The RESET pin. Defaults to not connected.
Make sure you pull this pin high (by connecting it to 3.3V with a resistor) if not connected to a GPIO pin.

- **rotation** (*Optional*): Set the rotation of the display. Everything you draw in `lambda:` will be rotated
by this option. One of `0°` (default), `90°`, `180°`, `270°`.

- **reset_duration** (*Optional*, [Time](#config-time)): Duration for the display reset operation. Defaults to `200ms`.

- **lambda** (*Optional*, [lambda](#config-lambda)): The lambda to use for rendering the content on the display.
See [Display Rendering Engine](#display-engine) for more information.
- **pages** (*Optional*, list): Show pages instead of a single lambda. See [Display Pages](#display-pages).

- **update_interval** (*Optional*, [Time](#config-time)): The interval to re-draw the screen. Defaults to `60s`,
use `never` to only manually update the screen via `component.update`.
- **spi_id** (*Optional*, [ID](#config-id)): Manually specify the ID of the [SPI Component](#spi) if you want
to use multiple SPI buses.
- **id** (*Optional*, [ID](#config-id)): Manually specify the ID used for code generation.

## See Also

- {{< docref "index/" >}}
- {{< apiref "epaper_spi/epaper_spi.h" "epaper_spi/epaper_spi.h" >}}
- [ESPHome Display Rendering Engine](#display-engine)
1 change: 1 addition & 0 deletions content/components/display/images/epaper.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading