Skip to content
Get started

ESPHome 2026.8.0 - August 2026

NOTE

This is a beta release. Details on this page may change before the stable release is published.

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.

  • If you set esp32_ble_id explicitly on any BLE sensor platform, rename it to ble_hub_id (the old key warns until 2027.2.0)
  • If you use voc or nox sensor keys on sgp4x, sen5x or sen6x, rename them to voc_index and nox_index
  • If you use command_throttle on modbus_controller, move the setting to turnaround_time on the modbus component; allow_duplicate_commands no longer has any effect
  • If you use modbus_server with address: 0, assign a unique address from 1-247 instead
  • If you use modbus_controller sensors with custom_command: [0x17, ...], subtract one from their offset:
  • If you write modbus_controller lambdas, note data is now std::span and payload_to_number() returns an optional, so add .value_or(0) or a check
  • If you use the aqi sensor, expect readings above the previous caps (301 US AQI, 101 CAQI) to report real interpolated values during heavy pollution
  • If you use an rc522_i2c reader that relied on the old default address, set address: 0x2C explicitly
  • If you use LVGL animations with ease_in/ease_out weights 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 id format and the alarm_control_panel domain spelling
  • If you use pin: TEMPERATURE on the adc sensor for the RP2 on-die sensor, migrate to the internal_temperature component
  • 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)

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.

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.

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)

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.

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.

@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.

  • 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_wire platform, 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
  • Deep sleep wake automations by @jesserockz: the new on_wake trigger on deep_sleep fires when the device wakes with the wake cause, and each esp32_ext1_wakeup pin can carry its own on_wake so 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.control action (#16987, #16723, #16727, #16737)
  • LVGL by @clydebarrow: runtime theme updates via lvgl.theme.update (#17678), widget stacking control via lvgl.widget.set_z_index (#17993), and a pause option for round_trip animations (#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_range option to extrapolate beyond 500 (#17570)
  • Zigbee improvements by @luar123 and @TesseractTimmee: an on_start automation, 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

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_base layer, the new BK72xx and LN882H BLE trackers, and the 13-batch migration of every BLE sensor platform
  • @jesserockz - 29 PRs including deep_sleep on_wake triggers, 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_controller refactor and the new modbus_client component with typed actions
  • @kbx81 - 10 PRs including multi-key OTA signature verification, network default-route arbitration, and the veml3235 auto-gain overhaul
  • @kahrendt - 7 PRs including runtime wake word model management and the sendspin artwork image platform
  • @zweckj - 6 PRs including the new hoermann_hcp garage door component and Modbus server broadcast and 0x17 support
  • @bharvey88 - 6 PRs including the Sensirion voc_index/nox_index renames and cv.rename_key improvements
  • @hepter - 6 PRs including the new ld6002b 60GHz presence radar component
  • @crnjan - 5 PRs including the mitsubishi_cn105 hub 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_start automation
  • @p1ngb4ck - 2 PRs including mcp4461 persistence 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 ds248x I²C-to-1-Wire bridge component
  • @rwalker777 - network priority for multi-interface support
  • @wiomoc - the new zephyr_pwm platform 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.

  • All BLE sensor platforms: The auto-generated tracker reference key esp32_ble_id is renamed to ble_hub_id on every advertisement-based BLE platform (ble_presence, ble_rssi, ble_scanner, the mi-thermometer, BTHome, Mopeka, Ruuvi, Airthings, Inkbird, RadonEye, ThermoPro and Xiaomi families, and b_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
  • SGP4x / SEN5x / SEN6x: The voc and nox sensor keys are renamed to voc_index and nox_index to 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_range option), 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_out timing 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 0x2C to 0x28 to match the documentation and typical board wiring. If your reader relied on the old default, set address: 0x2C explicitly #17566
  • modbus_controller: command_throttle and allow_duplicate_commands no longer have any effect. They are still accepted with a validation warning and will be removed in 2027.2.0; use turnaround_time on the modbus component instead of command_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 the offset: 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
  • Entity IDs: The id field in the web server JSON now carries the {domain}/{device?}/{name} format and the transitional name_id field 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 domain field now reports alarm_control_panel (underscores) instead of the previously advertised alarm-control-panel, matching the only route the server ever accepted #17594

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 to queue_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 a succeeded() 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 wrote return {}; previously produced 0 and now declines the read; ServerRegister::set_read_lambda<T>() widens its signature to optional<T> #17464
  • VEML3235: gain: AUTO is removed from the schema (it never compiled; automatic mode remains the separate auto_gain option, enabled by default), and the non-functional set_power_on()/shutdown code path is removed #17551
  • Zigbee: is_connected is renamed to is_joined(), and the joined, started and factory_new members are now protected; use is_joined() and is_started() in lambdas instead #18007 #18008
  • Web server base: The credential setters on WebServerBase now take const char * instead of std::string, and on non-ESP32 basic-auth builds set_auth_username/set_auth_password are replaced by set_auth_basic_hash (part of the fix for basic auth failing with long credentials) #18237
  • ModbusController API: Handler signatures for on_data_func, create_read_command() and create_custom_command() now take std::span<const uint8_t> instead of const std::vector<uint8_t>&; on_register_data(), send_raw(), get_command_queue_length() and the 4-argument create_read_command() overload are removed; ModbusCommandItem data members are now protected (use the accessors); and ModbusController no longer derives from modbus::ModbusClientDevice #11781
  • ModbusController sensor dispatch: SensorItem::parse_and_publish() takes std::span<const uint8_t>; external platforms must set addresses via set_address() / set_offset_from_start_address() instead of assigning start_address / offset directly, and payload_to_float() gains an explicit offset parameter #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.

  • [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_trip animation 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)
  • [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)
  • [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)
  • [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_trip animation 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)