Skip to content

Commit 102b06a

Browse files
authored
Merge branch 'next' into heartbeat
2 parents 9b2bcf3 + 89f4d7c commit 102b06a

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

49 files changed

+1675
-130
lines changed

content/changelog/2025.10.0.md

Lines changed: 738 additions & 0 deletions
Large diffs are not rendered by default.

content/changelog/_index.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,4 @@ description: "Changelog"
33
title: "Changelog"
44
---
55

6-
{{< redirect url="/changelog/2025.9.0.html" >}}
6+
{{< redirect url="/changelog/2025.10.0.html" >}}
105 KB
Loading

content/components/_index.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,7 @@ ESPHome-specific components or components supporting ESPHome device provisioning
123123
"ESP32 BLE Server","components/esp32_ble_server","bluetooth.svg","dark-invert"
124124
"Bluetooth Proxy","components/bluetooth_proxy","bluetooth.svg","dark-invert"
125125
"Improv via BLE","components/esp32_improv","improv.svg","dark-invert"
126+
"Nordic UART Service (NUS)","components/ble_nus","uart.svg",""
126127
{{< /imgtable >}}
127128

128129
## Management and Monitoring
@@ -388,6 +389,7 @@ Sensors are organized into categories; if a given sensor fits into more than one
388389
"HYT271","components/sensor/hyt271","hyt271.jpg","Temperature & Humidity",""
389390
"Inkbird IBS-TH1 Mini","components/sensor/inkbird_ibsth1_mini","inkbird_isbth1_mini.jpg","Temperature & Humidity",""
390391
"Internal Temperature","components/sensor/internal_temperature","thermometer.svg","Temperature","dark-invert"
392+
"LM75B","components/sensor/lm75b","lm75b.jpg","Temperature",""
391393
"LPS22","components/sensor/lps22","lps22.webp","Temperature & Barometric Pressure",""
392394
"MCP9808","components/sensor/mcp9808","mcp9808.jpg","Temperature",""
393395
"MH-Z19","components/sensor/mhz19","mhz19.jpg","CO₂ & Temperature",""
@@ -725,6 +727,7 @@ Often known as "tag" or "card" readers within the community.
725727
"MIPI DSI Displays","components/display/mipi_dsi","tab5.jpg"
726728
"MIPI RGB Displays","components/display/mipi_rgb","indicator.jpg"
727729
"MIPI SPI Displays","components/display/mipi_spi","t4-s3.jpg"
730+
"ePaper SPI Displays","components/display/epaper_spi","epaper.svg"
728731
"ILI9xxx","components/display/ili9xxx","ili9341.jpg"
729732
"ILI9341","components/display/ili9xxx","ili9341.svg"
730733
"ILI9342","components/display/ili9xxx","ili9342.svg"

content/components/api.md

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ api:
3838
batch_delay: 50ms # Reduce latency for real-time applications
3939
listen_backlog: 2 # Allow 2 pending connections in queue
4040
max_connections: 6 # Allow up to 6 simultaneous connections
41+
max_send_queue: 10 # Maximum queued messages per connection before disconnect
4142
encryption:
4243
key: "YOUR_ENCRYPTION_KEY_HERE"
4344
reboot_timeout: 30min
@@ -56,6 +57,15 @@ api:
5657
> 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.
5758
> The defaults are set to balance memory usage with allowing multiple simultaneous connections.
5859

60+
- **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.
61+
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.
62+
Each queued message uses approximately 8-12 bytes of overhead plus the message size.
63+
64+
> [!NOTE]
65+
> 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.
66+
> 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
67+
> of memory constraints on embedded devices.
68+
5969
- **encryption** (*Optional*): If present, encryption will be enabled for the API. Using encryption helps to secure the
6070
communication between the device running ESPHome and the connected client(s).
6171

@@ -105,6 +115,10 @@ api:
105115
Before using any of the actions below, you'll need to tell Home Assistant to allow your device to
106116
perform actions.
107117

