ESPHome published 2026.10.0b3 on 12 October 2026. It is the third beta before the stable October release, which the project milestone still targets for 21 October. The useful changes are narrow: better bookkeeping for ESP32 BLE clients, a small RAM win on some ESP8266 builds, and a CAN bus crash fix under heavy traffic.

BLE client connection IDs

The ESP32 BLE client component (esp32_ble_client) now tracks the connection ID per attempt. On each connect(), the ID is cleared. A successful open takes the ID from the open event. That matters when you open a link that is already up: Bluedroid skips the usual connect event, so the old code left the ID unset, never matched the close event, and only returned to idle after a 10-second teardown timeout.

Failed opens are quieter too. Bluedroid can report a failed direct connect as a disconnect followed by an open with status 133. The client used to log that sequence at error level even when it recovered immediately. Beta 3 recognises the expected failure path and keeps the watchdog for the rare case where the follow-up event never arrives.

This fix targets local BLE clients that open connections to peripherals. It is not an upgrade to every Home Assistant Bluetooth proxy. Proxies use a different active-connection backend (bluetooth_connection). If you run BLE sensors or actuators through ble_client on an ESP32, try this build on a spare node first.

ESP8266: float tables back in flash

ESP8266 builds pin Arduino core 3.1.2-esphome.3. GCC 10 ignored PROGMEM section attributes on statics inside templates, so ArduinoJson's floating-point parsing tables sat in RAM even though the library only reads them through pgm_read. A linker rule now puts those tables in flash.

One reported build, an ESP8266 ratgdo garage-door opener with web_server and api, dropped 156 bytes of RAM with unchanged flash use. A build without JSON parsing showed no change. That is a configuration-specific result, not a promise that every ESP8266 node suddenly has more free heap.

The same beta keeps the MCP23xxx interrupt handler in IRAM on ESP8266 and stops the software-serial RX interrupt from blocking for a whole byte. Those small stability fixes matter when an older board is already near its limits.

CAN bus, teleinfo and how to test

High CAN frame rates could crash the device because iteration over the receive path was unbounded. That loop is fixed. There is also a breaking change in the French teleinfo (TIC) component: predefined properties for the main tags of the standard and historical frames. If you parse utility meter frames in France, read that pull request before updating.

Testing means rebuilding firmware, not only updating the builder. In Home Assistant, use the ESPHome Device Builder beta add-on. On the command line, install a prerelease with pip (pip install --upgrade --pre esphome, or the Device Builder package with --pre). Keep a known-good binary for the test node, flash one non-critical device that uses the affected component, and compare connect and disconnect behaviour against the same peripheral.

A healthy fleet can wait for 2026.10.0. Join the beta when you hit the BLE error spam, need every free byte on an ESP8266 with JSON, or run a busy CAN bus.