ESPHome 2026.8.0 - August 2026
NOTE
This is a beta release. Details on this page may change before the stable release is published.
Release Overview
Section titled “Release Overview”ESPHome 2026.8.0 brings Bluetooth to more chips than ever: a new platform-neutral BLE layer moves all 39 BLE
sensor platforms off their ESP32-only foundation and powers new BLE trackers, and Bluetooth Proxy, on the
Raspberry Pi Pico W, BK72xx and LN882H. Builds get dramatically faster with ccache support on ESP8266, LibreTiny,
RP2040 and host, ESP-IDF toolchain installs shrink by roughly half, and ESP32 crash reports now capture the
faulting address. The release also delivers multi-interface networking with Ethernet and WiFi in one config, a
major Modbus overhaul with the new modbus_client component, multi-key OTA signature verification, and runtime
wake word management, alongside new components including the LD6002B 60 GHz presence radar and Hörmann garage
door support.
Upgrade Checklist
Section titled “Upgrade Checklist”- If you set
esp32_ble_idexplicitly on any BLE sensor platform, rename it toble_hub_id(the old key warns until 2027.2.0) - If you use
vocornoxsensor keys onsgp4x,sen5xorsen6x, rename them tovoc_indexandnox_index - If you use
command_throttleonmodbus_controller, move the setting toturnaround_timeon themodbuscomponent;allow_duplicate_commandsno longer has any effect - If you use
modbus_serverwithaddress: 0, assign a unique address from 1-247 instead - If you use
modbus_controllersensors withcustom_command: [0x17, ...], subtract one from theiroffset: - If you write
modbus_controllerlambdas, notedatais nowstd::spanandpayload_to_number()returns an optional, so add.value_or(0)or a check - If you use the
aqisensor, expect readings above the previous caps (301US AQI,101CAQI) to report real interpolated values during heavy pollution - If you use an
rc522_i2creader that relied on the old default address, setaddress: 0x2Cexplicitly - If you use LVGL animations with
ease_in/ease_outweights greater than 1.0, remove them; they are now rejected at validation - If you have a custom web server frontend or integration, update it for the new
idformat and thealarm_control_paneldomain spelling - If you use
pin: TEMPERATUREon theadcsensor for the RP2 on-die sensor, migrate to theinternal_temperaturecomponent - If your automations relied on non-iBeacon Apple manufacturer payloads being parsed as iBeacons, note these no longer match
Bluetooth on More Chips: Platform-Neutral BLE
Section titled “Bluetooth on More Chips: Platform-Neutral BLE”Led by @Bl00d-B0b across dozens of PRs, this release completes a major architectural
effort: the shared BLE advertisement layer moved out of esp32_ble_tracker into a new platform-neutral
ble_device_base component (#17150), and every one of the 39
advertisement-based BLE sensor platforms was migrated onto it in a 13-batch series
(#17716 through
#18183). BLE sensors like ble_rssi, atc_mithermometer,
BTHome, Mopeka, RuuviTag and the entire Xiaomi family are no longer tied to ESP32; they work on any chip with a
BLE tracker.
New BLE trackers this release:
- Raspberry Pi Pico W / Pico 2 W - the new rp2_ble_tracker scans passively and actively while WiFi holds an API connection
- BK72xx (Beken) - bk72xx_ble_tracker by @Bl00d-B0b brings BLE 5.x scanning to the chips inside many Tuya-based wall switches, thermostats and smart plugs, validated in production on a 20-device fleet
- LN882H - ln882h_ble_tracker by @Bl00d-B0b adds BLE 5.1 scanning with scan-response merging on LibreTiny LN882H devices
Bluetooth Proxy beyond ESP32: bluetooth_proxy now consumes the neutral layer (#17880), so more chips can feed advertisements to Home Assistant. The Pico W goes further: it supports full active connections (#18132) and now offers 3 connection slots with ESP32 parity (#18247), so Home Assistant can read, write and subscribe to BLE devices through a Pico W proxy. BK72xx gained active scanning by packing the vendor SDK’s start command (#18169), which admitted it to Bluetooth Proxy as well.
One config note: on migrated sensor platforms the auto-generated tracker reference key esp32_ble_id: is now
ble_hub_id:. Most configs never set it explicitly; those that do keep validating with a warning until
2027.2.0. See the Breaking Changes section for details.
Faster Builds and Smaller Toolchain Installs
Section titled “Faster Builds and Smaller Toolchain Installs”Compilation now runs through ccache when it is installed on ESP8266, LibreTiny, RP2040 and host builds
(#17722,
#17726,
#17727,
#17728), matching what ESP-IDF builds already did. The cache is
shared across devices and projects, so a fleet of similar devices compiles almost entirely from cache: in testing,
six Sonoff S31 devices built in 15 seconds for the first and 4 to 5 seconds for each of the rest. Set
ESPHOME_CCACHE_ENABLE=0 to opt out; esphome clean-all removes the cache.
ESP-IDF installs also slimmed down considerably:
- Only the toolchains for the variants you build are installed (#17688), roughly halving a fresh install; the RISC-V toolchain alone is a 292 MB download and 2.0 GB on disk
- The gdb and ULP toolchains ESPHome never runs are skipped (#17687)
- Tool download caches are pruned after install (#17661)
Leaner and More Responsive CLI
Section titled “Leaner and More Responsive CLI”A long series of changes trimmed the esphome upload and esphome logs fast paths, which matters because the
device builder runs several of these subprocesses concurrently. Imports the fast path never uses are now
deferred (#18093,
#18105), and the validated-config cache is stored as JSON so a
cache hit never loads the YAML stack (#18106); cache parsing
dropped from 1-2 ms to 0.05 ms and the upload subprocess uses measurably less RAM.
Log and build output streaming also improved: output flushes live instead of buffering (#18261, #18264), complete lines are no longer held back behind an unfinished one (#18279), and an out-of-flash build now shows the helpful tip instead of crashing (#18280).
esphome logs can now also tail a device over the web_server event stream
(#17110), so a device with web_server: but no api: can
finally be followed from the CLI. The native API is still preferred, then MQTT, then the web server.
Better ESP32 Crash Reports
Section titled “Better ESP32 Crash Reports”The esp32 crash handler now captures the faulting memory address (EXCVADDR on Xtensa, MTVAL on RISC-V) and the
raw exception cause, so heap corruption and pointer bugs leave a usable trail in the post-reboot report
(#17769). Crash records are also stamped with the build they
were captured by (#17770): a record left over from a previous
firmware is flagged instead of being decoded against the wrong ELF, which used to produce convincing but
meaningless backtraces.
Ethernet and WiFi Together: Multi-Interface Networking
Section titled “Ethernet and WiFi Together: Multi-Interface Networking”Built by @rwalker777 and @kbx81, ESP32 devices can
now configure both ethernet: and wifi: in the same YAML. A new network: priority: list declares which
interface the device prefers (#14255), and the default route is
arbitrated at runtime from that list (#17797): the first
connected interface in your priority order carries the traffic, DNS follows the active interface, and failover
plus failback happen automatically within milliseconds of a link change. Verified on hardware with cable pulls,
VLAN changes and runtime enable/disable cycles. See network for configuration.
Performance Optimizations
Section titled “Performance Optimizations”Several components stopped doing busy-work on every loop iteration:
- espnow no longer polls the WiFi driver every loop and disables its loop entirely while idle (#18027); it was one of the most expensive idle components at 0.056 ms per iteration, and its idle cost is now zero
- script components with queued mode stop polling while the queue is empty (#18121)
- improv_serial reduced its per-loop overhead (#16019)
- The blocking-warning log time no longer cascades into false warnings for subsequent components (#17710)
Modbus Overhaul Continues
Section titled “Modbus Overhaul Continues”Led by @exciton, the multi-release Modbus rework reached a milestone. The
modbus_controller message handling was rebuilt (#11781):
commands from all controllers now share the hub’s queue fairly (previously some controllers could starve),
responses are routed straight back to the command that sent them so a reply can no longer be applied to the
wrong sensor, offline devices are tracked per device instead of per command, and the common command path is
heap-free. Two controllers may now even share one device address to poll at different intervals.
A new modbus_client component (#17676) enables ad-hoc Modbus transactions straight from YAML automations, with typed read/write actions (#18078), a plain device handle for lambdas (#18146), and read/write multiple registers in one transaction (#18215).
Server mode grew too, with contributions from @zweckj and @marpi82: coil and discrete-input support (#17464), read/write multiple registers (function code 0x17, #17357), spec-compliant broadcast writes (#17387) and byte-swapped word types (#17829).
Note that command_throttle and allow_duplicate_commands on modbus_controller are deprecated and no longer
have any effect; use turnaround_time on the modbus hub instead. See Breaking Changes for migration details.
Multi-Key OTA Signature Verification
Section titled “Multi-Key OTA Signature Verification”For externally signed firmware, @kbx81 added ESPHome-side OTA signature verification with a compiled-in trusted key list (#17981). An update is accepted if any of up to three signature blocks matches a trusted key, which enables signing key rotation (dual-sign a bridge release with old and new keys) and independent backup keys across signing providers. Bootloader updates are now signature-checked as well, closing a path where they previously installed unverified. See the OTA documentation for setup.
Voice and Media
Section titled “Voice and Media”@kahrendt landed the groundwork for wake words that are not baked into firmware:
micro_wake_word can now add and remove wake word models at runtime
(#17927). Models load into PSRAM with validation, the models
option is now optional, and a follow-up voice assistant integration will download models advertised by Home
Assistant.
The sendspin media player gained an image platform for album and artist artwork (#17937): artwork decodes into double-buffered frames a display or LVGL can draw, with optional cross-fade transitions.
New Components
Section titled “New Components”- ld6002b by @hepter, built across 5 PRs (#17819 onward): the Hi-Link HLK-LD6002B 60 GHz 3D presence radar, with per-target position tracking, configurable detection zones, interference areas, sensitivity and power management
- hoermann_hcp by @zweckj: controls Hörmann garage door motors over the HCP bus, with cover control (#17355), garage light (#18190) and a connectivity sensor (#18189)
- ds248x by @tomwellnitz: DS2482-100/-101/-800 and
DS2484 I²C-to-1-Wire bridges as a
one_wireplatform, so Dallas temperature sensors can hang off up to 8 bridged channels (#12717) - zephyr_pwm by @wiomoc: PWM outputs on nRF52 (#16483)
- modbus_client by @exciton, covered in the Modbus section above
New Hardware Support
Section titled “New Hardware Support”- CH390 SPI Ethernet by @ptr727: the WCH CH390 single-chip 10/100 MAC and PHY joins the ethernet component, verified at 100 Mbps full duplex (#18226)
- Displays: the JC8012P4A1-V2 panel revision for mipi_dsi by @rayz90 (#17457), the Waveshare ESP32-S3-Touch-LCD-3.5B (#17513) and the ST77916-based ESP-VoCat round display by @rggammon (#17679) for mipi_spi, the Guition JC8012P4A1 touchscreen for gsl3670 by @mpoettgen (#17843), and the 7-color Soldered Inkplate 6COLOR e-paper by @franFodor (#17717)
- OpenThread diagnostics by @Ardumine: 13 new numeric sensors exposing MAC and MLE counters plus parent link quality and RSSI (#17276)
- RGBW channel ordering for esp32_rmt_led_strip by
@peterkeen: the new
rgbw_orderoption places the white channel anywhere, matchingneopixelbus(#18028) - Haier short IR messages for remote_transmitter and remote_receiver by @ssieb (#17826), and configurable I2S PDM microphone downsampling by @egormanga (#17751)
Other Notable Features
Section titled “Other Notable Features”- Deep sleep wake automations by @jesserockz: the new
on_waketrigger on deep_sleep fires when the device wakes with the wake cause, and eachesp32_ext1_wakeuppin can carry its ownon_wakeso different wake buttons perform different actions (#17569) - Mitsubishi CN105 vane control by @crnjan: the component gained a top-level
hub, a vertical vane direction select, a vane state trigger and a
vane.controlaction (#16987, #16723, #16727, #16737) - LVGL by @clydebarrow: runtime theme updates via
lvgl.theme.update(#17678), widget stacking control vialvgl.widget.set_z_index(#17993), and apauseoption forround_tripanimations (#17574) - AQI over-range handling by @jasstrong: hazardous air quality now
interpolates correctly across 301-500 instead of pinning at 301, with a new
extended_rangeoption to extrapolate beyond 500 (#17570) - Zigbee improvements by @luar123 and
@TesseractTimmee: an
on_startautomation, automatic rejoin after network failure, leave-on-factory-reset, sensor resolution attributes and more units (#18009, #18008, #17973) - CC1101 tuning options by @hn: frequency offset compensation and bit synchronization registers are now configurable from YAML for narrowband protocols like wM-Bus (#17577)
- Modbus garage doors and more covered in the Modbus section above
Thank You, Contributors
Section titled “Thank You, Contributors”This release includes 348 pull requests from over 40 contributors. A huge thank you to everyone who made 2026.8.0 possible:
- @Bl00d-B0b - 42 PRs including the platform-neutral
ble_device_baselayer, the new BK72xx and LN882H BLE trackers, and the 13-batch migration of every BLE sensor platform - @jesserockz - 29 PRs including
deep_sleepon_waketriggers, RP2 platform cleanups and internal temperature fixes, and CI improvements - @swoboda1337 - 27 PRs including clang-tidy coverage for RP2 and LibreTiny, vendor SDK compatibility fixes, and security hardening
- @exciton - 25 PRs including the
modbus_controllerrefactor and the newmodbus_clientcomponent with typed actions - @kbx81 - 10 PRs including multi-key OTA signature verification, network
default-route arbitration, and the
veml3235auto-gain overhaul - @kahrendt - 7 PRs including runtime wake word model management and the
sendspinartwork image platform - @zweckj - 6 PRs including the new
hoermann_hcpgarage door component and Modbus server broadcast and 0x17 support - @bharvey88 - 6 PRs including the Sensirion
voc_index/nox_indexrenames andcv.rename_keyimprovements - @hepter - 6 PRs including the new
ld6002b60GHz presence radar component - @crnjan - 5 PRs including the
mitsubishi_cn105hub extraction and vertical vane control - @clydebarrow - 5 PRs including new LVGL actions and display models
- @tomaszduda23 - 4 PRs including nRF52 OTA support for the Adafruit bootloader and Zigbee radio stats
- @marpi82 - 3 PRs including byte-swapped Modbus word types with tests
- @luar123 - 3 PRs including Zigbee network handling improvements and the
on_startautomation - @p1ngb4ck - 2 PRs including
mcp4461persistence and wiper actions - @hn - 2 PRs including CC1101 frequency offset compensation options
- @jeroen85 - 2 PRs including OpenTherm and blocking-warning log fixes
- @egormanga - 2 PRs including I2S PDM microphone DSR selection
- @ximex - 2 PRs including unit capitalization fixes
- @ssieb - 2 PRs including Haier short IR message support
- @ptr727 - 2 PRs including CH390 SPI Ethernet support
- @TesseractTimmee - 2 PRs including Zigbee sensor resolution and units
- @tomwellnitz - the new
ds248xI²C-to-1-Wire bridge component - @rwalker777 - network priority for multi-interface support
- @wiomoc - the new
zephyr_pwmplatform for nRF52
Also thank you to @bdraco, @ShaTie, @Eelviny, @stas-sl, @jhenkens, @Rocco83, @matt123p, @rwrozelle, @jptrsn, @Ardumine, @rayz90, @lsellens, @ljungqvist, @jasstrong, @rggammon, @zerafachris, @franFodor, @mpoettgen, @kobihikri, @peterkeen, @youkorr for their contributions, and to everyone who reported issues, tested pre-releases, and helped in the community.
Breaking Changes
Section titled “Breaking Changes”BLE Sensor Platforms
Section titled “BLE Sensor Platforms”- All BLE sensor platforms: The auto-generated tracker reference key
esp32_ble_idis renamed toble_hub_idon every advertisement-based BLE platform (ble_presence,ble_rssi,ble_scanner, the mi-thermometer, BTHome, Mopeka, Ruuvi, Airthings, Inkbird, RadonEye, ThermoPro and Xiaomi families, andb_parasite,exposure_notifications). Most configurations never set this key explicitly; those that do keep validating with a warning until 2027.2.0, when the old key is removed #17716 #17950 #17951 #18161 #18165 #18168 #18170 #18171 #18172 #18174 #18178 #18180 #18183 - iBeacon parsing: A 23-byte Apple manufacturer payload must now carry the 0x02/0x15 iBeacon sub-type prefix to be treated as an iBeacon. Automations that matched spurious beacons with garbage UUIDs stop firing, which is the fix #18081
Component Changes
Section titled “Component Changes”- SGP4x / SEN5x / SEN6x: The
vocandnoxsensor keys are renamed tovoc_indexandnox_indexto reflect that they publish Sensirion’s unitless gas index, not a concentration. Old keys warn and auto-migrate until removal in 2027.2.0 #17723 #17724 #17725 - AQI: Over-range readings are no longer pinned to a flat value. US AQI readings above the top breakpoint now
interpolate correctly across 301-500 (and beyond with the new
extended_rangeoption), and CAQI is unbounded past 100 per the CITEAIR spec, so values reported during heavy pollution will change #17570 - LVGL: Animation weights greater than 1.0 in
ease_in/ease_outtiming are now rejected at validation (they previously produced out-of-range progress values), and the default ease timing changes slightly, which may be visible as a cosmetic difference #17574 - RC522 I²C: The default I²C address changed from
0x2Cto0x28to match the documentation and typical board wiring. If your reader relied on the old default, setaddress: 0x2Cexplicitly #17566
Modbus
Section titled “Modbus”- modbus_controller:
command_throttleandallow_duplicate_commandsno longer have any effect. They are still accepted with a validation warning and will be removed in 2027.2.0; useturnaround_timeon themodbuscomponent instead ofcommand_throttle#11781 - modbus_controller: When several sensors share a range’s start address, the polled range is now widened to cover the widest sensor. Devices that reject reads touching unmapped registers may return an exception where a shorter, registration-order-dependent read happened to succeed before #17677
- modbus_controller: Sensors polled with
custom_command: [0x17, ...](read/write multiple registers) no longer receive the leading byte-count byte in the payload; subtract one from theoffset:of any such sensor #18215 - modbus_server: Devices can no longer use
address: 0, which is the Modbus broadcast address. Broadcast writes are now correctly delivered to all server devices with no response; assign each server a unique address from 1-247 #17387
Web Server
Section titled “Web Server”- Entity IDs: The
idfield in the web server JSON now carries the{domain}/{device?}/{name}format and the transitionalname_idfield is removed, completing the migration announced in 2026.1. Current frontends handle this automatically; only pinned pre-2026.1.3 bundles or custom frontends keyed off the old id are affected #17586 - Alarm control panel domain: The JSON
domainfield now reportsalarm_control_panel(underscores) instead of the previously advertisedalarm-control-panel, matching the only route the server ever accepted #17594
Undocumented API Changes
Section titled “Undocumented API Changes”Advanced users with lambdas and external component maintainers should note the following internal C++ API changes. These are not covered by the formal breaking change policy, but lambdas sometimes depend on them.
- Modbus: The hub call
send_pdu()is renamed toqueue_pdu()to reflect that it queues a request rather than putting a frame on the wire;send_pdu()remains as a deprecated alias for the deprecation window, and asucceeded()helper replaces ad-hoc exception checks #18196 - Modbus server: Read lambdas can now decline a read by returning an empty optional, answering the request
with
SERVICE_DEVICE_FAILURE. A register lambda that literally wrotereturn {};previously produced0and now declines the read;ServerRegister::set_read_lambda<T>()widens its signature tooptional<T>#17464 - VEML3235:
gain: AUTOis removed from the schema (it never compiled; automatic mode remains the separateauto_gainoption, enabled by default), and the non-functionalset_power_on()/shutdown code path is removed #17551 - Zigbee:
is_connectedis renamed tois_joined(), and thejoined,startedandfactory_newmembers are now protected; useis_joined()andis_started()in lambdas instead #18007 #18008 - Web server base: The credential setters on
WebServerBasenow takeconst char *instead ofstd::string, and on non-ESP32 basic-auth buildsset_auth_username/set_auth_passwordare replaced byset_auth_basic_hash(part of the fix for basic auth failing with long credentials) #18237
Breaking Changes for Developers
Section titled “Breaking Changes for Developers”- ModbusController API: Handler signatures for
on_data_func,create_read_command()andcreate_custom_command()now takestd::span<const uint8_t>instead ofconst std::vector<uint8_t>&;on_register_data(),send_raw(),get_command_queue_length()and the 4-argumentcreate_read_command()overload are removed;ModbusCommandItemdata members are now protected (use the accessors); andModbusControllerno longer derives frommodbus::ModbusClientDevice#11781 - ModbusController sensor dispatch:
SensorItem::parse_and_publish()takesstd::span<const uint8_t>; external platforms must set addresses viaset_address()/set_offset_from_start_address()instead of assigningstart_address/offsetdirectly, andpayload_to_float()gains an explicitoffsetparameter #17677 - ESPBTDevice::address_str() deprecated: Use the buffer-based
address_str_to(); the old method is removed in 2027.2.0 #18092
For detailed migration guides and API documentation, see the ESPHome Developers Documentation.
Full list of changes
Section titled “Full list of changes”New Features
Section titled “New Features”- [mipi_dsi] Add JC8012P4A1-V2 esphome#17457 by @rayz90 (new-feature)
- [cc1101] Add FOCCFG and BSCFG config options esphome#17577 by @hn (new-feature)
- [aqi] Add extended_range option for over-range AQI values esphome#17570 by @jasstrong (new-feature) (breaking-change)
- [deep_sleep] Add on_wake automation triggers esphome#17569 by @jesserockz (new-feature)
- [ds248x] Add OneWireBus platform for DS248x I2C-to-1Wire bridges esphome#12717 by @tomwellnitz (new-component) (new-feature) (new-platform)
- [ethernet][network][wifi] Add network priority for multi-interface support esphome#14255 by @rwalker777 (new-feature)
- [bk72xx_ble] BLE controller support for BK72xx (BLE 5.x) esphome#17775 by @Bl00d-B0b (new-component) (new-feature)
- [gsl3670] Add a model configuration for the Guition JC8012P4A1 esphome#17843 by @mpoettgen (new-feature)
- [mipi_spi] Add ST77916 / ESP-VoCat model esphome#17679 by @rggammon (new-feature)
- [remote_base] support haier short IR message esphome#17826 by @ssieb (new-feature)
- [bk72xx_ble_tracker] BLE 5.x scanner for BK72xx esphome#17135 by @Bl00d-B0b (new-component) (new-feature)
- [mipi_spi] Add Waveshare ESP32-S3-Touch-LCD-3.5B esphome#17513 by @clydebarrow (new-feature)
- [epaper_spi] Add Inkplate 6COLOR support esphome#17717 by @franFodor (new-feature)
- [lvgl] Add lvgl.theme.update action esphome#17678 by @clydebarrow (new-feature)
- [openthread_info] Add more sensors for Openthread info esphome#17276 by @Ardumine (new-feature) (new-platform)
- [ln882h_ble] BLE controller support for LN882H esphome#17777 by @Bl00d-B0b (new-component) (new-feature)
- [nrf52] feat: add support for zephyr pwm esphome#16483 by @wiomoc (new-component) (new-feature) (new-platform)
- [i2s_audio] Implemented I2S PDM Microphone DSR selection esphome#17751 by @egormanga (new-feature)
- [rp2040_ble] Add controller scan primitives esphome#18001 by @bdraco (new-feature)
- [rp2_ble_tracker] BLE tracker for Raspberry Pi Pico W esphome#18002 by @bdraco (new-component) (new-feature)
- [rp2_ble_tracker] Add active scanning support esphome#18035 by @bdraco (new-feature)
- [ln882h_ble_tracker] BLE 5.x scanner for LN882H esphome#16691 by @Bl00d-B0b (new-component) (new-feature)
- [lvgl] Add lvgl.widget.set_z_index action esphome#17993 by @clydebarrow (new-feature)
- [lvgl] Add pause option to
round_tripanimation timing esphome#17574 by @clydebarrow (new-feature) (breaking-change) - [esp32_rmt_led_strip] Add RGBW channel ordering esphome#18028 by @peterkeen (new-feature)
- [zigbee] Resolution attribute for esp32 sensors esphome#17973 by @TesseractTimmee (new-feature)
- [micro_wake_word] Support adding and removing wake word models at runtime esphome#17927 by @kahrendt (new-feature)
- [ln882h_ble_tracker] Automation triggers and actions esphome#17778 by @Bl00d-B0b (new-feature)
- [bk72xx_ble_tracker] Automation triggers and actions esphome#17776 by @Bl00d-B0b (new-feature)
- [modbus_server] Support byte-swapped word types U_WORD_S and S_WORD_S esphome#17829 by @marpi82 (new-feature)
- [ota] Multi-key OTA signature verification for external RSA signing esphome#17981 by @kbx81 (new-feature)
- [bluetooth_proxy] Platform-neutral advertisement proxy via ble_device_base esphome#17880 by @Bl00d-B0b (new-feature)
- [ld6002b] Add LD6002B 60GHz presence radar (1/5) esphome#17819 by @hepter (new-component) (new-feature) (new-platform)
- [ld6002b] Add target sensors (2/5) esphome#17820 by @hepter (new-feature) (new-platform)
- [modbus_client] Add component for ad-hoc modbus request/response esphome#17676 by @exciton (new-component) (new-feature)
- [zigbee] Add on_start automation (3/3) esphome#18009 by @luar123 (new-feature)
- [ld6002b] Add switch, number and text sensor platforms (3/5) esphome#17821 by @hepter (new-feature) (new-platform)
- [ble_device_base] Migrate BLE sensor platforms to the neutral layer (batch 1: ble_presence, ble_rssi, ble_scanner) esphome#17716 by @Bl00d-B0b (new-feature) (breaking-change)
- [ble_device_base] Migrate BLE sensor platforms to the neutral layer (batch 2: atc_mithermometer, pvvx_mithermometer, bthome_mithermometer) esphome#17950 by @Bl00d-B0b (new-feature) (breaking-change)
- [ble_device_base] Migrate BLE sensor platforms to the neutral layer (batch 3: mopeka_ble, mopeka_pro_check, mopeka_std_check) esphome#17951 by @Bl00d-B0b (new-feature) (breaking-change)
- [ld6002b] Add select and button platforms (4/5) esphome#17822 by @hepter (new-feature) (new-platform)
- [bluetooth_proxy] Enable active connections on rp2 esphome#18132 by @bdraco (new-feature)
- [modbus] Add server support for read/write multiple registers (0x17) esphome#17357 by @zweckj (new-feature)
- [modbus_client] Add typed read/write actions esphome#18078 by @exciton (new-feature)
- [ble_device_base] Migrate BLE sensor platforms to the neutral layer (batch 4: ruuvi_ble, ruuvitag, b_parasite) esphome#18161 by @Bl00d-B0b (new-feature) (breaking-change)
- [ble_device_base] Migrate BLE sensor platforms to the neutral layer (batch 5: airthings_ble, inkbird_ibsth1_mini, radon_eye_ble) esphome#18165 by @Bl00d-B0b (new-feature) (breaking-change)
- [modbus_client] Lambda sugar esphome#18146 by @exciton (new-feature)
- [ble_device_base] Migrate BLE sensor platforms to the neutral layer (batch 6: thermopro_ble, exposure_notifications, xiaomi_ble) esphome#18168 by @Bl00d-B0b (new-feature) (breaking-change)
- [ble_device_base] Migrate BLE sensor platforms to the neutral layer (batch 7: xiaomi_cgd1, xiaomi_cgdk2, xiaomi_cgg1) esphome#18170 by @Bl00d-B0b (new-feature) (breaking-change)
- [ble_device_base] Migrate BLE sensor platforms to the neutral layer (batch 8: xiaomi_cgpr1, xiaomi_gcls002, xiaomi_hhccjcy01) esphome#18171 by @Bl00d-B0b (new-feature) (breaking-change)
- [ble_device_base] Migrate BLE sensor platforms to the neutral layer (batch 9: xiaomi_hhccjcy10, xiaomi_hhccpot002, xiaomi_jqjcy01ym) esphome#18172 by @Bl00d-B0b (new-feature) (breaking-change)
- [ble_device_base] Migrate BLE sensor platforms to the neutral layer (batch 10: xiaomi_lywsd02, xiaomi_lywsd02mmc, xiaomi_lywsd03mmc) esphome#18174 by @Bl00d-B0b (new-feature) (breaking-change)
- [ble_device_base] Migrate BLE sensor platforms to the neutral layer (batch 11: xiaomi_lywsdcgq, xiaomi_mhoc303, xiaomi_mhoc401) esphome#18178 by @Bl00d-B0b (new-feature) (breaking-change)
- [ble_device_base] Migrate BLE sensor platforms to the neutral layer (batch 12: xiaomi_miscale, xiaomi_mjyd02yla, xiaomi_mue4094rt) esphome#18180 by @Bl00d-B0b (new-feature) (breaking-change)
- [modbus] Route broadcast writes (address 0) to all server devices esphome#17387 by @zweckj (new-feature) (breaking-change)
- [ble_device_base] Migrate BLE sensor platforms to the neutral layer (batch 13: xiaomi_rtcgq02lm, xiaomi_wx08zm, xiaomi_xmwsdj04mmc) esphome#18183 by @Bl00d-B0b (new-feature) (breaking-change)
- [ld6002b] Add area and zone configuration (5/5) esphome#17823 by @hepter (new-feature)
- [ethernet] Add CH390 SPI ethernet support esphome#18226 by @ptr727 (new-feature)
- [mitsubishi_cn105] Extract top-level hub esphome#16987 by @crnjan (new-feature)
- [bk72xx_ble] Support active scanning by packing the GAPM start command esphome#18169 by @bdraco (new-feature)
- [modbus_client] Add read/write multiple registers (FC 0x17) esphome#18215 by @exciton (new-feature) (breaking-change)
- [hoermann_hcp] Add Hörmann HCP garage door component esphome#17355 by @zweckj (new-component) (new-feature) (new-platform)
- [mitsubishi_cn105] Add vertical vane direction select esphome#16723 by @crnjan (new-feature) (new-platform)
- [modbus_server] Add coil/discrete-input support esphome#17464 by @exciton (new-feature)
- [hoermann_hcp] Add connectivity binary sensor esphome#18189 by @zweckj (new-feature) (new-platform)
- [rp2040_ble][bluetooth_connection] 3 connection slots on rp2 with esp32 parity esphome#18247 by @bdraco (new-feature)
- [mitsubishi_cn105] Add vertical vane state trigger esphome#16727 by @crnjan (new-feature)
- [sendspin] Add image platform for artwork esphome#17937 by @kahrendt (new-feature) (new-platform)
- [mitsubishi_cn105] Add vertical vane control action esphome#16737 by @crnjan (new-feature)
- [ethernet][network][wifi] Arbitrate the default route from the network priority list esphome#17797 by @kbx81 (new-feature)
- [hoermann_hcp] Add garage light control esphome#18190 by @zweckj (new-feature) (new-platform)
- [core] Add esphome logs over web_server HTTP SSE esphome#17110 by @bdraco (new-feature)
New Components
Section titled “New Components”- [ds248x] Add OneWireBus platform for DS248x I2C-to-1Wire bridges esphome#12717 by @tomwellnitz (new-component) (new-feature) (new-platform)
- [ble_device_base] Platform-neutral BLE layer; esp32_ble_tracker implements BLEHub esphome#17150 by @Bl00d-B0b (new-component)
- [bk72xx_ble] BLE controller support for BK72xx (BLE 5.x) esphome#17775 by @Bl00d-B0b (new-component) (new-feature)
- [bk72xx_ble_tracker] BLE 5.x scanner for BK72xx esphome#17135 by @Bl00d-B0b (new-component) (new-feature)
- [ln882h_ble] BLE controller support for LN882H esphome#17777 by @Bl00d-B0b (new-component) (new-feature)
- [nrf52] feat: add support for zephyr pwm esphome#16483 by @wiomoc (new-component) (new-feature) (new-platform)
- [rp2_ble_tracker] BLE tracker for Raspberry Pi Pico W esphome#18002 by @bdraco (new-component) (new-feature)
- [ln882h_ble_tracker] BLE 5.x scanner for LN882H esphome#16691 by @Bl00d-B0b (new-component) (new-feature)
- [ld6002b] Add LD6002B 60GHz presence radar (1/5) esphome#17819 by @hepter (new-component) (new-feature) (new-platform)
- [modbus_client] Add component for ad-hoc modbus request/response esphome#17676 by @exciton (new-component) (new-feature)
- [bluetooth_connection] Move BluetoothConnection out of bluetooth_proxy esphome#18129 by @bdraco (new-component)
- [hoermann_hcp] Add Hörmann HCP garage door component esphome#17355 by @zweckj (new-component) (new-feature) (new-platform)
New Platforms
Section titled “New Platforms”- [ds248x] Add OneWireBus platform for DS248x I2C-to-1Wire bridges esphome#12717 by @tomwellnitz (new-component) (new-feature) (new-platform)
- [openthread_info] Add more sensors for Openthread info esphome#17276 by @Ardumine (new-feature) (new-platform)
- [nrf52] feat: add support for zephyr pwm esphome#16483 by @wiomoc (new-component) (new-feature) (new-platform)
- [ld6002b] Add LD6002B 60GHz presence radar (1/5) esphome#17819 by @hepter (new-component) (new-feature) (new-platform)
- [ld6002b] Add target sensors (2/5) esphome#17820 by @hepter (new-feature) (new-platform)
- [ld6002b] Add switch, number and text sensor platforms (3/5) esphome#17821 by @hepter (new-feature) (new-platform)
- [ld6002b] Add select and button platforms (4/5) esphome#17822 by @hepter (new-feature) (new-platform)
- [hoermann_hcp] Add Hörmann HCP garage door component esphome#17355 by @zweckj (new-component) (new-feature) (new-platform)
- [mitsubishi_cn105] Add vertical vane direction select esphome#16723 by @crnjan (new-feature) (new-platform)
- [hoermann_hcp] Add connectivity binary sensor esphome#18189 by @zweckj (new-feature) (new-platform)
- [sendspin] Add image platform for artwork esphome#17937 by @kahrendt (new-feature) (new-platform)
- [hoermann_hcp] Add garage light control esphome#18190 by @zweckj (new-feature) (new-platform)
Breaking Changes
Section titled “Breaking Changes”- [aqi] Add extended_range option for over-range AQI values esphome#17570 by @jasstrong (new-feature) (breaking-change)
- [rc522_i2c] Change default address to match whats in the docs esphome#17566 by @lsellens (breaking-change)
- [web_server] Use alarm_control_panel as the domain in JSON esphome#17594 by @bdraco (breaking-change)
- [web_server] Switch entity id to the new format and drop name_id esphome#17586 by @bdraco (breaking-change)
- [sgp4x] Rename voc/nox sensor keys to voc_index/nox_index esphome#17723 by @bharvey88 (breaking-change)
- [sen5x] Rename voc/nox sensor keys to voc_index/nox_index esphome#17724 by @bharvey88 (breaking-change)
- [sen6x] Rename voc/nox sensor keys to voc_index/nox_index esphome#17725 by @bharvey88 (breaking-change)
- [modbus_controller] Span response path; keep sensor addresses as configured esphome#17677 by @exciton (breaking-change)
- [lvgl] Add pause option to
round_tripanimation timing esphome#17574 by @clydebarrow (new-feature) (breaking-change) - [modbus_controller] Refactor to simplify message handling esphome#11781 by @exciton (breaking-change)
- [ble_device_base] Deprecate address_str in favor of address_str_to esphome#18092 by @bdraco (breaking-change)
- [ble_device_base] Hub provider registry and shared consumer helpers esphome#18081 by @Bl00d-B0b (breaking-change)
- [ble_device_base] Migrate BLE sensor platforms to the neutral layer (batch 1: ble_presence, ble_rssi, ble_scanner) esphome#17716 by @Bl00d-B0b (new-feature) (breaking-change)
- [ble_device_base] Migrate BLE sensor platforms to the neutral layer (batch 2: atc_mithermometer, pvvx_mithermometer, bthome_mithermometer) esphome#17950 by @Bl00d-B0b (new-feature) (breaking-change)
- [ble_device_base] Migrate BLE sensor platforms to the neutral layer (batch 3: mopeka_ble, mopeka_pro_check, mopeka_std_check) esphome#17951 by @Bl00d-B0b (new-feature) (breaking-change)
- [ble_device_base] Migrate BLE sensor platforms to the neutral layer (batch 4: ruuvi_ble, ruuvitag, b_parasite) esphome#18161 by @Bl00d-B0b (new-feature) (breaking-change)
- [ble_device_base] Migrate BLE sensor platforms to the neutral layer (batch 5: airthings_ble, inkbird_ibsth1_mini, radon_eye_ble) esphome#18165 by @Bl00d-B0b (new-feature) (breaking-change)
- [ble_device_base] Migrate BLE sensor platforms to the neutral layer (batch 6: thermopro_ble, exposure_notifications, xiaomi_ble) esphome#18168 by @Bl00d-B0b (new-feature) (breaking-change)
- [ble_device_base] Migrate BLE sensor platforms to the neutral layer (batch 7: xiaomi_cgd1, xiaomi_cgdk2, xiaomi_cgg1) esphome#18170 by @Bl00d-B0b (new-feature) (breaking-change)
- [ble_device_base] Migrate BLE sensor platforms to the neutral layer (batch 8: xiaomi_cgpr1, xiaomi_gcls002, xiaomi_hhccjcy01) esphome#18171 by @Bl00d-B0b (new-feature) (breaking-change)
- [ble_device_base] Migrate BLE sensor platforms to the neutral layer (batch 9: xiaomi_hhccjcy10, xiaomi_hhccpot002, xiaomi_jqjcy01ym) esphome#18172 by @Bl00d-B0b (new-feature) (breaking-change)
- [ble_device_base] Migrate BLE sensor platforms to the neutral layer (batch 10: xiaomi_lywsd02, xiaomi_lywsd02mmc, xiaomi_lywsd03mmc) esphome#18174 by @Bl00d-B0b (new-feature) (breaking-change)
- [ble_device_base] Migrate BLE sensor platforms to the neutral layer (batch 11: xiaomi_lywsdcgq, xiaomi_mhoc303, xiaomi_mhoc401) esphome#18178 by @Bl00d-B0b (new-feature) (breaking-change)
- [ble_device_base] Migrate BLE sensor platforms to the neutral layer (batch 12: xiaomi_miscale, xiaomi_mjyd02yla, xiaomi_mue4094rt) esphome#18180 by @Bl00d-B0b (new-feature) (breaking-change)
- [modbus] Route broadcast writes (address 0) to all server devices esphome#17387 by @zweckj (new-feature) (breaking-change)
- [ble_device_base] Migrate BLE sensor platforms to the neutral layer (batch 13: xiaomi_rtcgq02lm, xiaomi_wx08zm, xiaomi_xmwsdj04mmc) esphome#18183 by @Bl00d-B0b (new-feature) (breaking-change)
- [modbus_client] Add read/write multiple registers (FC 0x17) esphome#18215 by @exciton (new-feature) (breaking-change)
Beta Changes
Section titled “Beta Changes”- [usb_uart] Fix uint32_t format specifier warning in pl2303 esphome#18310 by @bdraco
- Bump aioesphomeapi from 45.10.0 to 45.10.1 esphome#18318 by @esphome[bot]
- [sendspin] Bump sendspin-cpp to v0.7.2 esphome#18316 by @kahrendt
- Bump bundled esphome-device-builder to 1.9.6 esphome#18328 by @esphome[bot]
- [ld2420] Fix out-of-bounds read when device reports unknown command error esphome#18322 by @bdraco
- [core] Don’t block logs startup on MQTT IP discovery when addresses are known esphome#18313 by @bdraco
- [core] Retry framework downloads on transient network errors esphome#18330 by @bdraco
All changes
Section titled “All changes”- [epaper_spi] Remove noop deep sleep command esphome#15595 by @Eelviny
- [gsl3670] Reference the test display explicitly so grouped CI builds validate esphome#17462 by @swoboda1337
- [docs] Document web server as an open HTTP API by design in threat model esphome#17465 by @jesserockz
- [mipi_dsi] Add JC8012P4A1-V2 esphome#17457 by @rayz90 (new-feature)
- [ci] Group component test output into collapsible CI log sections esphome#17536 by @jesserockz
- [script] Fix duplicate import in build_codeowners.py esphome#17543 by @clydebarrow
- [tests] Add test_display component to free touchscreen tests from display pins esphome#17540 by @jesserockz
- [cc1101] Export CC1101Listener to Python esphome#17576 by @hn
- [ci] Add rp2 clang-tidy environment esphome#17486 by @swoboda1337
- [cc1101] Add FOCCFG and BSCFG config options esphome#17577 by @hn (new-feature)
- [aqi] Add extended_range option for over-range AQI values esphome#17570 by @jasstrong (new-feature) (breaking-change)
- [deep_sleep] Add on_wake automation triggers esphome#17569 by @jesserockz (new-feature)
- [rc522_i2c] Change default address to match whats in the docs esphome#17566 by @lsellens (breaking-change)
- [ci] Extend variant clang-tidy scans to USB logger, tsens and LP peripheral code esphome#17580 by @swoboda1337
- [scheduler] Remove deprecated set_retry/cancel_retry esphome#17585 by @bdraco
- [veml3235] Overhaul auto-gain and fix latent config bugs esphome#17551 by @kbx81
- [esp32_ble] Remove deprecated ESPBTUUID::to_string() esphome#17590 by @bdraco
- [water_heater] Remove deprecated WaterHeaterCall::get_state() esphome#17592 by @bdraco
- [voice_assistant] Remove deprecated Timer::to_string() esphome#17591 by @bdraco
- [api] Remove outdated API version warning esphome#17593 by @bdraco
- [network] Remove deprecated IPAddress::str() esphome#17589 by @bdraco
- [improv_base] Bump Improv library to 1.2.6 esphome#17599 by @kbx81
- [haier][teleinfo][hlk_fm22x][rp2040_ble] Rename enum members that collide with vendor SDK macros esphome#17595 by @swoboda1337
- [libretiny] Code fixes for upcoming LibreTiny clang-tidy scans esphome#17596 by @swoboda1337
- [ci] Restore memory impact detail for ESP-IDF builds esphome#17587 by @bdraco
- [api] Don’t spam tracebacks when decoding a crash without a local build esphome#17597 by @bdraco
- [web_server] Use alarm_control_panel as the domain in JSON esphome#17594 by @bdraco (breaking-change)
- [web_server] Switch entity id to the new format and drop name_id esphome#17586 by @bdraco (breaking-change)
- [mlx90393] Compile out on BK72xx where the bundled library cannot build esphome#17614 by @swoboda1337
- [midea] Restrict to platforms where MideaUART actually builds esphome#17613 by @swoboda1337
- [opentherm] Rename OpenthermData accessors that collide with vendor SDK type macros esphome#17611 by @swoboda1337
- [bluetooth_proxy] Bound GATT characteristic/descriptor enumeration to allocated size esphome#17625 by @swoboda1337
- [esp32_ble_server] Validate descriptor write length before copying esphome#17626 by @swoboda1337
- [runtime_image] Prevent integer overflow in image buffer size calculation esphome#17624 by @swoboda1337
- [nextion] Fix RP2040 clang-tidy failure from TFT upload guard mismatch esphome#17638 by @kbx81
- [ci] Add LibreTiny clang-tidy environments esphome#17491 by @swoboda1337
- [espidf] Prune tool download cache after install to shrink the ESP-IDF cache esphome#17661 by @swoboda1337
- [ds248x] Add OneWireBus platform for DS248x I2C-to-1Wire bridges esphome#12717 by @tomwellnitz (new-component) (new-feature) (new-platform)
- [zigbee] add radio power off stats esphome#17521 by @tomaszduda23
- [nrf52] add platform: ultrasonic test esphome#17665 by @tomaszduda23
- [core] Prevent blocking-warning log time from cascading esphome#17710 by @jeroen85
- [network] Fix IPAddress IPv6 support on HOST platform esphome#17067 by @rwrozelle
- [nrf52] add platformio deprecation warning esphome#17705 by @tomaszduda23
- [core] Reduce memory footprint of esphome upload esphome#17684 by @bdraco
- [ble_device_base] Platform-neutral BLE layer; esp32_ble_tracker implements BLEHub esphome#17150 by @Bl00d-B0b (new-component)
- [ethernet][network][wifi] Add network priority for multi-interface support esphome#14255 by @rwalker777 (new-feature)
- [github] Add developer-facing feature PR classification esphome#17795 by @jesserockz
- [sgp4x] Fix sgp4x VOC baseline restoration esphome#15667 by @stas-sl
- [bk72xx_ble] BLE controller support for BK72xx (BLE 5.x) esphome#17775 by @Bl00d-B0b (new-component) (new-feature)
- [api][climate][water_heater][core] Add temperature unit support to climate and water heater c++ entities esphome#16477 by @jhenkens
- [bk72xx_ble] Scan primitives and main-task scan report queue esphome#17802 by @Bl00d-B0b
- [modbus] Heap-free response path esphome#17377 by @exciton
- [modbus] Rename core enums to EntityType, FunctionCode and ExceptionCode esphome#17844 by @exciton
- [modbus_controller] Qualify modbus::EntityType at use sites esphome#17845 by @exciton
- [gsl3670] Add a model configuration for the Guition JC8012P4A1 esphome#17843 by @mpoettgen (new-feature)
- [mipi_spi] Add ST77916 / ESP-VoCat model esphome#17679 by @rggammon (new-feature)
- [modbus] Frame accessors, PDU-relative lengths, and span-based send_pdu esphome#17846 by @exciton
- [modbus] Turn the ModbusDevice alias into a working compatibility shim esphome#17854 by @exciton
- [modbus] PackedBits and right-sized typed PDU builders esphome#17848 by @exciton
- [esp32] Capture fault address and raw cause in crash handler esphome#17769 by @bdraco
- [opentherm] Fix l/min unit capitalization to L/min esphome#17804 by @ximex
- [ezo_pmp] Fix ml/min and ml unit capitalization esphome#17803 by @ximex
- [espidf] Also skip installing gdb and ULP toolchains ESPHome never runs esphome#17687 by @bdraco
- [modbus] Typed send helpers; migrate in-tree callers off send() esphome#17859 by @exciton
- [ble_device_base] Shared address-type string and discovered-device log esphome#17861 by @Bl00d-B0b
- [dallas_temp][ds2484] Fix one_wire test configs for grouped CI batches esphome#17868 by @swoboda1337
- [ci] Enforce list form for platform domains in test fixtures esphome#17869 by @swoboda1337
- [modbus] Typed client send helpers and response callbacks esphome#17435 by @exciton
- [web_server] Add assumed_state to cover JSON detail esphome#16800 by @Rocco83
- [remote_base] support haier short IR message esphome#17826 by @ssieb (new-feature)
- [espidf] Install only the toolchains for the variants being built esphome#17688 by @bdraco
- [esp8266] Speed up builds with ccache when available esphome#17722 by @bdraco
- [rp2] Speed up builds with ccache when available esphome#17727 by @bdraco
- [libretiny] Speed up builds with ccache when available esphome#17726 by @bdraco
- [logger] flush lines for host logger esphome#17878 by @ssieb
- [nrf52] add OTA for Adafruit_nRF52_Bootloader esphome#17381 by @tomaszduda23
- [safe_mode] Prevent OTA rollback when entering deep sleep esphome#17699 by @jesserockz
- [modbus] Command lifecycle: PDU-carrying callbacks, on_sent(), notified queue clearing esphome#17886 by @exciton
- [modbus] Fold the repeated PDU validation idioms into shared helpers esphome#17888 by @exciton
- [host] Speed up builds with ccache when available esphome#17728 by @bdraco
- [ci] Persist the integration test ccache across runs esphome#17735 by @bdraco
- [bk72xx_ble_tracker] BLE 5.x scanner for BK72xx esphome#17135 by @Bl00d-B0b (new-component) (new-feature)
- [nrf52] Clone the sdk-nrf manifest repository shallow esphome#17892 by @esphbot
- [i2s_audio] Eliminated a double unit conversion in
read_()esphome#17752 by @egormanga - [core] Add optional deprecation warning to cv.rename_key esphome#17740 by @bharvey88
- [core] Move JSON string escaping into helpers esphome#17879 by @jesserockz
- [bluetooth_proxy] Answer UNPAIR with BluetoothDeviceUnpairingResponse esphome#17895 by @Bl00d-B0b
- [ci] Read the GitHub event file as UTF-8 esphome#17896 by @bdraco
- [ci] Attribute device class sync commits to the esphome[bot] account esphome#17898 by @jesserockz
- [ble_device_base] Add mac_lsb_first_to_uint64 address-packing helper esphome#17901 by @Bl00d-B0b
- [const] Move CONF_SCAN_PARAMETERS and CONF_WINDOW to components/const esphome#17900 by @Bl00d-B0b
- [ble_device_base] Replace raw-advertisement std::function with a lightweight callback slot esphome#17902 by @Bl00d-B0b
- [captive_portal] Re-apply json_escape move lost in release merge esphome#17906 by @Bl00d-B0b
- [ci] Bind the branch name to env before sanitising it into a docker tag esphome#17910 by @kobihikri
- [improv_serial] Reduce per-loop overhead esphome#16019 by @bdraco
- [core] Reject configs that set both keys in cv.rename_key esphome#17916 by @bharvey88
- [sgp4x] Rename voc/nox sensor keys to voc_index/nox_index esphome#17723 by @bharvey88 (breaking-change)
- [sen5x] Rename voc/nox sensor keys to voc_index/nox_index esphome#17724 by @bharvey88 (breaking-change)
- [sen6x] Rename voc/nox sensor keys to voc_index/nox_index esphome#17725 by @bharvey88 (breaking-change)
- [core] Expand AGENTS.md AI contributor guidance esphome#17741 by @bharvey88
- [mipi_spi] Add Waveshare ESP32-S3-Touch-LCD-3.5B esphome#17513 by @clydebarrow (new-feature)
- [epaper_spi] Add Inkplate 6COLOR support esphome#17717 by @franFodor (new-feature)
- [opentherm] Restore idle output when stopped esphome#17834 by @jeroen85
- [sgp4x] Fix datasheet conformance issues esphome#17828 by @kbx81
- [lvgl] Add lvgl.theme.update action esphome#17678 by @clydebarrow (new-feature)
- [api] Stop advertising external wake words the device cannot load esphome#17926 by @kahrendt
- [ci] Enable the ruff rule requiring explicit encoding on text file I/O esphome#17897 by @bdraco
- [voice_assistant] Fix playback when CPU is loaded esphome#17043 by @matt123p
- [esp32] Add platformio toolchain deprecation warning esphome#17947 by @swoboda1337
- [esp32][mdns][runtime_image] Bump recommended Arduino to 3.3.11 and platform to 55.03.311 esphome#17875 by @swoboda1337
- [runtime_image] Allow decoding into a caller-owned buffer esphome#17936 by @kahrendt
- [config_validation] Add underscore/hyphen normalization to one_of esphome#17792 by @jesserockz
- [ble_client] Do not walk the GATT cache after releasing services esphome#17919 by @ptr727
- [ci] Switch stale to the shared real-activity workflow esphome#17960 by @swoboda1337
- [core] Log when a git source update is skipped and when it will next refresh esphome#17943 by @bdraco
- [ci] Authenticate the stale workflow as esphome[bot] esphome#17974 by @jesserockz
- [ci] Tell stacked pull requests apart from hand-built chains esphome#17980 by @jesserockz
- [ci] Report an empty Codecov upload when pytest is skipped esphome#17976 by @jesserockz
- [ci] Drop the unused Codecov upload token esphome#17977 by @jesserockz
- [zigbee] Add more units esphome#17982 by @TesseractTimmee
- [ci] Order jobs to follow the CI flow and close ci-status gaps esphome#17979 by @jesserockz
- [openthread_info] Add more sensors for Openthread info esphome#17276 by @Ardumine (new-feature) (new-platform)
- [ln882h_ble] BLE controller support for LN882H esphome#17777 by @Bl00d-B0b (new-component) (new-feature)
- [serial_proxy] Restrict port operations to the subscriber and harden subscription handling esphome#17796 by @kbx81
- [nextion] Reconnect stale HTTP connection during TFT upload esphome#17824 by @kbx81
- [heatpumpir] Expose configured min/max as the visual temperature range esphome#17985 by @swoboda1337
- [modbus] Rework the client queue as a per-frame state machine esphome#17922 by @exciton
- [modbus] Restore function code byte for custom codes in deprecated on_modbus_data esphome#18006 by @exciton
- [nrf52] feat: add support for zephyr pwm esphome#16483 by @wiomoc (new-component) (new-feature) (new-platform)
- [ble_device_base] Share scan parameter validation between trackers esphome#18003 by @bdraco
- [bk72xx_ble_tracker] Fix scan start retry and stale-millis underflow esphome#17992 by @Bl00d-B0b
- [esp32_hosted] Bump esp_hosted to 2.12.12, esp_wifi_remote to 1.6.3 esphome#18030 by @swoboda1337
- [i2s_audio] Implemented I2S PDM Microphone DSR selection esphome#17751 by @egormanga (new-feature)
- [rp2040_ble] Add controller scan primitives esphome#18001 by @bdraco (new-feature)
- [wifi] Notify connect state listeners after driver initiated roams esphome#18034 by @bdraco
- [midea] Add ESP-IDF framework support esphome#12646 by @ShaTie
- [modbus_controller] Span response path; keep sensor addresses as configured esphome#17677 by @exciton (breaking-change)
- [rp2_ble_tracker] BLE tracker for Raspberry Pi Pico W esphome#18002 by @bdraco (new-component) (new-feature)
- [espnow] Stop polling the Wi-Fi driver every loop and disable loop when idle esphome#18027 by @bdraco
- [logger] Stub out ROM ets_putc on ESP8266 when serial logging is disabled esphome#17970 by @bdraco
- [esp8266] Move wifi rate tables to DRAM to fix beacon parse crash esphome#17968 by @bdraco
- [esp32] Flag crash records captured by a different firmware build esphome#17770 by @bdraco
- [api] Move runtime log client out of the component package esphome#18043 by @bdraco
- [core] Hash entity keys from the raw name to fix collisions esphome#17949 by @bdraco
- [substitutions][core] Expand templated !include paths to on-disk candidates during bundle discovery esphome#17647 by @bdraco
- [core] Support local library directories via file:// on the native toolchain esphome#18005 by @swoboda1337
- [rp2_ble_tracker] Add active scanning support esphome#18035 by @bdraco (new-feature)
- [core] Parse stored framework versions without importing the validation stack esphome#18045 by @bdraco
- [ln882h_ble] Scan primitives and main-task scan report queue esphome#17835 by @Bl00d-B0b
- [ci] Replace pre-commit with prek esphome#18029 by @jesserockz
- [bk72xx_ble] Codegen-sized StaticVector for scan listeners esphome#18055 by @Bl00d-B0b
- [modbus_controller] Add bus-fairness integration test (xfail until #11781) esphome#17345 by @exciton
- [ble_device_base] Scan-mode request contract on BLEHub esphome#18061 by @Bl00d-B0b
- [bk72xx_ble_tracker] Brace single-statement loop flagged by clang-tidy esphome#18070 by @Bl00d-B0b
- [libretiny] Give each platform its own CONFIG_SCHEMA instance esphome#18056 by @bdraco
- [core] Ship secrets referenced by remote package files in config bundles esphome#18053 by @bdraco
- [core] Resolve platform CLI hooks from a registry instead of importing the platform package esphome#18044 by @bdraco
- [modbus] Add unit tests for U_WORD_S and S_WORD_S esphome#17831 by @marpi82
- [rp2_ble_tracker] Extract stamp-and-start helper; pin capability/switch independence esphome#18072 by @Bl00d-B0b
- [bthome_mithermometer] Gate log-only MAC helper by log level esphome#18064 by @Bl00d-B0b
- [core] Unbind the esp-idf toolchain from the esp32 component package esphome#18068 by @bdraco
- [core] Share the stacktrace analyzer resolution in platform_hooks esphome#18075 by @bdraco
- [core] Shared slot count factory for codegen sized listener storage esphome#18057 by @bdraco
- [core] Read the esp32 variant for esptool without importing the esp32 package esphome#18067 by @bdraco
- [core] Drop the duplicate ESPHome version parser esphome#18065 by @bdraco
- [core] Read the mqtt IP discovery flag without importing the mqtt component esphome#18066 by @bdraco
- [rp2040_ble] Codegen sized StaticVector for scan listeners esphome#18058 by @bdraco
- [ln882h_ble_tracker] BLE 5.x scanner for LN882H esphome#16691 by @Bl00d-B0b (new-component) (new-feature)
- [esp32_ble] Migrate the BLE count machinery to the shared slot counter factory esphome#18059 by @bdraco
- [ble_device_base] Advertise runtime scan-mode switching in HubCapabilities esphome#18079 by @Bl00d-B0b
- [lvgl] Add lvgl.widget.set_z_index action esphome#17993 by @clydebarrow (new-feature)
- [lvgl] Add pause option to
round_tripanimation timing esphome#17574 by @clydebarrow (new-feature) (breaking-change) - [core] Skip source range tracking when loading the validated config cache esphome#18046 by @bdraco
- [tests] Unignore component-test config fixture directories esphome#18084 by @Bl00d-B0b
- [esp32_rmt_led_strip] Add RGBW channel ordering esphome#18028 by @peterkeen (new-feature)
- [core] Lift the log line processor into esphome/stacktrace.py esphome#18076 by @bdraco
- [zigbee] cleanup, docstrings, refactor connected state on esp32 (1/3) esphome#18007 by @luar123
- [zigbee] Resolution attribute for esp32 sensors esphome#17973 by @TesseractTimmee (new-feature)
- [micro_wake_word] Support adding and removing wake word models at runtime esphome#17927 by @kahrendt (new-feature)
- [ln882h_ble_tracker] Automation triggers and actions esphome#17778 by @Bl00d-B0b (new-feature)
- [bk72xx_ble_tracker] Automation triggers and actions esphome#17776 by @Bl00d-B0b (new-feature)
- [esp32_camera_web_server] Fix MJPEG stream ending on a stale semaphore esphome#18052 by @youkorr
- [modbus_controller] Refactor to simplify message handling esphome#11781 by @exciton (breaking-change)
- [ln882h_ble_tracker] Use the shared ble_device_base automation layer esphome#18089 by @Bl00d-B0b
- [mcp4461] nonvolatile-by-default persistence, TCON boot sync, wiper actions esphome#17561 by @p1ngb4ck
- [modbus_server] Support byte-swapped word types U_WORD_S and S_WORD_S esphome#17829 by @marpi82 (new-feature)
- [ble_device_base] Deprecate address_str in favor of address_str_to esphome#18092 by @bdraco (breaking-change)
- [modbus_server] Add tests for U_WORD_S and S_WORD_S esphome#17832 by @marpi82
- [ota] Multi-key OTA signature verification for external RSA signing esphome#17981 by @kbx81 (new-feature)
- [core] Resolve the stacktrace decoder lazily behind an address gate esphome#18048 by @bdraco
- [bluetooth_proxy] Platform-neutral advertisement proxy via ble_device_base esphome#17880 by @Bl00d-B0b (new-feature)
- Update URL for ESPHome Builder issue reporting esphome#16250 by @jesserockz
- [core] Defer voluptuous and bundle imports out of the upload and logs fast path esphome#18093 by @bdraco
- [core] Trim the stacktrace gate commentary esphome#18097 by @bdraco
- [core] Generalize the resolver’s async thread dispatch into run_async esphome#18088 by @bdraco
- [core] Drop the duplicated FileLock import from a merge collision esphome#18103 by @bdraco
- [bluetooth_proxy] Scanner-state sync in set_mode; platform-gate tests esphome#18100 by @Bl00d-B0b
- [ble_device_base] [ble_client] Restore unset UUID state so notify sensors set up again esphome#18098 by @bdraco
- [ble_device_base] Document the None output for unset UUIDs in to_str() esphome#18108 by @bdraco
- [core] Defer stdlib imports out of the upload and logs fast path esphome#18105 by @bdraco
- [core] Resolve GCC multilib include dirs for clang-tidy esphome#18111 by @bdraco
- [ble_client] Reject descriptor_uuid combined with notify at validation time esphome#18109 by @bdraco
- [rp2] Bump arduino-pico framework to 6.0.0 esphome#18101 by @bdraco
- Bump bundled esphome-device-builder to 1.9.3 esphome#18116 by @esphome[bot]
- [ci] Run CodSpeed benchmarks when top-level esphome Python modules change esphome#18114 by @bdraco
- [ld6002b] Add LD6002B 60GHz presence radar (1/5) esphome#17819 by @hepter (new-component) (new-feature) (new-platform)
- [core] StaticVector converting ctor esphome#18117 by @exciton
- [core] Only snapshot the user config when esphome config —no-defaults asks for it esphome#18113 by @bdraco
- [esp32] Use constants for the signing scheme identifiers esphome#18118 by @kbx81
- [const] Move CONF_TARGET_COUNT to components/const esphome#18120 by @hepter
- [rp2] Limit pin validation to GPIO 0-29 on RP2350A boards esphome#18102 by @bdraco
- [zigbee] Improve network handling on esp32 (2/3) esphome#18008 by @luar123
- [script] Disable queued script polling while the queue is empty esphome#18121 by @bdraco
- [ble_device_base] Hub provider registry and shared consumer helpers esphome#18081 by @Bl00d-B0b (breaking-change)
- [epaper_spi] Do not yield on the final row of a T133A01 transfer phase esphome#17709 by @zerafachris
- [ld6002b] Add target sensors (2/5) esphome#17820 by @hepter (new-feature) (new-platform)
- [modbus_client] Add component for ad-hoc modbus request/response esphome#17676 by @exciton (new-component) (new-feature)
- [zigbee] Add on_start automation (3/3) esphome#18009 by @luar123 (new-feature)
- [ci] Raise runner-concurrency caps for the OHF enterprise pool esphome#18125 by @swoboda1337
- [core] Add EventPool::warm() esphome#18127 by @bdraco
- [midea] Bump MideaUART so its ESP-IDF shims stop shadowing millis() esphome#18119 by @swoboda1337
- [opentherm] Initialize output state before the first write esphome#18126 by @swoboda1337
- [core] Add StringRef::starts_with esphome#18142 by @bdraco
- [ble_device_base] Add platform-neutral GATT client contract esphome#18128 by @bdraco
- [ota] Use PSA crypto for signature verification on ESP-IDF 6 esphome#18145 by @swoboda1337
- [bluetooth_connection] Move BluetoothConnection out of bluetooth_proxy esphome#18129 by @bdraco (new-component)
- [bluetooth_proxy] Fold scanner-state bookkeeping into the sender; extend platform-gate tests esphome#18150 by @Bl00d-B0b
- [bluetooth_proxy] Only advance the scanner-state detector when the frame was sent esphome#18154 by @Bl00d-B0b
- [ld6002b] Add switch, number and text sensor platforms (3/5) esphome#17821 by @hepter (new-feature) (new-platform)
- [ble_device_base] Migrate BLE sensor platforms to the neutral layer (batch 1: ble_presence, ble_rssi, ble_scanner) esphome#17716 by @Bl00d-B0b (new-feature) (breaking-change)
- [bluetooth_proxy] Make the GATT dispatch platform neutral esphome#18130 by @bdraco
- [rp2040_ble] Add scan arbitration and GATT client hooks esphome#18155 by @bdraco
- [esp32] refactor esp32-vfs default configs to FINAL co-routine & add some defaults esphome#17337 by @p1ngb4ck
- [ble_device_base] Migrate BLE sensor platforms to the neutral layer (batch 2: atc_mithermometer, pvvx_mithermometer, bthome_mithermometer) esphome#17950 by @Bl00d-B0b (new-feature) (breaking-change)
- [bluetooth_connection] Add BTstack GATT client backend for rp2 esphome#18131 by @bdraco
- [ble_device_base] Migrate BLE sensor platforms to the neutral layer (batch 3: mopeka_ble, mopeka_pro_check, mopeka_std_check) esphome#17951 by @Bl00d-B0b (new-feature) (breaking-change)
- [ld6002b] Add select and button platforms (4/5) esphome#17822 by @hepter (new-feature) (new-platform)
- [bluetooth_proxy] Enable active connections on rp2 esphome#18132 by @bdraco (new-feature)
- [modbus] Add server support for read/write multiple registers (0x17) esphome#17357 by @zweckj (new-feature)
- Bump bundled esphome-device-builder to 1.9.4 esphome#18162 by @esphome[bot]
- [modbus_client] Add typed read/write actions esphome#18078 by @exciton (new-feature)
- [ble_device_base] Migrate BLE sensor platforms to the neutral layer (batch 4: ruuvi_ble, ruuvitag, b_parasite) esphome#18161 by @Bl00d-B0b (new-feature) (breaking-change)
- [ble_device_base] Migrate BLE sensor platforms to the neutral layer (batch 5: airthings_ble, inkbird_ibsth1_mini, radon_eye_ble) esphome#18165 by @Bl00d-B0b (new-feature) (breaking-change)
- [modbus_client] Lambda sugar esphome#18146 by @exciton (new-feature)
- [bluetooth_connection] Engine follow-ups from the rp2 GATT series esphome#18159 by @bdraco
- [ble_device_base] Migrate BLE sensor platforms to the neutral layer (batch 6: thermopro_ble, exposure_notifications, xiaomi_ble) esphome#18168 by @Bl00d-B0b (new-feature) (breaking-change)
- [ble_device_base] Migrate BLE sensor platforms to the neutral layer (batch 7: xiaomi_cgd1, xiaomi_cgdk2, xiaomi_cgg1) esphome#18170 by @Bl00d-B0b (new-feature) (breaking-change)
- [ble_device_base] Migrate BLE sensor platforms to the neutral layer (batch 8: xiaomi_cgpr1, xiaomi_gcls002, xiaomi_hhccjcy01) esphome#18171 by @Bl00d-B0b (new-feature) (breaking-change)
- [usb_cdc_acm] Don’t discard queued TX data when USB flush times out esphome#17637 by @kbx81
- [ble_device_base] Migrate BLE sensor platforms to the neutral layer (batch 9: xiaomi_hhccjcy10, xiaomi_hhccpot002, xiaomi_jqjcy01ym) esphome#18172 by @Bl00d-B0b (new-feature) (breaking-change)
- [ble_device_base] Migrate BLE sensor platforms to the neutral layer (batch 10: xiaomi_lywsd02, xiaomi_lywsd02mmc, xiaomi_lywsd03mmc) esphome#18174 by @Bl00d-B0b (new-feature) (breaking-change)
- [ble_device_base] Migrate BLE sensor platforms to the neutral layer (batch 11: xiaomi_lywsdcgq, xiaomi_mhoc303, xiaomi_mhoc401) esphome#18178 by @Bl00d-B0b (new-feature) (breaking-change)
- [ble_device_base] Migrate BLE sensor platforms to the neutral layer (batch 12: xiaomi_miscale, xiaomi_mjyd02yla, xiaomi_mue4094rt) esphome#18180 by @Bl00d-B0b (new-feature) (breaking-change)
- [modbus] Route broadcast writes (address 0) to all server devices esphome#17387 by @zweckj (new-feature) (breaking-change)
- [ble_device_base] Migrate BLE sensor platforms to the neutral layer (batch 13: xiaomi_rtcgq02lm, xiaomi_wx08zm, xiaomi_xmwsdj04mmc) esphome#18183 by @Bl00d-B0b (new-feature) (breaking-change)
- [modbus] Make sure we log on no accepting device esphome#18187 by @zweckj
- [bluetooth_proxy] Deliver esp32 advertisements through the hub callback esphome#18173 by @bdraco
- [bluetooth_connection] Explicit pairing for rp2 esphome#18166 by @bdraco
- [ble_device_base] Bind the GATT backend at compile time esphome#18185 by @bdraco
- [bluetooth_proxy] Deliver scanner state through the hub callback esphome#18175 by @bdraco
- [esp32_ble_tracker] Retire the raw listener path and parser-type enum esphome#18177 by @bdraco
- [tuya] GMT time 0x0C command handler esphome#17158 by @jptrsn
- [esp32_ble_tracker] Retire the scanner-state listener interface esphome#18179 by @bdraco
- [ble_device_base] Bind BLEHub to the build’s tracker at compile time esphome#18181 by @bdraco
- [modbus] Rename send_pdu() to queue_pdu() esphome#18196 by @exciton
- [ci] Name release runs after the version or dev tag they build esphome#18110 by @jesserockz
- Bump bundled esphome-device-builder to 1.9.5 esphome#18223 by @esphome[bot]
- [core] Store the validated-config cache as JSON to drop YAML off the upload fast path esphome#18106 by @bdraco
- [core] Use Happy Eyeballs for remote file downloads esphome#18050 by @bdraco
- [ld6002b] Add area and zone configuration (5/5) esphome#17823 by @hepter (new-feature)
- [sendspin] Bump sendspin-cpp to v0.7.1 esphome#18232 by @kahrendt
- [core] Skip colorama init for terminal and dashboard runs esphome#18224 by @bdraco
- Normalize marker-wrapped callable keys in the schema dump esphome#18218 by @bdraco
- [ble_device_base] Merge adv and scan response before delivery on rp2 esphome#18217 by @bdraco
- [bluetooth_proxy] Migrate esp32 onto the neutral GATT backend esphome#18198 by @bdraco
- [core] Enforce the preferences contracts with concepts esphome#18191 by @bdraco
- [ota] Enforce the backend contract with a concept esphome#18192 by @bdraco
- [ufm01] Improve startup with reset retry and passive polling fallback esphome#17567 by @ljungqvist
- [core] Extend ’/’ in names deprecation window to 2027.7.0 esphome#18236 by @bdraco
- [ethernet] Add CH390 SPI ethernet support esphome#18226 by @ptr727 (new-feature)
- [wifi] Save fast connect settings and reset roaming bookkeeping after driver initiated roams esphome#18167 by @bdraco
- [bluetooth_proxy] Pair the advertisement flush time with hub_ to close alignment holes esphome#18234 by @bdraco
- [bluetooth_proxy] Finish the connection scan before reserving a slot esphome#18239 by @bdraco
- [core] Document enum class value naming to avoid platform SDK macro collisions esphome#18241 by @bdraco
- [ble_device_base] Treat a partially bound merger as unbound esphome#18235 by @bdraco
- [ufm01] Prefix PassiveReadResult enumerators to avoid Realtek SDK macro collision esphome#18240 by @bdraco
- [mitsubishi_cn105] Extract top-level hub esphome#16987 by @crnjan (new-feature)
- [bk72xx_ble] Support active scanning by packing the GAPM start command esphome#18169 by @bdraco (new-feature)
- [modbus] Add API for reading/writing coils and discrete inputs in server mode esphome#17264 by @exciton
- [web_server] Fix basic auth with long credentials esphome#18237 by @bdraco
- [modbus_client] Add read/write multiple registers (FC 0x17) esphome#18215 by @exciton (new-feature) (breaking-change)
- [hoermann_hcp] Add Hörmann HCP garage door component esphome#17355 by @zweckj (new-component) (new-feature) (new-platform)
- [mitsubishi_cn105] Add vertical vane direction select esphome#16723 by @crnjan (new-feature) (new-platform)
- [modbus_server] Add coil/discrete-input support esphome#17464 by @exciton (new-feature)
- [mitsubishi_cn105] Refactor property encoding/decoding esphome#16709 by @crnjan
- Bump aioesphomeapi to 45.8.0 esphome#18251 by @bdraco
- [ld24xx] Use MAC address size constants instead of literals esphome#18253 by @jesserockz
- [bluetooth_proxy] Retry dropped services-done, disconnect and scanner-state notifications esphome#18225 by @bdraco
- [core] Use MAC address size constants in BLE components esphome#18252 by @jesserockz
- [api] Add DeviceCapabilities message for optional-feature flags esphome#17984 by @jesserockz
- [rp2] Fix %f formatting in logs esphome#18256 by @bdraco
- [tests] Fix flaky modbus server/controller integration tests esphome#18258 by @bdraco
- [debug] Remove Arduino core dependency from RP2 platform code esphome#18267 by @jesserockz
- [adc] Fix RP2350B internal temperature reading wrong ADC channel esphome#18270 by @jesserockz
- [rp2] Use SDK clock query directly in arch_get_cpu_freq_hz esphome#18269 by @jesserockz
- [core] Use MAC address size constants instead of literals esphome#18254 by @jesserockz
- [hoermann_hcp] Add connectivity binary sensor esphome#18189 by @zweckj (new-feature) (new-platform)
- [core] Flush stdout in safe_print so logs stream live esphome#18261 by @bdraco
- [espidf] Flush the runner’s output so dashboard builds stream esphome#18264 by @bdraco
- [modbus] Properly support client-mode broadcast sends esphome#17467 by @exciton
- [core] Retry transient git network failures with backoff esphome#18242 by @bdraco
- [rp2040_ble][bluetooth_connection] 3 connection slots on rp2 with esp32 parity esphome#18247 by @bdraco (new-feature)
- [core] Show the last line when output stops without a newline esphome#18265 by @bdraco
- Bump aioesphomeapi from 45.8.0 to 45.9.0 esphome#18283 by @esphome[bot]
- [core] Stop dropping complete lines behind an unfinished one esphome#18279 by @bdraco
- [mitsubishi_cn105] Add vertical vane state trigger esphome#16727 by @crnjan (new-feature)
- [core] Show the out-of-flash tip instead of crashing the build esphome#18280 by @bdraco
- Bump aioesphomeapi from 45.9.0 to 45.10.0 esphome#18294 by @esphome[bot]
- [audio] Bump microDecoder to v0.4.0 esphome#18291 by @kahrendt
- [sendspin] Add image platform for artwork esphome#17937 by @kahrendt (new-feature) (new-platform)
- [sendspin] Clear metadata and controller state on disconnect esphome#18289 by @kahrendt
- [tests] Build tests from the tree they run in, not the venv’s editable install esphome#18248 by @exciton
- [mitsubishi_cn105] Add vertical vane control action esphome#16737 by @crnjan (new-feature)
- [bluetooth_proxy] Retry dropped GATT acks and stop the retry log spam esphome#18259 by @bdraco
- [bluetooth_proxy] Latch the unpair reply esphome#18274 by @bdraco
- [bluetooth_proxy] Reset every owed reply in one place esphome#18276 by @bdraco
- [core] Warn when running a different source tree than the one you are in esphome#18288 by @swoboda1337
- [bluetooth_proxy] Latch the connection replies and tighten the send paths esphome#18278 by @bdraco
- [rp2] Record the RP2350 die on generated board entries esphome#18305 by @jesserockz
- [adc] Fix internal temperature channel on RP2350A under arduino-pico esphome#18307 by @jesserockz
- [adc] Deprecate pin: TEMPERATURE in favour of internal_temperature esphome#18304 by @jesserockz
- [api] Gate the bluetooth connection messages on their own define esphome#18281 by @bdraco
- [api] Mark send_message nodiscard so refused frames are never silent esphome#18293 by @bdraco
- [voice_assistant] Do not consume the audio chunk when the send is refused esphome#18295 by @bdraco
- [bluetooth_proxy] Move per-advertisement logging to very verbose esphome#18299 by @bdraco
- [bluetooth_connection] Demote rp2 backend connection logs to verbose esphome#18301 by @bdraco
- [esp32_ble_tracker] Demote scan-state echoes to verbose esphome#18302 by @bdraco
- [bluetooth_proxy] Give partial advertisement batches 200ms to fill on Wi-Fi esphome#18303 by @bdraco
- [esp32_ble_tracker] Don’t log an error when a scan stop is already in flight esphome#18306 by @bdraco
- [api] Move the generic buffer-full log to very verbose esphome#18300 by @bdraco
- [ethernet][network][wifi] Arbitrate the default route from the network priority list esphome#17797 by @kbx81 (new-feature)
- [rp2] Size the lwIP segment pool and heap for concurrent senders esphome#18257 by @bdraco
- [hoermann_hcp] Add garage light control esphome#18190 by @zweckj (new-feature) (new-platform)
- [core] Batch remote file downloads during config validation esphome#18069 by @bdraco
- [internal_temperature] Read the RP2 on-die sensor directly instead of via the Arduino API esphome#18262 by @jesserockz
- [core] Add esphome logs over web_server HTTP SSE esphome#17110 by @bdraco (new-feature)
- [usb_uart] Fix uint32_t format specifier warning in pl2303 esphome#18310 by @bdraco
- Bump aioesphomeapi from 45.10.0 to 45.10.1 esphome#18318 by @esphome[bot]
- [sendspin] Bump sendspin-cpp to v0.7.2 esphome#18316 by @kahrendt
- Bump bundled esphome-device-builder to 1.9.6 esphome#18328 by @esphome[bot]
- [ld2420] Fix out-of-bounds read when device reports unknown command error esphome#18322 by @bdraco
- [core] Don’t block logs startup on MQTT IP discovery when addresses are known esphome#18313 by @bdraco
- [core] Retry framework downloads on transient network errors esphome#18330 by @bdraco
- Bump CodSpeedHQ/action from 4.18.4 to 4.18.5 esphome#17489 by @dependabot[bot]
- Bump ruff from 0.15.20 to 0.15.21 esphome#17508 by @dependabot[bot]
- Bump actions/stale from 10.3.0 to 10.4.0 esphome#17509 by @dependabot[bot]
- Update tzdata requirement from >=2026.2 to >=2026.3 esphome#17510 by @dependabot[bot]
- Bump clang-tidy from 22.1.7 to 22.1.8 esphome#17565 by @dependabot[bot]
- Bump github/codeql-action/analyze from 4.37.0 to 4.37.1 esphome#17630 by @dependabot[bot]
- Bump github/codeql-action/init from 4.37.0 to 4.37.1 esphome#17629 by @dependabot[bot]
- Bump ruff from 0.15.21 to 0.15.22 esphome#17628 by @dependabot[bot]
- Bump esphome/workflows/.github/workflows/lock.yml from 2026.4.1 to 2026.7.0 esphome#17652 by @dependabot[bot]
- Bump astral-sh/setup-uv from 8.3.2 to 9.0.0 in /.github/actions/restore-python esphome#17757 by @dependabot[bot]
- Bump astral-sh/setup-uv from 8.3.2 to 9.0.0 esphome#17760 by @dependabot[bot]
- Bump github/codeql-action/init from 4.37.1 to 4.37.2 esphome#17758 by @dependabot[bot]
- Bump actions/setup-python from 6.3.0 to 7.0.0 esphome#17731 by @dependabot[bot]
- Bump github/codeql-action/analyze from 4.37.1 to 4.37.2 esphome#17761 by @dependabot[bot]
- Bump actions/checkout from 7.0.0 to 7.0.1 esphome#17733 by @dependabot[bot]
- Bump pypa/gh-action-pypi-publish from 1.14.0 to 1.14.1 esphome#17734 by @dependabot[bot]
- Bump github/codeql-action/analyze from 4.37.2 to 4.37.3 esphome#17786 by @dependabot[bot]
- Bump github/codeql-action/init from 4.37.2 to 4.37.3 esphome#17785 by @dependabot[bot]
- Bump docker/login-action from 4.4.0 to 4.5.1 in the docker-actions group across 1 directory esphome#17817 by @dependabot[bot]
- Bump actions/setup-python from 6.3.0 to 7.0.0 in /.github/actions/restore-python esphome#17732 by @dependabot[bot]
- Bump ruff from 0.15.22 to 0.16.0 esphome#17818 by @dependabot[bot]
- Bump CodSpeedHQ/action from 4.18.5 to 4.19.1 esphome#17890 by @dependabot[bot]
- Bump actions/stale from 10.4.0 to 11.0.0 esphome#17913 by @dependabot[bot]
- Bump docker/login-action from 4.5.1 to 4.5.2 in the docker-actions group esphome#17912 by @dependabot[bot]
- Bump pypa/gh-action-pypi-publish from 1.14.1 to 1.14.2 esphome#17945 by @dependabot[bot]
- Bump CodSpeedHQ/action from 4.19.1 to 5.0.1 esphome#17946 by @dependabot[bot]
- Bump docker/login-action from 4.5.2 to 4.6.0 in the docker-actions group esphome#17944 by @dependabot[bot]
- Bump filelock from 3.32.0 to 3.32.2 esphome#18039 by @dependabot[bot]
- Bump cryptography from 48.0.1 to 50.0.0 esphome#18037 by @dependabot[bot]
- Bump github/codeql-action/init from 4.37.3 to 4.37.4 esphome#18040 by @dependabot[bot]
- Bump ruff from 0.16.0 to 0.16.1 esphome#18038 by @dependabot[bot]
- Bump github/codeql-action/analyze from 4.37.3 to 4.37.4 esphome#18041 by @dependabot[bot]
- Bump esphome/workflows/.github/workflows/stale.yml from 203cea60ebfd18e2b966e57750750e0417a9feec to 61fd37a044cad4e9aa4303027b2a61b6a34da855 esphome#18095 by @dependabot[bot]
- Bump CodSpeedHQ/action from 5.0.1 to 5.0.2 esphome#18094 by @dependabot[bot]
- Bump github/codeql-action/init from 4.37.4 to 4.37.5 esphome#18140 by @dependabot[bot]
- Bump github/codeql-action/analyze from 4.37.4 to 4.37.5 esphome#18139 by @dependabot[bot]
- Bump prek from 0.4.11 to 0.4.12 esphome#18138 by @dependabot[bot]
- Bump resvg-py from 0.3.3 to 0.3.4 esphome#18137 by @dependabot[bot]
- Bump github/codeql-action/analyze from 4.37.5 to 4.37.6 esphome#18163 by @dependabot[bot]
- Bump github/codeql-action/init from 4.37.5 to 4.37.6 esphome#18164 by @dependabot[bot]
- Bump aiohappyeyeballs from 2.6.2 to 2.7.1 esphome#18244 by @dependabot[bot]
- Bump CodSpeedHQ/action from 5.0.2 to 5.0.3 esphome#18246 by @dependabot[bot]
- Bump ruff from 0.16.1 to 0.16.2 esphome#18245 by @dependabot[bot]
- Update argcomplete requirement from >=3.7.0 to >=3.7.2 esphome#18243 by @dependabot[bot]
- Bump platformdirs from 4.11.0 to 4.11.1 esphome#18250 by @dependabot[bot]
- Bump setuptools from 83.0.0 to 84.0.0 esphome#18290 by @dependabot[bot]