118+
> [!NOTE]
119+
> Starting with ESPHome 2025.10.0, you can configure actions to receive and process responses from
120+
> Home Assistant using `capture_response`, `on_success`, and `on_error`. See [Action Response Handling](#action-response-handling) for details.
121+
108122
Open the ESPHome integration page on your Home Assistant instance:
109123

110124
[![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)
@@ -192,6 +206,20 @@ on_...:
192206
- **variables** (*Optional*, mapping): Optional variables that can be used in the `data_template`.
193207
Values are [lambdas](#config-lambda) and will be evaluated before sending the request.
194208

209+
- **capture_response** (*Optional*, boolean): Enable capturing the response from the Home Assistant action call.
210+
When enabled, `on_success` must be configured. Defaults to `false`.
211+
212+
- **response_template** (*Optional*, [templatable](#config-templatable), string): Optional Jinja template to process
213+
the action response data. This template is evaluated on the Home Assistant side with Home Assistant's templating engine.
214+
Requires `capture_response: true`.
215+
216+
- **on_success** (*Optional*, [Automation](#automation)): Optional automation to execute when the Home Assistant action
217+
call succeeds. When `capture_response: true`, the response data is available as a `response` variable of type `JsonObjectConst`.
218+
See [Action Response Handling](#action-response-handling).
219+
220+
- **on_error** (*Optional*, [Automation](#automation)): Optional automation to execute when the Home Assistant action
221+
call fails. See [Action Response Handling](#action-response-handling).
222+
195223
Data structures are not possible, but you can create a script in Home Assistant and call with all
196224
the parameters in plain format.
197225

@@ -225,6 +253,74 @@ on_...:
225253
blue: '71'
226254
```
227255

256+
#### Action Response Handling
257+
258+
> [!NOTE]
259+
> Action response handling is available in ESPHome 2025.10.0 and later.
260+
261+
You can configure actions to receive and process responses from Home Assistant. This enables bidirectional
262+
communication where ESPHome can not only call Home Assistant actions but also handle their responses.
263+
264+
##### Basic Success/Error Handling
265+
266+
Use `on_success` and `on_error` to respond to action completion:
267+
268+
```yaml
269+
on_...:
270+
- homeassistant.action:
271+
action: light.toggle
272+
data:
273+
entity_id: light.demo_light
274+
on_success:
275+
- logger.log: "Toggled demo light"
276+
on_error:
277+
- logger.log: "Failed to toggle demo light"
278+
```
279+
280+
##### Capturing Response Data
281+
282+
To capture and process response data from actions, set `capture_response: true`. When enabled, `on_success` must be configured
283+
and the response data is available as a [`JsonObjectConst`](https://arduinojson.org/v7/api/jsonobjectconst/) variable named `response`.
284+
285+
```yaml
286+
# Example: Get weather forecast and parse JSON response
287+
on_...:
288+
- homeassistant.action:
289+
action: weather.get_forecasts
290+
data:
291+
entity_id: weather.forecast_home
292+
type: hourly
293+
capture_response: true
294+
on_success:
295+
- lambda: |-
296+
JsonObjectConst next_hour = response["response"]["weather.forecast_home"]["forecast"][0];
297+
float next_temperature = next_hour["temperature"].as<float>();
298+
ESP_LOGI("weather", "Temperature next hour: %.1f", next_temperature);
299+
```
300+
301+
##### Using Response Templates
302+
303+
Use `response_template` to extract and format data from complex responses using Home Assistant's Jinja templating engine.
304+
This requires `capture_response: true`.
305+
306+
```yaml
307+
# Example: Extract temperature using a template
308+
on_...:
309+
- homeassistant.action:
310+
action: weather.get_forecasts
311+
data:
312+
entity_id: weather.forecast_home
313+
type: hourly
314+
capture_response: true
315+
response_template: "{{ response['weather.forecast_home']['forecast'][0]['temperature'] }}"
316+
on_success:
317+
- lambda: |-
318+
float temperature = response["response"].as<float>();
319+
ESP_LOGI("weather", "Temperature next hour: %.1f", temperature);
320+
```
321+
322+
When `response_template` is used, the processed result is available in `response["response"]`.
323+
228324
{{< anchor "api-homeassistant_tag_scanned_action" >}}
229325

230326
### `homeassistant.tag_scanned` Action

content/components/ble_nus.md

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
---
2+
description: "Nordic UART Service (NUS)"
3+
title: "Nordic UART Service (NUS)"
4+
params:
5+
seo:
6+
description: BLE UART support using Nordic UART Service (NUS) for ESPHome logging and communication.
7+
image: uart.svg
8+
---
9+
10+
The BLE NUS component provides a Bluetooth Low Energy UART interface based on the Nordic UART Service.
11+
It can be used to stream logs or enable custom bidirectional communication with ESPHome.
12+
13+
```yaml
14+
# Example configuration entry
15+
ble_nus:
16+
type: logs
17+
```
18+
19+
## Configuration variables
20+
21+
- **type** (**Required**, string): Mode of operation. Must be set to ``logs`` to stream ESPHome logs over the BLE UART.
22+
23+
## Usage
24+
25+
To connect and view logs from the device over BLE:
26+
27+
```bash
28+
esphome logs d.yaml --device BLE
29+
```
30+
31+
Or connect to a specific BLE address:
32+
33+
```bash
34+
esphome logs d.yaml --device 00:11:22:33:44:55
35+
```
36+
37+
## See Also
38+
39+
- Nordic UART Service <https://docs.nordicsemi.com/bundle/ncs-latest/page/nrf/libraries/bluetooth/services/nus.html>

content/components/bluetooth_proxy.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ bluetooth_proxy:
5454
Each configured slot consumes ~1KB of RAM, with a maximum of `9`. It is recommended not to exceed `5`
5555
connection slots to avoid memory issues. Defaults to `3`.
5656
The value must not exceed the total configured `max_connections`
57-
for {{< docref "esp32_ble_tracker/" >}}.
57+
for {{< docref "esp32_ble/" >}}.
5858

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

content/components/climate/climate_ir.md

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -216,11 +216,12 @@ climate:
216216

217217
### `toshiba`
218218

219-
- **model** (*Optional*, string): There are two valid models
219+
- **model** (*Optional*, string): There are four valid models:
220220

221221
- `GENERIC` : Temperature range is from 17 to 30 (default)
222222
- `RAC-PT1411HWRU-C` : Temperature range is from 16 to 30; unit displays temperature in degrees Celsius
223223
- `RAC-PT1411HWRU-F` : Temperature range is from 16 to 30; unit displays temperature in degrees Fahrenheit
224+
- `RAS-2819T` : Temperature range is from 18 to 30; supports two-packet IR protocol
224225

225226
> [!NOTE]
226227
>
@@ -237,9 +238,22 @@ climate:
237238
> internal temperature sensor; a value of 30 seconds seems to work well. See {{< docref "/components/sensor" >}}
238239
> for more information.
239240
>
241+
> - The `RAS-2819T` model uses a two-packet IR protocol where most commands send a primary packet (containing
242+
> temperature, mode, and fan speed) followed by a secondary packet (containing fan speed confirmation and
243+
> mode-specific data). Single-packet commands are used for power-off and swing toggle operations.
244+
>
240245
> - This climate IR component is also known to work with Midea model MAP14HS1TBL and may work with other similar
241246
> models, as well. (Midea acquired Toshiba's product line and re-branded it.)
242247

248+
```yaml
249+
# Example configuration entry for RAS-2819T
250+
climate:
251+
- platform: toshiba
252+
name: "Toshiba AC"
253+
model: RAS-2819T
254+
sensor: room_temperature
255+
```
256+
243257
{{< anchor "whirlpool" >}}
244258

245259
### `whirlpool`

content/components/climate/thermostat.md

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -161,8 +161,8 @@ Got all that? Great. Let's take a closer look at some configuration.
161161
The thermostat controller uses the sensor to determine whether it should heat or cool.
162162

163163
- **sensor** (**Required**, [ID](#config-id)): The sensor that is used to measure the current temperature.
164-
- **humidity_sensor** (*Optional*, [ID](#config-id)): If specified, this sensor is used to measure the current humidity.
165-
This is used for information only and does not influence temperature control.
164+
- **humidity_sensor** (*Optional*, [ID](#config-id)): The sensor that is used to measure the current humidity.
165+
This may be used for humidity control; see [Humidity Control Actions](#humidity-control-actions).
166166

167167
### Heating and Cooling Actions
168168

@@ -296,6 +296,20 @@ These should be used to control the fan only, if available.
296296
- **swing_both_action** (*Optional*, [Action](#config-action)): The action to call when the fan
297297
should oscillate in horizontal and vertical directions.
298298

299+
### Humidity Control Actions
300+
301+
These are triggered when the humidity control action is changed by the thermostat controller. It can trigger actions
302+
to activate humidification **or** dehumidification.
303+
304+
- **humidity_control_dehumidify_action** (*Optional*, [Action](#config-action)): The action to call when
305+
dehumidification is required.
306+
307+
- **humidity_control_humidify_action** (*Optional*, [Action](#config-action)): The action to call when
308+
humidification is required.
309+
310+
- **humidity_control_off_action** (*Optional*, [Action](#config-action)): The action to call when
311+
(de)humidification should stop. This action is **required** when either of the above actions are configured.
312+
299313
## Advanced Configuration/Behavior
300314

301315
### Set Point Options/Behavior
@@ -467,6 +481,9 @@ climate:
467481

468482
### Additional Actions/Behavior
469483

484+
- **target_humidity_change_action** (*Optional*, [Action](#config-action)): The action to call when the
485+
thermostat's target humidity is changed.
486+
470487
- **target_temperature_change_action** (*Optional*, [Action](#config-action)): The action to call when the
471488
thermostat's target temperature(s) is/are changed.
472489

@@ -544,6 +561,9 @@ the range of allowed temperature values in the thermostat component. See {{< doc
544561
- **heat_overrun** (*Optional*, float): The minimum temperature differential (heating beyond the set point)
545562
before calling the idle [action](#config-action). Defaults to 0.5 °C.
546563

564+
- **humidity_hysteresis** (*Optional*, float): The maximum humidity differential (above/below the set point)
565+
before calling the respective humidity control [action](#config-action). Defaults to 1%.
566+
547567
> [!NOTE]
548568
>
549569
> - While this platform uses the term temperature everywhere, it can also be used to regulate other values.

content/components/debug.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,17 @@ sensor:
8888
8989
- **cpu_frequency** (*Optional*): Reports the CPU frequency in Hz. All options from [Sensor](#config-sensor).
9090
91+
## Zephyr
92+
93+
The component enables debugging features for ESPHome devices running on the Zephyr RTOS.
94+
It helps with low-level firmware debugging using **SWD (Serial Wire Debug)**. It enables:
95+
96+
- **Thread Awareness in GDB**
97+
Injects Zephyr thread metadata so that all active threads can be inspected via GDB when connected over SWD.
98+
99+
- **Real-Time Logging over RTT**
100+
Enables logging output over **SEGGER RTT** (Real Time Transfer), allowing non-intrusive debug logs through SWD.
101+
91102
## See Also
92103
93104
- [Sensor Filters](#sensor-filters)

0 commit comments

Comments
 (0)