From 451471c8398f6558d2bd20d402e9fb2354d2c908 Mon Sep 17 00:00:00 2001 From: Jonathan Swoboda <154711427+swoboda1337@users.noreply.github.com> Date: Tue, 11 Nov 2025 22:44:57 -0500 Subject: [PATCH 001/109] Add to component index (#5605) --- content/components/_index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/content/components/_index.md b/content/components/_index.md index dfb5648d56..b00c2c89ff 100644 --- a/content/components/_index.md +++ b/content/components/_index.md @@ -364,6 +364,7 @@ Sensors are organized into categories; if a given sensor fits into more than one "AM2315C","components/sensor/am2315c","am2315c.jpg","Temperature & Humidity","" "AM2320","components/sensor/am2320","am2320.jpg","Temperature & Humidity","" "b-parasite","components/sensor/b_parasite","b_parasite.jpg","Moisture & Temperature & Humidity & Light","" +"BH1900NUX","components/sensor/bh1900nux","bh1900nux-evk-001.png","Temperature","" "BME280","components/sensor/bme280","bme280.jpg","Temperature & Humidity & Pressure","" "BME68x via BSEC2","components/sensor/bme68x_bsec2","bme680.jpg","Temperature & Humidity & Pressure & Gas","" "BME680 via BSEC","components/sensor/bme680_bsec","bme680.jpg","Temperature & Humidity & Pressure & Gas","" From 8e79065ef3c6bb62f2f6ea7358b6b6a3c365ac85 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Wed, 12 Nov 2025 11:13:11 -0600 Subject: [PATCH 002/109] [select] Update documentation to use .current_option() method (#5562) --- content/components/select/_index.md | 19 ++++++++++++++----- content/components/select/template.md | 2 +- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/content/components/select/_index.md b/content/components/select/_index.md index 226271510b..edf5c018bd 100644 --- a/content/components/select/_index.md +++ b/content/components/select/_index.md @@ -65,7 +65,7 @@ MQTT Options: ## Select Automation You can access the most recent state of the select in [lambdas](/automations/templates#config-lambda) using -`id(select_id).state`. +`id(select_id).current_option()`. For more information on using lambdas with select, see [lambda calls](#select-lambda_calls). {{< anchor "select-on_value" >}} @@ -268,19 +268,28 @@ advanced stuff (see the full API Reference for more info). to select the first option or `call.select_next(true)` to select the next option with the cycle feature enabled. -- `.state` : Retrieve the currently selected option of the select. +- `.current_option()` : Retrieve the currently selected option of the select. Returns `const char*`. ```cpp // For example, create a custom log message when an option is selected: - auto state = id(my_select).state.c_str(); + auto state = id(my_select).current_option(); ESP_LOGI("main", "Option of my select: %s", state); ``` ```yaml - # Check if a specific option is selected + # Check if a specific option is selected (using strcmp) - if: condition: - - lambda: 'return id(my_select).state == "my_option_value";' + - lambda: 'return strcmp(id(my_select).current_option(), "my_option_value") == 0;' +``` + +```yaml + # Or convert to std::string for comparison + - if: + condition: + - lambda: |- + std::string current = id(my_select).current_option(); + return current == "my_option_value"; ``` - `.size()` : Retrieve the number of options in the select. diff --git a/content/components/select/template.md b/content/components/select/template.md index b9e6cd14a0..edd30f4aa9 100644 --- a/content/components/select/template.md +++ b/content/components/select/template.md @@ -50,7 +50,7 @@ select: - All other options from [Select](/components/select#config-select). > [!NOTE] -> If you don't set a `lambda` and `optimistic` is `false` (default), updates to the select component state will need to be taken care of as part of your `set_action` using `id(my_select).publish_state(x);` (in a lambda). Do not use [`select.set` Action](/components/select#select-set_action) here, as this would generate a loop. Also, don't use `id(my_select).state = x` as this won't have the desired effect (e.g. HA won't update with the change). +> If you don't set a `lambda` and `optimistic` is `false` (default), updates to the select component state will need to be taken care of as part of your `set_action` using `id(my_select).publish_state(x);` (in a lambda). Do not use [`select.set` Action](/components/select#select-set_action) here, as this would generate a loop. ## `select.set` Action From 7cf6fa3b14fab6815fc46dc38b9b8d60b39fcd7c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20BOU=C3=89?= Date: Wed, 12 Nov 2025 18:27:45 +0100 Subject: [PATCH 003/109] [rx8130] Add timezone setting for rx8130 platform (#5598) * Add timezone setting for rx8130 platform * Update content/components/time/rx8130.md Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: Jonathan Swoboda <154711427+swoboda1337@users.noreply.github.com> --- content/components/time/rx8130.md | 1 + 1 file changed, 1 insertion(+) diff --git a/content/components/time/rx8130.md b/content/components/time/rx8130.md index 04e6c2aea7..f57a12449d 100644 --- a/content/components/time/rx8130.md +++ b/content/components/time/rx8130.md @@ -77,6 +77,7 @@ time: # repeated synchronization is not necessary unless the external RTC # is much more accurate than the internal clock update_interval: never + timezone: Europe/Paris - platform: homeassistant # instead try to synchronize via network repeatedly ... on_time_sync: From 15ec4da59189af0d516a94c037be1e7b29ec68a7 Mon Sep 17 00:00:00 2001 From: tomaszduda23 Date: Thu, 13 Nov 2025 03:06:30 +0100 Subject: [PATCH 004/109] [nrf52] Dcdc (#5596) Co-authored-by: J. Nick Koston Co-authored-by: Jonathan Swoboda <154711427+swoboda1337@users.noreply.github.com> Co-authored-by: J. Nick Koston --- content/components/nrf52.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/content/components/nrf52.md b/content/components/nrf52.md index 641333cc4a..ca4ff2cb65 100644 --- a/content/components/nrf52.md +++ b/content/components/nrf52.md @@ -22,6 +22,11 @@ nrf52: - **board** (*Required*, string): The board type. Valid options are `adafruit_feather_nrf52840`, `adafruit_itsybitsy_nrf52840`, `xiao_ble`. Other boards should work with those configuration as well. - **bootloader** (*Optional*, string): Bootloader type. Valid options are `mcuboot`, `adafruit`, `adafruit_nrf52_sd132`, `adafruit_nrf52_sd140_v6`, `adafruit_nrf52_sd140_v7`. Default value depends on board type. +- **dcdc** (*Optional*, boolean): Enable DC/DC converter for REG1 stage. Defaults to `true`. +External LC filters must be connected to the DC/DC regulator pins if it is being used. +The advantage of using a DC/DC regulator is that the overall power consumption is normally reduced +as the efficiency of such a regulator is higher than that of a LDO. +⚠️ Warning: Enabling DC/DC may cause the board to fail to boot if external LC filter is misconfigured or is poor quality. ## Getting Started From bacc84f188a2ba13c73e479b20650a3234605d5e Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Sun, 16 Nov 2025 15:07:00 -0600 Subject: [PATCH 005/109] Add 2025.11.0 Release Notes (#5617) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Ludovic BOUÉ --- content/changelog/2025.11.0.md | 494 ++++++++++++++++++++++++++++++++- 1 file changed, 493 insertions(+), 1 deletion(-) diff --git a/content/changelog/2025.11.0.md b/content/changelog/2025.11.0.md index 7ba97255bd..e42b750076 100644 --- a/content/changelog/2025.11.0.md +++ b/content/changelog/2025.11.0.md @@ -1,5 +1,5 @@ --- -description: "Changelog for ESPHome 2025.10.0." +description: "Changelog for ESPHome 2025.11.0." title: "ESPHome 2025.11.0 - November 2025" params: seo: @@ -16,6 +16,498 @@ params: "RX8130 RTC","components/time/rx8130","clock-outline.svg","dark-invert" {{< /imgtable >}} +## Release Overview + + +ESPHome 2025.11.0 is a performance and reliability-focused release that makes your devices faster, more reliable, and more capable than ever before. WiFi connectivity gets a complete overhaul with intelligent mesh network handling, dramatically faster connection times, and enhanced security controls. Memory optimizations free up **2-31KB of RAM** and **10KB+ of flash**, giving even resource-constrained devices room to grow. A new infrastructure change slashes event processing latency by **600-1,300x**—making BLE Proxy GATT operations rival local Bluetooth adapters, even over the network. + +**WiFi improvements** address the most common connectivity pain points: devices no longer get stuck on failed access points in mesh networks, hidden network connections are 2-6 seconds faster, and the new `min_auth_mode` option provides security controls with WPA2 defaults. The redesigned connection strategy with intelligent AP selection and reliable reconnection logic delivers the rock-solid WiFi performance users expect. + +**Ultra-low latency event processing** transforms responsiveness across BLE, USB, MQTT, ESP-NOW, and wake word detection—reducing latency from 0-16ms to just ~12 microseconds. Voice assistants respond faster to wake words, BLE devices pair quicker, and MQTT automations trigger with sub-millisecond precision. This zero-configuration optimization automatically benefits all affected components on ESP32 platforms. + +**Memory optimizations** touch nearly every core component—WiFi scan management, select options, lights, climate controls, sensors, and the action framework. Sensor filter optimizations deliver the most dramatic gains, with sliding window filters saving up to 25KB of RAM on configurations that previously struggled with memory constraints. These improvements enable more complex configurations on the same hardware. + +New hardware support expands ESPHome's reach with 7 new components including the HDC2010 sensor, MCP3221 ADC, HLK-FM22X face recognition module, BH1900NUX sensor, RX8130 RTC, and TinyUSB foundation support for ESP32-S2/S3. Platform enhancements bring I2C and BLE logging to nRF52, while ESP32 gains hosted BLE for chips without native Bluetooth and ESP-NOW transport capabilities. + + + +## Enhanced WiFi Security and Reliability + +**Dramatically Improved WiFi Reliability and Connection Times** ([#11805](https://github.com/esphome/esphome/pull/11805)) + +A major step forward in WiFi reliability addresses critical connectivity issues in mesh networks and multi-AP environments. Previously, devices would get stuck repeatedly trying the strongest signal even when that access point was rejecting connections—a bug introduced in 2025.8.2 that made the priority-based failover system ineffective. + +The redesigned connection strategy delivers measurable improvements: + +- **Intelligent AP selection**: Connection failure history now takes precedence over signal strength, enabling automatic failover to working access points instead of getting stuck on failed BSSIDs +- **Faster initial connections**: Explicit hidden network probing phase with smart skipping of visible networks reduces connection time by 2-6 seconds +- **Reliable reconnections**: Two-attempt BSSID filtering eliminates false positives from normal WiFi stack transitions +- **Natural mesh handling**: Simplified architecture removes 150+ lines of complex BSSID cycling logic—the priority degradation system now naturally handles mesh networks through scan-based retry cycles +- **Clearer diagnostics**: State machine-based retry phases with improved logging make connection issues easier to troubleshoot +- **Memory efficiency**: Automatic priority reset when all BSSIDs fail equally (saves up to 96 bytes) + +This release restores and improves upon the reliable failover behavior users expect in multi-AP deployments, while reducing connection latency and memory overhead. + +**Configurable Minimum Authentication Mode** ([#11814](https://github.com/esphome/esphome/pull/11814)) + +Added `min_auth_mode` configuration option to control WiFi authentication security: + +- **Secure default**: WPA2 minimum authentication mode protects against downgrade attacks +- **Explicit security control**: Choose between WPA, WPA2, or WPA3 (ESP32 only) +- **Backward compatibility**: Can be lowered to WPA for legacy routers + +```yaml +wifi: + ssid: "MyNetwork" + password: "password123" + min_auth_mode: WPA2 # Recommended for security +``` + +## Memory Optimizations for Resource-Constrained Devices + +ESPHome 2025.11.0 delivers substantial memory improvements across the entire framework, with measured savings ranging from **2-7KB of RAM on typical devices** and up to **31KB of RAM on sensor-heavy configurations**. Flash savings reach **10KB+** on ESP32/ESP8266 platforms. + +**Sensor Filter Optimizations:** + +- **Sliding window filters** ([#11282](https://github.com/esphome/esphome/pull/11282)) - Saves **22-25KB RAM** on large batch windows, **90% on sliding windows**, **1,748 bytes flash** on ESP8266. Prevents OOM crashes on ESP32 devices with multiple sensors +- **Filter value lists** ([#11407](https://github.com/esphome/esphome/pull/11407)) - Saves **444 bytes flash** on ESP8266, 18-52% faster execution +- **Calibration/OR filters** ([#11437](https://github.com/esphome/esphome/pull/11437)) - Saves **464 bytes flash**, **48 bytes RAM** on ESP8266 + +**Component Optimizations:** + +- **WiFi component** ([#11205](https://github.com/esphome/esphome/pull/11205)) - Saves **440-1,192 bytes RAM** depending on network density +- **Select component** ([#11514](https://github.com/esphome/esphome/pull/11514)) - Saves **270-2,800 bytes per select** depending on option count +- **Light component** ([#11348](https://github.com/esphome/esphome/pull/11348)) - Saves **1,756 bytes flash** on ESP8266, **~108 bytes RAM** per 6 lights +- **Climate component** ([#11466](https://github.com/esphome/esphome/pull/11466), [#11621](https://github.com/esphome/esphome/pull/11621)) - Saves **~440 bytes RAM** per climate entity +- **Fan component** ([#11483](https://github.com/esphome/esphome/pull/11483), [#11632](https://github.com/esphome/esphome/pull/11632)) - Saves **~24 bytes per fan** +- **Event component** ([#11463](https://github.com/esphome/esphome/pull/11463), [#11767](https://github.com/esphome/esphome/pull/11767)) - Saves **1,248 bytes flash** +- **Global Controller Registry** ([#11772](https://github.com/esphome/esphome/pull/11772)) - Saves **388-6,148 bytes RAM** depending on entity count +- **Action framework** ([#11704](https://github.com/esphome/esphome/pull/11704)) - Saves **356 bytes flash**, eliminates RAM allocations in automations +- **Script component** ([#11308](https://github.com/esphome/esphome/pull/11308)) - Saves **1,592 bytes flash** on ESP32 +- **ESP32-IDF** ([#10930](https://github.com/esphome/esphome/pull/10930), [#11441](https://github.com/esphome/esphome/pull/11441)) - Saves **~10KB combined** (1.3KB + 8.7KB) +- **Network component** ([#11707](https://github.com/esphome/esphome/pull/11707)) - Saves **32-72 bytes per network component** +- **Light effects** ([#11487](https://github.com/esphome/esphome/pull/11487)) - Saves **24-32 bytes per effect** +- **WiFi priority** ([#11830](https://github.com/esphome/esphome/pull/11830)) - Saves **3 bytes per network entry** plus up to **96 bytes** from auto-recovery + +**Note on Breaking Changes:** These optimizations required API changes for external component developers. See [Breaking Changes](#breaking-changes) section for migration details. Standard YAML configurations remain fully compatible but custom code in lambdas may require updates. + +## Ultra-Low Latency Event Processing + +**Thread-Safe Loop Wake Mechanism** ([#11681](https://github.com/esphome/esphome/pull/11681)) + +A new infrastructure change eliminates event processing delays across multiple components. Previously, events from background tasks (BLE, USB, MQTT, ESP-NOW, wake word detection) would queue and wait up to 16ms for the next `select()` timeout before processing. The new `wake_loop_threadsafe()` mechanism uses a UDP loopback socket to immediately wake the main event loop when events arrive. + +**Latency Improvements:** + +- **Before**: 0-16ms average ~8ms +- **After**: ~12 microseconds +- **Speedup**: 600-1,300x faster event processing + +**Components with Ultra-Low Latency:** + +- **BLE operations** ([#11663](https://github.com/esphome/esphome/pull/11663)) - Bluetooth Proxy, BLE Client GATT operations, HomeKit pairing +- **USB Host** ([#11683](https://github.com/esphome/esphome/pull/11683)) - USB event processing over 1000x faster +- **MQTT** ([#11695](https://github.com/esphome/esphome/pull/11695)) - ESP32 only (ESP8266 already runs in main loop) +- **ESP-NOW** ([#11696](https://github.com/esphome/esphome/pull/11696)) - Packet reception and transmission completion +- **Micro Wake Word** ([#11698](https://github.com/esphome/esphome/pull/11698)) - Near-instant automation responses, all triggers fire within same millisecond + +**Real-World Impact:** + +- **BLE Proxy GATT operations** now rival or exceed BlueZ local adapters in Home Assistant, even when operating over the network +- Faster wake word detection response for voice assistants +- Improved BLE connection and pairing times +- Reduced MQTT automation trigger latency +- Faster USB event handling (e.g., Z-Wave PoE proxies) + +This optimization requires no configuration changes and automatically benefits all affected components on ESP32 platforms. + +## High-Performance Networking for Media Streaming + +**Automatic Network Performance Tuning** ([#11812](https://github.com/esphome/esphome/pull/11812)) + +Introduced centralized high-performance networking system where components request optimized settings through `network.require_high_performance_networking()`: + +- **PSRAM-aware configuration**: Aggressive settings (512KB TCP windows) when PSRAM guaranteed, conservative (65KB windows) otherwise +- **WiFi optimization**: Automatically applies optimized WiFi driver settings when high-performance mode enabled +- **Automatic enablement**: Speaker media player automatically enables high-performance networking (fixes streaming stuttering issues) +- **User control**: New `network.enable_high_performance` option to explicitly enable/disable + +This optimization is critical for ESP32-S3 devices running voice assistants and media streaming, eliminating audio stuttering caused by insufficient WiFi buffer sizes. + +**PSRAM Configuration Options** ([#11411](https://github.com/esphome/esphome/pull/11411)) + +Added `ignore_not_found` option (default `true`) to allow disabling `CONFIG_SPIRAM_IGNORE_NOTFOUND`. When set to `false` on devices with guaranteed PSRAM, enables WiFi driver to configure larger buffers for optimal streaming performance. Also improves boot reliability by managing heap allocations before PSRAM initialization. + +## New Hardware Support + +**7 New Sensor/Device Components:** + +- [HDC2010](https://esphome.io/components/sensor/hdc2010.html) ([#6674](https://github.com/esphome/esphome/pull/6674)) - Texas Instruments temperature and humidity sensor +- [MCP3221](https://esphome.io/components/sensor/mcp3221.html) ([#7764](https://github.com/esphome/esphome/pull/7764)) - I2C A-D converter with configurable reference voltage +- [HLK-FM22X](https://esphome.io/components/hlk_fm22x.html) ([#8059](https://github.com/esphome/esphome/pull/8059)) - Face recognition module family +- [BH1900NUX](https://esphome.io/components/sensor/bh1900nux.html) ([#8631](https://github.com/esphome/esphome/pull/8631)) - Rohm Semiconductor temperature sensor +- [RX8130](https://esphome.io/components/time/rx8130.html) ([#10511](https://github.com/esphome/esphome/pull/10511)) - Epson RTC chip (used in M5Stack devices) +- [BLE NUS Logger](https://esphome.io/components/logger.html#ble-logging) ([#9846](https://github.com/esphome/esphome/pull/9846)) - Logging over BLE for nRF52 platform +- [TinyUSB](https://esphome.io/components/tinyusb.html) ([#11678](https://github.com/esphome/esphome/pull/11678)) - USB device functionality foundation for ESP32-S2/S3 + +**Extended Hardware Support:** + +- GP8403 DAC now supports GP8413 (15-bit) model ([#7726](https://github.com/esphome/esphome/pull/7726)) with higher precision +- Toshiba climate supports RAS-2819T air conditioner ([#9490](https://github.com/esphome/esphome/pull/9490)) with two-packet IR protocol +- Dallas temperature sensors support index-based addressing ([#11346](https://github.com/esphome/esphome/pull/11346)) for devices without programmable addresses +- SX126x LoRa module pins now support GPIO port expanders ([#11782](https://github.com/esphome/esphome/pull/11782)) for SeeedStudio SenseCAP Indicator +- Mopeka Standard Check sensors support alternate ID 0x44 ([#10907](https://github.com/esphome/esphome/pull/10907)) + +**Platform & Feature Expansions:** + +- **nRF52 platform** - I2C support ([#8150](https://github.com/esphome/esphome/pull/8150)), BLE NUS logging ([#9846](https://github.com/esphome/esphome/pull/9846), [#9861](https://github.com/esphome/esphome/pull/9861)), GPIO voltage control ([#9858](https://github.com/esphome/esphome/pull/9858)), GPIO input by switching to polling mode ([#11664](https://github.com/esphome/esphome/pull/11664)), and Seeed XIAO BLE board improvements ([#10698](https://github.com/esphome/esphome/pull/10698)) +- **ESP-NOW transport** - Added ESP-NOW as a transport platform for packet_transport component ([#11025](https://github.com/esphome/esphome/pull/11025)) +- **IR Remote protocols** - Dyson AM07 fan support ([#10163](https://github.com/esphome/esphome/pull/10163)), Symphony protocol ([#10777](https://github.com/esphome/esphome/pull/10777)), Toshiba RAS-2819T AC ([#9490](https://github.com/esphome/esphome/pull/9490)) + +## ESP32 Platform Enhancements + +**ESP-IDF 5.5.1 and Arduino 3.3.2** ([#9839](https://github.com/esphome/esphome/pull/9839)) + +Major framework updates bring the latest ESP-IDF 5.5.1 and Arduino 3.3.2 to ESPHome: + +- **ESP-IDF 5.5.1**: Latest features and bug fixes from Espressif +- **Arduino 3.3.2**: Updated Arduino framework with improved stability +- **Memory improvements**: Significant RAM gains (+3.1-3.3MB free RAM) +- **Platform version**: Updated to 55.03.31-1 + +These updates are automatically applied when using the default framework versions. + +**Hosted BLE Support** ([#11167](https://github.com/esphome/esphome/pull/11167)) + +ESP32 P4 and other chips without integrated Bluetooth now support BLE through external controllers using ESP-Hosted API. Enables Bluetooth Proxy functionality on previously unsupported ESP32 variants. + +**Hosted OTA Support** ([#11562](https://github.com/esphome/esphome/pull/11562)) + +Firmware updates for ESP32 co-processors are now supported via ESP-Hosted API, enabling OTA functionality for hosted configurations. + +**Brownout Protection** ([#11306](https://github.com/esphome/esphome/pull/11306)) + +ESP-IDF builds now automatically reduce PHY TX power during brownout conditions to prevent boot loops. This feature was previously only available in Arduino framework builds. Can be disabled if needed through sdkconfig options. + +**Configurable Main Loop Stack Size** ([#10564](https://github.com/esphome/esphome/pull/10564)) + +ESP32 ESP-IDF configurations can now tune the main loop stack size for complex setups: + +```yaml +esp32: + framework: + type: esp-idf + advanced: + main_loop_stack_size: 16384 # Increase for deeply nested components +``` + +**Framework Source Options** ([#11125](https://github.com/esphome/esphome/pull/11125)) + +ESP32 framework configuration now accepts additional PlatformIO source schemes beyond HTTP, including `symlink://`, `git://`, and other repository protocols for local development. + +## OpenThread Improvements + +**Over-The-Air Updates** ([#11095](https://github.com/esphome/esphome/pull/11095)) + +OpenThread devices (ESP32-H2) now support OTA updates via `esphome run`. The mDNS address is automatically populated as the device's default address, eliminating the need to manually specify `--device
`. + +**Sleepy End Device Support** ([#11374](https://github.com/esphome/esphome/pull/11374)) + +Added `poll_period` configuration for MTD (Minimal Thread Device) mode, enabling Sleep End Device (SED) behavior for battery-powered Thread devices: + +```yaml +openthread: + device_type: MTD + poll_period: 40s # Radio turns off between polls +``` + +## nRF52 Platform Expansion + +The nRF52 (Zephyr) platform received extensive new functionality: + +- **I2C Support** ([#8150](https://github.com/esphome/esphome/pull/8150)) - Full I2C bus support for sensors and peripherals +- **BLE Logging** ([#9846](https://github.com/esphome/esphome/pull/9846), [#9861](https://github.com/esphome/esphome/pull/9861)) - Log viewing via `esphome logs --device BLE` or MAC address +- **GPIO High Voltage Mode** ([#9858](https://github.com/esphome/esphome/pull/9858)) - Adjustable voltage levels for USB-powered operation +- **Xiao BLE Bootloader Fix** ([#10698](https://github.com/esphome/esphome/pull/10698)) - Corrected default bootloader, fixed upload, added runtime mismatch detection + +## LVGL Display Enhancements + +**Simplified Layout System** ([#10149](https://github.com/esphome/esphome/pull/10149)) + +LVGL widgets now support shorthand layout methods for easier configuration: + +```yaml +lvgl: + widgets: + - container: + layout: vertical # Simple flex layout + widgets: + - label: + text: "Item 1" + - label: + text: "Item 2" + + - container: + layout: 3x2 # Simple grid layout +``` + +New `container` widget provides styling-free base with 100% default dimensions. Added `stretch` option for flex layouts and substantial speedup of config validation. + +**Rendering Triggers and NaN Substitution** ([#11628](https://github.com/esphome/esphome/pull/11628), [#11712](https://github.com/esphome/esphome/pull/11712)) + +Added `on_draw_start` and `on_draw_end` triggers for coordinating e-paper display updates. Text formatting now supports NaN substitution for graceful handling of unavailable sensor values: + +```yaml +lvgl: + widgets: + - label: + text: + format: "%.1f°C" + args: [id(temp_sensor)] + if_nan: "--.-°C" # Show when sensor unavailable +``` + +## Display Component Improvements + +**E-Paper SPI Refactoring** ([#11540](https://github.com/esphome/esphome/pull/11540)) + +Major improvements to e-paper displays: + +- **Faster transfers**: Larger data blocks for Spectra displays +- **Optimized state machine**: Code-based sequence instead of linear queue saves memory +- **Board-specific configs**: Pre-configured pin mappings (Seeed-reTerminal-E1002) +- **Improved timing**: Internal delay handling instead of loop disabling +- **Fixed busy pin logic** ([#11349](https://github.com/esphome/esphome/pull/11349)): Corrected active-low detection + +**Component Idle Detection** ([#11651](https://github.com/esphome/esphome/pull/11651)) + +New `component.is_idle` condition and `is_idle()` method for automations that need to wait for displays to finish updating before proceeding: + +```yaml +lvgl: + on_draw_end: + - component.update: epaper_display + - wait_until: + component.is_idle: epaper_display # Wait for display ready + - lvgl.resume: +``` + +## Configuration and Developer Tools + +**Advanced Substitution Features** ([#11203](https://github.com/esphome/esphome/pull/11203)) + +The `!extend` and `!remove` tags now support substitutions and Jinja templates: + +```yaml +substitutions: + COMPONENT_TO_REMOVE: component3 + +packages: + base: + - id: !remove ${COMPONENT_TO_REMOVE} # Conditional removal +``` + +**Memory Analysis Command** ([#11395](https://github.com/esphome/esphome/pull/11395)) + +New `esphome analyze-memory ` command provides detailed memory usage breakdown by component: + +- Compiles configuration (fast relink if cached) +- Analyzes memory usage by component and external components +- Displays comprehensive memory report +- Helps identify optimization opportunities + +## Component-Specific Enhancements + +### Sensors + +- Dallas temperature sensors support index-based addressing ([#11346](https://github.com/esphome/esphome/pull/11346)) for devices without programmable addresses +- INA2xx reset control ([#10787](https://github.com/esphome/esphome/pull/10787)): Preserve counters through ESP resets with `reset_on_boot: false` +- XGZP68xx oversampling ([#10306](https://github.com/esphome/esphome/pull/10306)): Configurable oversampling up to 32768x for improved accuracy + +**Improved Improv WiFi Provisioning** ([#10757](https://github.com/esphome/esphome/pull/10757)) + +ESP32 Improv now supports `next_url` with template substitutions for post-provisioning redirection: + +```yaml +esp32_improv: + next_url: "https://example.com/setup?device={{device_name}}&ip={{ip_address}}" +``` + +**Sensor Heartbeat Filter Options** ([#10993](https://github.com/esphome/esphome/pull/10993)) + +Heartbeat filter adds `optimistic` mode to forward new values immediately while still repeating periodically: + +```yaml +sensor: + - platform: template + filters: + - heartbeat: + period: 100ms + optimistic: true # Forward immediately + repeat +``` + +**ESP-NOW Packet Transport** ([#11025](https://github.com/esphome/esphome/pull/11025)) + +ESP-NOW now available as transport platform for packet_transport component, enabling direct ESP32-to-ESP32 wireless sensor data transmission. + +**Remote Transmitter Non-Blocking Mode** ([#11524](https://github.com/esphome/esphome/pull/11524)) + +Remote transmitter operations no longer block the main loop by default, preventing "took a long time for an operation" warnings during long IR transmissions. + +**HTTP Request Trigger Variables** ([#11464](https://github.com/esphome/esphome/pull/11464)) + +HTTP request actions now pass trigger variables correctly into `on_response` and `on_error` triggers. + + + +## Breaking Changes + + + +### User-Facing Breaking Changes + +#### WiFi & Network + +- **WiFi**: WiFi and Ethernet components no longer block other components' setup until connected. Components with setup priority > WIFI (802.3) now initialize immediately, even if network is disconnected. [#9823](https://github.com/esphome/esphome/pull/9823) + +- **WiFi min_auth_mode**: ESP8266 default will change from `WPA` to `WPA2` in 2026.6.0. Users with WPA-only routers must explicitly set `min_auth_mode: WPA` before then. [#11814](https://github.com/esphome/esphome/pull/11814) + +- **WiFi priority**: The `priority` configuration option now only accepts integers (-128 to 127) instead of floats. Change `priority: 5.5` to `priority: 5`. [#11830](https://github.com/esphome/esphome/pull/11830) + +- **.local addresses**: .local addresses now require mDNS to be enabled for DNS resolution. Previously attempted DNS resolution could add 10+ second delays. [#11508](https://github.com/esphome/esphome/pull/11508) + +- **Network high performance**: Speaker media player now always enables high performance networking mode (previously only with codec support). Users can override with `enable_high_performance` under the network component if needed. [#11812](https://github.com/esphome/esphome/pull/11812) + +### ESP32 Platform + +- **ESP32 brownout protection**: ESP-IDF now reduces PHY TX power during brownout to prevent boot loops. Can be disabled with `sdkconfig_options: CONFIG_ESP_PHY_REDUCE_TX_POWER: n` if needed. [#11306](https://github.com/esphome/esphome/pull/11306) + +- **ESP32-S3 PSRAM**: PSRAM mode is now required when multiple PSRAM modes are available (ESP32-S3 only). Users must explicitly choose PSRAM mode in configuration. [#11470](https://github.com/esphome/esphome/pull/11470) + +### Component Behavior Changes + +- **Script max_runs**: Queued scripts now default to `max_runs: 5` (allowing 1 running + 4 queued instances) instead of unlimited to prevent crashes from unbounded memory growth. Set `max_runs` explicitly if you need more capacity. [#11308](https://github.com/esphome/esphome/pull/11308) + +- **Remote transmitter**: Remote transmitter now defaults to non-blocking mode to prevent long blocking operations (>30ms). [#11524](https://github.com/esphome/esphome/pull/11524) + +- **Fan preset modes**: Fan preset modes now preserve the order defined in YAML instead of being sorted alphabetically. The order in Home Assistant will match your YAML configuration order. [#11483](https://github.com/esphome/esphome/pull/11483) + +- **Select state**: The public `state` member has been deprecated and will be removed in 2026.5.0. Use `current_option()` method instead. Deprecation warnings will be shown during compilation. [#11623](https://github.com/esphome/esphome/pull/11623) + +### Component-Specific Changes + +- **HM3301**: AQI calculation updated to EPA 2024 standard. Values will change compared to the old 2012 formula. [#9442](https://github.com/esphome/esphome/pull/9442) + +- **GDK101**: Firmware version is now reported as a string instead of a float division result. [#11029](https://github.com/esphome/esphome/pull/11029) + +- **Uponor Smatrix**: The `address` property of the `uponor_smatrix` component was removed. Device addresses are now 32-bit instead of separate 16-bit system and device addresses. Update configurations by prepending the previous system address to individual device addresses. [#11066](https://github.com/esphome/esphome/pull/11066) + +- **Pipsolar**: Fixed typo `warnung_low_pv_energy` renamed to `warning_low_pv_energy`. Update YAML configurations. [#10291](https://github.com/esphome/esphome/pull/10291) + +- **E-Paper SPI**: Busy pin logic corrected to match datasheet (active low). Some e-paper displays may behave differently. [#11349](https://github.com/esphome/esphome/pull/11349) + +- **nRF52 bootloader**: Default bootloader changed for `xiao_ble` and `adafruit_itsybitsy_nrf52840` boards. Warning shown if generic Adafruit bootloader is used. [#10698](https://github.com/esphome/esphome/pull/10698) + +- **HTTP request triggers**: Changed from multiple on_response/on_error triggers to a single trigger that receives variables. Update automation configurations to use the new variable-based trigger format. [#11464](https://github.com/esphome/esphome/pull/11464) + +## YAML Lambda Changes + +Users who access component members directly in YAML lambdas may need updates: + +- **Select**: Change `id(my_select).state` to `id(my_select).current_option()` (deprecated, will be removed in 2026.5.0). [#11623](https://github.com/esphome/esphome/pull/11623) + +- **Fan**: Change `id(my_fan).preset_mode` to `id(my_fan).get_preset_mode()`. [#11632](https://github.com/esphome/esphome/pull/11632) + +- **Event**: Change `id(my_event).last_event_type` to `id(my_event).get_last_event_type()`. [#11767](https://github.com/esphome/esphome/pull/11767) + + +### Breaking Changes for Developers + + + +The following changes affect external component developers. Standard YAML configurations are generally not affected. + +## Core Framework Changes + +- **Action/Trigger Framework**: All action/trigger/condition method signatures changed to use const references (`const Ts&... x`) instead of pass-by-value (`Ts... x`). See the [Action Framework Performance Optimization](https://developers.esphome.io/blog/2025/11/action-framework-performance-optimization.html) blog post for migration details. [#11704](https://github.com/esphome/esphome/pull/11704) + +- **Controller API**: Controllers now use global registry pattern. Method signatures changed to remove unused state parameters (e.g., `on_sensor_update(sensor::Sensor *obj)` instead of `on_sensor_update(sensor::Sensor *obj, float state)`). External controller implementations extremely rare. [#11772](https://github.com/esphome/esphome/pull/11772) + +- **EntityBase::hash_base()**: Removed deprecated virtual method (deprecated since June 2022). Remove `hash_base()` overrides from external components. [#11783](https://github.com/esphome/esphome/pull/11783) + +- **hexencode()**: Removed function deprecated since 2022.1. Use alternative encoding methods. [#11383](https://github.com/esphome/esphome/pull/11383) + +- **Schema constants**: Removed deprecated schema constants from core. Update external components to use current schema helpers. [#11591](https://github.com/esphome/esphome/pull/11591) + +## Component-Specific API Changes + +### Climate + +See the [Climate Entity Class: FiniteSetMask and Flash Storage Optimizations](https://developers.esphome.io/blog/2025/11/climate-entity-class-memory-optimizations.html) blog post for migration details. + +- **Custom modes storage**: Changed from `std::set` to `FiniteSetMask` for supported modes, and from `std::vector` to `std::vector` for custom fan modes and presets. [#11466](https://github.com/esphome/esphome/pull/11466), [#11621](https://github.com/esphome/esphome/pull/11621) + +- **Member access**: Climate device members (`custom_fan_mode_`, `custom_preset_`) are now private. Use protected setter methods (`set_custom_fan_mode_()`, `set_custom_preset_()`) in derived classes. [#11621](https://github.com/esphome/esphome/pull/11621) + +- **Deprecated methods**: Removed methods deprecated in 1.20 (July 2021). [#11388](https://github.com/esphome/esphome/pull/11388) + +### Light + +See the [Light Entity Class: Memory Optimizations](https://developers.esphome.io/blog/2025/11/light-entity-class-memory-optimizations.html) blog post for migration details. + +- **Color modes**: Replaced `std::set` with `ColorModeMask` bitmask class. [#11348](https://github.com/esphome/esphome/pull/11348) + +- **Effect names**: Changed from `std::string` to `const char *` for effect names. [#11487](https://github.com/esphome/esphome/pull/11487) + +- **Deprecated methods**: Removed methods deprecated in 2021.8.0. [#11389](https://github.com/esphome/esphome/pull/11389) + +### Fan + +See the [Fan Entity Class: Preset Mode Flash Storage and Order Preservation](https://developers.esphome.io/blog/2025/11/fan-entity-class-memory-optimizations.html) blog post for migration details. + +- **Preset modes**: Changed from `std::set` to `std::vector`. The `.preset_mode` public member has been removed - use `get_preset_mode()` for reading and `set_preset_mode_()` for writing in derived classes. [#11483](https://github.com/esphome/esphome/pull/11483), [#11632](https://github.com/esphome/esphome/pull/11632) + +- **Deprecated code**: Removed code deprecated in 2022.2. [#11392](https://github.com/esphome/esphome/pull/11392) + +### Select + +See the [Select Entity Class: Index-Based Operations and Flash Storage](https://developers.esphome.io/blog/2025/11/select-entity-class-memory-optimizations.html) blog post for migration details. + +- **Options storage**: Changed from `std::vector` to `FixedVector`. [#11514](https://github.com/esphome/esphome/pull/11514) + +- **State member**: Public `state` member deprecated (will be removed in 2026.5.0). Use `current_option()` method instead. [#11623](https://github.com/esphome/esphome/pull/11623) + +- **Index-based operations**: Added optional `control(size_t index)` override for more efficient implementations. [#11623](https://github.com/esphome/esphome/pull/11623) + +### Event + +See the [Event Entity Class: Memory Optimizations](https://developers.esphome.io/blog/2025/11/event-entity-class-memory-optimizations.html) blog post for migration details. + +- **Event types storage**: Changed from `FixedVector` to `FixedVector`. The `last_event_type` field is now private - use `get_last_event_type()` getter instead. [#11463](https://github.com/esphome/esphome/pull/11463), [#11767](https://github.com/esphome/esphome/pull/11767) + +### Network Components + +- **WiFi scan results**: External components that access WiFi scan results after connection must call `wifi.request_wifi_scan_results()` in their `to_code()` function to prevent cleanup. [#11205](https://github.com/esphome/esphome/pull/11205) + +- **use_address**: Changed from `const std::string &` to `const char *` in WiFi, Ethernet, and OpenThread components. Update external components calling `get_use_address()` or `set_use_address()`. [#11707](https://github.com/esphome/esphome/pull/11707) + +### Other Components + +- **Cover**: Removed methods deprecated in 2021.9. Update to current cover API. [#11391](https://github.com/esphome/esphome/pull/11391) + +- **Nextion**: Removed methods deprecated in 1.20 (July 2021). Update to current nextion API. [#11393](https://github.com/esphome/esphome/pull/11393) + +## ESP32-Specific Changes + +- **ESP-IDF advanced options**: New options to disable libc locks in IRAM and VFS features. External components using these features must call helper functions to register needs. [#10930](https://github.com/esphome/esphome/pull/10930), [#11441](https://github.com/esphome/esphome/pull/11441) + +## Migration Resources + +For detailed migration guides and examples, see the [ESPHome developer documentation](https://developers.esphome.io/). + +The 2025.11 release blog posts include comprehensive migration examples for common use cases. + + ## Full list of changes From 688fc081f189abcecf02c35fb0476716f23b5884 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Sun, 16 Nov 2025 15:36:05 -0600 Subject: [PATCH 006/109] Add security best practices documentation for users (#5612) Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- content/components/api.md | 4 + content/components/mqtt.md | 3 + content/components/ota/esphome.md | 4 + content/components/web_server.md | 3 + content/components/wifi.md | 3 + content/guides/faq.md | 4 + .../guides/getting_started_command_line.md | 1 + content/guides/getting_started_hassio.md | 1 + content/guides/security_best_practices.md | 610 ++++++++++++++++++ 9 files changed, 633 insertions(+) create mode 100644 content/guides/security_best_practices.md diff --git a/content/components/api.md b/content/components/api.md index 65c2a6bcb2..214679f5a5 100644 --- a/content/components/api.md +++ b/content/components/api.md @@ -75,9 +75,13 @@ api: If you need a key, you can use the key below; it is randomly generated by your browser each time this page loads: {{< api-key-input >}} + > [!NOTE] > Support for configuring the encryption key on-the-fly will be implemented in a future release of Home Assistant. +> [!TIP] +> For comprehensive security guidance including API encryption best practices, see the [Security Best Practices](/guides/security_best_practices) guide. + - **actions** (*Optional*, list): A list of user-defined actions. See [User-defined Actions](#api-device-actions). - **batch_delay** (*Optional*, [Time](/guides/configuration-types#time)): The delay time for batching multiple state update messages together to reduce network overhead. Lower values send updates sooner but use more network packets, diff --git a/content/components/mqtt.md b/content/components/mqtt.md index 19406d9ff7..cf8fd97a39 100644 --- a/content/components/mqtt.md +++ b/content/components/mqtt.md @@ -100,6 +100,9 @@ mqtt: - **certificate_authority** (*Optional*, string): Only with `esp-idf`. CA certificate in PEM format. See [TLS with esp-idf (esp32)](#mqtt-tls-idf) for more information. +> [!TIP] +> For MQTT security recommendations including TLS configuration, see the [Security Best Practices](/guides/security_best_practices#mqtt) guide. + - **client_certificate** (*Optional*, string): Only on `esp32`. Client certificate in PEM format. - **client_certificate_key** (*Optional*, string): Only on `esp32`. Client private key in PEM format. - **skip_cert_cn_check** (*Optional*, bool): Only with `esp-idf`. Don't verify if the common name in the server diff --git a/content/components/ota/esphome.md b/content/components/ota/esphome.md index a34da9fb79..d90d55c7af 100644 --- a/content/components/ota/esphome.md +++ b/content/components/ota/esphome.md @@ -29,6 +29,10 @@ ota: ## Configuration variables - **password** (*Optional*, string): The password to use for updates. + +> [!IMPORTANT] +> Always use strong, unique passwords for OTA updates. See the [Security Best Practices](/guides/security_best_practices#ota-password-protection) guide for more information. + - **port** (*Optional*, int): The port to use for OTA updates. Defaults: - `3232` for the ESP32 diff --git a/content/components/web_server.md b/content/components/web_server.md index ca96d3fc0a..a2cf3dd6fc 100644 --- a/content/components/web_server.md +++ b/content/components/web_server.md @@ -123,6 +123,9 @@ web_server: password: !secret web_server_password ``` +> [!IMPORTANT] +> Always enable authentication when using the web server. See the [Security Best Practices](/guides/security_best_practices#web-server-authentication) guide for recommendations. + Use version 1 user interface: ```yaml diff --git a/content/components/wifi.md b/content/components/wifi.md index 11eadcf6be..e1d8d26682 100644 --- a/content/components/wifi.md +++ b/content/components/wifi.md @@ -35,6 +35,9 @@ wifi: password: !secret wifi_password ``` +> [!TIP] +> For WiFi security recommendations including `min_auth_mode` configuration, see the [Security Best Practices](/guides/security_best_practices#wifi-security) guide. + {{< anchor "wifi-configuration_variables" >}} ## Configuration variables diff --git a/content/guides/faq.md b/content/guides/faq.md index a128421f46..c61660a004 100644 --- a/content/guides/faq.md +++ b/content/guides/faq.md @@ -652,6 +652,10 @@ The {{< docref "/components/deep_sleep" "Deep Sleep" >}} component needs to be p configuration when the device is first added to Home Assistant. To prevent entities from appearing as "unavailable", you can remove and re-add the device in Home Assistant. +## How do I secure my ESPHome devices? + +See the comprehensive {{< docref "security_best_practices" >}} guide for detailed recommendations on API encryption, OTA passwords, network segmentation, physical security, and more. + ## See Also - {{< docref "/index" "ESPHome index" >}} diff --git a/content/guides/getting_started_command_line.md b/content/guides/getting_started_command_line.md index 152cd12533..efd6bc7c2c 100644 --- a/content/guides/getting_started_command_line.md +++ b/content/guides/getting_started_command_line.md @@ -241,3 +241,4 @@ Logging level can be set with the env var `ESPHOME_LOG_LEVEL` (default is `INFO` - {{< docref "cli/" >}} - {{< docref "/index" "ESPHome index" >}} - {{< docref "getting_started_hassio/" >}} +- {{< docref "security_best_practices" >}} diff --git a/content/guides/getting_started_hassio.md b/content/guides/getting_started_hassio.md index 27866df93b..6788ef32d5 100644 --- a/content/guides/getting_started_hassio.md +++ b/content/guides/getting_started_hassio.md @@ -197,3 +197,4 @@ a new issue on the [GitHub issue tracker](https://github.com/esphome/esphome/iss - {{< docref "/index" "ESPHome index" >}} - {{< docref "getting_started_command_line/" >}} +- {{< docref "security_best_practices" >}} diff --git a/content/guides/security_best_practices.md b/content/guides/security_best_practices.md new file mode 100644 index 0000000000..c29c7e5fea --- /dev/null +++ b/content/guides/security_best_practices.md @@ -0,0 +1,610 @@ +--- +description: "Security best practices for ESPHome devices and networks." +title: "Security Best Practices" +params: + seo: + description: Security best practices for ESPHome devices and networks. + image: shield-alt.svg +--- + +This guide provides security recommendations for ESPHome users to help protect their devices and networks. + +## Threat Model + +ESPHome is designed for deployment on **trusted networks** such as home or business networks. The security model assumes: + +- Devices are protected by network perimeter security (firewalls, network segmentation, VLANs) +- Devices are **not directly exposed** to untrusted networks or the internet +- Physical access to devices is controlled + +ESPHome devices should not be considered hardened for hostile network environments. If you need to deploy devices in hostile or untrusted environments, additional security measures beyond ESPHome's built-in features are required. + +## Core Security Features + +ESPHome provides three primary security features that should **always** be enabled: + +### 1. API Encryption + +The [native API](/components/api) is the primary communication method between ESPHome devices and Home Assistant or other clients. + +**Enable API encryption:** + +```yaml +api: + encryption: + key: !secret device_name_api_key + +``` + +**Best practices:** + +- Generate a unique encryption key for each device - see the [API component documentation](/components/api#configuration-variables) for an on-demand key generator +- Store keys in `secrets.yaml` (never commit this file to version control) +- Never reuse encryption keys across devices +- If a device is compromised, regenerate its key immediately + +**Without API encryption:** Anyone on your local network can: + +- Read all sensor data from your devices +- Control switches, lights, and other entities +- Execute services on your devices +- Potentially extract sensitive information + +### 2. Web Server Authentication + +If you enable the [web server](/components/web_server) for device monitoring and control, always set a password: + +```yaml +web_server: + port: 80 + auth: + username: !secret device_name_web_username + password: !secret device_name_web_password + +``` + +**Best practices:** + +- Use strong, unique passwords +- Store credentials in `secrets.yaml` +- Consider disabling the web server entirely if you don't need it +- If you only need logs, use Home Assistant or the native API instead + +**Without web server authentication:** Anyone on your local network can: + +- View device status and sensor data +- Control switches, buttons, and other entities via the web interface +- Potentially interfere with device operation + +### 3. OTA Password Protection + +[OTA (Over-The-Air)](/components/ota) updates allow you to update firmware wirelessly. Protect this with a password: + +```yaml +ota: + - platform: esphome + password: !secret device_name_ota_password + +``` + +**Best practices:** + +- Use strong, unique passwords +- Store passwords in `secrets.yaml` +- Never use the same OTA password across multiple devices +- Rotate passwords periodically or after suspected compromise + +**Without OTA password:** Anyone on your local network can: + +- Upload malicious firmware to your devices +- Completely compromise device functionality +- Use your devices as a pivot point to attack other network resources + +## Network Security + +### Network Segmentation + +**Important consideration:** ESPHome devices use mDNS for discovery, which does not work across VLANs. For most home users, placing ESPHome devices on the **same network as Home Assistant** is the simplest and recommended approach. + +
+Advanced: VLAN Isolation (for advanced users only) + +**For advanced users wanting VLAN isolation:** + +The recommended approach is to connect Home Assistant to **both networks** (dual-homing) rather than using an mDNS reflector, which is unreliable: + +```text + +Internet → Firewall → VLAN 10 (Trusted - Home Assistant management interface) + → VLAN 30 (IoT - ESPHome devices) + → VLAN 20 (Guest Network) + +Home Assistant with two network interfaces: + - eth0 or wlan0: VLAN 10 (192.168.10.x) - Management and user access + - eth1 or wlan1: VLAN 30 (192.168.30.x) - IoT device communication + +``` + +**Dual-homing setup:** + +- Home Assistant can discover ESPHome devices via mDNS on VLAN 30 +- User access to Home Assistant remains on VLAN 10 +- No unreliable mDNS reflector needed +- Requires Home Assistant host with two network interfaces (physical, USB Ethernet, or VLANs on single interface) + +**Alternative: Static IP without mDNS:** + +- Configure ESPHome devices with static IPs +- Disable mDNS on devices +- Manually configure device addresses in Home Assistant +- More maintenance overhead but works with single interface + +
+ +### WiFi Security + +For full WiFi configuration options, see the [WiFi component](/components/wifi) documentation. + +**Prefer Ethernet when possible:** + +For devices that support it, use Ethernet instead of WiFi for better security and reliability: + +- No wireless encryption vulnerabilities +- Better performance and lower latency +- Not susceptible to WiFi attacks (deauth, jamming, etc.) +- Reduces wireless network congestion + +For a list of supported Ethernet components and compatible hardware, see the [Ethernet component documentation](/components/ethernet). + +**WiFi Configuration ([WiFi component](/components/wifi)):** + +```yaml +wifi: + ssid: !secret wifi_ssid + password: !secret wifi_password + + # Set minimum WiFi security - reject connections to networks with weaker security + # Default is WPA2 on ESP32, WPA on ESP8266 (will change to WPA2 in 2026.6.0) + min_auth_mode: WPA2 # Or WPA3 for ESP32 if all your networks support it + + # Optional: Fallback AP with password (only if needed) + ap: + ssid: "Fallback-AP" + password: !secret fallback_password + +``` + +**Best practices:** + +- **ESP32 users:** The default `min_auth_mode: WPA2` is secure and allows WPA2 and WPA3 networks - only set `min_auth_mode: WPA3` if you want to restrict to WPA3-only networks +- **ESP8266 users:** Explicitly set `min_auth_mode: WPA2` to avoid the insecure WPA default +- **WPA (TKIP) has known vulnerabilities** - only use if you have a legacy router that can't be upgraded +- Never use open or WEP-encrypted networks +- Use WPA2 (minimum) or WPA3 (recommended) on your router +- Use strong WiFi passwords +- Disable WPS on your router (vulnerable to brute force attacks) +- Consider hiding SSID broadcast (provides limited security but reduces visibility) + +### mDNS Security + +ESPHome uses [mDNS](/components/mdns) for device discovery. Be aware: + +- mDNS broadcasts device names on your local network +- Malicious actors on the same network can discover devices + +**Disabling mDNS is NOT recommended** for most users as it makes devices very difficult to manage. You would need to manually track static IP addresses for all devices and reconfigure Home Assistant if IPs change. Only disable mDNS if you require extreme security and are willing to accept the significant management overhead. + +
+Advanced: Disabling mDNS (not recommended for most users) + +```yaml +# Only for extreme security requirements - makes management very difficult +wifi: + manual_ip: + static_ip: 192.168.30.10 + gateway: 192.168.30.1 + subnet: 255.255.255.0 + +# Disable mDNS (requires manually configuring static IPs in Home Assistant) +mdns: + disabled: true + +``` + +
+ +## Physical Security + +### Device Access + +Physical access to an ESPHome device allows an attacker to: + +- Flash new firmware via USB/serial connection +- Extract encryption keys and passwords from flash memory +- Replace the device entirely + +**Mitigation strategies:** + +- Install devices in secure locations (locked cabinets, above ceiling tiles) +- Use tamper-evident seals on enclosures +- Consider devices installed in public areas as potentially compromised + +### USB/Serial Protection + +
+⚠️ WARNING: PERMANENT AND IRREVERSIBLE - Click to expand only if you need extreme security + +**WARNING: The following methods are PERMANENT and IRREVERSIBLE. Do not do this unless you fully understand the consequences.** + +If you have extreme security requirements, you can physically disable USB/serial interfaces after initial deployment: + +- Fill USB ports with epoxy (PERMANENT - device cannot be recovered if it fails) +- Cut serial header pins (PERMANENT - device cannot be reflashed via serial) +- Disable bootloader access via UART using eFuses on ESP32 (PERMANENT and IRREVERSIBLE - blocks all serial flashing) +- Use devices in hard-to-access locations (reversible) + +**Important considerations:** + +- Once you epoxy, cut pins, or burn eFuses, the device can ONLY be updated via OTA +- If OTA fails or the device becomes unresponsive, the device is permanently bricked +- You will not be able to troubleshoot connection issues or recover from bad firmware +- eFuses cannot be reset - once blown, they are permanent for the life of the chip +- This is only appropriate for extremely high-security environments where physical access is a critical threat + +
+ +**For most users:** Simply installing devices in secure, hard-to-access locations provides sufficient physical security without the risk of permanently bricking your devices. + +## Secrets Management + +### Using secrets.yaml + +Use `secrets.yaml` to avoid storing sensitive information in your configuration files, especially if you share your configs in a public Git repository: + +```yaml +# Example: device1.yaml +api: + encryption: + key: !secret device1_api_key + +ota: + - platform: esphome + password: !secret device1_ota_password + +``` + +**secrets.yaml:** + +```yaml +# Each device should have unique keys and passwords +device1_api_key: "uKh1234567890abcdefghijklmnopqrstuvwxyz=" +device1_ota_password: "strong-unique-password-device1" +device1_web_username: "device1_admin" +device1_web_password: "strong-unique-web-password-device1" + +device2_api_key: "aBc9876543210xyzqrstuvwxyzabcdefghijkl=" +device2_ota_password: "strong-unique-password-device2" +device2_web_username: "device2_admin" +device2_web_password: "strong-unique-web-password-device2" + +# WiFi credentials can be shared across devices +wifi_ssid: "YourNetworkName" +wifi_password: "your-wifi-password" + +``` + +**Important:** Even when using `secrets.yaml`, **each device must have unique API encryption keys, OTA passwords, and web server credentials**. Never reuse these across devices. Only WiFi credentials can be shared. + +### Version Control + +
+If using Git or other version control + +**Add to `.gitignore`:** + +```txt +secrets.yaml +*.backup +``` + +**Verify secrets.yaml is not tracked:** + +```bash +git status # secrets.yaml should not appear +git log --all --full-history -- secrets.yaml # Should return nothing +``` + +**If you accidentally committed secrets:** + +1. Rotate all compromised credentials immediately +1. Use `git filter-branch` or `BFG Repo-Cleaner` to remove from history +1. Force-push the cleaned repository +1. Notify anyone who cloned the repository + +
+ +## Update Management + +### Keep ESPHome Updated + +Security vulnerabilities are discovered and fixed regularly. Keep your ESPHome installation up to date by following the [installation instructions](/guides/installing_esphome). + +**Best practices:** + +- Subscribe to ESPHome release notifications on GitHub +- Review changelogs for security fixes +- Test updates in a non-production environment first +- Update devices regularly (monthly rolling release cycle) + +### Firmware Updates + +**Verify you're updating the correct device:** + +- Check device hostname and IP address before OTA update +- Use unique, descriptive device names +- Maintain an inventory of devices and their configurations + +**OTA security:** + +- OTA updates are performed over your local network +- Enable OTA password protection (see above) +- Monitor device logs during updates for unexpected behavior + +## Logging and Monitoring + +### Sensitive Data in Logs + +**Be cautious about what you log.** See the [logger component](/components/logger) for more details on log configuration. + +```yaml +logger: + level: INFO # Don't use DEBUG in production + logs: + # Reduce verbosity for components that might log sensitive data + wifi: WARN + api: WARN + +``` + +**Avoid logging:** + +- WiFi passwords (may be logged at DEBUG/VERBOSE levels - keep log level at WARNING or higher) +- API encryption keys +- User credentials +- Personal information from sensors (e.g., GPS coordinates) + +### Log Review + +Regularly review device logs for: + +- Unexpected API connections +- Failed authentication attempts +- Unusual sensor readings or component behavior +- Memory or crash dumps (may contain sensitive data) + +Access logs via: + +- `esphome logs .yaml` command +- ESPHome Device Builder web interface +- Serial console (USB connection) + +## Specific Component Security + +### WiFi Fallback Hotspot + +The [WiFi component](/components/wifi) can create a fallback AP if it can't connect to WiFi (when `ap:` is configured): + +```yaml +wifi: + # ... your normal wifi config ... + ap: + ssid: "Device-Fallback" + password: !secret device_name_fallback_password # ALWAYS SET THIS + +``` + +**Without a password:** Anyone nearby can connect when your WiFi is down and potentially: + +- Access the device's web server +- Flash new firmware via OTA +- Extract configuration data + +**Best practices:** + +- Always set a fallback AP password +- Use strong, unique passwords +- Consider disabling fallback AP in production by removing the `ap:` section entirely + +### MQTT + +If using [MQTT](/components/mqtt) instead of the native API: + +```yaml +mqtt: + broker: !secret mqtt_broker + username: !secret mqtt_username + password: !secret mqtt_password + # For ESP8266: Use TLS with SSL fingerprints + # ssl_fingerprints: + # - "SHA1_FINGERPRINT_HERE" + # For ESP32 with esp-idf: Use TLS with certificate authority + # certificate_authority: ca_cert.pem + +``` + +**Best practices:** + +- Enable MQTT authentication on your broker +- Use TLS encryption if possible (check broker support) +- Use unique MQTT credentials per device +- Segment MQTT topics by device/function + +### External Components + +Custom/external components are **out of scope** for ESPHome security support: + +```yaml +external_components: + - source: github://someone/custom-component + +``` + +**Risks:** + +- May contain vulnerabilities or malicious code +- Not reviewed by ESPHome maintainers +- May not follow security best practices + +**Best practices:** + +- Only use external components from trusted sources +- Review source code before using +- Keep external components updated +- Consider the maintenance status and community trust + +## Secure Configuration Examples + +### Minimal Secure Configuration + +```yaml +esphome: + name: secure-device + friendly_name: Secure Device + +esp32: + board: esp32dev + +wifi: + ssid: !secret wifi_ssid + password: !secret wifi_password + + # Fallback hotspot with password + ap: + ssid: "Secure-Device-Fallback" + password: !secret secure_device_fallback_password + +# API with encryption (REQUIRED) +api: + encryption: + key: !secret secure_device_api_key + +# OTA with password (REQUIRED) +ota: + - platform: esphome + password: !secret secure_device_ota_password + +# Disable web server if not needed +# web_server: +# port: 80 +# auth: +# username: !secret secure_device_web_username +# password: !secret secure_device_web_password + +logger: + level: INFO + +``` + +### Production-Grade Secure Configuration + +```yaml +esphome: + name: production-device + friendly_name: Production Device + +esp32: + board: esp32dev + framework: + type: esp-idf # ESP-IDF generally has better security updates + +wifi: + ssid: !secret wifi_ssid + password: !secret wifi_password + + # Use static IP to reduce mDNS dependency + manual_ip: + static_ip: !secret production_device_ip + gateway: !secret gateway_ip + subnet: 255.255.255.0 + + # Disable fallback AP in production - remove ap: section entirely + +# API with encryption +api: + encryption: + key: !secret production_device_api_key + # Optional: Restrict to specific Home Assistant instance + # reboot_timeout: 15min + +# OTA with password +ota: + - platform: esphome + password: !secret production_device_ota_password + # Optional: Require safe_mode for troubleshooting + # safe_mode: true + +# Web server disabled (use Home Assistant for monitoring) +# web_server: + +logger: + level: INFO + logs: + wifi: WARN + api: WARN + +# Optional: Disable mDNS for additional security +# mdns: +# disabled: true + +``` + +## Compliance and Regulations + +Depending on your jurisdiction and use case, you may need to comply with: + +- **GDPR** (EU): If devices collect personal data +- **CCPA** (California): Consumer privacy protection +- **HIPAA** (USA): If used in healthcare settings +- **Industry standards**: IEC 62443 (industrial automation), UL 2900 (IoT security) + +**ESPHome does not guarantee compliance** with any specific regulations. Consult legal and compliance experts for your specific requirements. + +## Incident Response + +### If You Suspect a Compromise + +1. **Isolate** the device immediately (disconnect from network/power) +1. **Document** what you observed (logs, unusual behavior, timestamps) +1. **Investigate** other devices on the same network +1. **Rotate credentials**: + + - API encryption keys + - OTA passwords + - Web server credentials + - WiFi passwords (if device had access) + +1. **Flash fresh firmware** (via USB/serial, not OTA) +1. **Monitor** for continued suspicious activity + +### Reporting Security Vulnerabilities + +If you discover a security vulnerability in ESPHome itself: + +- **DO NOT** create a public GitHub issue +- See the [ESPHome Security Policy](https://github.com/esphome/esphome/security) for reporting guidelines + +## Additional Resources + +- [Home Assistant Security Checklist](https://www.home-assistant.io/docs/configuration/securing/) - Complementary security guidance +- [OWASP IoT Security](https://owasp.org/www-project-internet-of-things/) - General IoT security best practices + +## Disclaimer + +As an open source project, ESPHome is provided "as is" without any security guarantees or warranties. Users are responsible for: + +- Properly configuring security features +- Maintaining network and physical security +- Keeping software updated +- Implementing appropriate security controls for their environment + +Following these best practices significantly improves security but cannot eliminate all risks. Security is a shared responsibility between the ESPHome project and its users. From 3e8d61d84637e53cdf109aeac4e4c3abe91bc6e2 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Sun, 16 Nov 2025 17:38:46 -0600 Subject: [PATCH 007/109] Add automated release notes generator with AI-powered summaries (#5616) Co-authored-by: Jesse Hills <3060199+jesserockz@users.noreply.github.com> --- .gitignore | 3 + requirements_test.txt | 2 + script/generate_release_notes.py | 948 ++++++++++++++++++ script/prompt_templates/breaking_changes.txt | 103 ++ .../overview_and_highlights.txt | 257 +++++ script/release_notes_template.md | 129 +++ 6 files changed, 1442 insertions(+) create mode 100755 script/generate_release_notes.py create mode 100644 script/prompt_templates/breaking_changes.txt create mode 100644 script/prompt_templates/overview_and_highlights.txt create mode 100644 script/release_notes_template.md diff --git a/.gitignore b/.gitignore index c0a8a1dbc8..9355b18c5b 100644 --- a/.gitignore +++ b/.gitignore @@ -19,6 +19,9 @@ __pycache__/ *.py[cod] *$py.class +# Release notes generator cache (persistent PR cache + version-specific data) +script/cache/ + venv *.DS_Store diff --git a/requirements_test.txt b/requirements_test.txt index 72c5974de3..9cb2f28579 100644 --- a/requirements_test.txt +++ b/requirements_test.txt @@ -2,3 +2,5 @@ pillow colorama pre-commit +# for generate_release_notes.py +jinja2 diff --git a/script/generate_release_notes.py b/script/generate_release_notes.py new file mode 100755 index 0000000000..d11b910767 --- /dev/null +++ b/script/generate_release_notes.py @@ -0,0 +1,948 @@ +#!/usr/bin/env python3 +""" +ESPHome Release Notes Generator +================================= + +This script automates the generation of release notes for ESPHome by: + 1. Discovering PRs merged between releases using GitHub CLI + 2. Caching PR metadata locally + 3. Generating AI prompts for Claude Code CLI + 4. Assembling the final changelog from AI responses and PR data + +Prerequisites: +-------------- +- Python 3.8+ (recommended: 3.11+) +- GitHub CLI (`gh`) installed and authenticated: + - Install: https://cli.github.com/ + - Authenticate: `gh auth login` +- Internet access for fetching PR data + +Required Dependencies: +--------------------- +- `jinja2` (for templating) + Install via pip: `pip install jinja2` + Or via uv: `uv pip install jinja2` + +Usage: +------ +Basic workflow: + 1. Fetch PRs and generate AI prompts: + python script/generate_release_notes.py 2025.11.0 + 2. Force re-fetch PRs (if needed): + python script/generate_release_notes.py 2025.11.0 --update + 3. Assemble release notes from AI responses: + python script/generate_release_notes.py 2025.11.0 --assemble + +Detailed Workflow: +------------------ +Step 1: Generate Prompts + $ python script/generate_release_notes.py 2025.11.0 + This discovers PRs between the previous release and the current version, + caches PR metadata, and generates AI prompts in script/cache/2025.11.0/prompts/ + +Step 2: Process Prompts with Claude Code CLI + Start Claude Code CLI and read the prompts: + $ claude + > Please read script/cache/2025.11.0/prompts/overview_and_highlights.txt and follow the instructions + > Please read script/cache/2025.11.0/prompts/breaking_changes.txt and follow the instructions + + Claude will write AI responses to script/cache/2025.11.0/ai_responses/ + +Step 3: Review AI Responses (CRITICAL!) + Carefully review and edit the AI-generated content in script/cache/2025.11.0/ai_responses/ + Check for: + - Hallucinations or inaccurate technical claims + - Incorrect compatibility statements + - Mischaracterized features + +Step 4: Assemble Changelog + $ python script/generate_release_notes.py 2025.11.0 --assemble + This combines AI responses with auto-generated PR lists into content/changelog/2025.11.0.md + +Troubleshooting Common Issues: +----------------------------- +- "gh: command not found": Install GitHub CLI and ensure it's in your PATH. +- "gh authentication failed": Run `gh auth login` and verify access to the repository. +- "ModuleNotFoundError: No module named 'jinja2'": Install with `pip install jinja2` or `uv pip install jinja2`. +- "No PRs found for version": Ensure the version tag exists and you have network access. +- "Permission denied" or file errors: Check directory permissions and paths. + +For further help, see the ESPHome documentation or contact maintainers. +""" + +from __future__ import annotations + +import argparse +from dataclasses import dataclass +from datetime import datetime +import json +from pathlib import Path +import re +import subprocess +import sys + +from jinja2 import Environment, FileSystemLoader, select_autoescape + +# Label constants +LABEL_BREAKING_CHANGE = "breaking-change" +LABEL_NEW_FEATURE = "new-feature" +LABEL_NEW_COMPONENT = "new-component" + + +@dataclass +class Version: + """ESPHome version representation""" + + year: int + month: int + patch: int + beta: int = 0 + + def __str__(self): + base = f"{self.year}.{self.month}.{self.patch}" + if self.beta > 0: + base += f"b{self.beta}" + return base + + @property + def tag(self): + """Git tag name""" + return str(self) + + @classmethod + def parse(cls, value: str) -> Version: + """Parse version string like '2025.11.0' or '2025.11.0b1'""" + match = re.match(r"(\d{4})\.(\d+)\.(\d+)(b(\d+))?", value) + if not match: + raise ValueError( + f"Invalid version format: {value}. Expected format: YYYY.MM.PATCH or YYYY.MM.PATCHbN" + ) + year = int(match[1]) + month = int(match[2]) + patch = int(match[3]) + beta = int(match[5]) if match[5] else 0 + return cls(year=year, month=month, patch=patch, beta=beta) + + def previous_version_base(self) -> Version: + """Get the base version of previous month (always .0 patch)""" + if self.month == 1: + # January -> previous December + return Version(year=self.year - 1, month=12, patch=0) + return Version(year=self.year, month=self.month - 1, patch=0) + + def find_latest_patch(self, all_tags: set[str]) -> Version: + """Find the latest patch release for this major.minor version""" + base = f"{self.year}.{self.month}." + patches = [] + for tag in all_tags: + if tag.startswith(base) and "b" not in tag: + try: + patches.append(int(tag.replace(base, "").split("b")[0])) + except ValueError: + continue # Skip malformed tags + if not patches: + return self + max_patch = max(patches) + return Version(year=self.year, month=self.month, patch=max_patch) + + def find_latest_beta(self, all_tags: set[str]) -> tuple[str, bool]: + """Find the latest beta tag for this major.minor.0 version + + Returns: + tuple of (beta_tag, exists) where beta_tag is like "2025.11.0b3" + """ + base = f"{self.year}.{self.month}.0b" + betas = [] + for tag in all_tags: + if tag.startswith(base): + try: + betas.append(int(tag.replace(base, ""))) + except ValueError: + continue # Skip malformed tags + if not betas: + return (f"{base}1", False) + max_beta = max(betas) + return (f"{base}{max_beta}", True) + + +@dataclass +class PullRequest: + """Pull request metadata""" + + number: int + title: str + body: str + author: str + labels: list[str] + url: str + state: str + merged_at: str | None = None + + @classmethod + def from_json(cls, data: dict) -> PullRequest: + """Create PR from GitHub API JSON response""" + return cls( + number=data["number"], + title=data["title"], + body=data.get("body", ""), + author=data.get("author", {}).get("login", "unknown") + if data.get("author") + else "unknown", + labels=[label["name"] for label in data.get("labels", [])], + url=data["url"], + state=data["state"], + merged_at=data.get("mergedAt"), + ) + + def to_json(self) -> dict: + """Convert to JSON-serializable dict""" + return { + "number": self.number, + "title": self.title, + "body": self.body, + "author": self.author, + "labels": self.labels, + "url": self.url, + "state": self.state, + "merged_at": self.merged_at, + } + + +class ReleaseNotesGenerator: + """Main release notes generator""" + + def __init__( + self, version: Version, force_update: bool = False, dry_run: bool = False + ): + self.version = version + self.force_update = force_update + self.dry_run = dry_run + # Shared cache for all PRs (persistent across all versions) + self.prs_cache_dir = Path("script/cache/prs") + # Version-specific directories + self.version_dir = Path("script/cache") / str(version) + self.prompts_dir = self.version_dir / "prompts" + self.responses_dir = self.version_dir / "ai_responses" + self._all_tags: set[str] | None = None + + # Set up Jinja2 environment for templates + template_dir = Path("script/prompt_templates") + self.jinja_env = Environment( + loader=FileSystemLoader(template_dir), + autoescape=select_autoescape(), + trim_blocks=True, + lstrip_blocks=True, + ) + + @staticmethod + def _print_gh_install_instructions() -> None: + """Print GitHub CLI installation instructions""" + print("\nInstallation instructions:") + print(" macOS: brew install gh") + print( + " Linux: See https://github.com/cli/cli/blob/trunk/docs/install_linux.md" + ) + print(" Windows: See https://github.com/cli/cli#installation") + + def check_github_cli(self) -> None: + """Check if GitHub CLI is installed and authenticated""" + try: + result = subprocess.run( + ["gh", "--version"], + capture_output=True, + text=True, + check=False, + ) + if result.returncode != 0: + print("Error: GitHub CLI (gh) is not installed or not in PATH") + self._print_gh_install_instructions() + sys.exit(1) + except FileNotFoundError: + print("Error: GitHub CLI (gh) is not installed") + self._print_gh_install_instructions() + sys.exit(1) + + # Check authentication + try: + result = subprocess.run( + ["gh", "auth", "status"], + capture_output=True, + text=True, + check=False, + ) + if result.returncode != 0: + print("Error: GitHub CLI is not authenticated") + print("\nPlease run: gh auth login") + sys.exit(1) + except (FileNotFoundError, OSError) as e: + print(f"Error checking GitHub CLI authentication: {e}") + print("\nPlease run: gh auth login") + sys.exit(1) + + def ensure_dirs(self) -> None: + """Create cache directories if they don't exist""" + self.prs_cache_dir.mkdir(parents=True, exist_ok=True) + self.prompts_dir.mkdir(parents=True, exist_ok=True) + self.responses_dir.mkdir(parents=True, exist_ok=True) + + def run_gh(self, *args) -> dict: + """Run gh CLI command and return JSON output""" + cmd = ["gh"] + list(args) + try: + result = subprocess.run( + cmd, + capture_output=True, + text=True, + check=True, + ) + return json.loads(result.stdout) if result.stdout else {} + except subprocess.CalledProcessError as e: + print(f"Error running gh command: {' '.join(cmd)}") + print(f"stderr: {e.stderr}") + raise + + def _fetch_all_tags(self) -> set[str]: + """Fetch all tags from esphome/esphome repo (cached)""" + if self._all_tags is not None: + return self._all_tags + + print("Fetching all tags from esphome/esphome...") + try: + result = subprocess.run( + [ + "gh", + "api", + "repos/esphome/esphome/tags", + "--paginate", + "--jq", + ".[].name", + ], + capture_output=True, + text=True, + check=True, + ) + tags = [t for t in result.stdout.strip().split("\n") if t] + self._all_tags = set(tags) + print(f"Found {len(self._all_tags)} tags") + return self._all_tags + except subprocess.CalledProcessError as e: + print(f"Error fetching tags: {e.stderr}", file=sys.stderr) + print("Failed to fetch tags. Exiting.", file=sys.stderr) + sys.exit(1) + + def tag_exists(self, tag: str) -> bool: + """Check if a git tag exists in esphome/esphome repo""" + all_tags = self._fetch_all_tags() + return tag in all_tags + + def get_pr_numbers_from_commits(self, base_ref: str, head_ref: str) -> list[int]: + """Extract PR numbers from commits between two refs""" + print(f"Comparing {base_ref}...{head_ref}") + + # Use --paginate with --jq to get all commit messages across all pages + # This automatically handles pagination and extracts just what we need + result = subprocess.run( + [ + "gh", + "api", + f"repos/esphome/esphome/compare/{base_ref}...{head_ref}", + "--paginate", + "--jq", + ".commits[].commit.message", + ], + capture_output=True, + text=True, + check=True, + ) + + # Each line is a commit message + commit_messages = [line for line in result.stdout.strip().split("\n") if line] + + print(f"Found {len(commit_messages)} commits") + + pr_numbers = set() + for message in commit_messages: + # Extract PR numbers from patterns like (#12345) + matches = re.findall(r"\(#(\d+)\)", message) + pr_numbers.update(int(m) for m in matches) + + return sorted(pr_numbers) + + def _get_patch_release_prs(self, base_version: Version) -> list[int]: + """Get all PRs that were included in patch releases (e.g., 2025.10.1, 2025.10.2)""" + patch_prs = set() + patch_num = 1 + max_patches = 100 # Safety limit to prevent infinite loops + + print( + f"Checking for patch releases of {base_version.year}.{base_version.month}.x..." + ) + + while patch_num <= max_patches: + patch_tag = f"{base_version.year}.{base_version.month}.{patch_num}" + + if not self.tag_exists(patch_tag): + break + + print(f" Found patch release: {patch_tag}") + + # Get PRs between base and this patch + base_tag = f"{base_version.year}.{base_version.month}.{patch_num - 1}" + prs = self.get_pr_numbers_from_commits(base_tag, patch_tag) + patch_prs.update(prs) + + patch_num += 1 + + if patch_num > max_patches: + print( + f"Warning: Reached maximum patch limit ({max_patches}). Some patches may have been skipped." + ) + + return sorted(patch_prs) + + def discover_prs(self) -> list[int]: + """Discover PRs for this release""" + current_tag = self.version.tag + + # Find the latest patch release of the previous month + previous_base = self.version.previous_version_base() + all_tags = self._fetch_all_tags() + previous_version = previous_base.find_latest_patch(all_tags) + previous_tag = previous_version.tag + + print(f"\n=== Discovering PRs for {current_tag} ===\n") + print(f"Previous version: {previous_tag}") + + # Find the latest beta tag (e.g., 2025.11.0b1, b2, b3, etc.) + beta_tag, beta_tag_exists = self.version.find_latest_beta(all_tags) + + # Check if previous version tag exists + if not self.tag_exists(previous_tag): + print(f"Error: Previous version tag '{previous_tag}' does not exist") + print("Cannot determine which PRs are new") + sys.exit(1) + + if beta_tag_exists: + # Beta branch exists - use everything from previous release to beta + print(f"Beta tag '{beta_tag}' exists") + print(f"Comparing tags: {previous_tag}...{beta_tag}") + pr_numbers = self.get_pr_numbers_from_commits(previous_tag, beta_tag) + else: + # Beta doesn't exist yet - use dev branch but exclude patch releases + print(f"Beta tag '{beta_tag}' does not exist yet") + print("Using dev branch and excluding patch releases") + + # Get all PRs from previous version to dev + all_prs = self.get_pr_numbers_from_commits(previous_tag, "dev") + + # Find and exclude PRs from patch releases + patch_prs = self._get_patch_release_prs(previous_version) + pr_numbers = sorted(set(all_prs) - set(patch_prs)) + + if patch_prs: + print(f"Excluded {len(patch_prs)} PRs from patch releases") + + return pr_numbers + + def fetch_pr(self, pr_number: int) -> PullRequest: + """Fetch PR metadata from GitHub""" + print(f"Fetching PR #{pr_number}...", end=" ") + + data = self.run_gh( + "pr", + "view", + str(pr_number), + "--repo", + "esphome/esphome", + "--json", + "number,title,body,author,labels,url,state,mergedAt", + ) + + print("✓") + return PullRequest.from_json(data) + + def cache_pr(self, pr: PullRequest) -> None: + """Save PR to shared cache""" + cache_file = self.prs_cache_dir / f"{pr.number}.json" + with open(cache_file, "w") as f: + json.dump(pr.to_json(), f, indent=2) + + def load_cached_pr(self, pr_number: int) -> PullRequest | None: + """Load PR from shared cache if it exists""" + cache_file = self.prs_cache_dir / f"{pr_number}.json" + if not cache_file.exists(): + return None + + with open(cache_file) as f: + data = json.load(f) + return PullRequest( + number=data["number"], + title=data["title"], + body=data["body"], + author=data["author"], + labels=data["labels"], + url=data["url"], + state=data["state"], + merged_at=data.get("merged_at"), + ) + + def fetch_and_cache_prs(self, pr_numbers: list[int]) -> list[PullRequest]: + """Fetch PRs and cache them locally""" + prs = [] + + for pr_number in pr_numbers: + # Check cache first unless force update + if not self.force_update: + cached_pr = self.load_cached_pr(pr_number) + if cached_pr: + print(f"Using cached PR #{pr_number}") + prs.append(cached_pr) + continue + + # Fetch from GitHub + pr = self.fetch_pr(pr_number) + self.cache_pr(pr) + prs.append(pr) + + return prs + + def load_prs_by_numbers(self, pr_numbers: list[int]) -> list[PullRequest]: + """Load specific PRs from shared cache by their numbers""" + prs = [] + for pr_number in pr_numbers: + pr = self.load_cached_pr(pr_number) + if pr: + prs.append(pr) + return prs + + def generate_prompts(self, prs: list[PullRequest]) -> None: + """Generate AI prompts for Claude""" + print("\n=== Generating AI Prompts ===\n") + + # Group PRs by label + breaking_changes = [pr for pr in prs if LABEL_BREAKING_CHANGE in pr.labels] + new_features = [pr for pr in prs if LABEL_NEW_FEATURE in pr.labels] + new_components = [pr for pr in prs if LABEL_NEW_COMPONENT in pr.labels] + + # Generate Combined Overview + Feature Highlights Prompt + overview_and_highlights_prompt = self._generate_overview_and_highlights_prompt( + prs, new_features, new_components, breaking_changes + ) + overview_highlights_file = self.prompts_dir / "overview_and_highlights.txt" + overview_highlights_file.write_text(overview_and_highlights_prompt) + + # Generate Combined Breaking Changes Prompt (user + developer) + if breaking_changes: + breaking_prompt = self._generate_combined_breaking_changes_prompt( + breaking_changes + ) + breaking_file = self.prompts_dir / "breaking_changes.txt" + breaking_file.write_text(breaking_prompt) + + # Print instructions + print("\n" + "=" * 80) + print("STEP 1: Process prompts through Claude Code CLI") + print("=" * 80) + print("\nStart Claude Code CLI and read the prompt files:\n") + print(" claude") + print(f" > Please read {overview_highlights_file} and follow the instructions") + if breaking_changes: + print(f" > Please read {breaking_file} and follow the instructions") + + print("\nPrompt 1: Overview + Feature Highlights (COMBINED)") + print(f" Prompt: {overview_highlights_file}") + print(f" Outputs: {self.responses_dir / 'release_overview.md'}") + print(f" {self.responses_dir / 'feature_highlights.md'}") + + if breaking_changes: + print("\nPrompt 2: Breaking Changes - Users + Developers (COMBINED)") + print(f" Prompt: {breaking_file}") + print(f" Outputs: {self.responses_dir / 'breaking_changes_users.md'}") + print(f" {self.responses_dir / 'breaking_changes_developers.md'}") + + print("\nNote: Each prompt will generate TWO output files automatically.") + + print("\n" + "=" * 80) + print("STEP 2: Assemble the changelog") + print("=" * 80) + print(f" python script/generate_release_notes.py {self.version} --assemble") + + print("\n" + "=" * 80) + print("To reset and try again (delete AI responses):") + print("=" * 80) + print(f" rm -rf {self.responses_dir}") + print(" # Then re-run step 1 above") + + print("\n" + "=" * 80) + print("STEP 3: REVIEW AND EDIT ASSEMBLED CHANGELOG (CRITICAL!)") + print("=" * 80) + print("\n⚠️ WARNING: AI-generated content MUST be reviewed for accuracy!") + print("\nCarefully review and edit the assembled changelog:") + print(f" content/changelog/{self.version}.md") + print("\nCheck for:") + print(" ✓ Hallucinations or inaccurate technical claims") + print( + " ✓ Incorrect compatibility statements (e.g., claiming breaking changes are backward compatible)" + ) + print(" ✓ Mischaracterized features or incorrect measurements") + print(" ✓ Proper tone and clarity") + print(" ✓ Correct component links and formatting") + print() + + def _generate_overview_and_highlights_prompt( + self, + all_prs: list[PullRequest], + new_features: list[PullRequest], + new_components: list[PullRequest], + breaking_changes: list[PullRequest], + ) -> str: + """Generate combined prompt for release overview and feature highlights""" + template = self.jinja_env.get_template("overview_and_highlights.txt") + + return template.render( + version=str(self.version), + overview_file=self.responses_dir / "release_overview.md", + highlights_file=self.responses_dir / "feature_highlights.md", + prs_cache_dir=self.prs_cache_dir, + total_prs=len(all_prs), + new_features=new_features, + new_components=new_components, + breaking_changes=breaking_changes, + ) + + def _generate_combined_breaking_changes_prompt( + self, breaking_prs: list[PullRequest] + ) -> str: + """Generate combined prompt for both user and developer breaking changes""" + template = self.jinja_env.get_template("breaking_changes.txt") + + return template.render( + version=str(self.version), + users_file=self.responses_dir / "breaking_changes_users.md", + devs_file=self.responses_dir / "breaking_changes_developers.md", + prs_cache_dir=self.prs_cache_dir, + breaking_changes=breaking_prs, + ) + + def assemble_changelog(self) -> bool: + """Assemble final changelog from template and AI responses""" + print("\n=== Assembling Changelog ===\n") + + # Check that AI responses exist + overview_file = self.responses_dir / "release_overview.md" + if not overview_file.exists(): + print(f"Error: Missing AI response: {overview_file}") + print("Please run the prompts through Claude first") + return False + + # Load template + template_file = Path("script/release_notes_template.md") + if not template_file.exists(): + print(f"Error: Template not found: {template_file}") + return False + + template = template_file.read_text() + + # Check if destination file exists and has content to preserve + output_file = Path("content/changelog") / f"{self.version}.md" + existing_imgtable = None + existing_full_list = None + if output_file.exists(): + existing_content = output_file.read_text() + + # Extract existing imgtable content + imgtable_match = re.search( + r"{{< imgtable >}}(.*?){{< /imgtable >}}", existing_content, re.DOTALL + ) + if imgtable_match and imgtable_match.group(1).strip(): + existing_imgtable = imgtable_match.group(0) + print("✓ Preserving existing imgtable") + + # Extract existing "Full list of changes" section + # This regex matches from "## Full list of changes" to end of file + full_list_match = re.search( + r"## Full list of changes.*?(?=^## |\Z)", + existing_content, + re.DOTALL | re.MULTILINE, + ) + if full_list_match: + existing_full_list = full_list_match.group(0) + print("✓ Preserving existing 'Full list of changes' section") + + # Load AI responses + overview = overview_file.read_text().strip() + + breaking_users_file = self.responses_dir / "breaking_changes_users.md" + breaking_users = "" + if breaking_users_file.exists(): + breaking_users = breaking_users_file.read_text().strip() + + breaking_devs_file = self.responses_dir / "breaking_changes_developers.md" + breaking_devs = "" + if breaking_devs_file.exists(): + breaking_devs = breaking_devs_file.read_text().strip() + + highlights_file = self.responses_dir / "feature_highlights.md" + highlights = "" + if highlights_file.exists(): + highlights = highlights_file.read_text().strip() + + # Load the PR numbers for this version from a manifest file + manifest_file = self.version_dir / "pr_numbers.txt" + if not manifest_file.exists(): + print(f"Error: PR manifest not found: {manifest_file}") + print("Run without --assemble first to discover PRs") + return False + + pr_numbers = [ + int(line.strip()) + for line in manifest_file.read_text().strip().split("\n") + if line.strip() + ] + prs = self.load_prs_by_numbers(pr_numbers) + + if not prs: + print("Error: No cached PRs found. Run without --assemble first") + return False + + print(f"Loaded {len(prs)} PRs from cache") + + # Replace AI-generated sections + template = self._replace_marker_content(template, "RELEASE_OVERVIEW", overview) + + if highlights: + template = self._replace_marker_content( + template, "FEATURE_HIGHLIGHTS", highlights + ) + + if breaking_users: + template = self._replace_marker_content( + template, "BREAKING_CHANGES_USERS", breaking_users + ) + + if breaking_devs: + template = self._replace_marker_content( + template, "BREAKING_CHANGES_DEVELOPERS", breaking_devs + ) + + # Generate auto sections + template = self._generate_auto_sections(template, prs) + + # Replace version placeholders + template = self._replace_placeholders(template) + + # Replace imgtable if we have one preserved + if existing_imgtable: + template = re.sub( + r"\s*{{< imgtable >}}.*?{{< /imgtable >}}", + existing_imgtable, + template, + flags=re.DOTALL, + ) + + # Replace "Full list of changes" section if we have one preserved + if existing_full_list: + template = re.sub( + r"## Full list of changes.*?(?=^## |\Z)", + existing_full_list, + template, + flags=re.DOTALL | re.MULTILINE, + ) + + # Write output + + if self.dry_run: + print("\n" + "=" * 80) + print("DRY RUN - Would write to:", output_file) + print("=" * 80) + print(template[:1000]) # Show first 1000 chars + print("...") + else: + output_file.parent.mkdir(parents=True, exist_ok=True) + output_file.write_text(template) + print(f"\n✓ Changelog written to: {output_file}") + + return True + + def _replace_marker_content(self, template: str, marker: str, content: str) -> str: + """Replace content between and """ + pattern = f".*?" + replacement = f"\n{content}\n" + + result, count = re.subn(pattern, replacement, template, flags=re.DOTALL) + + if count == 0: + print(f"Warning: Marker {marker} not found in template") + else: + print(f"✓ Replaced {marker}") + + return result + + def _generate_auto_sections(self, template: str, prs: list[PullRequest]) -> str: + """Generate auto-populated sections from PR data""" + # Group PRs by label + new_features = [pr for pr in prs if "new-feature" in pr.labels] + new_components = [pr for pr in prs if "new-component" in pr.labels] + breaking_changes = [pr for pr in prs if "breaking-change" in pr.labels] + + # Generate lists + features_list = self._format_pr_list(new_features) + components_list = self._format_pr_list(new_components) + breaking_list = self._format_pr_list(breaking_changes) + all_list = self._format_pr_list(prs) + + # Replace sections + template = self._replace_marker_content( + template, "AUTO_GENERATED_NEW_FEATURES", features_list + ) + template = self._replace_marker_content( + template, "AUTO_GENERATED_NEW_COMPONENTS", components_list + ) + template = self._replace_marker_content( + template, "AUTO_GENERATED_BREAKING_CHANGES_LIST", breaking_list + ) + return self._replace_marker_content( + template, "AUTO_GENERATED_ALL_CHANGES", all_list + ) + + def _format_pr_list(self, prs: list[PullRequest]) -> str: + """Format PRs as markdown list""" + if not prs: + return "None" + + lines = [] + for pr in prs: + # Extract component from title if present [component] + match = re.match(r"\[([^\]]+)\]\s*(.*)", pr.title) + if match: + component = match.group(1) + title = match.group(2) + else: + component = "" + title = pr.title + + # Format: - [component] Description [esphome#1234](url) by [@author](url) + author_url = f"https://github.com/{pr.author}" + pr_url = pr.url.replace("api.github.com/repos", "github.com") + + if component: + line = f"- [{component}] {title} [esphome#{pr.number}]({pr_url}) by [@{pr.author}]({author_url})" + else: + line = f"- {title} [esphome#{pr.number}]({pr_url}) by [@{pr.author}]({author_url})" + + lines.append(line) + + return "\n".join(lines) + + def _replace_placeholders(self, template: str) -> str: + """Replace version placeholders""" + # Format date + now = datetime.now() + date_str = now.strftime('%B %Y') + + template = template.replace("{VERSION}", str(self.version)) + template = template.replace("{DATE}", date_str) + + print(f"✓ Replaced placeholders: {self.version}, {date_str}") + + return template + + def run(self, assemble_only: bool = False) -> bool: + """Main workflow""" + self.ensure_dirs() + + if assemble_only: + # Skip PR discovery, just assemble from cached data + return self.assemble_changelog() + + # Discover and fetch PRs + pr_numbers = self.discover_prs() + + if not pr_numbers: + print("\nWarning: No PRs found!") + print("This might mean:") + print(" 1. The version tags are incorrect") + print(" 2. No PRs have been merged since the last release") + print(" 3. There's an issue with the GitHub API") + return False + + print(f"\nFound {len(pr_numbers)} PRs") + + # Fetch and cache + print("\n=== Fetching PR Metadata ===\n") + prs = self.fetch_and_cache_prs(pr_numbers) + print(f"\n✓ Cached {len(prs)} PRs to {self.prs_cache_dir}") + + # Save PR numbers manifest for this version + manifest_file = self.version_dir / "pr_numbers.txt" + manifest_file.write_text("\n".join(str(n) for n in pr_numbers) + "\n") + print(f"✓ Saved PR manifest to {manifest_file}") + + # Generate prompts + self.generate_prompts(prs) + + return True + + +def main() -> int: + """Main entry point""" + parser = argparse.ArgumentParser( + description="Generate ESPHome release notes", + formatter_class=argparse.RawDescriptionHelpFormatter, + epilog=""" +Examples: + # Discover PRs and generate prompts + python script/generate_release_notes.py 2025.11.0 + + # Force re-fetch all PRs from GitHub + python script/generate_release_notes.py 2025.11.0 --update + + # Assemble changelog from AI responses (skip PR discovery) + python script/generate_release_notes.py 2025.11.0 --assemble + + # Dry run (show what would be generated) + python script/generate_release_notes.py 2025.11.0 --assemble --dry-run + """, + ) + parser.add_argument( + "version", type=str, help="Version to generate notes for (e.g., 2025.11.0)" + ) + parser.add_argument( + "--update", + action="store_true", + help="Force re-fetch all PRs from GitHub (ignore cache)", + ) + parser.add_argument( + "--assemble", + action="store_true", + help="Skip PR discovery, assemble changelog from cached AI responses", + ) + parser.add_argument( + "--dry-run", + action="store_true", + help="Show what would be generated without writing files", + ) + + args = parser.parse_args() + + try: + version = Version.parse(args.version) + except ValueError as e: + print(f"Error: {e}") + return 1 + + generator = ReleaseNotesGenerator( + version=version, + force_update=args.update, + dry_run=args.dry_run, + ) + + # Check GitHub CLI is installed and authenticated + generator.check_github_cli() + + success = generator.run(assemble_only=args.assemble) + return 0 if success else 1 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/script/prompt_templates/breaking_changes.txt b/script/prompt_templates/breaking_changes.txt new file mode 100644 index 0000000000..6834a019a4 --- /dev/null +++ b/script/prompt_templates/breaking_changes.txt @@ -0,0 +1,103 @@ +SAVE YOUR RESPONSES TO TWO FILES: + 1. User-Facing Breaking Changes: {{ users_file }} + 2. Developer-Facing Breaking Changes: {{ devs_file }} + +NOTE: The output files and directories may not exist yet - that's fine, create them. + You can use: Write tool with the full path, or create directories first if needed. + +════════════════════════════════════════════════════════════════════════════════ + +TASK: Write BOTH User and Developer Breaking Changes for ESPHome {{ version }}. + +WHY COMBINED: These must be written together so you can properly categorize each change as +user-facing (YAML config changes) or developer-facing (C++ API changes) without duplication. + +════════════════════════════════════════════════════════════════════════════════ +PART 1: USER-FACING BREAKING CHANGES (save to {{ users_file }}) +════════════════════════════════════════════════════════════════════════════════ + +CONTEXT: +Explain breaking changes that affect ESPHome users' YAML configurations or component behavior. +Users need clear migration guidance. + +AUDIENCE: ESPHome users (makers, DIY enthusiasts, home automation users) + +STYLE EXAMPLE from ESPHome 2025.10.0: + +### Component Changes + +- **EKTF2232**: `rts_pin` renamed to `reset_pin` [#10720](https://github.com/esphome/esphome/pull/10720) +- **MMC5603**: Fixed incorrect calculation factor (values will change) + [#9925](https://github.com/esphome/esphome/pull/9925) +- **ESP32 BLE**: max_connections now shared between client and server + [#11006](https://github.com/esphome/esphome/pull/11006) + +INSTRUCTIONS: + +1. **Group by category** using ### headings (e.g., "Component Changes", "Platform Changes") +2. **Use bullet points** with bold names: - **ComponentName**: Description [#PR](url) +3. **Be concise but clear** - explain what changed and who is affected +4. **Skip pure developer changes** (C++ API changes that don't affect YAML) +5. **Include PR links**: [#12345](https://github.com/esphome/esphome/pull/12345) + +OUTPUT FORMAT FOR USER CHANGES: +- ### Category headings +- Bullet points with bold component names +- Focus ONLY on YAML config updates and behavior changes affecting users + +════════════════════════════════════════════════════════════════════════════════ +PART 2: DEVELOPER-FACING BREAKING CHANGES (save to {{ devs_file }}) +════════════════════════════════════════════════════════════════════════════════ + +CONTEXT: +Brief summary of breaking changes affecting external component developers. +Keep it concise and link to developers.esphome.io for full details. + +AUDIENCE: External component developers and those extending ESPHome with C++ code + +INSTRUCTIONS: + +1. **Be very brief** - this is just a summary +2. **Use bullet points** (e.g., API changes, class renames, header changes) +3. **List change + PR link**: - Change description [#PR](url) +4. **End with link** to https://developers.esphome.io/ for full details +5. **Skip user-facing changes** already covered in Part 1 + +FORMAT TEMPLATE: + +- **ComponentName API**: Brief description [#PR](url) +- **ClassName renamed**: Old name → New name [#PR](url) +- **Method signature changed**: Brief description [#PR](url) + +For detailed migration guides and API documentation, see the [ESPHome Developers Documentation](https://developers.esphome.io/). + +OUTPUT FORMAT FOR DEVELOPER CHANGES: +- Bullet points (no ### headings needed) +- Very brief descriptions +- Link to developers.esphome.io at the end + +──────────────────────────────────────────────────────────────────────────────── +📁 PR DATA FILES - CRITICAL: You MUST read ALL of these files using the Read tool +──────────────────────────────────────────────────────────────────────────────── + +BREAKING CHANGE PULL REQUESTS ({{ breaking_changes|length }} total): + +⚠️ CRITICAL INSTRUCTIONS FOR LOADING PR DATA: + +1. You MUST use the Read tool to read EVERY SINGLE JSON file listed below +2. Do NOT skip any files or try to write without reading them all +3. Do NOT assume you know the content - you must READ each file +4. Each JSON file contains: number, title, body (with migration details), author, labels, url +5. Read ALL files in parallel for efficiency, then analyze the complete data +6. After reading: categorize each as user-facing or developer-facing, then write BOTH files + +BREAKING CHANGE PR FILES - READ ALL {{ breaking_changes|length }} FILES: +{% for pr in breaking_changes %} + {{ prs_cache_dir }}/{{ pr.number }}.json +{% endfor %} + +──────────────────────────────────────────────────────────────────────────────── +⚠️ REMINDER: Read ALL files above, then write BOTH files: + 1. User Changes: {{ users_file }} (### headings, detailed) + 2. Developer Changes: {{ devs_file }} (bullet points, brief) +──────────────────────────────────────────────────────────────────────────────── diff --git a/script/prompt_templates/overview_and_highlights.txt b/script/prompt_templates/overview_and_highlights.txt new file mode 100644 index 0000000000..fd94614f6f --- /dev/null +++ b/script/prompt_templates/overview_and_highlights.txt @@ -0,0 +1,257 @@ +SAVE YOUR RESPONSES TO TWO FILES: + 1. Feature Highlights: {{ highlights_file }} + 2. Release Overview: {{ overview_file }} + +NOTE: The output files and directories may not exist yet - that's fine, create them. + You can use: Write tool with the full path, or create directories first if needed. + +IMPORTANT: Both files will be COMBINED into the same final changelog document: + - Feature Highlights ({{ highlights_file }}): Detailed ## sections explaining major features + - Release Overview ({{ overview_file }}): Short 2-4 sentence summary placed BEFORE the highlights + +Think of it like an executive summary: + - Overview = "Here are the 3-10 big themes of this release" (concise, high-level) + - Highlights = "Here's what each theme actually means and why it matters" (detailed, technical) + +════════════════════════════════════════════════════════════════════════════════ + +TASK: Write BOTH the Release Overview AND Feature Highlights for ESPHome {{ version }}. + +WHY COMBINED: These sections appear in the same document, so they must work together. +The overview is a concise summary of the highlights, not a separate narrative. + +════════════════════════════════════════════════════════════════════════════════ +STEP 1: FEATURE HIGHLIGHTS (write first - save to {{ highlights_file }}) +════════════════════════════════════════════════════════════════════════════════ + +Write the detailed feature highlight sections FIRST (see PART 2 below for full instructions). +This is the main content - 3-10 detailed ## sections with measurements, examples, and context. + +════════════════════════════════════════════════════════════════════════════════ +STEP 2: RELEASE OVERVIEW (write second - save to {{ overview_file }}) +════════════════════════════════════════════════════════════════════════════════ + +CONTEXT: +This is a SHORT executive summary that appears BEFORE the feature highlights in the final document. +It simply introduces the 3-10 major themes that you detailed in the feature highlights. + +CRITICAL: This is NOT a separate article - it's an introduction to the highlights you just wrote. +Think: "This release focuses on X, Y, and Z" then the highlights explain X, Y, and Z in detail. + +AUDIENCE: ESPHome users (makers, DIY enthusiasts, home automation enthusiasts) + +STYLE EXAMPLE from ESPHome 2025.10.0: + + "ESPHome 2025.10.0 delivers major architectural improvements, new communication protocols, and + extensive performance optimizations. This release focuses on enhancing security, improving memory + efficiency, and expanding hardware support while introducing groundbreaking new features." + +INSTRUCTIONS: + +1. Look at the 3-10 ## section headings you wrote in feature_highlights.md +2. Write 2-4 sentences that name these themes in order of priority +3. Keep it VERY concise - just name the themes, don't explain them (that's what the highlights do) +4. Include a number or two if highly impactful ("7 new sensors", "5KB RAM savings") +5. DO NOT duplicate the detailed content from feature highlights + +OUTPUT FORMAT FOR OVERVIEW: +- 1-2 paragraphs, 2-4 sentences total +- No headings, no bullet points, no PR links +- Just a concise prose introduction to the themes you detailed in the highlights +- Should be roughly 1/10th the length of the feature highlights + +════════════════════════════════════════════════════════════════════════════════ +DETAILED INSTRUCTIONS FOR STEP 1: FEATURE HIGHLIGHTS +════════════════════════════════════════════════════════════════════════════════ + +CONTEXT: +These are detailed deep-dive sections that appear AFTER the release overview and before +"Breaking Changes". Each major feature gets its own ## heading. This is the main content. + +WHAT TO WRITE ABOUT: +Select the 3-10 MOST IMPORTANT features/changes from the PRs and ORDER BY PRIORITY: + +**Priority Order (most important first):** +1. **New Major Features** - Groundbreaking user-facing functionality (new protocols, major capabilities) +2. **New Hardware/Platform Support** - New chips, new sensors, new component types +3. **Architectural Improvements** - Framework changes, major refactorings with significant impact +4. **Performance/Memory Optimizations** - Only if substantial (multiple KB savings, major speedups) +5. **Security Enhancements** - Critical security improvements +6. **Notable Bug Fixes** - Important fixes for crashes, data corruption, or major functionality issues + +**What qualifies as "Major":** +- Enables entirely new use cases (Z-Wave support, USB host) +- Adds support for popular/widely-used hardware +- Framework changes affecting many components +- Performance gains of 5KB+ or 50%+ improvements +- Fixes that prevent crashes, data loss, or major malfunctions +- Fixes for widely-used components affecting many users + +STYLE EXAMPLES from ESPHome 2025.10.0: + +## Z-Wave Proxy + +The new [zwave_proxy](/components/zwave_proxy) component enables network-based connectivity +for Z-Wave hardware by proxying serial communication between a Z-Wave modem SoC and Z-Wave JS. + +**Key Features:** + +- **Remote Z-Wave placement** - Position your Z-Wave modem anywhere with WiFi/Ethernet +- **Serial-to-network bridge** - Proxies UART communication between hardware and Z-Wave JS +- **Low latency** - Achieves 50-60ms typical latency + +## Arduino as IDF Component (Major Architectural Change) + +This release includes a fundamental change - **Arduino is now integrated as an ESP-IDF component**. + +**Memory Savings:** + +- **20-30KB RAM savings** on Arduino builds +- **Additional ~8KB RAM savings** if using the web server + +### Should You Migrate to ESP-IDF? + +**We recommend ESP-IDF for most users**, especially for: +- Bluetooth Proxy devices (lower memory usage) +- New projects + +## Notable Bug Fixes (Example) + +This release fixes critical WiFi mesh network failover issues that left devices stuck attempting to connect to failed access points ([#11805](https://github.com/esphome/esphome/pull/11805)). + +**The Problem:** +Devices running ESPHome 2025.8.2+ would get stuck connecting to the strongest AP in a mesh network, even when that AP rejected the connection due to auth failures or capacity limits. The priority degradation system (designed to cycle through APs on failure) was rendered useless by a bug that always sorted by signal strength first. + +**The Fix:** +- **Priority-based failover restored** - Failed APs are now correctly sorted lower, enabling automatic failover to working APs +- **False positive filtering** - Two connection attempts per BSSID before marking as failed (eliminates transient auth failures) +- **Hidden network handling fixed** - Networks marked `hidden: true` are tried before scanning, with smart skip logic to avoid wasting time on visible networks + +Devices now automatically fail over to the next strongest AP when connection fails, making mesh networks reliable again. + +INSTRUCTIONS: + +1. **Read ALL PR JSON files** below (new features + new components) + - Read the FULL PR body, not just titles + - Understand what the PR actually does (check description, motivation, testing notes) + - Look for measurements, benchmarks, use cases in the PR body + +2. **Accurately characterize each PR**: + - ESP32-P4 = new chip support (variant of ESP32 platform) + - "Native" platform = running multiple ESP chips together via networking + - Component PRs = new hardware support (sensors, displays, etc.) + - Framework PRs = internal improvements affecting existing components + - Don't mischaracterize platform features (read the PR description!) + +3. **Identify 3-10 major themes** - group related PRs: + - All memory optimizations together (if substantial) + - All new sensor/hardware components together + - Major new features separately (if truly groundbreaking) + - Notable bug fixes in their own section (especially crashes, data corruption, major malfunctions) + +4. **Write detailed sections**: + - ## Heading for each major feature + - Opening paragraph: what it is and why it matters + - **Key Features/Benefits** bulleted list with bold labels + - Subsections (###) for migration guidance or recommendations + - Use `[component_name](/components/component_name)` for component links + - Use `code formatting` for config keys + - Use **bold** for emphasis + +5. **What makes good sections**: + ✓ Explains WHY the feature matters, not just what it does + ✓ Includes specific numbers (RAM savings, performance gains) + ✓ Groups related PRs into one cohesive narrative + ✓ Provides actionable guidance (migration steps, recommendations) + ✓ Professional but enthusiastic tone + +6. **What to avoid**: + ✗ Don't write about every PR - focus on major themes + ✗ Don't just list features - explain benefits and context + ✗ Don't discuss breaking changes themselves (they go in their own section) + ✗ Don't discuss deprecation removals (these are breaking changes) + ✗ Skip minor bug fixes and small improvements + ✗ Don't include sections about "Deprecation Removals" or "Migration Considerations" + ✗ Don't claim breaking changes are "backward compatible" - be honest about compatibility + + **CRITICAL - Handling Breaking Change PRs:** + + Some PRs labeled "breaking-change" introduce important new features. You may discuss + these features, BUT you MUST acknowledge if they require user action: + + ✓ GOOD: "The new min_auth_mode option improves WiFi security. ESP32 devices now + default to WPA2 (configure min_auth_mode: WPA if using legacy routers)." + + ✗ BAD: "These optimizations are backward compatible with existing configurations." + (when the PR list includes breaking changes that require config updates) + + When discussing features from breaking-change PRs: + - Mention if users need to update configs (briefly, not in detail) + - Don't claim full backward compatibility + - Save migration details for the Breaking Changes section + +OUTPUT FORMAT FOR HIGHLIGHTS: +- 3-10 complete ## sections ordered by PRIORITY (see Priority Order above) +- Order: New Major Features → New Hardware → Architectural Changes → Optimizations +- Do NOT include "Feature Highlights" heading - just write the ## sections +- Do NOT include introductory text +- Do NOT include "Deprecation Removals" or "Migration Considerations" sections + +──────────────────────────────────────────────────────────────────────────────── +📁 PR DATA FILES - CRITICAL: You MUST read ALL of these files using the Read tool +──────────────────────────────────────────────────────────────────────────────── + +RELEASE STATISTICS: +Total PRs: {{ total_prs }} +New Features: {{ new_features|length }} +New Components: {{ new_components|length }} +Breaking Changes: {{ breaking_changes|length }} + +⚠️ CRITICAL INSTRUCTIONS FOR LOADING PR DATA: + +1. You MUST use the Read tool to read EVERY SINGLE JSON file listed below +2. Do NOT skip any files or try to summarize without reading them all +3. Do NOT assume you know the content - you must READ each file +4. Each JSON file contains: number, title, body, author, labels, url +5. Read ALL files in parallel for efficiency, then analyze the complete data +6. After reading ALL files: identify themes, write feature highlights, then write overview + +NEW COMPONENT PR FILES ({{ new_components|length }} total) - READ ALL {{ new_components|length }} FILES: +{% for pr in new_components %} + {{ prs_cache_dir }}/{{ pr.number }}.json +{% endfor %} + +NEW FEATURE PR FILES ({{ new_features|length }} total) - READ ALL {{ new_features|length }} FILES: +{% for pr in new_features %} + {{ prs_cache_dir }}/{{ pr.number }}.json +{% endfor %} + +{% if breaking_changes %} +BREAKING CHANGE PR FILES ({{ breaking_changes|length }} total) - READ ALL {{ breaking_changes|length }} FILES: + +⚠️ IMPORTANT: These PRs have breaking changes, but for THIS section, ONLY evaluate them for + their NEW FEATURES and FUNCTIONALITY. Do NOT discuss the breaking changes themselves - + those will be covered in a separate "Breaking Changes" section of the release notes. + Focus on what new capabilities or improvements these PRs bring. + +{% for pr in breaking_changes %} + {{ prs_cache_dir }}/{{ pr.number }}.json +{% endfor %} +{% endif %} +──────────────────────────────────────────────────────────────────────────────── +⚠️ FINAL REMINDER: Read ALL files above, then write BOTH files: + +STEP 1 - Write Feature Highlights FIRST: + File: {{ highlights_file }} + Content: 3-10 detailed ## sections with measurements, examples, context + Length: ~10-15KB of detailed technical content + +STEP 2 - Write Release Overview SECOND (based on the highlights you just wrote): + File: {{ overview_file }} + Content: 2-4 sentence introduction that names the themes from your highlights + Length: ~1KB - roughly 1/10th the length of highlights + Purpose: Concise executive summary that introduces the detailed sections + +Remember: Both go in the same final document. Overview comes first, then highlights. +Don't repeat detailed information - overview introduces, highlights explain. +──────────────────────────────────────────────────────────────────────────────── diff --git a/script/release_notes_template.md b/script/release_notes_template.md new file mode 100644 index 0000000000..9a589f8752 --- /dev/null +++ b/script/release_notes_template.md @@ -0,0 +1,129 @@ +--- +description: "Changelog for ESPHome {VERSION}." +title: "ESPHome {VERSION} - {DATE}" +params: + seo: + description: Changelog for ESPHome {VERSION}. + image: /changelog/images/changelog-{VERSION}.png +--- + + +{{< imgtable >}} +{{< /imgtable >}} + +## Release Overview + + + + + + + + + +## Breaking Changes + + + + + +### Breaking Changes for Developers + + + + + + + +## Full list of changes + +### New Features + + + + + +### New Components + + + + + +### Breaking Changes + + + + + +### All changes + +
+ + + + + + +
+ + + +## All Changelogs + +{{< changelogs >}} From 4f24388a500d320c13206d5ad0d4ae1d75e7a704 Mon Sep 17 00:00:00 2001 From: Javier Peletier Date: Mon, 17 Nov 2025 08:01:52 +0100 Subject: [PATCH 008/109] [config] Document additional extend/remove supported behavior (#5523) --- content/components/packages.md | 39 ++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/content/components/packages.md b/content/components/packages.md index 29d223287f..f22a96f68c 100644 --- a/content/components/packages.md +++ b/content/components/packages.md @@ -194,6 +194,32 @@ sensor: update_interval: 10s ``` +LVGL-style configuration hierarchies are also supported: + +```yaml +# In interface.yaml +lvgl: + pages: + - id: main_page + widgets: + - label: + id: title_label + text: "Main Page" +``` + +```yaml +packages: + - !include interface.yaml +lvgl: + pages: + - id: !extend main_page + widgets: + - label: + id: !extend title_label + text: "New Title" + text_color: red +``` + `!extend` also works with substitutions and jinja: ```yaml @@ -235,6 +261,19 @@ sensor: - id: !remove uptime_sensor ``` +Remove an item in a LVGL-style configuration: + +```yaml +packages: + - !include interface.yaml # see above +lvgl: + pages: + - id: !extend main_page + widgets: + - label: + id: !remove title_label +``` + To remove captive portal for a specific device: ```yaml From 15636e7b46370695f8c0b005e3245097b69183ad Mon Sep 17 00:00:00 2001 From: Jonathan Swoboda <154711427+swoboda1337@users.noreply.github.com> Date: Mon, 17 Nov 2025 12:47:22 -0500 Subject: [PATCH 009/109] [core] Add support for setting environment variables (#5635) * Add env docs * Update content/components/esphome.md --- content/components/esphome.md | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/content/components/esphome.md b/content/components/esphome.md index f62b981208..8e1c68f65c 100644 --- a/content/components/esphome.md +++ b/content/components/esphome.md @@ -52,6 +52,9 @@ Advanced options: - **platformio_options** (*Optional*, mapping): Additional options to pass over to PlatformIO in the platformio.ini file. See [`platformio_options`](#esphome-platformio_options). +- **environment_variables** (*Optional*, mapping): Environment variables to set during the build process. + See [`environment_variables`](#esphome-environment_variables). + - **includes** (*Optional*, list of files): A list of C/C++ files to include in the (auto-generated) `main` file. The paths in this list are relative to the directory where the YAML configuration file is located or `<...>` includes. See [`includes`](#esphome-includes). @@ -192,6 +195,27 @@ esphome: board_build.f_flash: 80000000L ``` +{{< anchor "esphome-environment_variables" >}} + +## `environment_variables` + +With the `environment_variables` option, you can set environment variables that will be available during the +compilation process. This is useful when you need to pass configuration to build scripts, custom libraries, +or PlatformIO build environments. + +```yaml +# Example configuration entry +esphome: + # ... + environment_variables: + HTTP_PROXY: "http://user:pass@10.10.1.10:3128/" + PLATFORMIO_SETTING_ENABLE_PROXY_STRICT_SSL: "false" +``` + +> [!NOTE] +> Environment variables set here are only available during the build process. They do not affect +> the runtime behavior of your device. + {{< anchor "esphome-includes" >}} ## `includes` From a0d88017f4acc0b2b92d5b674216e73253e5dd29 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Tue, 18 Nov 2025 13:17:29 -0600 Subject: [PATCH 010/109] [wifi][esp32_improv] Update default timeouts to 90s (#5639) --- content/components/esp32_improv.md | 2 +- content/components/wifi.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/content/components/esp32_improv.md b/content/components/esp32_improv.md index 767c0436a0..9d0c7085c0 100644 --- a/content/components/esp32_improv.md +++ b/content/components/esp32_improv.md @@ -39,7 +39,7 @@ esp32_improv: - **status_indicator** (*Optional*, [ID](/guides/configuration-types#id)): An {{< docref "output/index" "output" >}} to display feedback to the user. - **identify_duration** (*Optional*, [Time](/guides/configuration-types#time)): The amount of time to identify for. Defaults to `10s`. - **wifi_timeout** (*Optional*, [Time](/guides/configuration-types#time)): The amount of time to wait before starting the Improv service - after Wi-Fi is no longer connected. Defaults to `1min`. + after Wi-Fi is no longer connected. Defaults to `90s`. - **next_url** (*Optional*, string): The URL to open after provisioning is complete. Defaults to `https://my.home-assistant.io/redirect/config_flow_start?domain=esphome`. diff --git a/content/components/wifi.md b/content/components/wifi.md index e1d8d26682..bf7d08c9d8 100644 --- a/content/components/wifi.md +++ b/content/components/wifi.md @@ -79,7 +79,7 @@ wifi: - **ap_timeout** (*Optional*, [Time](/guides/configuration-types#time)): The time after which to enable the configured fallback hotspot. Can be disabled by setting this to `0s`, which requires manually starting the AP by - other means (eg: from a button press). Defaults to `1min`. + other means (eg: from a button press). Defaults to `90s`. - **domain** (*Optional*, string): Set the domain of the node hostname used for uploading. For example, if it's set to `.local`, all uploads will be sent to `.local`. From a6f8ffe37c673934e02f599da1611beb2d62264c Mon Sep 17 00:00:00 2001 From: tomaszduda23 Date: Wed, 19 Nov 2025 18:58:16 +0100 Subject: [PATCH 011/109] [nrf52,gpio] High voltage (#5595) * doc * Update nrf52.md * fix * Update content/components/nrf52.md --------- Co-authored-by: Jonathan Swoboda <154711427+swoboda1337@users.noreply.github.com> --- content/components/nrf52.md | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/content/components/nrf52.md b/content/components/nrf52.md index 0bf32e59f4..75e347aa3c 100644 --- a/content/components/nrf52.md +++ b/content/components/nrf52.md @@ -100,6 +100,29 @@ nrf52: - **reset_pin** (*Required*, [Pin](/guides/configuration-types#pin)): The pin to use for trigger a hardware reset. This pin should be connected to the MCU's reset line or to a circuit that causes the bootloader to enter DFU mode after reset. +## REGOUT0 + +Output voltage from the REG0 regulator stage, which powers the GPIO pins when the board operates in high-voltage mode. +This setting can only be changed a limited number of times, unless uicr_erase is set to true. +Requires `mcuboot` or `adafruit` bootloader version 0.9.3 or higher. + +### Example Configuration + +```yaml +nrf52: + reg0: + voltage: 3.3V + uicr_erase: true +``` + +### Configuration variables + +- **voltage** (**Required**, voltage): The desired output voltage - must be one of + 1.8V, 2.1V, 2.4V, 2.7V, 3.0V, 3.3V. +- **uicr_erase** (**Optional**, bool): If set to true, the User Information Configuration Registers (UICR) +will be erased before writing the new voltage setting. +⚠️ Warning: Enabling this may cause the board to fail to boot if misconfigured. Default is false. + ## Troubleshooting ### Flashing is unstable From 505be83a72f0a4f07d227d4bf08f77e3e905a341 Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Thu, 20 Nov 2025 08:10:09 +1300 Subject: [PATCH 012/109] [epaper_spi] Add `7.3in Spectra-E6` model (#5646) --- content/components/display/epaper_spi.md | 1 + 1 file changed, 1 insertion(+) diff --git a/content/components/display/epaper_spi.md b/content/components/display/epaper_spi.md index a18ed53789..c72cf57054 100644 --- a/content/components/display/epaper_spi.md +++ b/content/components/display/epaper_spi.md @@ -31,6 +31,7 @@ display: | Model name | Manufacturer | Product Description | | ---------------------- | ------------ | ---------------------------------------------------------- | | Spectra-E6 | Eink | | +| 7.3in Spectra-E6 | Eink | | | Seeed-reTerminal-E1002 | Seeed Studio | | ## Configuration variables From fffe051effac94057636fa642681426f6b5d92e2 Mon Sep 17 00:00:00 2001 From: B48D81EFCC <111175947+B48D81EFCC@users.noreply.github.com> Date: Thu, 20 Nov 2025 04:54:19 +0100 Subject: [PATCH 013/109] STTS22H component documentation (#5275) * Added STTS22H docs. WIP. * fixe trailing spaces * Updates * fix lint issues * Link to component added to Components Overview * AI cleanup * Fix links * Fix image --------- Co-authored-by: Jonathan Swoboda <154711427+swoboda1337@users.noreply.github.com> --- content/components/_index.md | 1 + content/components/sensor/images/stts22h.png | Bin 0 -> 149072 bytes content/components/sensor/stts22h.md | 49 +++++++++++++++++++ static/images/stts22h.jpg | Bin 0 -> 37121 bytes 4 files changed, 50 insertions(+) create mode 100644 content/components/sensor/images/stts22h.png create mode 100644 content/components/sensor/stts22h.md create mode 100644 static/images/stts22h.jpg diff --git a/content/components/_index.md b/content/components/_index.md index b00c2c89ff..97c29ae224 100644 --- a/content/components/_index.md +++ b/content/components/_index.md @@ -416,6 +416,7 @@ Sensors are organized into categories; if a given sensor fits into more than one "SHTCx","components/sensor/shtcx","shtc3.jpg","Temperature & Humidity","" "SMT100","components/sensor/smt100","smt100.jpg","Moisture & Temperature","" "STS3X","components/sensor/sts3x","sts3x.jpg","Temperature","" +"STTS22H","components/sensor/stts22h","stts22h.jpg","Temperature","" "TC74","components/sensor/tc74","tc74.jpg","Temperature","" "TEE501","components/sensor/tee501","TEE501.png","Temperature","" "TE-M3200","components/sensor/tem3200","tem3200.jpg","Temperature & Pressure","" diff --git a/content/components/sensor/images/stts22h.png b/content/components/sensor/images/stts22h.png new file mode 100644 index 0000000000000000000000000000000000000000..0dc7aab4b7070f4836c39cbbdfe46c4a25dac12a GIT binary patch literal 149072 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 literal 0 HcmV?d00001 diff --git a/content/components/sensor/stts22h.md b/content/components/sensor/stts22h.md new file mode 100644 index 0000000000..6c8a591b6b --- /dev/null +++ b/content/components/sensor/stts22h.md @@ -0,0 +1,49 @@ +--- +description: "Instructions for setting up STTS22H temperature sensor from STMicroelectronics" +title: "STTS22H Temperature Sensor" +params: + seo: + description: Instructions for setting up STTS22H temperature sensor from STMicroelectronics with ESPHome + image: stts22h.png +--- + +The `stts22h` sensor platform allows you to use a STTS22H temperature sensor +([datasheet](https://www.st.com/resource/en/datasheet/stts22h.pdf)) with ESPHome. This is a low-power, +high-accuracy digital temperature sensor with ±0.5°C accuracy (typical at 25°C) and a temperature range +from -40°C to +125°C. + +The [I²C Bus](/components/i2c) is required to be set up in your configuration for this sensor to work. + +{{< img src="stts22h.png" alt="STTS22H Temperature Sensor" +caption="SparkFun STTS22H Temperature Sensor Breakout Boards" class="align-center" >}} + +```yaml +# Example configuration entry +sensor: + - platform: stts22h + name: "STTS22H Temperature" + address: 0x3C + update_interval: 60s +``` + +## Configuration variables + +- **i2c_id** (*Optional*, [ID](/guides/configuration-types#id)): Manually specify the ID of the + [I²C Bus](/components/i2c) if you want to use multiple I²C buses. + +- **address** (*Optional*, int): The I²C address of the sensor. Defaults to + `0x3C`. + The address is determined by the ADDR pin configuration on the sensor. + Possible addresses: `0x38`, `0x3C`, `0x3E`, `0x3F`. + +- **update_interval** (*Optional*, [Time](/guides/configuration-types#time)): The interval to check + the sensor. Defaults to `60s`. + +- All other options from [Sensor](/components/sensor). + +## See Also + +- [Sensor Filters](/components/sensor#sensor-filters) +- [I²C Bus](/components/i2c) +- [STTS22H Datasheet (PDF)](https://www.st.com/resource/en/datasheet/stts22h.pdf) +- [STTS22H Product Overview - STMicroelectronics](https://www.st.com/en/mems-and-sensors/stts22h.html) diff --git a/static/images/stts22h.jpg b/static/images/stts22h.jpg new file mode 100644 index 0000000000000000000000000000000000000000..09cf294fe77793e795ab883b7b2766ffaa4539a7 GIT binary patch literal 37121 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 literal 0 HcmV?d00001 From 7965873d8ea4f6ac7e3d922ed2f0d0c067b05a9c Mon Sep 17 00:00:00 2001 From: omartijn <44672243+omartijn@users.noreply.github.com> Date: Thu, 20 Nov 2025 15:27:08 +0100 Subject: [PATCH 014/109] Add documentation for HC8 CO2 sensor (#5613) * Add documentation for HC8 CO2 sensor * AI cleanup --------- Co-authored-by: Jonathan Swoboda <154711427+swoboda1337@users.noreply.github.com> --- all_automations.json | 1 + content/automations/all_actions.md | 1 + content/components/_index.md | 2 + content/components/sensor/hc8.md | 79 ++++++++++++++++++ content/components/sensor/images/hc8-full.png | Bin 0 -> 197369 bytes static/images/hc8.png | Bin 0 -> 85010 bytes 6 files changed, 83 insertions(+) create mode 100644 content/components/sensor/hc8.md create mode 100644 content/components/sensor/images/hc8-full.png create mode 100644 static/images/hc8.png diff --git a/all_automations.json b/all_automations.json index eacff62c3d..26dc2b3ab6 100644 --- a/all_automations.json +++ b/all_automations.json @@ -136,6 +136,7 @@ "grove_tb6612fng.run", "grove_tb6612fng.standby", "grove_tb6612fng.stop", + "hc8.calibrate", "homeassistant.action", "homeassistant.event", "homeassistant.service", diff --git a/content/automations/all_actions.md b/content/automations/all_actions.md index 523d2fc5cc..bc9afd843e 100644 --- a/content/automations/all_actions.md +++ b/content/automations/all_actions.md @@ -31,6 +31,7 @@ title: "" - **fingerprint_grow:** `aura_led_control`, `cancel_enroll`, `delete`, `delete_all`, `enroll`, `led_control` - **globals:** `set` - **grove_tb6612fng:** `break`, `change_address`, `no_standby`, `run`, `standby`, `stop` +- **hc8:** `calibrate` - **homeassistant:** `event`, `service`, `tag_scanned` - **http_request:** `get`, `post`, `send` - **htu21d:** `set_heater`, `set_heater_level` diff --git a/content/components/_index.md b/content/components/_index.md index 97c29ae224..c85f8b49a4 100644 --- a/content/components/_index.md +++ b/content/components/_index.md @@ -240,6 +240,7 @@ Sensors are organized into categories; if a given sensor fits into more than one "GCJA5","components/sensor/gcja5","gcja5.svg","Particulate","","" "GP2Y1010AU0F","components/sensor/gp2y1010au0f","gp2y1010au0f.png","Particulate","","" "Grove Multichannel Gas V2","components/sensor/grove_gas_mc_v2","grove-gas-mc-v2.png","NO₂ & CO & Ethanol & Volatile organics","","" +"HC8","components/sensor/hc8","hc8.png","CO₂","","" "HM3301","components/sensor/hm3301","hm3301.jpg","Particulate","","" "iAQ-Core","components/sensor/iaqcore","iaqcore.jpg","eCO₂ & Volatile organics","","" "MH-Z19","components/sensor/mhz19","mhz19.jpg","CO₂ & Temperature","","" @@ -380,6 +381,7 @@ Sensors are organized into categories; if a given sensor fits into more than one "EMC2101","components/emc2101","emc2101.jpg","Temperature","" "ENS160","components/sensor/ens160","ens160.jpg","eCO₂ & Air Quality","" "ENS210","components/sensor/ens210","ens210.jpg","Temperature & Humidity","" +"HC8","components/sensor/hc8","hc8.png","CO₂","" "HDC1080","components/sensor/hdc1080","hdc1080.jpg","Temperature & Humidity","" "HDC2010","components/sensor/hdc2010","hdc2010.png","Temperature & Humidity","" "HHCCJCY10 (MiFlora Pink)","components/sensor/xiaomi_hhccjcy10","xiaomi_hhccjcy10.jpg","Soil moisture & Temperature & Light","" diff --git a/content/components/sensor/hc8.md b/content/components/sensor/hc8.md new file mode 100644 index 0000000000..140533a43e --- /dev/null +++ b/content/components/sensor/hc8.md @@ -0,0 +1,79 @@ +--- +description: "Instructions for setting up HC8 CO2 sensors" +title: "HC8 CO₂ Sensor" +params: + seo: + description: Instructions for setting up HC8 CO2 sensors + image: hc8.png +--- + +The `hc8` sensor platform allows you to use HC8 CO₂ sensors. + +{{< img src="hc8-full.png" alt="HC8 CO₂ Sensor" caption="HC8 CO₂ Sensor." width="50.0%" class="align-center" >}} + +As the communication with the HC8 sensor is done using UART, you need +to have an [UART bus](/components/uart) in your configuration with the `rx_pin` connected to the TX pin of the +HC8 and the `tx_pin` connected to the RX Pin of the HC8 (it's switched because the +TX/RX labels are from the perspective of the HC8). Additionally, you need to set the baud rate to 9600. + +```yaml +# Example configuration entry +sensor: + - platform: hc8 + co2: + name: HC8 CO2 Value +``` + +## Configuration Variables + +- **co2** (*Optional*): The CO₂ data from the sensor in parts per million (ppm). + All options from [Sensor](/components/sensor). + +- **update_interval** (*Optional*, [Time](/guides/configuration-types#time)): The interval to check the + sensor. Defaults to `60s`. + +- **uart_id** (*Optional*, [ID](/guides/configuration-types#id)): Manually specify the ID of the [UART Component](/components/uart) if you want + to use multiple UART buses. + +- **id** (*Optional*, [ID](/guides/configuration-types#id)): Manually specify the ID used for actions. + +- **warmup_time** (*Optional*, [Time](/guides/configuration-types#time)): The sensor has a warmup period during which it returns inaccurate readings (e.g., 500ppm, 505ppm). This setting discards readings until the warmup time has elapsed (returning `NaN` during warmup). The datasheet specifies a 10-minute preheating time for full accuracy, with 90% accuracy achieved after 3 minutes. Empirical evidence shows that reasonable values are usually returned after about 1 minute. Defaults to `75s`. + +{{< anchor "hc8-calibrate_action" >}} + +## `hc8.calibrate` Action + +This [action](/automations/actions#all-actions) executes baseline calibration command on the sensor with the given ID. + +Before executing baseline calibration, ensure the HC8 sensor has been operating in a stable gas environment +(with known CO₂ concentration) for at least 2 minutes. + +**Warning:** Only calibrate the sensor in a known stable environment (e.g., outdoors or in a well-ventilated room). +Incorrect calibration will result in inaccurate readings. + +```yaml +on_...: + then: + - hc8.calibrate: + id: my_hc8_id + baseline: 420 # Current outdoor CO₂ level +``` + +You can provide an [action](/components/api#api-device-actions) to perform from Home Assistant + +```yaml +api: + actions: + - action: hc8_calibrate + variables: + my_baseline: int + then: + - hc8.calibrate: + id: my_hc8_id + baseline: !lambda 'return my_baseline;' +``` + +## See Also + +- [Sensor Filters](/components/sensor#sensor-filters) +- {{< apiref "hc8/hc8.h" "hc8/hc8.h" >}} diff --git a/content/components/sensor/images/hc8-full.png b/content/components/sensor/images/hc8-full.png new file mode 100644 index 0000000000000000000000000000000000000000..55c3ca9a218361d5cb181ae826731800fb033452 GIT binary patch literal 197369 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�FPC2H>6_Vo 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�G3VB><3`U=NK4pEv3Q* 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 literal 0 HcmV?d00001 From 87d6be16cafd78227dce706c6937db9d5177c4a7 Mon Sep 17 00:00:00 2001 From: damib Date: Thu, 20 Nov 2025 15:43:51 +0100 Subject: [PATCH 015/109] Doc for optional humidity sensor in climate_ir component (#5161) Co-authored-by: J. Nick Koston Co-authored-by: Jonathan Swoboda <154711427+swoboda1337@users.noreply.github.com> --- content/components/climate/climate_ir.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/content/components/climate/climate_ir.md b/content/components/climate/climate_ir.md index 83caa0002a..256af86d8a 100644 --- a/content/components/climate/climate_ir.md +++ b/content/components/climate/climate_ir.md @@ -64,6 +64,8 @@ climate: - **sensor** (*Optional*, [ID](/guides/configuration-types#id)): The sensor that is used to measure the ambient temperature. This is only for reporting the current temperature in the frontend. +- **humidity_sensor** (*Optional*, [ID](/guides/configuration-types#id)): The sensor that is used to measure the ambient + humidity. This is only for reporting the current humidity in the frontend. - **supports_cool** (*Optional*, boolean): Enables setting cooling mode for this climate device. Defaults to `true`. - **supports_heat** (*Optional*, boolean): Enables setting heating mode for this climate device. Defaults to `true`. From 8178cb05fd900cbf8308c8e65a61d30848bfbc19 Mon Sep 17 00:00:00 2001 From: Marko Draca Date: Fri, 21 Nov 2025 20:50:27 +0100 Subject: [PATCH 016/109] [mcp3204] differential mode support (#5634) * Update mcp3204.md with diff mode from This PR adds documentation for the new differential mode feature for the MCP3204/MCP3208 ADC components. * Update content/components/sensor/mcp3204.md Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * Update content/components/sensor/mcp3204.md Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * Update content/components/sensor/mcp3204.md Channels typo Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * Clean up --------- Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> Co-authored-by: Jonathan Swoboda <154711427+swoboda1337@users.noreply.github.com> --- content/components/sensor/mcp3204.md | 35 +++++++++++++++++++++++++--- 1 file changed, 32 insertions(+), 3 deletions(-) diff --git a/content/components/sensor/mcp3204.md b/content/components/sensor/mcp3204.md index b4fd95a7a1..81838e6f1f 100644 --- a/content/components/sensor/mcp3204.md +++ b/content/components/sensor/mcp3204.md @@ -58,19 +58,48 @@ sensor: id: solar_voltage number: 0 # MCP3204 pin number -# In case MCP3208 is used. you can specify pin number > 4 + # In case MCP3208 is used, you can specify pin number > 4 - platform: mcp3204 # Attached to pin 7 of the MCP3208. id: supply_voltage number: 7 # MCP3208 pin number + + # Measures difference between CH0 (IN+) and CH1 (IN-) + - platform: mcp3204 # Differential pair on pins 0-1. + id: thermocouple_voltage + number: 0 + diff_mode: true ``` ### Configuration variables - **mcp3204_id** (**Required**, [ID](/guides/configuration-types#id)): The id of the parent MCP3204 component. -- **number** (**Required**, int): The pin number of the MCP3204 -- **update_interval** (*Optional*, [Time](/guides/configuration-types#time)): The interval to check the sensor. Defaults to `60s`. +- **number** (**Required**, int): The pin to measure on the MCP3204/MCP3208 +- **update_interval** (*Optional*, [Time](/guides/configuration-types#time)): The interval to check the sensor. + Defaults to `60s`. +- **diff_mode** (*Optional*, boolean): Enable differential mode measurement. Defaults to `false`. - All other options from [Sensor](/components/sensor). +## Operating Modes + +The MCP3204/3208 supports two input configurations: + +### Single-Ended Mode (default) + +Each channel measures voltage independently relative to ground. The MCP3204 provides 4 channels, +and MCP3208 provides 8 channels. This is the default operating mode when `diff_mode` is not +specified or set to `false`. + +### Differential Mode + +When `diff_mode: true`, channel pairs measure the voltage difference between two inputs (IN+ and +IN-). Specify the positive input channel number with the `number` parameter. The next sequential +channel automatically becomes the negative input (IN-). + +Available differential pairs: + +- MCP3204: 2 pairs (CH0/CH1, CH2/CH3) +- MCP3208: 4 pairs (CH0/CH1, CH2/CH3, CH4/CH5, CH6/CH7) + ## See Also - [SPI Bus](/components/spi) From 90fd6c391e5d9d0d8c3f767d4897edae97da6de6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ab=C3=ADlio=20Costa?= Date: Fri, 21 Nov 2025 21:28:39 +0100 Subject: [PATCH 017/109] Add BM8563 time component documentation (#5542) * Add BM8563 time component documentation Co-authored-by: abmantis <974569+abmantis@users.noreply.github.com> * Update BM8563 docs to use timer_value instead of sleep_duration Co-authored-by: abmantis <974569+abmantis@users.noreply.github.com> * Fix BM8563 icon by adding .svg extension Co-authored-by: abmantis <974569+abmantis@users.noreply.github.com> * Add configuration options for bm8563.start_timer action Co-authored-by: abmantis <974569+abmantis@users.noreply.github.com> * Remove timer_value from component configuration Co-authored-by: abmantis <974569+abmantis@users.noreply.github.com> * Clean up --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: abmantis <974569+abmantis@users.noreply.github.com> Co-authored-by: Jonathan Swoboda <154711427+swoboda1337@users.noreply.github.com> --- content/components/_index.md | 1 + content/components/time/bm8563.md | 114 ++++++++++++++++++++++++++++++ static/images/bm8563.svg | 1 + 3 files changed, 116 insertions(+) create mode 100644 content/components/time/bm8563.md create mode 100644 static/images/bm8563.svg diff --git a/content/components/_index.md b/content/components/_index.md index c85f8b49a4..9f122bfd64 100644 --- a/content/components/_index.md +++ b/content/components/_index.md @@ -1001,6 +1001,7 @@ at the {{< docref "light/fastled" "FastLED Light" >}}. {{< imgtable >}} "Time Core","components/time/index","clock-outline.svg","dark-invert" +"BM8563 RTC","components/time/bm8563","bm8563.svg","" "DS1307 RTC","components/time/ds1307","clock-outline.svg","dark-invert" "RX8130 RTC","components/time/rx8130","clock-outline.svg","dark-invert" "GPS Time","components/time/gps","crosshairs-gps.svg","dark-invert" diff --git a/content/components/time/bm8563.md b/content/components/time/bm8563.md new file mode 100644 index 0000000000..f35b18292b --- /dev/null +++ b/content/components/time/bm8563.md @@ -0,0 +1,114 @@ +--- +description: "BM8563 Time Source" +title: "BM8563 Time Source" +--- + +You first need to set up the {{< docref "/components/i2c" "I2C" >}} component. + +```yaml +# Example configuration entry +time: + - platform: bm8563 + id: bm8563_time +``` + +## Configuration variables + +- **address** (*Optional*, int): Manually specify the I²C address of the RTC. Defaults to `0x51`. +- All other options from [Base Time Configuration](#base_time_config). + +{{< anchor "bm8563-write_time_action" >}} + +## `bm8563.write_time` Action + +This [Action](#config-action) triggers a synchronization of the current system time to the RTC hardware. + +> [!NOTE] +> The BM8563 component will *not* write the RTC clock if not triggered *explicitly* by this action. + +```yaml +on_...: + - bm8563.write_time + + # in case you need to specify the BM8563 id + - bm8563.write_time: + id: bm8563_time +``` + +{{< anchor "bm8563-read_time_action" >}} + +## `bm8563.read_time` Action + +This [Action](#config-action) triggers a synchronization of the current system time from the RTC hardware. + +> [!NOTE] +> The BM8563 component will automatically read the RTC clock every 15 minutes by default and synchronize the +> system clock when a valid timestamp was read from the RTC. (The `update_interval` can be changed.) +> This action can be used to trigger *additional* synchronizations. + +```yaml +on_...: + - bm8563.read_time + + # in case you need to specify the BM8563 id + - bm8563.read_time: + id: bm8563_time +``` + +{{< anchor "bm8563-start_timer_action" >}} + +## `bm8563.start_timer` Action + +This [Action](#config-action) starts the RTC timer. + +```yaml +on_...: + - bm8563.start_timer: + duration: 60s + + # in case you need to specify the BM8563 id + - bm8563.start_timer: + id: bm8563_time + duration: 60s +``` + +Configuration options: + +- **duration** (**Required**, [Time](#config-time)): The time duration for the timer. +- **id** (*Optional*, [ID](#config-id)): Manually specify the ID of the BM8563 component if you have multiple components. + +{{< anchor "bm8563-config_example" >}} + +## Full Configuration Example + +In a typical setup, you will have at least one additional time source to synchronize the RTC with. Such an +external time source might not always be available e.g. due to a limited network connection. +In order to have a valid, reliable system time, the system should read the RTC once at start and then try to +synchronize with an external reliable time source. +When a synchronization to another time source was successful, the RTC can be resynchronized. + +```yaml +esphome: + on_boot: + then: + # read the RTC time once when the system boots + bm8563.read_time: + +time: + - platform: bm8563 + # repeated synchronization is not necessary unless the external RTC + # is much more accurate than the internal clock + update_interval: never + - platform: homeassistant + # instead try to synchronize via network repeatedly ... + on_time_sync: + then: + # ... and update the RTC when the synchronization was successful + bm8563.write_time: +``` + +## See Also + +- {{< docref "/components/i2c" "I2C Bus" >}} +- {{< docref "/components/time" "Time Component" >}} +- {{< docref "/components/deep_sleep" "Deep Sleep Component" >}} diff --git a/static/images/bm8563.svg b/static/images/bm8563.svg new file mode 100644 index 0000000000..f1a11651f8 --- /dev/null +++ b/static/images/bm8563.svg @@ -0,0 +1 @@ + \ No newline at end of file From 152485dc4579d48ead229c8be3fecff645769dd7 Mon Sep 17 00:00:00 2001 From: James <23900@qq.com> Date: Mon, 24 Nov 2025 23:05:21 +1300 Subject: [PATCH 018/109] Add new model JC4880P443 to MIPI DSI documentation (#5670) --- content/components/display/mipi_dsi.md | 1 + 1 file changed, 1 insertion(+) diff --git a/content/components/display/mipi_dsi.md b/content/components/display/mipi_dsi.md index 0093e7f11f..89a76af8f6 100644 --- a/content/components/display/mipi_dsi.md +++ b/content/components/display/mipi_dsi.md @@ -43,6 +43,7 @@ specified, or a custom init sequence can be provided. | Model | Manufacturer | Product Description | | ---------------------- | ------------ | ----------------------------------------------------------------------------- | | JC1060P470 | Guition | | +| JC4880P443 | Guition | | | M5STACK-TAB5 | M5Stack | | | WAVESHARE-P4-NANO-10.1 | Waveshare | | | WAVESHARE-P4-86-PANEL | Waveshare | | From dd416443967503ea59c534753b485186938204c0 Mon Sep 17 00:00:00 2001 From: Flo Date: Mon, 24 Nov 2025 18:23:33 +0100 Subject: [PATCH 019/109] Wifi AP Condition (#5607) Co-authored-by: J. Nick Koston --- content/components/wifi.md | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/content/components/wifi.md b/content/components/wifi.md index 924f14f840..ce3d88df10 100644 --- a/content/components/wifi.md +++ b/content/components/wifi.md @@ -472,6 +472,22 @@ on_...: The lambda equivalent for this is `!id(wifi_id).is_disabled()`. +{{< anchor "wifi-ap-active_condition" >}} + +### `wifi.ap_active` Condition + +This [Condition](/automations/actions#all-conditions) checks if WiFi AP is currently active or not. + +```yaml +on_...: + - if: + condition: wifi.ap_active + then: + - logger.log: WiFi AP is active! +``` + +The lambda equivalent for this is `id(wifi_id).is_ap_active()`. + ## See Also - {{< docref "captive_portal/" >}} From b4dc0bc1738e86996853e1b639013b9f5218df3e Mon Sep 17 00:00:00 2001 From: Sascha Ittner Date: Mon, 24 Nov 2025 18:35:06 +0100 Subject: [PATCH 020/109] Add thermopro BLE support (#5593) Co-authored-by: J. Nick Koston Co-authored-by: J. Nick Koston Co-authored-by: J. Nick Koston --- content/components/_index.md | 1 + .../sensor/images/thermopro_tp357-full.jpg | Bin 0 -> 23160 bytes content/components/sensor/thermopro_ble.md | 116 ++++++++++++++++++ static/images/thermopro_tp357.jpg | Bin 0 -> 7731 bytes 4 files changed, 117 insertions(+) create mode 100644 content/components/sensor/images/thermopro_tp357-full.jpg create mode 100644 content/components/sensor/thermopro_ble.md create mode 100644 static/images/thermopro_tp357.jpg diff --git a/content/components/_index.md b/content/components/_index.md index 9f122bfd64..513795af1b 100644 --- a/content/components/_index.md +++ b/content/components/_index.md @@ -292,6 +292,7 @@ Sensors are organized into categories; if a given sensor fits into more than one "Mopeka Pro Check LP","components/sensor/mopeka_pro_check","mopeka_pro_check.jpg","Tank level" "Mopeka Standard Check LP","components/sensor/mopeka_std_check","mopeka_std_check.jpg","Tank level" "RuuviTag","components/sensor/ruuvitag","ruuvitag.jpg","Temperature & Humidity & Accelerometer" +"ThermoPro BLE","components/sensor/thermopro_ble","thermopro_tp357.jpg","Temperature & Humidity" "Xiaomi BLE","components/sensor/xiaomi_ble","xiaomi_mijia_logo.jpg","Various" {{< /imgtable >}} diff --git a/content/components/sensor/images/thermopro_tp357-full.jpg b/content/components/sensor/images/thermopro_tp357-full.jpg new file mode 100644 index 0000000000000000000000000000000000000000..09413dea3f55ec5e95ffd73bd0947ea1663d0fb4 GIT binary patch literal 23160 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 Q$Ai&@VFZvC5LSQx*{)7Is{jB1 literal 0 HcmV?d00001 diff --git a/content/components/sensor/thermopro_ble.md b/content/components/sensor/thermopro_ble.md new file mode 100644 index 0000000000..e23e83d5fe --- /dev/null +++ b/content/components/sensor/thermopro_ble.md @@ -0,0 +1,116 @@ +--- +description: "Instructions for setting up ThermoPro Bluetooth-based temperature and humidity sensors in ESPHome." +title: "ThermoPro BLE Sensors" +params: + seo: + description: Instructions for setting up ThermoPro Bluetooth-based temperature and humidity sensors in ESPHome. + image: thermopro_tp357.jpg +--- + +The `thermopro_ble` sensor platform lets you track the output of ThermoPro Bluetooth +Low Energy devices using the {{< docref "/components/esp32_ble_tracker" >}}. This component will track the +temperature, humidity, battery level and signal strength of the ThermoPro device every time the +sensor sends out a BLE broadcast. + +## Supported Devices + +This component supports multiple ThermoPro BLE sensor models: + +- **TP3xx series** (e.g., TP357S): Temperature, humidity, and battery level sensors. Testing has been primarily done with TP357S devices. +- **TP96x series**: Internal and external temperature sensors with battery level monitoring. +- **TP970**: Internal and external temperature sensors with battery level monitoring. +- **TP972**: Internal and external temperature sensors with battery level monitoring. + +All models support signal strength (RSSI) monitoring. + +{{< img src="thermopro_tp357-full.jpg" alt="Image" caption="ThermoPro TP357 Temperature and Humidity Sensor over BLE." width="80.0%" class="align-center" >}} + +```yaml +# Example configuration entry +esp32_ble_tracker: + +sensor: + # TP3xx series example (TP357S with humidity) + - platform: thermopro_ble + mac_address: XX:XX:XX:XX:XX:XX + temperature: + name: "ThermoPro Temperature" + humidity: + name: "ThermoPro Humidity" + battery_level: + name: "ThermoPro Battery Level" + signal_strength: + name: "ThermoPro Signal Strength" + + # TP96x/TP970/TP972 example (with external temperature probe) + # - platform: thermopro_ble + # mac_address: YY:YY:YY:YY:YY:YY + # temperature: + # name: "ThermoPro Internal Temperature" + # external_temperature: + # name: "ThermoPro External Temperature" + # battery_level: + # name: "ThermoPro Battery Level" + # signal_strength: + # name: "ThermoPro Signal Strength" +``` + +## Configuration variables + +- **mac_address** (**Required**, MAC Address): The MAC address of the ThermoPro device. + +- **temperature** (*Optional*): The information for the temperature sensor. + + - All options from [Sensor](#config-sensor). + +- **external_temperature** (*Optional*): The information for the external/probe temperature sensor. + Some models (TP972, TP970, TP96x) support dual temperature readings - one internal and one from an external probe. + + - All options from [Sensor](#config-sensor). + +- **humidity** (*Optional*): The information for the humidity sensor. Only available on TP3xx devices. + + - All options from [Sensor](#config-sensor). + +- **battery_level** (*Optional*): The information for the battery level sensor. + + - All options from [Sensor](#config-sensor). + +- **signal_strength** (*Optional*): The information for the signal strength (RSSI) sensor. + + - All options from [Sensor](#config-sensor). + +## Setting Up Devices + +To set up ThermoPro devices you first need to find their MAC Address so that ESPHome can +identify them. So first, create a simple configuration without any `thermopro_ble` entries +like so: + +```yaml +esp32_ble_tracker: + on_ble_advertise: + - then: + - lambda: 'ESP_LOGD("ble_adv", "BLE device address: %s name: %s", x.address_str().c_str(), x.get_name().c_str());' +``` + +After uploading the ESP32 will immediately try to scan for BLE devices such as the ThermoPro, so +you will see messages like this (please note the TPxxxx model name): + +```log +[13:36:43][D][ble_adv:042]: BLE device address: XX:XX:XX:XX:XX:XX name: TP357S (XXXX) +``` + +Note that it can sometimes take some time for the first BLE broadcast to be received. + +Then just copy the address (`XX:XX:XX:XX:XX:XX`) into a new `sensor.thermopro_ble` platform +entry like in the configuration example at the top. + +> [!NOTE] +> The ThermoPro BLE component listens passively to packets the device sends by itself. +> ESPHome therefore has no impact on the battery life of the device. + +## See Also + +- {{< docref "/components/esp32_ble_tracker" >}} +- {{< docref "/components/sensor" >}} +- {{< apiref "thermopro_ble/thermopro_ble.h" "thermopro_ble/thermopro_ble.h" >}} diff --git a/static/images/thermopro_tp357.jpg b/static/images/thermopro_tp357.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2d57b7faafeda8f38d89c128b26d4327173bc44f GIT binary patch literal 7731 zcmb7obzD^4*8drXfuXx=C_%bIKtNDQkw&^fx>34Yx&%QwM7mo-x<$GM5l}%X>39!5 z_ul9J@w>nGzH9cG{r#*uYwxr7TIcMWxtlcrU*VDbBLD&t2ZRFvZmt0$85au^Hw$xw z=W{n}#AA8or#I^;Rq`@2Mo-mL9?2^`1hoMGCCARp-W62}0PG#yT+|*vK#a4X0A@sPoF9Q|B;So0MHWveB!+I^&i##-vS(S3s*A$fFMAzl$n!@8;FfT zEad6tbc@qLOl)RtVh-Z>Am(rZ0|fEhE#LGnymO1K{$Lak0>myFYBJ#1h(V07`ZsL) zZ`jP*#U9iV0Ckwm?Hxe>C^~;(^IPn5i|y^)!Px%L?Fg|g95mIzo(a6DfyaP6pbR_( z5P&J*4m=0!05^aW>>WUkE1(9-AN&V<%0Ko`K`T?x>N#KrTF3&9fIVRH#~!$S2A~c| zf6uL}B|qOE76khN0KismZVs6N06hr+uHtWQE^=>fuJQl?x�p9R9X<%mDzA-ylE! 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 Date: Mon, 24 Nov 2025 09:44:29 -0800 Subject: [PATCH 021/109] [prometheus] New metrics for text and event components plus some example prometheus metrics (#5249) Co-authored-by: Samuel Sieb Co-authored-by: Keith Burzinski Co-authored-by: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Co-authored-by: Samuel Sieb Co-authored-by: J. Nick Koston Fix typos, remove duplicate config var (#5236) --- content/components/prometheus.md | 88 ++++++++++++++++++++++++++++++++ 1 file changed, 88 insertions(+) diff --git a/content/components/prometheus.md b/content/components/prometheus.md index b6ad3bdcdb..60ef05e582 100644 --- a/content/components/prometheus.md +++ b/content/components/prometheus.md @@ -52,6 +52,8 @@ prometheus: - Switch - Lock - Text Sensor +- Text +- Event - Number - Select - Media Player @@ -92,6 +94,92 @@ prometheus: name: "Angry Pixies" ``` +## Example Metrics + +Here's an example of *some* of the many prometheus metrics available: + +```text +#TYPE esphome_sensor_value gauge +#TYPE esphome_sensor_failed gauge +esphome_sensor_failed{id="dev_idf_prometheus_goober_wifi_signal_db",area="Dev",node="devidfprometheus",name="Dev IDF Prometheus Goober WiFi Signal dB"} 0 +esphome_sensor_value{id="dev_idf_prometheus_goober_wifi_signal_db",area="Dev",node="devidfprometheus",name="Dev IDF Prometheus Goober WiFi Signal dB",unit="dBm"} -35 +esphome_sensor_failed{id="dev_idf_prometheus_goober_wifi_signal_percent",area="Dev",node="devidfprometheus",name="Dev IDF Prometheus Goober WiFi Signal Percent"} 0 +esphome_sensor_value{id="dev_idf_prometheus_goober_wifi_signal_percent",area="Dev",node="devidfprometheus",name="Dev IDF Prometheus Goober WiFi Signal Percent",unit="Signal %"} 100 +esphome_sensor_failed{id="dev_idf_prometheus_goober_uptime_sensor",area="Dev",node="devidfprometheus",name="Dev IDF Prometheus Goober Uptime Sensor"} 0 +esphome_sensor_value{id="dev_idf_prometheus_goober_uptime_sensor",area="Dev",node="devidfprometheus",name="Dev IDF Prometheus Goober Uptime Sensor",unit="s"} 4 +esphome_sensor_failed{id="dev_idf_prometheus_goober_uptime_timestamp",area="Dev",node="devidfprometheus",name="Dev IDF Prometheus Goober Uptime Timestamp"} 1 +esphome_sensor_failed{id="dev_idf_prometheus_goober_esphome_internal_temperature",area="Dev",node="devidfprometheus",name="Dev IDF Prometheus Goober ESPHome Internal Temperature"} 0 +esphome_sensor_value{id="dev_idf_prometheus_goober_esphome_internal_temperature",area="Dev",node="devidfprometheus",name="Dev IDF Prometheus Goober ESPHome Internal Temperature",unit="°C"} 33.1 +esphome_sensor_failed{id="heap_free",area="Dev",node="devidfprometheus",name="Heap Free"} 0 +esphome_sensor_value{id="heap_free",area="Dev",node="devidfprometheus",name="Heap Free",unit="B"} 224724 +esphome_sensor_failed{id="heap_max_block",area="Dev",node="devidfprometheus",name="Heap Max Block"} 0 +esphome_sensor_value{id="heap_max_block",area="Dev",node="devidfprometheus",name="Heap Max Block",unit="B"} 147456 +esphome_sensor_failed{id="loop_time",area="Dev",node="devidfprometheus",name="Loop Time"} 0 +esphome_sensor_value{id="loop_time",area="Dev",node="devidfprometheus",name="Loop Time",unit="ms"} 17 +esphome_sensor_failed{id="cpu_frequency",area="Dev",node="devidfprometheus",name="CPU Frequency"} 0 +esphome_sensor_value{id="cpu_frequency",area="Dev",node="devidfprometheus",name="CPU Frequency",unit="Hz"} 160000000 +#TYPE esphome_binary_sensor_value gauge +#TYPE esphome_binary_sensor_failed gauge +esphome_binary_sensor_failed{id="dev_idf_prometheus_goober_button",area="Dev",node="devidfprometheus",name="Dev IDF Prometheus Goober Button"} 0 +esphome_binary_sensor_value{id="dev_idf_prometheus_goober_button",area="Dev",node="devidfprometheus",name="Dev IDF Prometheus Goober Button"} 0.000000 +esphome_binary_sensor_failed{id="dev_idf_prometheus_goober_connected_status",area="Dev",node="devidfprometheus",name="Dev IDF Prometheus Goober Connected Status"} 0 +esphome_binary_sensor_value{id="dev_idf_prometheus_goober_connected_status",area="Dev",node="devidfprometheus",name="Dev IDF Prometheus Goober Connected Status"} 0.000000 +#TYPE esphome_light_state gauge +#TYPE esphome_light_color gauge +#TYPE esphome_light_effect_active gauge +esphome_light_state{id="dev_idf_prometheus_goober_light",area="Dev",node="devidfprometheus",name="Dev IDF Prometheus Goober Light"} 0.000000 +esphome_light_color{id="dev_idf_prometheus_goober_light",area="Dev",node="devidfprometheus",name="Dev IDF Prometheus Goober Light",channel="brightness"} 0.000000 +esphome_light_color{id="dev_idf_prometheus_goober_light",area="Dev",node="devidfprometheus",name="Dev IDF Prometheus Goober Light",channel="r"} 0.000000 +esphome_light_color{id="dev_idf_prometheus_goober_light",area="Dev",node="devidfprometheus",name="Dev IDF Prometheus Goober Light",channel="g"} 0.000000 +esphome_light_color{id="dev_idf_prometheus_goober_light",area="Dev",node="devidfprometheus",name="Dev IDF Prometheus Goober Light",channel="b"} 0.000000 +esphome_light_color{id="dev_idf_prometheus_goober_light",area="Dev",node="devidfprometheus",name="Dev IDF Prometheus Goober Light",channel="w"} 0.000000 +esphome_light_effect_active{id="dev_idf_prometheus_goober_light",area="Dev",node="devidfprometheus",name="Dev IDF Prometheus Goober Light",effect="None"} 0 +#TYPE esphome_switch_value gauge +#TYPE esphome_switch_failed gauge +esphome_switch_failed{id="beta_firmware",area="Dev",node="devidfprometheus",name="Beta firmware"} 0 +esphome_switch_value{id="beta_firmware",area="Dev",node="devidfprometheus",name="Beta firmware"} 0.000000 +#TYPE esphome_text_sensor_value gauge +#TYPE esphome_text_sensor_failed gauge +esphome_text_sensor_failed{id="esphome_version_detailed",area="Dev",node="devidfprometheus",name="ESPHome Version Detailed"} 0 +esphome_text_sensor_value{id="esphome_version_detailed",area="Dev",node="devidfprometheus",name="ESPHome Version Detailed",value="2025.8.0b1 Aug 16 2025, 13:48:52"} 1.0 +esphome_text_sensor_failed{id="esphome_version",area="Dev",node="devidfprometheus",name="ESPHome Version"} 0 +esphome_text_sensor_value{id="esphome_version",area="Dev",node="devidfprometheus",name="ESPHome Version",value="2025.8.0b1"} 1.0 +esphome_text_sensor_failed{id="esphome_project_version",area="Dev",node="devidfprometheus",name="ESPHome Project Version"} 0 +esphome_text_sensor_value{id="esphome_project_version",area="Dev",node="devidfprometheus",name="ESPHome Project Version",value="4.13.8"} 1.0 +esphome_text_sensor_failed{id="esphome_project_version_detailed",area="Dev",node="devidfprometheus",name="ESPHome Project Version Detailed"} 0 +esphome_text_sensor_value{id="esphome_project_version_detailed",area="Dev",node="devidfprometheus",name="ESPHome Project Version Detailed",value="4.13.8 Aug 16 2025, 13:48:52"} 1.0 +esphome_text_sensor_failed{id="esphome_board",area="Dev",node="devidfprometheus",name="ESPHome Board"} 0 +esphome_text_sensor_value{id="esphome_board",area="Dev",node="devidfprometheus",name="ESPHome Board",value="esp32-s3-devkitc-1"} 1.0 +esphome_text_sensor_failed{id="esphome_board_variant",area="Dev",node="devidfprometheus",name="ESPHome Board Variant"} 0 +esphome_text_sensor_value{id="esphome_board_variant",area="Dev",node="devidfprometheus",name="ESPHome Board Variant",value="ESP32-S3"} 1.0 +esphome_text_sensor_failed{id="esphome_framework_type",area="Dev",node="devidfprometheus",name="ESPHome Framework Type"} 0 +esphome_text_sensor_value{id="esphome_framework_type",area="Dev",node="devidfprometheus",name="ESPHome Framework Type",value="ESP-IDF"} 1.0 +esphome_text_sensor_failed{id="esphome_idf_version",area="Dev",node="devidfprometheus",name="ESPHome IDF Version"} 0 +esphome_text_sensor_value{id="esphome_idf_version",area="Dev",node="devidfprometheus",name="ESPHome IDF Version",value="5.4.2"} 1.0 +esphome_text_sensor_failed{id="reset_reason",area="Dev",node="devidfprometheus",name="Reset Reason"} 0 +esphome_text_sensor_value{id="reset_reason",area="Dev",node="devidfprometheus",name="Reset Reason",value="USB peripheral"} 1.0 +#TYPE esphome_number_value gauge +#TYPE esphome_number_failed gauge +esphome_number_failed{id="template_number",area="Dev",node="devidfprometheus",name="Template number"} 0 +esphome_number_value{id="template_number",area="Dev",node="devidfprometheus",name="Template number"} 0.000000 +#TYPE esphome_select_value gauge +#TYPE esphome_select_failed gauge +esphome_select_failed{id="template_select",area="Dev",node="devidfprometheus",name="Template select"} 0 +esphome_select_value{id="template_select",area="Dev",node="devidfprometheus",name="Template select",value="two"} 1.0 +#TYPE esphome_update_entity_state gauge +#TYPE esphome_update_entity_info gauge +#TYPE esphome_update_entity_failed gauge +esphome_update_entity_failed{id="firmware_update",area="Dev",node="devidfprometheus",name="Firmware Update"} 1 +#TYPE esphome_text_value gauge +#TYPE esphome_text_failed gauge +esphome_text_failed{id="template_text",area="Dev",node="devidfprometheus",name="Template text"} 0 +esphome_text_value{id="template_text",area="Dev",node="devidfprometheus",name="Template text",value="Hello World"} 1.0 +#TYPE esphome_event_value gauge +#TYPE esphome_event_failed gauge +esphome_event_failed{id="template_event",area="Dev",node="devidfprometheus",name="Template Event"} 0 +esphome_event_value{id="template_event",area="Dev",node="devidfprometheus",name="Template Event",last_event_type="custom_event_1"} 1.0 +``` + ## See Also - {{< docref "/components/web_server" >}} From 6acef435343b3e4c9b819463a38123c2fa6c4a51 Mon Sep 17 00:00:00 2001 From: Flo Date: Mon, 24 Nov 2025 18:51:47 +0100 Subject: [PATCH 022/109] [api] Connected Condition - state_subscription_only flag (#5624) Co-authored-by: J. Nick Koston --- content/components/api.md | 36 +++++++++++++++++++++++++++++++----- 1 file changed, 31 insertions(+), 5 deletions(-) diff --git a/content/components/api.md b/content/components/api.md index 214679f5a5..db81505cbd 100644 --- a/content/components/api.md +++ b/content/components/api.md @@ -385,13 +385,19 @@ api: - logger.log: "API client disconnected!" ``` +## Conditions + {{< anchor "api-connected_condition" >}} -## `api.connected` Condition +### `api.connected` Condition + +This [Condition](/automations/actions#all-conditions) checks if at least one client is connected to the ESPHome native API. + +#### Configuration variables -This [Condition](/automations/actions#all-conditions) checks if at least one client is connected to the ESPHome -native API. Please note client not only includes Home Assistant, but also ESPHome's OTA log output -if logs are shown remotely. +- **state_subscription_only** (*Optional*, boolean): If enabled, only counts clients that have subscribed to entity state updates. This filters out logger-only connections (such as `esphome logs` command), which can cause false positives when waiting for Home Assistant. Defaults to `false`. + +**Check if any client is connected:** ```yaml on_...: @@ -399,11 +405,31 @@ on_...: condition: api.connected: then: - - logger.log: API is connected! + - logger.log: Client is connected to API! ``` The lambda equivalent for this is `id(api_id).is_connected()`. +**Check if a client subscribed to entity states is connected (typically Home Assistant):** + +```yaml +on_boot: + - wait_until: + condition: + api.connected: + state_subscription_only: true + - logger.log: Home Assistant is connected! + - homeassistant.event: + event: esphome.device_booted +``` + +The lambda equivalent for this is `id(api_id).is_connected(true)`. + +**Use Cases:** + +- Use `state_subscription_only: false` (default) to detect any API connection +- Use `state_subscription_only: true` when you need to ensure Home Assistant (or other connections that subscribe to states) is connected before sending events or calling services, preventing errors from logger-only connections + {{< anchor "api-device-actions" >}} ## User-defined Actions From 7a95fd3f8ff40037d0a4ea31c8e59df29317f312 Mon Sep 17 00:00:00 2001 From: "Devon G. Redekopp" Date: Thu, 20 Nov 2025 15:35:39 -0500 Subject: [PATCH 023/109] Fix Typos / Duplicated Text (#5655) --- content/components/sensor/ade7953.md | 16 ++++++++-------- content/components/sensor/bl0942.md | 1 - 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/content/components/sensor/ade7953.md b/content/components/sensor/ade7953.md index 9abec7629a..24dfa8e95b 100644 --- a/content/components/sensor/ade7953.md +++ b/content/components/sensor/ade7953.md @@ -82,10 +82,10 @@ sensor: - **power_factor_b** (*Optional*): Use the power factor of the B channel in percentage. All options from [Sensor](/components/sensor). -- **aparent_power_a** (*Optional*): Use the apparent power value of the A channel in volt ampers. All options from +- **apparent_power_a** (*Optional*): Use the apparent power value of the A channel in volt amperes. All options from [Sensor](/components/sensor). -- **aparent_power_b** (*Optional*): Use the apparent power value of the B channel in volt ampers. All options from +- **apparent_power_b** (*Optional*): Use the apparent power value of the B channel in volt amperes. All options from [Sensor](/components/sensor). - **active_power_a** (*Optional*): Use the power value of the A channel in watts. All options from @@ -94,10 +94,10 @@ sensor: - **active_power_b** (*Optional*): Use the power value of the B channel in watts. All options from [Sensor](/components/sensor). -- **reactive_power_a** (*Optional*): Use the rective power value of the A channel in volt ampers. All options from +- **reactive_power_a** (*Optional*): Use the reactive power value of the A channel in volt amperes. All options from [Sensor](/components/sensor). -- **reactive_power_b** (*Optional*): Use the rective power value of the B channel in volt ampers. All options from +- **reactive_power_b** (*Optional*): Use the reactive power value of the B channel in volt amperes. All options from [Sensor](/components/sensor). - **voltage_pga_gain** (*Optional*, mapping): Set the input PGA voltage amplification. Defaults to `1x`. Possible values are: @@ -190,10 +190,10 @@ sensor: - **power_factor_b** (*Optional*): Use the power factor of the B channel in percentage. All options from [Sensor](/components/sensor). -- **aparent_power_a** (*Optional*): Use the apparent power value of the A channel in volt ampers. All options from +- **apparent_power_a** (*Optional*): Use the apparent power value of the A channel in volt amperes. All options from [Sensor](/components/sensor). -- **aparent_power_b** (*Optional*): Use the apparent power value of the B channel in volt ampers. All options from +- **apparent_power_b** (*Optional*): Use the apparent power value of the B channel in volt amperes. All options from [Sensor](/components/sensor). - **active_power_a** (*Optional*): Use the power value of the A channel in watts. All options from @@ -202,10 +202,10 @@ sensor: - **active_power_b** (*Optional*): Use the power value of the B channel in watts. All options from [Sensor](/components/sensor). -- **reactive_power_a** (*Optional*): Use the rective power value of the A channel in volt ampers. All options from +- **reactive_power_a** (*Optional*): Use the reactive power value of the A channel in volt amperes. All options from [Sensor](/components/sensor). -- **reactive_power_b** (*Optional*): Use the rective power value of the B channel in volt ampers. All options from +- **reactive_power_b** (*Optional*): Use the reactive power value of the B channel in volt amperes. All options from [Sensor](/components/sensor). - **voltage_pga_gain** (*Optional*, mapping): Set the input PGA voltage amplification. Defaults to `1x`. Possible values are: diff --git a/content/components/sensor/bl0942.md b/content/components/sensor/bl0942.md index 0f647ec0a9..21625d59bf 100644 --- a/content/components/sensor/bl0942.md +++ b/content/components/sensor/bl0942.md @@ -44,7 +44,6 @@ sensor: - **frequency** (*Optional*): The frequency value of the sensor in Hertz. All options from [Sensor](/components/sensor). - All options from [Sensor](/components/sensor). - **update_interval** (*Optional*, [Time](/guides/configuration-types#time)): The interval to check the sensor. Defaults to `60s`. From a8beafeca99ddd9688d6bdd93b4c7140a829c9ab Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Thu, 20 Nov 2025 14:39:16 -0600 Subject: [PATCH 024/109] Link blog post for network::get_use_address() migration in 2025.11.0 changelog (#5654) --- content/changelog/2025.11.0.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/content/changelog/2025.11.0.md b/content/changelog/2025.11.0.md index f599b487b6..f58cfeccec 100644 --- a/content/changelog/2025.11.0.md +++ b/content/changelog/2025.11.0.md @@ -487,9 +487,11 @@ See the [Event Entity Class: Memory Optimizations](https://developers.esphome.io ### Network Components +See the [Network get_use_address() Optimization](https://developers.esphome.io/blog/2025/11/20/network-use-address-optimization/) blog post for migration details. + - **WiFi scan results**: External components that access WiFi scan results after connection must call `wifi.request_wifi_scan_results()` in their `to_code()` function to prevent cleanup. [#11205](https://github.com/esphome/esphome/pull/11205) -- **use_address**: Changed from `const std::string &` to `const char *` in WiFi, Ethernet, and OpenThread components. Update external components calling `get_use_address()` or `set_use_address()`. [#11707](https://github.com/esphome/esphome/pull/11707) +- **use_address**: Changed from `const std::string &` to `const char *` in WiFi, Ethernet, and OpenThread components. Remove `.c_str()` calls when using `get_use_address()`. [#11707](https://github.com/esphome/esphome/pull/11707) ### Other Components From e4f736ba6545d5ba2857b1a5f26422ef3a932a8a Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Thu, 20 Nov 2025 14:42:11 -0600 Subject: [PATCH 025/109] [climate] Document public accessor methods for custom modes in 2025.11.0 release notes (#5653) --- content/changelog/2025.11.0.md | 8 ++++++- content/components/climate/_index.md | 32 ++++++++++++++++++++++++---- 2 files changed, 35 insertions(+), 5 deletions(-) diff --git a/content/changelog/2025.11.0.md b/content/changelog/2025.11.0.md index f58cfeccec..ad4c58bbf0 100644 --- a/content/changelog/2025.11.0.md +++ b/content/changelog/2025.11.0.md @@ -419,6 +419,12 @@ Users who access component members directly in YAML lambdas may need updates: - **Fan**: Change `id(my_fan).preset_mode` to `id(my_fan).get_preset_mode()`. [#11632](https://github.com/esphome/esphome/pull/11632) - **Event**: Change `id(my_event).last_event_type` to `id(my_event).get_last_event_type()`. [#11767](https://github.com/esphome/esphome/pull/11767) + +- **Climate**: Custom mode members are now private. Change direct access to public accessor methods: + - Check if active: `id(my_climate).custom_fan_mode.has_value()` → `id(my_climate).has_custom_fan_mode()`, `id(my_climate).custom_preset.has_value()` → `id(my_climate).has_custom_preset()` + - Get value: `id(my_climate).custom_fan_mode.value()` → `id(my_climate).get_custom_fan_mode()`, `id(my_climate).custom_preset.value()` → `id(my_climate).get_custom_preset()` + + [#11621](https://github.com/esphome/esphome/pull/11621) ### Breaking Changes for Developers @@ -447,7 +453,7 @@ See the [Climate Entity Class: FiniteSetMask and Flash Storage Optimizations](ht - **Custom modes storage**: Changed from `std::set` to `FiniteSetMask` for supported modes, and from `std::vector` to `std::vector` for custom fan modes and presets. [#11466](https://github.com/esphome/esphome/pull/11466), [#11621](https://github.com/esphome/esphome/pull/11621) -- **Member access**: Climate device members (`custom_fan_mode_`, `custom_preset_`) are now private. Use protected setter methods (`set_custom_fan_mode_()`, `set_custom_preset_()`) in derived classes. [#11621](https://github.com/esphome/esphome/pull/11621) +- **Member access**: Climate device members (`custom_fan_mode_`, `custom_preset_`) are now private. Use protected setter methods (`set_custom_fan_mode_()`, `set_custom_preset_()`) in derived classes. Use public accessor methods to read values: `has_custom_fan_mode()`, `get_custom_fan_mode()`, `has_custom_preset()`, `get_custom_preset()`. [#11621](https://github.com/esphome/esphome/pull/11621) - **Deprecated methods**: Removed methods deprecated in 1.20 (July 2021). [#11388](https://github.com/esphome/esphome/pull/11388) diff --git a/content/components/climate/_index.md b/content/components/climate/_index.md index e44af2649f..00c47a1982 100644 --- a/content/components/climate/_index.md +++ b/content/components/climate/_index.md @@ -234,18 +234,42 @@ advanced stuff. id(my_climate).target_humidity // Fan mode, type: FanMode (enum) id(my_climate).fan_mode - // Custom Fan mode, type: string - id(my_climate).custom_fan_mode // Swing mode, type: SwingMode (enum) id(my_climate).swing_mode // Current action (currentl on idle, cooling, heating, etc.), ClimateAction (enum) id(my_climate).action // Preset, type: Preset (enum) id(my_climate).preset - // Custom Preset, type: string - id(my_climate).custom_preset ``` +- Custom mode accessor methods: + +```cpp + // Check if custom fan mode is active, type: bool + id(my_climate).has_custom_fan_mode() + // Get custom fan mode (read-only), type: const char* + id(my_climate).get_custom_fan_mode() + // Check if custom preset is active, type: bool + id(my_climate).has_custom_preset() + // Get custom preset (read-only), type: const char* + id(my_climate).get_custom_preset() +``` + +> [!WARNING] +> Always check if a custom mode is active before accessing it. Calling `get_custom_fan_mode()` or `get_custom_preset()` when no custom mode is set will return `nullptr`, which can cause crashes if dereferenced. +> +> ```cpp +> // Correct - check before accessing +> if (id(my_climate).has_custom_fan_mode()) { +> const char* mode = id(my_climate).get_custom_fan_mode(); +> // Now safe to use mode +> } +> +> // Wrong - may crash if no custom mode is set +> const char* mode = id(my_climate).get_custom_fan_mode(); +> ESP_LOGD("tag", "Mode: %s", mode); // Crashes if mode is nullptr +> ``` + - `.make_call` : Control the climate device ```cpp From 006776c3024406844ea7f5b77bd9dd58943b7c68 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Thu, 20 Nov 2025 14:44:38 -0600 Subject: [PATCH 026/109] [changelog] Fix blog post links in 2025.11.0 changelog (#5656) --- content/changelog/2025.11.0.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/content/changelog/2025.11.0.md b/content/changelog/2025.11.0.md index ad4c58bbf0..6200c5143c 100644 --- a/content/changelog/2025.11.0.md +++ b/content/changelog/2025.11.0.md @@ -435,7 +435,7 @@ The following changes affect external component developers. Standard YAML config ## Core Framework Changes -- **Action/Trigger Framework**: All action/trigger/condition method signatures changed to use const references (`const Ts&... x`) instead of pass-by-value (`Ts... x`). See the [Action Framework Performance Optimization](https://developers.esphome.io/blog/2025/11/action-framework-performance-optimization.html) blog post for migration details. [#11704](https://github.com/esphome/esphome/pull/11704) +- **Action/Trigger Framework**: All action/trigger/condition method signatures changed to use const references (`const Ts&... x`) instead of pass-by-value (`Ts... x`). See the [Action Framework Performance Optimization](https://developers.esphome.io/blog/2025/11/06/action-framework-performance-optimization/) blog post for migration details. [#11704](https://github.com/esphome/esphome/pull/11704) - **Controller API**: Controllers now use global registry pattern. Method signatures changed to remove unused state parameters (e.g., `on_sensor_update(sensor::Sensor *obj)` instead of `on_sensor_update(sensor::Sensor *obj, float state)`). External controller implementations extremely rare. [#11772](https://github.com/esphome/esphome/pull/11772) @@ -449,7 +449,7 @@ The following changes affect external component developers. Standard YAML config ### Climate -See the [Climate Entity Class: FiniteSetMask and Flash Storage Optimizations](https://developers.esphome.io/blog/2025/11/climate-entity-class-memory-optimizations.html) blog post for migration details. +See the [Climate Entity Class: FiniteSetMask and Flash Storage Optimizations](https://developers.esphome.io/blog/2025/11/07/climate-entity-class-finitesetmask-and-flash-storage-optimizations/) blog post for migration details. - **Custom modes storage**: Changed from `std::set` to `FiniteSetMask` for supported modes, and from `std::vector` to `std::vector` for custom fan modes and presets. [#11466](https://github.com/esphome/esphome/pull/11466), [#11621](https://github.com/esphome/esphome/pull/11621) @@ -459,7 +459,7 @@ See the [Climate Entity Class: FiniteSetMask and Flash Storage Optimizations](ht ### Light -See the [Light Entity Class: Memory Optimizations](https://developers.esphome.io/blog/2025/11/light-entity-class-memory-optimizations.html) blog post for migration details. +See the [Light Entity Class: Memory Optimizations](https://developers.esphome.io/blog/2025/11/07/light-entity-class-memory-optimizations/) blog post for migration details. - **Color modes**: Replaced `std::set` with `ColorModeMask` bitmask class. [#11348](https://github.com/esphome/esphome/pull/11348) @@ -469,7 +469,7 @@ See the [Light Entity Class: Memory Optimizations](https://developers.esphome.io ### Fan -See the [Fan Entity Class: Preset Mode Flash Storage and Order Preservation](https://developers.esphome.io/blog/2025/11/fan-entity-class-memory-optimizations.html) blog post for migration details. +See the [Fan Entity Class: Preset Mode Flash Storage and Order Preservation](https://developers.esphome.io/blog/2025/11/07/fan-entity-class-preset-mode-flash-storage-and-order-preservation/) blog post for migration details. - **Preset modes**: Changed from `std::set` to `std::vector`. The `.preset_mode` public member has been removed - use `get_preset_mode()` for reading and `set_preset_mode_()` for writing in derived classes. [#11483](https://github.com/esphome/esphome/pull/11483), [#11632](https://github.com/esphome/esphome/pull/11632) @@ -477,7 +477,7 @@ See the [Fan Entity Class: Preset Mode Flash Storage and Order Preservation](htt ### Select -See the [Select Entity Class: Index-Based Operations and Flash Storage](https://developers.esphome.io/blog/2025/11/select-entity-class-memory-optimizations.html) blog post for migration details. +See the [Select Entity Class: Index-Based Operations and Flash Storage](https://developers.esphome.io/blog/2025/11/07/select-entity-class-index-based-operations-and-flash-storage/) blog post for migration details. - **Options storage**: Changed from `std::vector` to `FixedVector`. [#11514](https://github.com/esphome/esphome/pull/11514) @@ -487,7 +487,7 @@ See the [Select Entity Class: Index-Based Operations and Flash Storage](https:// ### Event -See the [Event Entity Class: Memory Optimizations](https://developers.esphome.io/blog/2025/11/event-entity-class-memory-optimizations.html) blog post for migration details. +See the [Event Entity Class: Memory Optimizations](https://developers.esphome.io/blog/2025/11/07/event-entity-class-memory-optimizations/) blog post for migration details. - **Event types storage**: Changed from `FixedVector` to `FixedVector`. The `last_event_type` field is now private - use `get_last_event_type()` getter instead. [#11463](https://github.com/esphome/esphome/pull/11463), [#11767](https://github.com/esphome/esphome/pull/11767) From 0679435a1563da2204f0abde5cdc26a77eec869a Mon Sep 17 00:00:00 2001 From: Clyde Stubbs <2366188+clydebarrow@users.noreply.github.com> Date: Fri, 21 Nov 2025 08:32:05 +1000 Subject: [PATCH 027/109] [mipi_rgb] Clarify use of transform (#5649) --- content/components/display/mipi_rgb.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/content/components/display/mipi_rgb.md b/content/components/display/mipi_rgb.md index 7e5ccca231..bd069c8564 100644 --- a/content/components/display/mipi_rgb.md +++ b/content/components/display/mipi_rgb.md @@ -134,9 +134,11 @@ Displays needing a custom init sequence require an SPI bus to be configured, plu `16bit` (default) or `18bit`. - **invert_colors** (*Optional*): Inverts the display colors, (white becomes black.) Defaults to false. - **color_order** (*Optional*): Should be one of `bgr` (default) or `rgb`. -- **transform** (*Optional*): Transform the display presentation using hardware. All defaults are `false`. - This option should not be used with `rotation`. For the `CUSTOM` model, use `transform: disabled` - if the display does not support it, which will prevent a `rotation` being translated to a hardware transform. +- **transform** (*Optional*): Transform the display presentation using hardware. + This is typically used only to correct for displays that have x or y drivers wired backwards. To rotate the + display the `rotation` option is preferred - it will automatically use hardware transform if possible. + The default values for the `mirror_x` and `mirror_y` options are model dependent. + For the `CUSTOM` model, use of `transform: disabled` will prevent a `rotation` being translated to a hardware transform. - **mirror_x** (*Optional*, boolean): If true, mirror the x-axis. - **mirror_y** (*Optional*, boolean): If true, mirror the y-axis. From 980a594ffea78897bea6f9a9c0090d07601286e0 Mon Sep 17 00:00:00 2001 From: Jonathan Swoboda <154711427+swoboda1337@users.noreply.github.com> Date: Thu, 20 Nov 2025 21:26:14 -0500 Subject: [PATCH 028/109] ESPNow fixes (#5658) --- content/components/espnow.md | 7 +++- content/components/packet_transport/espnow.md | 39 +++++++++++-------- 2 files changed, 28 insertions(+), 18 deletions(-) diff --git a/content/components/espnow.md b/content/components/espnow.md index 72c99f29cd..f6d2b44334 100644 --- a/content/components/espnow.md +++ b/content/components/espnow.md @@ -7,9 +7,11 @@ params: image: esp-now.svg --- -This component allows ESPHome to communicate with esp32 devices in a simple and unrestricted way. +The ESPNow component allows ESPHome to communicate with esp32 devices in a simple and unrestricted way. It enables the option to interact with other esp32 devices over the Espressif's ESP-NOW protocol, see -[documentation](https://docs.espressif.com/projects/esp-idf/en/stable/esp32/api-reference/network/esp_now.html) +[documentation](https://docs.espressif.com/projects/esp-idf/en/stable/esp32/api-reference/network/esp_now.html). +It can be used with the [Packet Transport Component](/components/packet_transport) to broadcast +sensor data, see [ESP-NOW Packet Transport Platform](/components/packet_transport/espnow). > [!NOTE] > Broadcasting data is not recommended, this will also reach devices not controlled by you that use the esp-now protocol. @@ -213,3 +215,4 @@ automatically add any peer that data is sent to. ## See Also - {{< apiref "espnow/espnow.h" "espnow/espnow.h" >}} +- {{< docref "/components/packet_transport/espnow" >}} diff --git a/content/components/packet_transport/espnow.md b/content/components/packet_transport/espnow.md index 4212522106..38ca25fc2a 100644 --- a/content/components/packet_transport/espnow.md +++ b/content/components/packet_transport/espnow.md @@ -9,12 +9,17 @@ params: {{< anchor "espnow-packet-transport" >}} -The [Packet Transport Component](#packet-transport) platform allows ESPHome nodes to directly communicate with each over a communication channel. The ESP-NOW implementation of the platform uses ESP-NOW as a communication medium. See the [Packet Transport Component](#packet-transport) and {{< docref "/components/espnow" >}} for more information. +The [Packet Transport Component](#packet-transport) platform allows ESPHome nodes to directly communicate with each +over a communication channel. The ESP-NOW implementation of the platform uses ESP-NOW as a communication medium. +See the [Packet Transport Component](#packet-transport) and {{< docref "/components/espnow" >}} for more information. -ESP-NOW provides low-latency, low-power wireless communication between ESP32 devices without requiring a Wi-Fi connection. This makes it ideal for battery-powered sensors or applications where Wi-Fi overhead would impact performance. +ESP-NOW provides low-latency, low-power wireless communication between ESP32 devices without requiring a Wi-Fi +connection. This makes it ideal for battery-powered sensors or applications where Wi-Fi overhead would impact +performance. > **Note:** -> ESP-NOW communication occurs independently of Wi-Fi. Devices can communicate via ESP-NOW even when Wi-Fi is disabled, making it suitable for power-sensitive applications. +> ESP-NOW communication occurs independently of Wi-Fi. Devices can communicate via ESP-NOW even when Wi-Fi is +> disabled, making it suitable for power-sensitive applications. ## Example Configuration @@ -44,7 +49,7 @@ sensor: - **espnow_id** (**Required**, [ID](#config-id)): The esp-now ID to use for transport. - **peer_address** (*Optional*, MAC Address): MAC address to send packets to. This can be either a specific peer address for point-to-point communication, or the broadcast address. Default FF:FF:FF:FF:FF:FF -- All other options from the [Packet Transport Component](#packet-transport) +- All other options from the [Packet Transport Component](/components/packet_transport) > **Note:** > Peers must be registered with the {{< docref "/components/espnow" >}} component before @@ -64,10 +69,12 @@ packet_transport: - sensor_id ``` -All devices with the broadcast address (`FF:FF:FF:FF:FF:FF`) registered as a peer will receive the packets. This is useful for hub-and-spoke topologies where multiple devices monitor a single sensor source. +All devices with the broadcast address (`FF:FF:FF:FF:FF:FF`) registered as a peer will receive the packets. +This is useful for hub-and-spoke topologies where multiple devices monitor a single sensor source. > **Warning:** -> Using broadcast mode increases ESP-NOW traffic on the radio channel, which may impact performance of other ESP-NOW devices in range. Use specific peer addresses whenever possible to minimize interference. +> Using broadcast mode increases ESP-NOW traffic on the radio channel, which may impact performance of other +> ESP-NOW devices in range. Use specific peer addresses whenever possible to minimize interference. ### Unicast Mode @@ -79,7 +86,8 @@ packet_transport: - sensor_id ``` -Only the specified peer receives the packets. This is more efficient for point-to-point communication and reduces radio channel congestion for neighboring ESP-NOW devices. +Only the specified peer receives the packets. This is more efficient for point-to-point communication and reduces +radio channel congestion for neighboring ESP-NOW devices. ## Simple Example @@ -90,11 +98,11 @@ This example shows two devices exchanging sensor data over ESP-NOW with encrypti ```yaml espnow: peers: - - mac_address: "AA:BB:CC:DD:EE:01" # Device 2 + - "AA:BB:CC:DD:EE:01" # Consumer mac address packet_transport: - platform: espnow - peer_address: "AA:BB:CC:DD:EE:01" # Send to Device 2 + peer_address: "AA:BB:CC:DD:EE:01" # Consumer mac address encryption: "MySecretKey123" sensors: - outdoor_temp @@ -111,13 +119,13 @@ sensor: ```yaml espnow: peers: - - mac_address: "AA:BB:CC:DD:EE:00" # Device 1 + - "AA:BB:CC:DD:EE:00" # Provider mac address packet_transport: - platform: espnow encryption: "MySecretKey123" providers: - - name: temp-sensor + - name: temp-sensor # Provider device name sensor: - platform: packet_transport @@ -136,7 +144,9 @@ This example shows a central hub receiving sensor data from multiple remote devi ```yaml espnow: peers: - - mac_address: "FF:FF:FF:FF:FF:FF" + - "AA:BB:CC:DD:EE:01" # room-sensor-1 mac address + - "AA:BB:CC:DD:EE:02" # room-sensor-2 mac address + - "AA:BB:CC:DD:EE:03" # outdoor-sensor mac address packet_transport: - platform: espnow @@ -167,12 +177,9 @@ sensor: ```yaml espnow: - peers: - - mac_address: "FF:FF:FF:FF:FF:FF" packet_transport: - platform: espnow - peer_address: "FF:FF:FF:FF:FF:FF" encryption: "HubSecret123" sensors: - temperature @@ -185,7 +192,7 @@ sensor: ## See Also -- [Packet Transport Component](#packet-transport) +- [Packet Transport Component](/components/packet_transport) - {{< docref "/components/espnow" >}} - {{< docref "/components/binary_sensor/packet_transport" >}} - {{< docref "/components/sensor/packet_transport" >}} From dcb4ad351e8d92b9b9652874d7d0e936359688e1 Mon Sep 17 00:00:00 2001 From: Clyde Stubbs <2366188+clydebarrow@users.noreply.github.com> Date: Sun, 23 Nov 2025 05:42:35 +1000 Subject: [PATCH 029/109] [lvgl] Enhance 'indicator' styling options description (#5661) Expanded the description of the 'indicator' styling options to include details about background properties and how to hide the pivot. --- content/components/lvgl/widgets.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/components/lvgl/widgets.md b/content/components/lvgl/widgets.md index 95035ece9b..976bb88104 100644 --- a/content/components/lvgl/widgets.md +++ b/content/components/lvgl/widgets.md @@ -1253,7 +1253,7 @@ The meter widget can visualize data in very flexible ways. It can use arcs, need - Style options from [Style properties](/components/lvgl#lvgl-styling) for the tick *lines* and *labels* using the [`line`](#lvgl-widget-line) and [`label`](#lvgl-widget-label) text style properties. - Style options from [Style properties](/components/lvgl#lvgl-styling) for the background of the meter, using the typical background properties. - **ticks** (*Optional*, dict): Styling options for the ticks *part*, which will be applied to the tick lines and labels using standard *line* and *label* styles. -- **indicator** (*Optional*, dict): Styling options for the indicator *part*, which will be applied to the needle line or image using standard *line* and *image* styles. +- **indicator** (*Optional*, dict): Styling options for the indicator *part*, which will be applied to the needle line or image using standard *line* and *image* styles. Background properties applied here will style the pivot (the dot in the middle of the meter) for example to hide the pivot use `bg_opa: transp` in the `indicator` style. - **items** (*Optional*, dict): Settings for the items *part*, which will be applied to arcs. > [!NOTE] From 908559193db39b30f004098392019dab8963ccdc Mon Sep 17 00:00:00 2001 From: Eloy Rodriguez Date: Sun, 23 Nov 2025 22:34:14 +0100 Subject: [PATCH 030/109] Update board ID link in esp32.md (#5662) --- content/components/esp32.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/components/esp32.md b/content/components/esp32.md index 87d5e0a0b0..d1dbce9bc4 100644 --- a/content/components/esp32.md +++ b/content/components/esp32.md @@ -22,7 +22,7 @@ esp32: This must match the hardware in use, or it will fail to flash. - **board** (*Optional*, string): The PlatformIO board ID that should be used. Choose the appropriate board from - [this list](https://registry.platformio.org/platforms/platformio/espressif32/boards?version=5.3.0) (the icon next + [this list](https://registry.platformio.org/platforms/platformio/espressif32/boards) (the icon next to the name can be used to copy the board ID). *This only affects pin aliases and some internal settings*; This setting is no longer recommended, `variant` should be used instead. From a68b952a0262572dfb6e14964873bbebe62d4fcb Mon Sep 17 00:00:00 2001 From: bdm310 Date: Mon, 24 Nov 2025 22:16:15 -0800 Subject: [PATCH 031/109] Add more lvgl arc update parameters (#5667) --- content/components/lvgl/widgets.md | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/content/components/lvgl/widgets.md b/content/components/lvgl/widgets.md index 976bb88104..225206edc0 100644 --- a/content/components/lvgl/widgets.md +++ b/content/components/lvgl/widgets.md @@ -282,16 +282,16 @@ The arc consists of a background and a foreground arc. The indicator foreground - **arc_opa** (*Optional*, [opacity](/components/lvgl#lvgl-opacity)): Opacity of the arc. - **arc_rounded** (*Optional*, boolean): Make the end points of the arcs rounded. `true` rounded, `false` perpendicular line ending. - **arc_width** (*Optional*, int16): Set the width of the arcs in pixels. -- **change_rate** (*Optional*, int8): If the arc is pressed the current value will set with a limited speed according to the set change rate. The change rate is defined in degree/second. Defaults to `720`. +- **change_rate** (*Optional*, uint16): Limits the speed at which the arc value changes when touched or dragged. The change rate is defined in degree/second. Defaults to `720`. - **end_angle** (*Optional*, 0-360): end angle of the arc background (see note). Defaults to `45`. - **indicator** (*Optional*, list): Settings for the indicator *part* to show the value. Supports a list of [styles](/components/lvgl#lvgl-styling) and state-based styles to customize. Draws *another arc using the arc style* properties. Its padding values are interpreted relative to the background arc. - **knob** (*Optional*, list): Settings for the knob *part* to control the value. Supports a list of [styles](/components/lvgl#lvgl-styling) and state-based styles to customize. Draws a handle on the end of the indicator using all background properties and padding values. With zero padding the knob size is the same as the indicator's width. Larger padding makes it larger, smaller padding makes it smaller. -- **max_value** (*Optional*, int8): Maximum value of the indicator. Defaults to `100`. -- **min_value** (*Optional*, int8): Minimum value of the indicator. Defaults to `0`. +- **max_value** (*Optional*, int16): Maximum value of the indicator. Defaults to `100`. +- **min_value** (*Optional*, int16): Minimum value of the indicator. Defaults to `0`. - **mode** (*Optional*, string): `NORMAL` : the indicator is drawn from the minimum value to the current. `REVERSE` : the indicator is drawn counter-clockwise from the maximum value to the current. `SYMMETRICAL` : the indicator is drawn from the middle point to the current value. Defaults to `NORMAL`. - **rotation** (*Optional*, 0-360): Offset to the 0 degree position. Defaults to `0.0`. - **start_angle** (*Optional*, 0-360): start angle of the arc background (see note). Defaults to `135`. -- **value** (*Optional*, int8): Actual value of the indicator at start, in `0` -`100` range. Defaults to `0`. +- **value** (*Optional*, int16): Actual value of the indicator at start, in `0` -`100` range. Defaults to `0`. - Any [Styling](/components/lvgl#lvgl-styling) and state-based option to override styles inherited from parent. The arc's size and position will respect the padding style properties. If the `adv_hittest` [flag](#lvgl-widget-flags) is enabled the arc can be clicked through in the middle. Clicks are recognized only on the ring of the background arc. @@ -303,7 +303,14 @@ If the `adv_hittest` [flag](#lvgl-widget-flags) is enabled the arc can be clicke - `lvgl.arc.update` [action](/automations/actions#actions-action) updates the widget styles and properties from the specific options above, just like the [lvgl.widget.update](#lvgl-automation-actions) action is used for the common styles, states or flags. - **id** (**Required**): The ID or a list of IDs of arc widgets to be updated. - - **value** (*Optional*, int8): New value of the indicator. + - **change_rate** (*Optional*, uint16): New change rate in degree/second. + - **end_angle** (*Optional*, 0-360): New end angle of the arc background. + - **max_value** (*Optional*, int16): New maximum value of the indicator. + - **min_value** (*Optional*, int16): New minimum value of the indicator. + - **mode** (*Optional*, string): New indicator mode. + - **rotation** (*Optional*, 0-360): New offset to the 0 degree position. + - **start_angle** (*Optional*, 0-360): New start angle of the arc background. + - **value** (*Optional*, int16): New value of the indicator. - Any [Styling](/components/lvgl#lvgl-styling) and state-based option to override styles inherited from parent. The arc's size and position will respect the padding style properties. **Triggers:** From 5e073bba08073543d76b104126f74e6dad5389be Mon Sep 17 00:00:00 2001 From: Jonathan Swoboda <154711427+swoboda1337@users.noreply.github.com> Date: Tue, 25 Nov 2025 13:32:33 -0500 Subject: [PATCH 032/109] [esp32] Use the IDF I2C implementation on Arduino (#5671) Co-authored-by: J. Nick Koston --- content/components/i2c.md | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/content/components/i2c.md b/content/components/i2c.md index 3e6c80827f..1cfcf353fe 100644 --- a/content/components/i2c.md +++ b/content/components/i2c.md @@ -10,9 +10,10 @@ params: {{< anchor "i2c" >}} This component sets up the I²C bus for your ESP32, ESP8266, RP2040 or NRF52. In order for these components -to work correctly, you need to define the I²C bus in your configuration. Please note the ESP -will enable its internal 10kΩ pullup resistors for these pins, so you usually don't need to -put on external ones. You can use multiple devices on one I²C bus as each device is given a +to work correctly, you need to define the I²C bus in your configuration. On ESP32 (both Arduino and ESP-IDF +frameworks), internal pullup resistors are enabled by default. On ESP8266, the internal 10kΩ pullup resistors +are always enabled. External pullups are still recommended for longer wire runs or multiple devices. +You can use multiple devices on one I²C bus as each device is given a unique address for communicating between it and the ESP. You can do this by hopping wires from the two lines (SDA and SCL) from each device board to the next device board or by connecting the wires from each device back to the two I²C pins on the ESP. @@ -43,8 +44,14 @@ i2c: NRF52 supports only `100kHz` and `400kHz`. - **timeout** (*Optional*, [Time](/guides/configuration-types#time)): Set the I²C bus timeout. - Defaults to the framework defaults (`100us` on `esp32` with `esp-idf`, `50ms` on `esp32` with `Arduino`, - `1s` on `esp8266` and `1s` on `rp2040` ). Maximum on `esp-idf` is 13ms. + Defaults to the framework defaults (`100us` on `esp32`, `1s` on `esp8266` and `1s` on `rp2040`). + Maximum on `esp32` is 13ms. + +- **sda_pullup_enabled** (*Optional*, boolean): Enable the internal pullup resistor for the SDA pin. + Defaults to `true`. Only available on ESP32. + +- **scl_pullup_enabled** (*Optional*, boolean): Enable the internal pullup resistor for the SCL pin. + Defaults to `true`. Only available on ESP32. - **id** (*Optional*, [ID](/guides/configuration-types#id)): Manually specify the ID for this I²C bus if you need multiple I²C buses. From 5d9de6623b80988deb1c8d08f0980c18f2fee109 Mon Sep 17 00:00:00 2001 From: Clyde Stubbs <2366188+clydebarrow@users.noreply.github.com> Date: Wed, 26 Nov 2025 05:08:42 +1000 Subject: [PATCH 033/109] [lvgl] Document `multiple_widgets_per_cell` grid layout option (#5674) --- content/components/lvgl/layouts.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/content/components/lvgl/layouts.md b/content/components/lvgl/layouts.md index a4bf537309..73a3ec4a82 100644 --- a/content/components/lvgl/layouts.md +++ b/content/components/lvgl/layouts.md @@ -156,11 +156,15 @@ distribute the free space proportionally. them. If one of the items has a value of 2, that one would take up twice as much of the space as either one of the others. +**Cell positioning:** + Child widgets can be placed on the grid using the `grid_cell_row_pos` and `grid_cell_column_pos` configuration variables. If either is specified both must be specified. If neither is specified the widget will be placed in the first available position, in a row-major order. Row and column spans will be taken into account when reserving space. +Two or more widgets may not be explicitly assigned the same row and column positions unless the option +`multiple_widgets_per_cell` is set to `true`. #### Shorthand @@ -181,9 +185,9 @@ columns, with all rows and columns of equal size. For example `layout: 2x3` is a pixels. Possible options below. - **pad_row** (*Optional*, int16): Set the padding between the rows, in pixels. - **pad_column** (*Optional*, int16): Set the padding between the columns, in pixels. +- **multiple_widgets_per_cell** (*Optional*, bool): If true, multiple widgets can be placed in the same cell. Defaults to `false`. -In a grid layout, *all the widgets placed on the grid* can have some additional configuration variables to help with -placement: +In a grid layout, all child widgets placed on the grid have additional configuration options available: - **grid_cell_row_pos** (*Optional*, int16): Position of the widget, in which row to appear (0 based count). - **grid_cell_column_pos** (*Optional*, int16): Position of the widget, in which column to appear (0 based count). From ad61504a252f7ca4f5a7b3a022e5286b7738d7de Mon Sep 17 00:00:00 2001 From: Jonathan Swoboda <154711427+swoboda1337@users.noreply.github.com> Date: Tue, 25 Nov 2025 14:45:41 -0500 Subject: [PATCH 034/109] Improve handling of cross page links (#5672) * Fix global links * Fix * Fix * Fix legacy rst stuff * Look only for links, ignore code and examples --------- Co-authored-by: Clyde Stubbs <2366188+clydebarrow@users.noreply.github.com> --- Makefile | 2 - content/changelog/2025.10.0.md | 6 +- content/changelog/2025.11.0.md | 14 +- content/components/climate/thermostat.md | 8 +- content/components/lvgl/_index.md | 10 +- content/components/lvgl/layouts.md | 10 +- content/components/lvgl/widgets.md | 8 +- content/components/openthread.md | 2 +- content/components/ota/esphome.md | 2 +- content/components/packet_transport/espnow.md | 10 +- content/components/remote_transmitter.md | 4 +- content/components/sensor/bh1900nux.md | 8 +- content/components/sensor/gdk101.md | 2 +- content/components/sensor/mcp3221.md | 8 +- content/components/sensor/thermopro_ble.md | 10 +- content/components/time/bm8563.md | 12 +- content/components/time/rx8130.md | 6 +- content/components/tinyusb.md | 2 +- content/components/update/esp32_hosted.md | 2 +- content/components/web_server.md | 2 +- content/cookbook/lvgl.md | 2 +- lint.py | 240 +++++++++++++----- script/md_anchors.py | 131 ---------- .../layouts/_default/_markup/render-link.html | 41 --- 24 files changed, 245 insertions(+), 297 deletions(-) delete mode 100755 script/md_anchors.py delete mode 100644 themes/esphome-theme/layouts/_default/_markup/render-link.html diff --git a/Makefile b/Makefile index cffdb81f0f..0cd097391b 100644 --- a/Makefile +++ b/Makefile @@ -27,7 +27,6 @@ check-links: anchors anchors: repo-data $(PAGEFIND) -s pagefind-bootstrap hugo --environment anchors - python3 script/md_anchors.py repo-data: directories mkdir -p data/automations @@ -54,7 +53,6 @@ convert-branch-in-place: netlify: repo-data $(PAGEFIND) -s pagefind-bootstrap hugo --environment anchors - python3 script/md_anchors.py hugo --minify $(PAGEFIND) # rerun hugo to incorporate generated index diff --git a/content/changelog/2025.10.0.md b/content/changelog/2025.10.0.md index f513454516..6a38d150c0 100644 --- a/content/changelog/2025.10.0.md +++ b/content/changelog/2025.10.0.md @@ -159,7 +159,7 @@ If you manage multiple devices, the dashboard will feel noticeably faster and mo ## Device Onboarding Improvements -Getting your ESPHome devices online has never been easier. This release brings major improvements to the initial setup experience, particularly for ESP32-IDF devices and the [Made for ESPHome](https://esphome.io/guides/made_for_esphome/) program. +Getting your ESPHome devices online has never been easier. This release brings major improvements to the initial setup experience, particularly for ESP32-IDF devices and the [Made for ESPHome](/guides/made_for_esphome/) program. ### Captive Portal for ESP-IDF @@ -179,9 +179,9 @@ This brings ESP-IDF up to feature parity with Arduino for onboarding, and since **Why passive scanning matters:** Many home automation systems and BLE scanners only support passive scanning (not active scanning). Making the device name visible to passive scanners means your devices show up in more scanning apps and are easier to identify during setup. -These improvements directly support the [Made for ESPHome program](https://esphome.io/guides/made_for_esphome/), which requires Improv provisioning via BLE for Wi-Fi projects to ensure a consistent, high-quality setup experience across all ESPHome-compatible products. +These improvements directly support the [Made for ESPHome program](/guides/made_for_esphome/), which requires Improv provisioning via BLE for Wi-Fi projects to ensure a consistent, high-quality setup experience across all ESPHome-compatible products. -The Made for ESPHome program requires Improv BLE provisioning for Wi-Fi projects. See the [certification requirements](https://esphome.io/guides/made_for_esphome/) for details. +The Made for ESPHome program requires Improv BLE provisioning for Wi-Fi projects. See the [certification requirements](/guides/made_for_esphome/) for details. ## Home Assistant Action Responses diff --git a/content/changelog/2025.11.0.md b/content/changelog/2025.11.0.md index 33266cdd13..c16039e76c 100644 --- a/content/changelog/2025.11.0.md +++ b/content/changelog/2025.11.0.md @@ -142,13 +142,13 @@ Added `ignore_not_found` option (default `true`) to allow disabling `CONFIG_SPIR **7 New Sensor/Device Components:** -- [HDC2010](https://esphome.io/components/sensor/hdc2010.html) ([#6674](https://github.com/esphome/esphome/pull/6674)) - Texas Instruments temperature and humidity sensor -- [MCP3221](https://esphome.io/components/sensor/mcp3221.html) ([#7764](https://github.com/esphome/esphome/pull/7764)) - I2C A-D converter with configurable reference voltage -- [HLK-FM22X](https://esphome.io/components/hlk_fm22x.html) ([#8059](https://github.com/esphome/esphome/pull/8059)) - Face recognition module family -- [BH1900NUX](https://esphome.io/components/sensor/bh1900nux.html) ([#8631](https://github.com/esphome/esphome/pull/8631)) - Rohm Semiconductor temperature sensor -- [RX8130](https://esphome.io/components/time/rx8130.html) ([#10511](https://github.com/esphome/esphome/pull/10511)) - Epson RTC chip (used in M5Stack devices) -- [BLE NUS Logger](https://esphome.io/components/logger.html#ble-logging) ([#9846](https://github.com/esphome/esphome/pull/9846)) - Logging over BLE for nRF52 platform -- [TinyUSB](https://esphome.io/components/tinyusb.html) ([#11678](https://github.com/esphome/esphome/pull/11678)) - USB device functionality foundation for ESP32-S2/S3 +- [HDC2010](/components/sensor/hdc2010) ([#6674](https://github.com/esphome/esphome/pull/6674)) - Texas Instruments temperature and humidity sensor +- [MCP3221](/components/sensor/mcp3221) ([#7764](https://github.com/esphome/esphome/pull/7764)) - I2C A-D converter with configurable reference voltage +- [HLK-FM22X](/components/hlk_fm22x) ([#8059](https://github.com/esphome/esphome/pull/8059)) - Face recognition module family +- [BH1900NUX](/components/sensor/bh1900nux) ([#8631](https://github.com/esphome/esphome/pull/8631)) - Rohm Semiconductor temperature sensor +- [RX8130](/components/time/rx8130) ([#10511](https://github.com/esphome/esphome/pull/10511)) - Epson RTC chip (used in M5Stack devices) +- [BLE NUS Logger](/components/ble_nus) ([#9846](https://github.com/esphome/esphome/pull/9846)) - Logging over BLE for nRF52 platform +- [TinyUSB](/components/tinyusb) ([#11678](https://github.com/esphome/esphome/pull/11678)) - USB device functionality foundation for ESP32-S2/S3 **Extended Hardware Support:** diff --git a/content/components/climate/thermostat.md b/content/components/climate/thermostat.md index d510832cd7..57acd72ea0 100644 --- a/content/components/climate/thermostat.md +++ b/content/components/climate/thermostat.md @@ -301,13 +301,13 @@ These should be used to control the fan only, if available. These are triggered when the humidity control action is changed by the thermostat controller. It can trigger actions to activate humidification **or** dehumidification. -- **humidity_control_dehumidify_action** (*Optional*, [Action](#config-action)): The action to call when +- **humidity_control_dehumidify_action** (*Optional*, [Action](/automations/actions#config-action)): The action to call when dehumidification is required. -- **humidity_control_humidify_action** (*Optional*, [Action](#config-action)): The action to call when +- **humidity_control_humidify_action** (*Optional*, [Action](/automations/actions#config-action)): The action to call when humidification is required. -- **humidity_control_off_action** (*Optional*, [Action](#config-action)): The action to call when +- **humidity_control_off_action** (*Optional*, [Action](/automations/actions#config-action)): The action to call when (de)humidification should stop. This action is **required** when either of the above actions are configured. ## Advanced Configuration/Behavior @@ -562,7 +562,7 @@ the range of allowed temperature values in the thermostat component. See {{< doc before calling the idle [action](/automations/actions#all-actions). Defaults to 0.5 °C. - **humidity_hysteresis** (*Optional*, float): The maximum humidity differential (above/below the set point) - before calling the respective humidity control [action](#config-action). Defaults to 1%. + before calling the respective humidity control [action](/automations/actions#config-action). Defaults to 1%. > [!NOTE] > diff --git a/content/components/lvgl/_index.md b/content/components/lvgl/_index.md index db14270010..830bd72096 100644 --- a/content/components/lvgl/_index.md +++ b/content/components/lvgl/_index.md @@ -147,15 +147,15 @@ The following configuration variables apply to the main `lvgl` component, in ord - **widgets** (*Optional*, list): A list of {{< docref "/components/lvgl/widgets" >}} to be drawn on the root display. May not be used if `pages` (below) is configured. - **pages** (*Optional*, list): A list of page IDs. Each page acts as a parent for widgets placed on it. May not be used with `widgets` (above). Options for each page: - **skip** (*Optional*, boolean): Option to skip this page when navigating between them with [`lvgl.page.next`, `lvgl.page.previous`](#lvgl-page-next-previous-action). - - **layout** (*Optional*): See [Layouts](#lvgl-layouts) for details. Defaults to `NONE`. + - **layout** (*Optional*): See [Layouts](/components/lvgl/layouts#lvgl-layouts) for details. Defaults to `NONE`. - **widgets** (*Optional*, list): A list of {{< docref "/components/lvgl/widgets" >}} to be drawn on the page. - All other options from [Style properties](#lvgl-styling) to be applied to this page. - **page_wrap** (*Optional*, boolean): Wrap from the last to the first page when navigating between them with [`lvgl.page.next`, `lvgl.page.previous`](#lvgl-page-next-previous-action). Defaults to `true`. - **top_layer** (*Optional*, list): A special kind of *Always on Top* page, which acts as a parent for widgets placed on it. It's shown above all the pages, which may be useful for widgets which always need to be visible. - - **layout** (*Optional*): See [Layouts](#lvgl-layouts) for details. Defaults to `NONE`. + - **layout** (*Optional*): See [Layouts](/components/lvgl/layouts#lvgl-layouts) for details. Defaults to `NONE`. - **widgets** (*Optional*, list): A list of {{< docref "/components/lvgl/widgets" >}} to be drawn on the page. - All other options from [Style properties](#lvgl-styling) to be applied to this page. -- **layout** (*Optional*): See [Layouts](#lvgl-layouts) for details. Defaults to `NONE`. +- **layout** (*Optional*): See [Layouts](/components/lvgl/layouts#lvgl-layouts) for details. Defaults to `NONE`. - All other options from [Style properties](#lvgl-styling) to be applied to all widgets directly. **Example:** @@ -832,11 +832,11 @@ This [trigger](/components/lvgl/widgets#lvgl-automation-triggers) is triggered a ### `on_draw_start` -This [trigger](#lvgl-automation-triggers) is executed before each LVGL drawing operation. +This [trigger](/components/lvgl/widgets#lvgl-automation-triggers) is executed before each LVGL drawing operation. ### `on_draw_end` -This [trigger](#lvgl-automation-triggers) is executed after LVGL has completed drawing all updated screen elements. It +This [trigger](/components/lvgl/widgets#lvgl-automation-triggers) is executed after LVGL has completed drawing all updated screen elements. It may be used for example to trigger an update of a display component like an e-paper screen that requires the buffer to be sent to the display for it to be updated. diff --git a/content/components/lvgl/layouts.md b/content/components/lvgl/layouts.md index 73a3ec4a82..1d6f3d1583 100644 --- a/content/components/lvgl/layouts.md +++ b/content/components/lvgl/layouts.md @@ -14,12 +14,12 @@ The layout configuration options are applied to any parent widget or page, influ The position and size calculated by the layout override the *normal* `x`, `y`, `width`, and `height` settings of the children. -Check out [Flex layout positioning](#lvgl-cookbook-flex), [Grid layout positioning](#lvgl-cookbook-grid) -and [Weather forecast panel](#lvgl-cookbook-weather) in the Cookbook for examples which demonstrate how to automate +Check out [Flex layout positioning](/cookbook/lvgl#lvgl-cookbook-flex), [Grid layout positioning](/cookbook/lvgl#lvgl-cookbook-grid) +and [Weather forecast panel](/cookbook/lvgl#lvgl-cookbook-weather) in the Cookbook for examples which demonstrate how to automate widget positioning, potentially reducing the size of your device's YAML configuration, and saving you from lots of manual calculations. -The `hidden`, `ignore_layout` and `floating` [flags](#lvgl-widget-flags) can be used on widgets to ignore them in layout +The `hidden`, `ignore_layout` and `floating` [flags](/components/lvgl/widgets#lvgl-widget-flags) can be used on widgets to ignore them in layout calculations. ### Configuration variables @@ -192,9 +192,9 @@ In a grid layout, all child widgets placed on the grid have additional configura - **grid_cell_row_pos** (*Optional*, int16): Position of the widget, in which row to appear (0 based count). - **grid_cell_column_pos** (*Optional*, int16): Position of the widget, in which column to appear (0 based count). - **grid_cell_x_align** (*Optional*, string): How to align the widget horizontally within the cell. Can also be applied - through [Style properties](#lvgl-styling). Possible options below. + through [Style properties](/components/lvgl#lvgl-styling). Possible options below. - **grid_cell_y_align** (*Optional*, string): How to align the widget vertically within the cell. Can also be applied - through [Style properties](#lvgl-styling). Possible options below. + through [Style properties](/components/lvgl#lvgl-styling). Possible options below. - **grid_cell_row_span** (*Optional*, int16): How many rows to span across the widget. Defaults to `1`. - **grid_cell_column_span** (*Optional*, int16): How many columns to span across the widget. Defaults to `1`. diff --git a/content/components/lvgl/widgets.md b/content/components/lvgl/widgets.md index 225206edc0..fcb2aa6fe4 100644 --- a/content/components/lvgl/widgets.md +++ b/content/components/lvgl/widgets.md @@ -22,7 +22,7 @@ The properties below are common to all widgets. > [!NOTE] > By default, the `x` and `y` coordinates are measured from the *top left corner* of the parent's content area. [Important](/components/lvgl#lvgl-styling): content area starts *after the padding* thus if the parent has a non-zero padding value, position will be shifted with that. Percentage values are calculated from the parent's content area size. > -> If specifying `align`, `x` and `y` can be used as an offset to the calculated position (can also be negative). They are ignored if [Layouts](/components/lvgl#lvgl-layouts) are used on the parent. +> If specifying `align`, `x` and `y` can be used as an offset to the calculated position (can also be negative). They are ignored if [Layouts](/components/lvgl/layouts#lvgl-layouts) are used on the parent. - **height** (*Optional*): Height of the widget in pixels or a percentage, or `SIZE_CONTENT`. - **width** (*Optional*): Width of the widget in pixels or a percentage, or `SIZE_CONTENT`. @@ -49,7 +49,7 @@ The properties below are common to all widgets. {{< img src="lvgl_align.png" alt="Image" class="align-center" >}} - **group** (*Optional*, string): The name of the group of widgets which will interact with a {{< docref "/components/sensor/rotary_encoder" >}}. In every group there is always one focused widget which receives the encoder actions. You need to associate an input device with a group. An input device can send key events to only one group but a group can receive data from more than one input device. If no group is specified for a widget or an encoder, an unnamed default group will be assigned, so in most cases where only one encoder is used it will not be necessary to explicitly specify a group. -- **layout** (*Optional*): See [Layouts](/components/lvgl#lvgl-layouts) for details. Defaults to `NONE`. +- **layout** (*Optional*): See [Layouts](/components/lvgl/layouts#lvgl-layouts) for details. Defaults to `NONE`. - **styles** (*Optional*, [ID](/guides/configuration-types#id)): The ID of a *style definition* from the main component configuration to override the theme styles. - **theme** (*Optional*, list): A list of styles to apply to the widget and children. Same configuration option as at the main component. - **widgets** (*Optional*, list): A list of LVGL widgets to be drawn as children of this widget. Same configuration option as at the main component. @@ -815,7 +815,7 @@ it is invisible. It has a default width and height of 100%. **Configuration variables:** -- Style options from [Style properties](#lvgl-styling). +- Style options from [Style properties](/components/lvgl#lvgl-styling). **Triggers:** @@ -1047,7 +1047,7 @@ A label is the basic widget type that is used to display text. **Configuration variables:** -- **long_mode** (*Optional*, list): By default, the width and height of the label is set to `SIZE_CONTENT`. Therefore, the size of the label is automatically expanded to the text size. Otherwise, if the `width` or `height` are explicitly set (or set by [Layouts](/components/lvgl#lvgl-layouts)), the lines wider than the label's width can be manipulated according to the long mode policies below. These policies can be applied if the height of the text is greater than the height of the label. +- **long_mode** (*Optional*, list): By default, the width and height of the label is set to `SIZE_CONTENT`. Therefore, the size of the label is automatically expanded to the text size. Otherwise, if the `width` or `height` are explicitly set (or set by [Layouts](/components/lvgl/layouts#lvgl-layouts)), the lines wider than the label's width can be manipulated according to the long mode policies below. These policies can be applied if the height of the text is greater than the height of the label. - `WRAP` : Wrap lines which are too long. If the height is `SIZE_CONTENT`, the label's height will be expanded, otherwise the text will be clipped (default). - `DOT` : Replaces the last 3 characters from bottom right corner of the label with dots. - `SCROLL` : If the text is wider than the label, scroll the text horizontally back and forth. If it's higher, scroll vertically. Text will scroll in only one direction; horizontal scrolling has higher precedence. diff --git a/content/components/openthread.md b/content/components/openthread.md index 8a52f2ec10..6f1162d3b9 100644 --- a/content/components/openthread.md +++ b/content/components/openthread.md @@ -64,7 +64,7 @@ openthread: - **mesh_local_prefix** (ipv6network): Used to build Mesh-Local IPv6 addresses (ML-EIDs), which are unique to each Thread device within the network partition - **use_address** (*Optional*, string): Manually override what address to use to connect to the ESP. Defaults to auto-generated value. -- **poll_period** (*Optional*, [Time](#config-time)): When Poll_Period is set on an MTD device, the parent router will enqueue any messages and wait for the child to submit a poll data request +- **poll_period** (*Optional*, [Time](/guides/configuration-types#config-time)): When Poll_Period is set on an MTD device, the parent router will enqueue any messages and wait for the child to submit a poll data request > [!NOTE] > esphome.ota does not work when poll_period > 0, instead use http_request.ota, timeout and watchdog_timeout need to be tested to find the correct values. Values greater than 100sec may be required. diff --git a/content/components/ota/esphome.md b/content/components/ota/esphome.md index d90d55c7af..655e003b9d 100644 --- a/content/components/ota/esphome.md +++ b/content/components/ota/esphome.md @@ -31,7 +31,7 @@ ota: - **password** (*Optional*, string): The password to use for updates. > [!IMPORTANT] -> Always use strong, unique passwords for OTA updates. See the [Security Best Practices](/guides/security_best_practices#ota-password-protection) guide for more information. +> Always use strong, unique passwords for OTA updates. See the [Security Best Practices](/guides/security_best_practices#3-ota-password-protection) guide for more information. - **port** (*Optional*, int): The port to use for OTA updates. Defaults: diff --git a/content/components/packet_transport/espnow.md b/content/components/packet_transport/espnow.md index 38ca25fc2a..d479e993f1 100644 --- a/content/components/packet_transport/espnow.md +++ b/content/components/packet_transport/espnow.md @@ -9,9 +9,9 @@ params: {{< anchor "espnow-packet-transport" >}} -The [Packet Transport Component](#packet-transport) platform allows ESPHome nodes to directly communicate with each +The [Packet Transport Component](/components/packet_transport) platform allows ESPHome nodes to directly communicate with each over a communication channel. The ESP-NOW implementation of the platform uses ESP-NOW as a communication medium. -See the [Packet Transport Component](#packet-transport) and {{< docref "/components/espnow" >}} for more information. +See the [Packet Transport Component](/components/packet_transport) and {{< docref "/components/espnow" >}} for more information. ESP-NOW provides low-latency, low-power wireless communication between ESP32 devices without requiring a Wi-Fi connection. This makes it ideal for battery-powered sensors or applications where Wi-Fi overhead would impact @@ -46,7 +46,7 @@ sensor: ## Configuration Variables -- **espnow_id** (**Required**, [ID](#config-id)): The esp-now ID to use for transport. +- **espnow_id** (**Required**, [ID](/guides/configuration-types#config-id)): The esp-now ID to use for transport. - **peer_address** (*Optional*, MAC Address): MAC address to send packets to. This can be either a specific peer address for point-to-point communication, or the broadcast address. Default FF:FF:FF:FF:FF:FF - All other options from the [Packet Transport Component](/components/packet_transport) @@ -196,6 +196,6 @@ sensor: - {{< docref "/components/espnow" >}} - {{< docref "/components/binary_sensor/packet_transport" >}} - {{< docref "/components/sensor/packet_transport" >}} -- [UDP Packet Transport](#udp-packet-transport) -- [Automation](#automation) +- [UDP Packet Transport](/components/packet_transport/udp#udp-packet-transport) +- [Automation](/automations#automation) - {{< apiref "packet_transport/espnow_transport.h" "packet_transport/espnow_transport.h" >}} diff --git a/content/components/remote_transmitter.md b/content/components/remote_transmitter.md index e02ca0f7cb..37ed63f367 100644 --- a/content/components/remote_transmitter.md +++ b/content/components/remote_transmitter.md @@ -382,7 +382,7 @@ on_...: ### `remote_transmitter.transmit_dyson` **Action** -This [action](#config-action) sends a Dyson cool AM07 infrared protocol code to a remote transmitter. +This [action](/automations/actions#config-action) sends a Dyson cool AM07 infrared protocol code to a remote transmitter. ```yaml on_...: @@ -957,7 +957,7 @@ on_...: ### `remote_transmitter.transmit_symphony` **Action** -This [action](#config-action) sends a Symphony infrared remote code to a remote transmitter. +This [action](/automations/actions#config-action) sends a Symphony infrared remote code to a remote transmitter. It transmits constant bit-time frames with a footer gap. Physical Symphony remotes typically send the same frame twice separated by a ~35 ms gap. Use `command_repeats` to control how many identical frames are sent; defaults to 2. diff --git a/content/components/sensor/bh1900nux.md b/content/components/sensor/bh1900nux.md index c1ce98701a..b3b07b80d5 100644 --- a/content/components/sensor/bh1900nux.md +++ b/content/components/sensor/bh1900nux.md @@ -10,7 +10,7 @@ params: The `bh1900nux` sensor platform allows you to use the **BH1900NUX** ([datasheet](https://fscdn.rohm.com/en/products/databook/datasheet/ic/sensor/temperature/bh1900nux-e.pdf)) **temperature sensor** from Rohm Semiconductor with ESPHome. -The [I²C bus](#i2c) must be set up in your configuration for this sensor to work. +The [I²C bus](/components/i2c) must be set up in your configuration for this sensor to work. {{< img src="bh1900nux-evk-001.png" alt="BH1900NUX-EVK-001 Evaluation Board" class="align-center" >}} @@ -27,9 +27,9 @@ sensor: - **address** (*Optional*, int): Manually specify the I²C address of the sensor. Defaults to `0x48`. -- **update_interval** (*Optional*, [Time](#config-time)): The interval to check the sensor. Defaults to `60s`. +- **update_interval** (*Optional*, [Time](/guides/configuration-types#config-time)): The interval to check the sensor. Defaults to `60s`. -- All other options from [Sensor](#config-sensor). +- All other options from [Sensor](/components/sensor#config-sensor). > [!NOTE] > The following features are **not supported**: `ALERT` pin functionality and `TLOW`/`THIGH` configuration (thermostat mode). @@ -52,6 +52,6 @@ This allows **8 possible addresses**: ## See Also -- [Sensor Filters](#sensor-filters) +- [Sensor Filters](/components/sensor#sensor-filters) - [Product Page](https://www.rohm.com/products/sensors-mems/temperature-sensor-ics/bh1900nux-product) - [BH1900NUX Datasheet](https://fscdn.rohm.com/en/products/databook/datasheet/ic/sensor/temperature/bh1900nux-e.pdf) diff --git a/content/components/sensor/gdk101.md b/content/components/sensor/gdk101.md index 6316a43e34..1d117a77bc 100644 --- a/content/components/sensor/gdk101.md +++ b/content/components/sensor/gdk101.md @@ -116,7 +116,7 @@ Text sensor that reports firmware version of the sensor. Configuration variables: - **version** (**Required**): Firmware version of the module. - All options from [Text Sensor](#config-text_sensor). + All options from [Text Sensor](/components/text_sensor#config-text_sensor). ## Sensor Status diff --git a/content/components/sensor/mcp3221.md b/content/components/sensor/mcp3221.md index 65ecfd9916..9b7d458d66 100644 --- a/content/components/sensor/mcp3221.md +++ b/content/components/sensor/mcp3221.md @@ -17,7 +17,7 @@ The Microchip Technology Inc. `mcp3221` sensor platform allows you to use your M The MCP3221 sensor platform allows you to use your MCP3221 ADC ([datasheet](https://ww1.microchip.com/downloads/en/devicedoc/20001732e.pdf)) with ESPHome. -It uses the [I2C Bus](#i2c) for communication. +It uses the [I2C Bus](/components/i2c) for communication. Connect power pins (``VCC``/``GND``, 2.7V to 5.5V) and I2C (``SDA``/``SCL``). @@ -34,10 +34,10 @@ sensor: - **address** (*Optional*, int): Defaults to ``0x48``. ``0b1001XXX`` - ``X``: See packaging for the last 3 bits - **reference_voltage** (*Optional*, float): The reference voltage. Should be ``VCC``, range 2.7V to 5.5V -- **update_interval** (*Optional*, [Time](#config-time)): The interval to check the sensor. Defaults to ``60s``. -- All other options from [Sensor](#config-sensor). +- **update_interval** (*Optional*, [Time](/guides/configuration-types#config-time)): The interval to check the sensor. Defaults to ``60s``. +- All other options from [Sensor](/components/sensor#config-sensor). ## See Also -- [I2C Bus](#i2c) +- [I2C Bus](/components/i2c) - {{< apiref "mcp3221/mcp3221_sensor.h" >}} diff --git a/content/components/sensor/thermopro_ble.md b/content/components/sensor/thermopro_ble.md index e23e83d5fe..60c94b2544 100644 --- a/content/components/sensor/thermopro_ble.md +++ b/content/components/sensor/thermopro_ble.md @@ -61,24 +61,24 @@ sensor: - **temperature** (*Optional*): The information for the temperature sensor. - - All options from [Sensor](#config-sensor). + - All options from [Sensor](/components/sensor#config-sensor). - **external_temperature** (*Optional*): The information for the external/probe temperature sensor. Some models (TP972, TP970, TP96x) support dual temperature readings - one internal and one from an external probe. - - All options from [Sensor](#config-sensor). + - All options from [Sensor](/components/sensor#config-sensor). - **humidity** (*Optional*): The information for the humidity sensor. Only available on TP3xx devices. - - All options from [Sensor](#config-sensor). + - All options from [Sensor](/components/sensor#config-sensor). - **battery_level** (*Optional*): The information for the battery level sensor. - - All options from [Sensor](#config-sensor). + - All options from [Sensor](/components/sensor#config-sensor). - **signal_strength** (*Optional*): The information for the signal strength (RSSI) sensor. - - All options from [Sensor](#config-sensor). + - All options from [Sensor](/components/sensor#config-sensor). ## Setting Up Devices diff --git a/content/components/time/bm8563.md b/content/components/time/bm8563.md index f35b18292b..0ed84e9769 100644 --- a/content/components/time/bm8563.md +++ b/content/components/time/bm8563.md @@ -15,13 +15,13 @@ time: ## Configuration variables - **address** (*Optional*, int): Manually specify the I²C address of the RTC. Defaults to `0x51`. -- All other options from [Base Time Configuration](#base_time_config). +- All other options from [Base Time Configuration](/components/time#base_time_config). {{< anchor "bm8563-write_time_action" >}} ## `bm8563.write_time` Action -This [Action](#config-action) triggers a synchronization of the current system time to the RTC hardware. +This [Action](/automations/actions#config-action) triggers a synchronization of the current system time to the RTC hardware. > [!NOTE] > The BM8563 component will *not* write the RTC clock if not triggered *explicitly* by this action. @@ -39,7 +39,7 @@ on_...: ## `bm8563.read_time` Action -This [Action](#config-action) triggers a synchronization of the current system time from the RTC hardware. +This [Action](/automations/actions#config-action) triggers a synchronization of the current system time from the RTC hardware. > [!NOTE] > The BM8563 component will automatically read the RTC clock every 15 minutes by default and synchronize the @@ -59,7 +59,7 @@ on_...: ## `bm8563.start_timer` Action -This [Action](#config-action) starts the RTC timer. +This [Action](/automations/actions#config-action) starts the RTC timer. ```yaml on_...: @@ -74,8 +74,8 @@ on_...: Configuration options: -- **duration** (**Required**, [Time](#config-time)): The time duration for the timer. -- **id** (*Optional*, [ID](#config-id)): Manually specify the ID of the BM8563 component if you have multiple components. +- **duration** (**Required**, [Time](/guides/configuration-types#config-time)): The time duration for the timer. +- **id** (*Optional*, [ID](/guides/configuration-types#config-id)): Manually specify the ID of the BM8563 component if you have multiple components. {{< anchor "bm8563-config_example" >}} diff --git a/content/components/time/rx8130.md b/content/components/time/rx8130.md index f57a12449d..47bf1a9896 100644 --- a/content/components/time/rx8130.md +++ b/content/components/time/rx8130.md @@ -15,13 +15,13 @@ time: ## Configuration variables - **address** (*Optional*, int): Manually specify the I²C address of the RTC. Defaults to `0x32`. -- All other options from [Base Time Configuration](#base_time_config). +- All other options from [Base Time Configuration](/components/time#base_time_config). {{< anchor "rx8130-write_time_action" >}} ## `rx8130.write_time` Action -This [Action](#config-action) triggers a synchronization of the current system time to the RTC hardware. +This [Action](/automations/actions#config-action) triggers a synchronization of the current system time to the RTC hardware. > [!NOTE] > The RX8130 component will *not* write to the RTC clock if not triggered *explicitly* by this action. @@ -39,7 +39,7 @@ on_...: ## `rx8130.read_time` Action -This [Action](#config-action) triggers a synchronization of the current system time from the RTC hardware. +This [Action](/automations/actions#config-action) triggers a synchronization of the current system time from the RTC hardware. > [!NOTE] > The RX8130 component will automatically read the RTC clock every 15 minutes by default and synchronize the diff --git a/content/components/tinyusb.md b/content/components/tinyusb.md index b59f909fcc..66c69f1de6 100644 --- a/content/components/tinyusb.md +++ b/content/components/tinyusb.md @@ -31,7 +31,7 @@ tinyusb: ## Configuration variables -- **id** (*Optional*, [ID](#config-id)): Manually specify the ID for this component. +- **id** (*Optional*, [ID](/guides/configuration-types#config-id)): Manually specify the ID for this component. - **usb_product_id** (*Optional*, int): USB product identifier. Defaults to `0x4001`. - **usb_vendor_id** (*Optional*, int): USB vendor identifier. Defaults to `0x303A` (Espressif Systems). - **usb_lang_id** (*Optional*, int): USB language identifier. Defaults to `0x0409` (English - United States). diff --git a/content/components/update/esp32_hosted.md b/content/components/update/esp32_hosted.md index fe3207b908..d2ca649535 100644 --- a/content/components/update/esp32_hosted.md +++ b/content/components/update/esp32_hosted.md @@ -45,7 +45,7 @@ update: - **sha256** (**Required**, string): SHA256 hash of the firmware binary file. This is used to verify the integrity of the firmware both at compile time and at runtime before flashing to the co-processor. -- All other options from [Update](#config-update). +- All other options from [Update](/components/update#config-update). ## Platform requirements diff --git a/content/components/web_server.md b/content/components/web_server.md index a2cf3dd6fc..36f07aba82 100644 --- a/content/components/web_server.md +++ b/content/components/web_server.md @@ -124,7 +124,7 @@ web_server: ``` > [!IMPORTANT] -> Always enable authentication when using the web server. See the [Security Best Practices](/guides/security_best_practices#web-server-authentication) guide for recommendations. +> Always enable authentication when using the web server. See the [Security Best Practices](/guides/security_best_practices#2-web-server-authentication) guide for recommendations. Use version 1 user interface: diff --git a/content/cookbook/lvgl.md b/content/cookbook/lvgl.md index 219982e814..3ce1878639 100644 --- a/content/cookbook/lvgl.md +++ b/content/cookbook/lvgl.md @@ -922,7 +922,7 @@ For this example to work, use the theme and style options from [above](#lvgl-coo ## Flex layout positioning -[Layouts](/components/lvgl#lvgl-layouts) aim to position widgets automatically, eliminating the need to specify coordinates to position +[Layouts](/components/lvgl/layouts#lvgl-layouts) aim to position widgets automatically, eliminating the need to specify coordinates to position each widget. This is a great way to simplify your configuration containing many widgets as it allows you to even omit alignment options. diff --git a/lint.py b/lint.py index cfc5dac70c..d7c53fe668 100644 --- a/lint.py +++ b/lint.py @@ -121,7 +121,6 @@ def find_all(a_str, sub): ".md", ".png", ".py", - ".rst", ".svg", ".toml", ".txt", @@ -327,82 +326,205 @@ def lint_end_newline(fname, content): return None -section_regex = re.compile(r"^(=+|-+|\*+|~+)$") -directive_regex = re.compile(r"^(\s*)\.\. (.*)::.*$") -directive_arg_regex = re.compile(r"^(\s+):.*:\s*.*$") +@lint_re_check( + r"\[([^\]]+)\]\((https://esphome\.io/[^)]+)\)", + include=["*.md"], +) +def lint_esphome_io_link(fname, match): + link_text = match.group(1) + full_url = match.group(2) + return ( + f"Markdown link to esphome.io should use relative path. " + f"Change [{link_text}]({full_url}) to use a relative URL" + ) + + +# Build cache of all anchors in the documentation +ANCHOR_CACHE = None + + +def build_anchor_cache(): + """Build a cache of all anchors (headings and shortcodes) in markdown files.""" + global ANCHOR_CACHE + if ANCHOR_CACHE is not None: + return ANCHOR_CACHE + + ANCHOR_CACHE = {} + content_dir = Path("content") + if not content_dir.exists(): + return ANCHOR_CACHE + + def generate_slug(text): + """Generate Hugo-compatible slug from heading text.""" + slug = re.sub(r"[^\w\s-]", "", text).lower() + slug = re.sub(r"[-\s]+", "-", slug).strip("-") + return slug + + for md_file in content_dir.rglob("*.md"): + rel_path = md_file.relative_to(content_dir) + # Convert file path to page path + if md_file.name == "_index.md": + if str(rel_path) == "_index.md": + page_path = "" # Root index + else: + page_path = str(rel_path.parent) + else: + page_path = str(rel_path.with_suffix("")) + + page_path = page_path.replace("\\", "/") + anchors = set() + + try: + with open(md_file, "r", encoding="utf-8") as f: + content = f.read() + lines = content.split("\n") + + for line in lines: + # Match headings + heading_match = re.match(r"^(#{1,6})\s+(.*)", line) + if heading_match: + heading_text = heading_match.group(2).strip() + anchor_id = generate_slug(heading_text) + anchors.add(anchor_id) + + # Match anchor shortcodes + shortcode_match = re.search(r'\{\{<\s*anchor\s+"([^\s>]+)"\s*>}}', line) + if shortcode_match: + anchor_id = shortcode_match.group(1) + anchors.add(anchor_id) + + ANCHOR_CACHE[page_path] = anchors + except Exception: + # Skip files that can't be read + pass + + return ANCHOR_CACHE -@lint_content_check(include=["*.rst"]) -def lint_directive_formatting(fname, content): +@lint_content_check(include=["*.md"]) +def lint_internal_links(fname, content): + """Validate internal markdown links.""" errors = [] - lines = content.splitlines(keepends=False) + build_anchor_cache() - for i, line in enumerate(lines): - m = directive_regex.match(line) - if m is None: + # Match markdown links: [text](url) + # Capture groups: text and URL + link_pattern = re.compile(r"\[([^\]]+)\]\(([^)]+)\)") + + for match in link_pattern.finditer(content): + link_text = match.group(1) + link_url = match.group(2) + lineno = content.count("\n", 0, match.start()) + 1 + col = match.start() - content.rfind("\n", 0, match.start()) + + # Skip external links (http://, https://, mailto:, etc.) + if re.match(r"^[a-zA-Z][a-zA-Z0-9+.-]*:", link_url): continue - base_indentation = len(m.group(1)) - directive_name = m.group(2) - if directive_name.startswith("|") or directive_name == "seo": + + # Check anchor-only links (these used to be resolved by the old system) + if link_url.startswith("#"): + anchor_id = link_url.lstrip("#") + + # Get current page path (only for files in content/) + current_file = Path(fname) + try: + if current_file.name == "_index.md": + if str(current_file.parent) == "content": + current_page = "" + else: + current_page = str(current_file.parent.relative_to("content")) + else: + current_page = str(current_file.relative_to("content").with_suffix("")) + + current_page = current_page.replace("\\", "/") + + # Check if anchor exists on current page + if current_page in ANCHOR_CACHE: + if anchor_id not in ANCHOR_CACHE[current_page]: + # Anchor doesn't exist on current page - likely a broken cross-page link + errors.append( + ( + lineno, + col, + f"Anchor-only link '#{anchor_id}' not found on current page. " + f"If this should link to another page, use the full path like " + f"[{link_text}](/path/to/page#{anchor_id})", + ) + ) + except ValueError: + # File is not in content/ directory, skip anchor validation + pass continue - # Match directive args - for j in range(i + 1, len(lines)): - if not directive_arg_regex.match(lines[j]): - break - else: - # Reached end of file + + # Skip relative links to static assets (images, etc.) + # These don't start with / and have file extensions + if not link_url.startswith("/") and re.search(r"\.(png|jpg|jpeg|gif|svg|webp|pdf|zip)$", link_url, re.IGNORECASE): continue - # Empty line must follow - if lines[j]: - errors.append( - ( - j, - 1, - "Directive '{}' is not followed by an empty line. Please insert an " - "empty line after {}:{}".format(directive_name, fname, j), - ) - ) + # Skip links that look like code/lambda parameters (contain spaces, parentheses, etc.) + if " " in link_url or "(" in link_url or ")" in link_url: continue - k = j + 1 - for j in range(k, len(lines)): - if not lines[j]: - # Ignore Empty lines + # Skip relative links without leading slash (not documentation pages) + # unless they're in the components directory + if not link_url.startswith("/"): + # Allow relative component links + if not ("components/" in fname and not re.search(r"\.", link_url)): continue - num_spaces = len(lines[j]) - len(lines[j].lstrip()) - if num_spaces <= base_indentation: - # Finished with this directive - break - num_indent = num_spaces - base_indentation - if j == k and num_indent != 4: + # Parse internal link + if "#" in link_url: + path_part, anchor_part = link_url.split("#", 1) + else: + path_part = link_url + anchor_part = None + + # Validate path - must start with / + if not path_part.startswith("/"): + continue + + # Remove leading slash + clean_path = path_part.lstrip("/") + + # Skip paths with query strings or fragments that look like URLs + if "?" in clean_path or ".html" in clean_path: + continue + + # Check if page exists + if clean_path not in ANCHOR_CACHE: + # Try with _index + if clean_path and not clean_path.endswith("/"): + clean_path_index = clean_path + else: + clean_path_index = clean_path.rstrip("/") + + if clean_path_index not in ANCHOR_CACHE: errors.append( ( - j + 1, - num_indent, - "Directive '{}' must be indented with 4 spaces, not {}. See " - "{}:{}".format(directive_name, num_indent, fname, j + 1), + lineno, + col, + f"Internal link references non-existent page: '{path_part}' in link [{link_text}]({link_url})", ) ) - break - - return errors + continue + # Validate anchor if present + if anchor_part: + target_page = clean_path + if target_page not in ANCHOR_CACHE: + target_page = clean_path.rstrip("/") + + if target_page in ANCHOR_CACHE: + if anchor_part not in ANCHOR_CACHE[target_page]: + errors.append( + ( + lineno, + col, + f"Internal link references non-existent anchor: '#{anchor_part}' on page '{path_part}' in link [{link_text}]({link_url})", + ) + ) -@lint_re_check( - r"https://esphome.io/", - include=["*.rst"], - exclude=[ - "components/web_server.rst", - "components/image.rst", - "cookbook/lvgl.rst", - ], -) -def lint_esphome_io_link(fname, match): - return ( - "All links to esphome.io should be relative, please remove esphome.io from URL" - ) + return errors def highlight(s): diff --git a/script/md_anchors.py b/script/md_anchors.py deleted file mode 100755 index 19056baf72..0000000000 --- a/script/md_anchors.py +++ /dev/null @@ -1,131 +0,0 @@ -#!/usr/bin/env python3 -import os -import re -import json -from collections import defaultdict - -def generate_slug(text): - slug = re.sub(r"[^\w\s-]", "", text).lower() - slug = re.sub(r"[-\s]+", "-", slug).strip("-") - return slug - -def process_markdown_file(file_path): - anchors = [] - with open(file_path, 'r', encoding='utf-8') as f: - lines = f.readlines() - - i = 0 - while i < len(lines): - line = lines[i].rstrip() - - # Headings - heading_match = re.match(r"^(#{1,6})\s+(.*)", line) - if heading_match: - heading_text = heading_match.group(2).strip() - anchor_id = generate_slug(heading_text) - anchors.append({ - "id": anchor_id, - "text": heading_text, - "type": "heading" - }) - i += 1 - continue - - # Shortcodes - shortcode_match = re.search(r'\{\{<\s*anchor\s+"([^\s>]+)"\s*>}}', line) - if shortcode_match: - anchor_id = shortcode_match.group(1) - # Look ahead for heading - description = "" - j = i + 1 - while j < len(lines): - next_line = lines[j].strip() - if next_line == "": - j += 1 - continue - heading_match = re.match(r"^(#{1,6})\s+(.*)", next_line) - if heading_match: - description = heading_match.group(2).strip() - break - anchors.append({ - "id": anchor_id, - "text": description if description else anchor_id, - "type": "shortcode" - }) - i += 1 - continue - - i += 1 - - return anchors - -def get_page_name(file_path, root_dir): - rel_path = os.path.relpath(file_path, root_dir) - dir_name, file_name = os.path.split(rel_path) - if file_name == "_index.md" and not dir_name: - # Exclude the top-level _index.md - return None - if file_name == "_index.md": - page_name = dir_name if dir_name else "" - else: - base_name = os.path.splitext(file_name)[0] - page_name = os.path.join(dir_name, base_name) if dir_name else base_name - # Remove any leading slashes and normalize - return page_name.strip("/").replace("\\", "/") - -def main(): - root_dir = "content" - output_file = "data/anchors.json" - - # Collect all anchors by page - page_anchors = {} - for dirpath, _, filenames in os.walk(root_dir): - for filename in filenames: - if filename.endswith(".md"): - file_path = os.path.join(dirpath, filename) - page_name = get_page_name(file_path, root_dir) - if page_name is None: - continue # skip top-level _index.md - anchors = process_markdown_file(file_path) - if anchors: - page_anchors[page_name] = anchors - - # Collate anchors by ID - collated = defaultdict(list) - for page, anchors in page_anchors.items(): - for anchor in anchors: - entry = { - "page": page, - "text": anchor["text"], - "type": anchor["type"] - } - collated[anchor["id"]].append(entry) - - # Sorting logic for pages - sort_order = ["components", "cookbook", "changelog"] - def page_sort_key(entry): - """ - Sort entries so that page filenames are the highest priority - :param entry: - :return: - """ - page = entry["page"] - if page in sort_order: - index = -sort_order.index(page) # descending order - else: - index = -(len(sort_order) + 1) # others at the end - return (1 if entry["type"] == "heading" else 0, index) - - # Sort entries within each anchor group - sorted_collated = {} - for anchor_id, entries in collated.items(): - entries.sort(key=page_sort_key) - sorted_collated[anchor_id] = entries - - with open(output_file, 'w', encoding='utf-8') as f: - json.dump(sorted_collated, f, indent=2, ensure_ascii=False) - - print(f"Collated anchor data written to {output_file}") - -if __name__ == "__main__": - main() diff --git a/themes/esphome-theme/layouts/_default/_markup/render-link.html b/themes/esphome-theme/layouts/_default/_markup/render-link.html deleted file mode 100644 index f829020b15..0000000000 --- a/themes/esphome-theme/layouts/_default/_markup/render-link.html +++ /dev/null @@ -1,41 +0,0 @@ -{{- $link := .Destination -}} -{{- $text := .Text | safeHTML -}} - -{{- if strings.HasPrefix $link "#" -}} - {{- $id := strings.TrimPrefix "#" $link -}} - {{- $anchors := site.Data.anchors -}} - {{- $entries := index $anchors $id -}} - {{- $foundLocal := false -}} - - {{- if $entries -}} - {{- $currentPage := strings.TrimPrefix "content/" .Page.File.Path | strings.TrimSuffix ".md" -}} - {{- range $entries -}} - {{- if eq .page $currentPage -}} - {{- $foundLocal = true -}} - {{- end -}} - {{- end -}} - {{- end -}} - - {{- if $foundLocal -}} - {{ $text }} - {{- else if $entries -}} - {{- $firstEntry := index $entries 0 -}} - {{ $text }} - {{- else -}} - {{- if eq hugo.Environment "development" -}} - {{ warnf "Unresolved anchor '%s' in page '%s'" $link .Page.File.Path }} - {{ $text }} - {{- end -}} - {{- if eq hugo.Environment "production" -}} - {{ errorf "Unresolved anchor '%s' in page '%s'" $link .Page.File.Path }} - {{- end -}} - {{- end -}} -{{- else -}} - {{ $text }} - {{- $u := urls.Parse .Destination -}} - {{- if $u.IsAbs -}} - - {{- end -}} - -{{- end -}} -{{- /**/ -}} From 0a0f2e38e728cd3573b6178aa5e5589205290ced Mon Sep 17 00:00:00 2001 From: Clyde Stubbs <2366188+clydebarrow@users.noreply.github.com> Date: Wed, 26 Nov 2025 17:42:17 +1000 Subject: [PATCH 035/109] [lvgl] Document automatic padding on layouts (#5610) --- content/components/lvgl/layouts.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/content/components/lvgl/layouts.md b/content/components/lvgl/layouts.md index 1d6f3d1583..bbfda33bde 100644 --- a/content/components/lvgl/layouts.md +++ b/content/components/lvgl/layouts.md @@ -41,6 +41,9 @@ The configuration `layout: horizontal` is a shorthand for a flex layout: flex_align_cross: stretch ``` +In addition, if the option `pad_all` is set on the container (thus applying padding to the outside) the same +padding will be applied between the columns, i.e. `pad_column` will be set. + ### Vertical Layout The configuration `layout: vertical` is a shorthand for a flex layout: @@ -54,6 +57,8 @@ The configuration `layout: vertical` is a shorthand for a flex layout: flex_align_cross: stretch ``` +Similarly to the `horizontal` layout, using `pad_all` on the container will also apply that padding between rows. + ### Flex The Flex layout in LVGL is a subset implementation From c8af9ba512bdf2a22e170c11c3a7b4b838176686 Mon Sep 17 00:00:00 2001 From: Clyde Stubbs <2366188+clydebarrow@users.noreply.github.com> Date: Thu, 27 Nov 2025 14:05:38 +1100 Subject: [PATCH 036/109] [lvgl] Document update_when_display_idle option (#5615) --- content/components/lvgl/_index.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/content/components/lvgl/_index.md b/content/components/lvgl/_index.md index 830bd72096..8777d7f747 100644 --- a/content/components/lvgl/_index.md +++ b/content/components/lvgl/_index.md @@ -131,6 +131,11 @@ The following configuration variables apply to the main `lvgl` component, in ord > - If you press the encoder on a complex object (like a list, message box, etc.) the object will go to edit mode whereby you can adjust the value of the object by turning the encoder. > - To leave edit mode, long press the button. +- **update_when_display_idle** (*Optional*, boolean): When using the {{< docref "/components/display/epaper_spi" >}} + or other displays with long update times, setting this option + to `true` will cause the display to only be updated if the display is idle. During the update LVGL will pause. + The display `update_interval` should be set to `never` when this is used, as the display will be updated automatically + by LVGL. - **resume_on_input** (*Optional*, boolean): If LVGL is paused and the user interacts with the screen, resume the activity of LVGL. Defaults to `true`. "Interacts" means to release a touch or button, or rotate an encoder. - **color_depth** (*Optional*, string): The color depth at which the contents are generated. Currently only `16` is supported (RGB565, 2 bytes/pixel), which is the default value. - **buffer_size** (*Optional*, percentage): The percentage of screen size to allocate buffer memory. If unconfigured, the default is `100%` with runtime fallback to `12%` if a full size buffer allocation fails. For devices without PSRAM, the recommended value is `25%`. From 3fff36bdfbb10d962f5833d5c302135d16031e47 Mon Sep 17 00:00:00 2001 From: Clyde Stubbs <2366188+clydebarrow@users.noreply.github.com> Date: Thu, 27 Nov 2025 14:10:20 +1100 Subject: [PATCH 037/109] [lvgl] Document scroll properties (#5620) --- content/components/lvgl/widgets.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/content/components/lvgl/widgets.md b/content/components/lvgl/widgets.md index fcb2aa6fe4..79acc2d7c1 100644 --- a/content/components/lvgl/widgets.md +++ b/content/components/lvgl/widgets.md @@ -38,7 +38,12 @@ The properties below are common to all widgets. - `"ON"` : Always show the scroll bars (use the double quotes!). - `"ACTIVE"` : Show scroll bars while a widget is being scrolled. - `"AUTO"` : Show scroll bars when the content is large enough to be scrolled (default). - +- **scroll_dir** (*Optional*, string): Sets the permissible scroll directions for an object - one of `LEFT`, `RIGHT`, + `BOTTOM`, `TOP`, `HOR`, `VER`, `ALL` (default). +- **scroll_snap_x** (*Optional*, string): For a child of a scrollable object, this property defines the snap position + of the child in the X direction. One of `NONE` (default), `START`, `END`, `CENTER`. +- **scroll_snap_y** (*Optional*, string): For a child of a scrollable object, this property defines the snap position + of the child in the Y direction. One of `NONE` (default), `START`, `END`, `CENTER`. - **align** (*Optional*, enum): Alignment of the widget relative to the parent. A child widget is clipped to its parent boundaries. One of the values *not* starting with `OUT_` (see picture below). - **align_to** (*Optional*, list): Alignment of the widget relative to another widget on the same level: - **id** (**Required**): The ID of a widget *to* which you want to align. From 3b32d365f6402b91289ea84aa78a7a1821a70093 Mon Sep 17 00:00:00 2001 From: Clyde Stubbs <2366188+clydebarrow@users.noreply.github.com> Date: Thu, 27 Nov 2025 14:14:21 +1100 Subject: [PATCH 038/109] [lvgl] Document `text:` option for `button` (#5637) Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: J. Nick Koston --- content/components/lvgl/widgets.md | 55 ++++++++++++++++++++++-------- 1 file changed, 40 insertions(+), 15 deletions(-) diff --git a/content/components/lvgl/widgets.md b/content/components/lvgl/widgets.md index 79acc2d7c1..f74f7900ac 100644 --- a/content/components/lvgl/widgets.md +++ b/content/components/lvgl/widgets.md @@ -429,9 +429,17 @@ Simple push (momentary) or toggle (two-states) button. {{< img src="lvgl_button.png" alt="Image" class="align-center" >}} +A button has no inherent content so requires child widgets to be added. As a shorthand for a button with a single text label, +the `text:` option may be used to add a single `label` child, otherwise the `widgets:` key must be used to add other +widgets inside the button. + +A button is momentary by default, which has a `pressed` state. If the `checkable` flag is set, it becomes a toggle button, which also has a `checked` state. + **Configuration variables:** -- **checkable** (*Optional*, boolean): A significant [flag](#lvgl-widget-flags) to make a toggle button (which remains pressed in `checked` state). Defaults to `false`. +- **checkable** (*Optional*, boolean): A significant [flag](#lvgl-widget-flags) to make a toggle button (which reports its `checked` state). Defaults to `false`. +- **text** (*Optional*, string): Text to be displayed on the button. This will create and add a single label widget to the button. May not be used + with the `widgets:` key. - Style options from [Style properties](/components/lvgl#lvgl-styling) for the background of the button. Uses the typical background style properties. A notable state is `checked` (boolean) which can have different styles applied. @@ -445,30 +453,22 @@ A notable state is `checked` (boolean) which can have different styles applied. **Example:** ```yaml -# Example widget: +# Example widget with text: - button: - x: 10 - y: 10 - width: 50 - height: 30 id: btn_id + text: "Click me!" ``` -To have a button with a text label on it, add a child [`label`](#lvgl-widget-label) widget to it: +To create an image button, add a child [`image`](#lvgl-widget-image) widget to it: ```yaml -# Example toggle button with text: +# Example toggle button with image: - button: - x: 10 - y: 10 - width: 70 - height: 30 id: btn_id checkable: true widgets: - - label: - align: center - text: "Light" + - image: + src: my_image_id # Example trigger: - button: @@ -478,12 +478,37 @@ To have a button with a text label on it, add a child [`label`](#lvgl-widget-lab - logger.log: format: "Button checked state: %d" args: [ x ] + ``` The `button` can be also integrated as a {{< docref "/components/binary_sensor/lvgl" "Binary Sensor" >}} or as a {{< docref "/components/switch/lvgl" "Switch" >}} component. +> [!NOTE] +> A binary sensor linked to a button reports its `pressed` state, while a switch linked to a button reports its `checked` state. See [Remote light button](/cookbook/lvgl#lvgl-cookbook-binent) for an example which demonstrates how to use a checkable button to act on a Home Assistant service. +**Actions:** + +- `lvgl.button.update` [action](/automations/actions#actions-action) may be used to update the button styles at runtime. If + the button has a `text:` option then it may also be updated with this action. + - **id** (**Required**): The ID or a list of IDs of button widgets to be updated. + - **text** (*Optional*, string): Update the button's text (only if the button was configured with the `text:` option). + - Style options from [Style properties](/components/lvgl#lvgl-styling) for the background of the button. + + > [!NOTE] + > Where other widgets are added as children, they must be updated directly. + +```yaml +# Text update example +- button: + id: btn_id + text: "Click me!" + on_click: + lvgl.button.update: + id: btn_id + text: "Clicked" +``` + {{< anchor "lvgl-widget-buttonmatrix" >}} ## `buttonmatrix` From 644c924f4b3416964563ca5461f05912914200bd Mon Sep 17 00:00:00 2001 From: Clyde Stubbs <2366188+clydebarrow@users.noreply.github.com> Date: Thu, 27 Nov 2025 14:32:54 +1100 Subject: [PATCH 039/109] [epaper_spi] Add SSD1677 and Seeed EE04 with Waveshare 4.26 (#5628) --- content/components/display/epaper_spi.md | 72 +++++++++++++++++++----- 1 file changed, 57 insertions(+), 15 deletions(-) diff --git a/content/components/display/epaper_spi.md b/content/components/display/epaper_spi.md index c72cf57054..726b6089f6 100644 --- a/content/components/display/epaper_spi.md +++ b/content/components/display/epaper_spi.md @@ -12,7 +12,7 @@ with improved state management and non-blocking operation. This component implem queue-based state machine that eliminates blocking waits for the busy pin and provides better integration with ESPHome's async architecture. -The communication method uses 4-wire [SPI](/components/spi), so you need to have an `spi:` section in your +The communication method uses [SPI](/components/spi), so you need to have an `spi:` section in your configuration. The driver supports a number of displays and there are also specific configurations for ESP32 boards with integrated displays. @@ -26,43 +26,85 @@ display: it.filled_circle(it.get_width() / 2, it.get_height() / 2, 50, Color::BLACK); ``` -## Supported displays +## Supported display controllers -| Model name | Manufacturer | Product Description | -| ---------------------- | ------------ | ---------------------------------------------------------- | -| Spectra-E6 | Eink | | -| 7.3in Spectra-E6 | Eink | | -| Seeed-reTerminal-E1002 | Seeed Studio | | +These are the supported controller chips. Using just the chip name as the model will require full configuration with +pins and dimensions specified. + +| Chip name | Manufacturer | Product Description | +|------------------------|--------------|------------------------------------------------------------------------------------------------------------------------------| +| Spectra-E6 | Eink | | +| SSD1677 | Solomon | | + +## Supported integrated display boards + +These models correspond to displays integrated with a microcontroller, and have a full configuration predefined, so at +a minimum only the model name need be configured. Other options can be overridden in the configuration if needed. + +| Model name | Manufacturer | Product Description | +| ---------------------- |--------------| ---------------------------------------------------------------------------------------------------------------------------- | +| Seeed-reTerminal-E1002 | Seeed Studio | | +| Seeed-ee04-mono-4.26 | Seeed Studio | Seeed EE04 board with Waveshare 4.26" mono epaper. | ## Configuration variables -When using a model defining an integrated ESP32 display board most of the configuration such as the pins and dimensions will be set by default, +When using a model defining an integrated display board most of the configuration such as the pins and dimensions will be set by default, but can be overridden if needed. -- **model** (**Required**): The model of the ePaper display. See the table above for options. +- **model** (**Required**): The model of the ePaper display. See the table above for options (case is not significant). - **cs_pin** (**Required**, [Pin Schema](/guides/configuration-types#pin-schema)): The CS pin. Predefined for integrated boards. - **dc_pin** (**Required**, [Pin Schema](/guides/configuration-types#pin-schema)): The DC pin. Predefined for integrated boards. - **busy_pin** (*Optional*, [Pin Schema](/guides/configuration-types#pin-schema)): The BUSY pin, if used. - **reset_pin** (*Optional*, [Pin Schema](/guides/configuration-types#pin-schema)): The RESET pin, if used. Make sure you pull this pin high (by connecting it to 3.3V with a resistor) if not connected to a GPIO pin. +- **dimensions** (**Required**, dict): Dimensions of the screen, specified either as *width* **x** *height* (e.g `320x240` ) + or with separate config keys. For integrated boards with full pre-defined configuration this is optional and will be preset by + the model selected. The dimensions are specified in pixels, and the width and height must be greater than 0. -- **rotation** (*Optional*): Set the rotation of the display. Everything you draw in `lambda:` will be rotated + - **height** (**Required**, int): Specifies height of display. + - **width** (**Required**, int): Specifies width of display. + +- **rotation** (*Optional*, int): Set the rotation of the display. Everything you draw in `lambda:` will be rotated by this option. One of `0°` (default), `90°`, `180°`, `270°`. +- **transform** (*Optional*, dict): If `rotation` is not sufficient, use this to transform the display. Options are: + - **mirror_x** (**Required**, boolean): If true, mirror the x axis. + - **mirror_y** (**Required**, boolean): If true, mirror the y axis. - **reset_duration** (*Optional*, [Time](/guides/configuration-types#time)): Duration for the display reset operation. Defaults to `200ms`. - - **lambda** (*Optional*, [lambda](/automations/templates#config-lambda)): The lambda to use for rendering the content on the display. See [Display Rendering Engine](/components/display#display-engine) for more information. - **pages** (*Optional*, list): Show pages instead of a single lambda. See [Display Pages](/components/display#display-pages). - - **update_interval** (*Optional*, [Time](/guides/configuration-types#time)): The interval to re-draw the screen. Defaults to `60s`, use `never` to only manually update the screen via `component.update`. -- **spi_id** (*Optional*, [ID](/guides/configuration-types#id)): Manually specify the ID of the [SPI Component](/components/spi) if you want - to use multiple SPI buses. +- **full_update_every** (*Optional*, int): On screens that support partial updates, this sets the number of updates + before a full update is forced. Defaults to `1` which will make every update a full update. +- **spi_id** (*Optional*, [ID](/guides/configuration-types#id)): Required to specify the ID of the [SPI Component](/components/spi) if your + configuration defines multiple SPI buses. If only a single SPI bus is configured, this is optional. - **id** (*Optional*, [ID](/guides/configuration-types#id)): Manually specify the ID used for code generation. +### Full configuration example + +```yaml +display: + - platform: epaper_spi + model: SSD1677 + full_update_every: 10 + update_interval: 5s + dimensions: + width: 800 + height: 480 + transform: + mirror_x: true + mirror_y: false + rotation: 90 # Rotate to portrait + cs_pin: GPIOXX + dc_pin: GPIOXX + reset_pin: GPIOXX + busy_pin: { number: GPIOXX, inverted: False, mode: { input: True, pulldown: True } } +``` + ## See Also -- {{< docref "index/" >}} - {{< apiref "epaper_spi/epaper_spi.h" "epaper_spi/epaper_spi.h" >}} - [ESPHome Display Rendering Engine](/components/display#display-engine) +- {{< docref "components/lvgl" >}} From 7c8aaad0b215b9ebb75507f807956bf0ace72405 Mon Sep 17 00:00:00 2001 From: Nicolas Graziano Date: Tue, 25 Nov 2025 04:45:49 +0100 Subject: [PATCH 040/109] Fix exemple state logging for binary sensor values (#5664) The conversion from optional to bool return always true, it is needed to call the value member. Co-authored-by: Jonathan Swoboda <154711427+swoboda1337@users.noreply.github.com> --- content/components/binary_sensor/_index.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/content/components/binary_sensor/_index.md b/content/components/binary_sensor/_index.md index b97f4f913c..7e442831ac 100644 --- a/content/components/binary_sensor/_index.md +++ b/content/components/binary_sensor/_index.md @@ -322,10 +322,10 @@ binary_sensor: then: - logger.log: format: "Old state was %s" - args: ['x_previous.has_value() ? ONOFF(x_previous) : "Unknown"'] + args: ['x_previous.has_value() ? ONOFF(x_previous.value()) : "Unknown"'] - logger.log: format: "New state is %s" - args: ['x.has_value() ? ONOFF(x) : "Unknown"'] + args: ['x.has_value() ? ONOFF(x.value()) : "Unknown"'] ``` Configuration variables: See [Automation](/automations). From fb6d7d870519b667d40d61f86415d4e04f94ba91 Mon Sep 17 00:00:00 2001 From: Jonathan Swoboda <154711427+swoboda1337@users.noreply.github.com> Date: Tue, 25 Nov 2025 14:04:00 -0500 Subject: [PATCH 041/109] Fix spelling (#5678) --- content/components/spi.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/components/spi.md b/content/components/spi.md index 0d1e7b040c..aa371ca970 100644 --- a/content/components/spi.md +++ b/content/components/spi.md @@ -154,7 +154,7 @@ spi_device: - **bit_order** (*Optional*): Set the bit order - choose one of `msb_first` (default) or `lsb_first`. - **cs_pin** (*Optional*, [Pin Schema](/guides/configuration-types#pin-schema)): The CS pin. -- **release_device** (*Optional*, boolean): For ESP-IDF, release the bus device between transactions. Default isk +- **release_device** (*Optional*, boolean): For ESP-IDF, release the bus device between transactions. The default is `False`. Setting this to `True` will enable more than 6 devices to be connected to hardware SPI buses. - **interface** (*Optional*): Controls which hardware or software SPI implementation should be used. From 9adb3c98e23289c18de9990a4272d7a88d2e6289 Mon Sep 17 00:00:00 2001 From: Clyde Stubbs <2366188+clydebarrow@users.noreply.github.com> Date: Wed, 26 Nov 2025 06:08:09 +1000 Subject: [PATCH 042/109] Fix media and oi.esphome.io links (#5679) --- content/components/image.md | 2 +- content/components/web_server.md | 6 +++--- content/cookbook/lvgl.md | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/content/components/image.md b/content/components/image.md index 9de27a1404..f1d3a3ddf6 100644 --- a/content/components/image.md +++ b/content/components/image.md @@ -36,7 +36,7 @@ image: type: rgb565 resize: 200x162 images: - - file: https://esphome.io/images/logo.png + - file: https://media.esphome.io/logo/logo.png id: esphome_logo ``` diff --git a/content/components/web_server.md b/content/components/web_server.md index 36f07aba82..95f6560ef2 100644 --- a/content/components/web_server.md +++ b/content/components/web_server.md @@ -30,14 +30,14 @@ web_server: - **port** (*Optional*, int): The port the web server should open its socket on. - **css_url** (*Optional*, url): The URL that should be used for the CSS stylesheet. Defaults - to (updates will go to `v2`, `v3`, etc). Can be set to empty string. + to (updates will go to `v2`, `v3`, etc). Can be set to empty string. - **css_include** (*Optional*, local file): Path to local file to be included in web server index page. Contents of this file will be served as `/0.css` and used as CSS stylesheet by internal webserver. Useful when building device without internet access, where you want to use built-in AP and webserver. - **js_url** (*Optional*, url): The URL that should be used for the JS script. Defaults - to . Can be set to empty string. + to . Can be set to empty string. - **js_include** (*Optional*, local file): Path to local file to be included in web server index page. Contents of this file will be served as `/0.js` and used as JS script by internal webserver. @@ -80,7 +80,7 @@ web_server: `sorting_weight` will be displayed first. Defaults to `50` To conserve flash size, the CSS and JS files used on the root page to show a simple user -interface are hosted by esphome.io. If you want to use your own service, use the +interface are externally hosted at oi.esphome.io. If you want to use your own service, use the `css_url` and `js_url` options in your configuration. > [!NOTE] diff --git a/content/cookbook/lvgl.md b/content/cookbook/lvgl.md index 3ce1878639..8ae7486220 100644 --- a/content/cookbook/lvgl.md +++ b/content/cookbook/lvgl.md @@ -1223,7 +1223,7 @@ esphome: - lvgl.widget.hide: boot_screen image: - - file: https://esphome.io/favicon.ico + - file: https://media.esphome.io/logo/logo.png id: boot_logo resize: 200x200 type: RGB565 From 239fb5d19d6c72c58c183c8079f941d8479c7a1d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20BOU=C3=89?= Date: Wed, 26 Nov 2025 04:39:11 +0100 Subject: [PATCH 043/109] Add OpenThread text sensors configuration example (#5524) * Add OpenThread text sensors configuration example Added configuration example for OpenThread text sensors. * Update content/components/openthread.md Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Create a new openthread_info file * Fix image * Update index * Update content/components/openthread.md * Fix * Fix --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: Jonathan Swoboda <154711427+swoboda1337@users.noreply.github.com> --- content/components/_index.md | 1 + content/components/openthread.md | 7 ++ .../components/text_sensor/openthread_info.md | 81 +++++++++++++++++++ 3 files changed, 89 insertions(+) create mode 100644 content/components/text_sensor/openthread_info.md diff --git a/content/components/_index.md b/content/components/_index.md index 513795af1b..6f11bbe91d 100644 --- a/content/components/_index.md +++ b/content/components/_index.md @@ -991,6 +991,7 @@ at the {{< docref "light/fastled" "FastLED Light" >}}. "Modbus Text Sensor","components/text_sensor/modbus_controller","modbus.png","" "MQTT Subscribe Text","components/text_sensor/mqtt_subscribe","mqtt.png","" "Nextion Text Sensor","components/text_sensor/nextion","nextion.jpg","" +"OpenThread Info","components/text_sensor/openthread_info","openthread.png","" "Tuya Text Sensor","components/text_sensor/tuya","tuya.png","" "Version","components/text_sensor/version","new-box.svg","dark-invert" "WiFi Info","components/text_sensor/wifi_info","network-wifi.svg","dark-invert" diff --git a/content/components/openthread.md b/content/components/openthread.md index 6f1162d3b9..5a1ff11f1c 100644 --- a/content/components/openthread.md +++ b/content/components/openthread.md @@ -94,3 +94,10 @@ See The Poll Period makes the device behave as a SED. Follow on work is needed utilizing Power Management and/or Light Sleep capability in esp-idf. If the device is always awake, the API timeout is 60 seconds, so a ping request will force interaction with the parent when the poll period is greater than 60 seconds. + +## See Also + +- {{< docref "/components/text_sensor/openthread_info" >}} +- {{< docref "/components/network" >}} +- {{< apiref "openthread/openthread.h" "openthread/openthread.h" >}} +- diff --git a/content/components/text_sensor/openthread_info.md b/content/components/text_sensor/openthread_info.md new file mode 100644 index 0000000000..83d04d6ca8 --- /dev/null +++ b/content/components/text_sensor/openthread_info.md @@ -0,0 +1,81 @@ +--- +description: "Instructions for setting up OpenThread info text sensors." +title: "OpenThread Info Text Sensor" +params: + seo: + description: Instructions for setting up OpenThread info text sensors. + image: openthread.png +--- + +The `openthread_info` text sensor platform exposes different OpenThread network information +via text sensors. + +```yaml +# Example configuration entry +text_sensor: + - platform: openthread_info + ip_address: + name: "Thread IP Address" + channel: + name: "Thread Channel" + role: + name: "Thread Device Role" + rloc16: + name: "Thread RLOC16" + ext_addr: + name: "Thread Extended Address" + eui64: + name: "Thread EUI64" + network_name: + name: "Thread Network Name" + network_key: + name: "Thread Network Key" + pan_id: + name: "Thread PAN ID" + ext_pan_id: + name: "Thread Extended PAN ID" +``` + +## Configuration variables + +- **ip_address** (*Optional*): Expose the off-mesh routable IPv6 address of the Thread device as a text sensor. + This is the address used for communication outside the Thread mesh network. + All options from [Text Sensor](#config-text_sensor). + +- **channel** (*Optional*): Expose the Thread network channel (11-26) as a text sensor. + All options from [Text Sensor](#config-text_sensor). + +- **role** (*Optional*): Expose the current device role in the Thread network (Leader, Router, Child, Detached, + etc.) as a text sensor. All options from [Text Sensor](#config-text_sensor). + +- **rloc16** (*Optional*): Expose the Router Locator (RLOC16) address as a text sensor. This is a 16-bit address + used for routing within the Thread network. All options from [Text Sensor](#config-text_sensor). + +- **ext_addr** (*Optional*): Expose the IEEE 802.15.4 Extended MAC address as a text sensor. + All options from [Text Sensor](#config-text_sensor). + +- **eui64** (*Optional*): Expose the EUI-64 address as a text sensor. This is the unique 64-bit identifier for + the device. All options from [Text Sensor](#config-text_sensor). + +- **network_name** (*Optional*): Expose the Thread network name as a text sensor. + All options from [Text Sensor](#config-text_sensor). + +- **network_key** (*Optional*): Expose the Thread network key as a text sensor. + All options from [Text Sensor](#config-text_sensor). + + > [!WARNING] + > The `network_key` sensor exposes sensitive security credentials that could allow unauthorized access to your + > Thread network. Only enable this sensor if you need it for debugging purposes and understand the security + > implications. + +- **pan_id** (*Optional*): Expose the Personal Area Network ID (PAN ID) as a text sensor. This is a 16-bit + identifier for the Thread network. All options from [Text Sensor](#config-text_sensor). + +- **ext_pan_id** (*Optional*): Expose the Extended PAN ID as a text sensor. This is a 64-bit extended identifier + for the Thread network. All options from [Text Sensor](#config-text_sensor). + +## See Also + +- {{< docref "/components/openthread" >}} +- {{< docref "/components/text_sensor/index" >}} +- {{< apiref "openthread_info/openthread_info_text_sensor.h" "openthread_info/openthread_info_text_sensor.h" >}} From b8eaed43a758d123815c6f277effb3f25840e6a6 Mon Sep 17 00:00:00 2001 From: Jonathan Swoboda <154711427+swoboda1337@users.noreply.github.com> Date: Thu, 27 Nov 2025 19:12:47 -0500 Subject: [PATCH 044/109] Fix links (#5690) --- .../components/text_sensor/openthread_info.md | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/content/components/text_sensor/openthread_info.md b/content/components/text_sensor/openthread_info.md index 83d04d6ca8..40acf744cc 100644 --- a/content/components/text_sensor/openthread_info.md +++ b/content/components/text_sensor/openthread_info.md @@ -40,28 +40,28 @@ text_sensor: - **ip_address** (*Optional*): Expose the off-mesh routable IPv6 address of the Thread device as a text sensor. This is the address used for communication outside the Thread mesh network. - All options from [Text Sensor](#config-text_sensor). + All options from [Text Sensor](/components/text_sensor#config-text_sensor). - **channel** (*Optional*): Expose the Thread network channel (11-26) as a text sensor. - All options from [Text Sensor](#config-text_sensor). + All options from [Text Sensor](/components/text_sensor#config-text_sensor). - **role** (*Optional*): Expose the current device role in the Thread network (Leader, Router, Child, Detached, - etc.) as a text sensor. All options from [Text Sensor](#config-text_sensor). + etc.) as a text sensor. All options from [Text Sensor](/components/text_sensor#config-text_sensor). - **rloc16** (*Optional*): Expose the Router Locator (RLOC16) address as a text sensor. This is a 16-bit address - used for routing within the Thread network. All options from [Text Sensor](#config-text_sensor). + used for routing within the Thread network. All options from [Text Sensor](/components/text_sensor#config-text_sensor). - **ext_addr** (*Optional*): Expose the IEEE 802.15.4 Extended MAC address as a text sensor. - All options from [Text Sensor](#config-text_sensor). + All options from [Text Sensor](/components/text_sensor#config-text_sensor). - **eui64** (*Optional*): Expose the EUI-64 address as a text sensor. This is the unique 64-bit identifier for - the device. All options from [Text Sensor](#config-text_sensor). + the device. All options from [Text Sensor](/components/text_sensor#config-text_sensor). - **network_name** (*Optional*): Expose the Thread network name as a text sensor. - All options from [Text Sensor](#config-text_sensor). + All options from [Text Sensor](/components/text_sensor#config-text_sensor). - **network_key** (*Optional*): Expose the Thread network key as a text sensor. - All options from [Text Sensor](#config-text_sensor). + All options from [Text Sensor](/components/text_sensor#config-text_sensor). > [!WARNING] > The `network_key` sensor exposes sensitive security credentials that could allow unauthorized access to your @@ -69,10 +69,10 @@ text_sensor: > implications. - **pan_id** (*Optional*): Expose the Personal Area Network ID (PAN ID) as a text sensor. This is a 16-bit - identifier for the Thread network. All options from [Text Sensor](#config-text_sensor). + identifier for the Thread network. All options from [Text Sensor](/components/text_sensor#config-text_sensor). - **ext_pan_id** (*Optional*): Expose the Extended PAN ID as a text sensor. This is a 64-bit extended identifier - for the Thread network. All options from [Text Sensor](#config-text_sensor). + for the Thread network. All options from [Text Sensor](/components/text_sensor#config-text_sensor). ## See Also From 3014543d9a2351e9e11c32eaf37c59420f88c4e7 Mon Sep 17 00:00:00 2001 From: Jonathan Swoboda <154711427+swoboda1337@users.noreply.github.com> Date: Thu, 27 Nov 2025 19:52:05 -0500 Subject: [PATCH 045/109] Add shorthand (#5684) --- content/components/esp32.md | 32 ++++++++++++++++++++++++++++---- 1 file changed, 28 insertions(+), 4 deletions(-) diff --git a/content/components/esp32.md b/content/components/esp32.md index d1dbce9bc4..802cf56fad 100644 --- a/content/components/esp32.md +++ b/content/components/esp32.md @@ -231,15 +231,39 @@ esp32: The `components` option allows you to include IDF components. These components will then be compiled into the resulting firmware and may be used by [lambdas](/automations/templates#config-lambda). The most common usage of this option is to include third-party -components that are available in the [ESP Component Registry](https://components.espressif.com/). They can be added by -listing their name under this option. It is also possible to use specific versions, or to fetch components from a file or -git repository. +components that are available in the [ESP Component Registry](https://components.espressif.com/). + +### Simple + +For components from the ESP Component Registry, you can use the shorthand syntax `owner/component^version`: + +```yaml +esp32: + framework: + components: + - espressif/esp_hosted^2.6.1 +``` + +### Advanced + +For more complex configurations (custom git repositories, local paths, etc.), use the advanced syntax: + +```yaml +esp32: + framework: + components: + - name: my_custom_component + source: https://github.com/user/component.git + ref: main + path: components/custom +``` + +#### Configuration Variables - **name** (*Required*, string): Name of the component e.g. `espressif/esp_hosted`. - **ref** (*Optional*, string): Component registry version or a git ref. - **source** (*Optional*, string): The git repository to use for the component. This can be used for a custom or patched version of the component. - - **path** (*Optional*, string): The path of the component in the git repository or a local path to the component if `source` is not set. From e31f5329e51802b75cca195e684cfd1d41976c5d Mon Sep 17 00:00:00 2001 From: Javier Peletier Date: Sat, 29 Nov 2025 00:14:08 +0100 Subject: [PATCH 046/109] [packages] clarify package inclusion methods (#5681) --- content/components/packages.md | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/content/components/packages.md b/content/components/packages.md index f22a96f68c..7783df4920 100644 --- a/content/components/packages.md +++ b/content/components/packages.md @@ -23,9 +23,11 @@ merged by concatenation. All other configuration values are replaced with the la ESPHome uses `!include` to "bring in" packages from other files; this feature is described in [!include](/guides/yaml#yaml-include). -The `packages:` key may have a value that is a list of valid package references, or a mapping of keys to package references. -When a mapping is used, the keys are for reference only and have no significance in themselves. -Where only a single package reference is required, it may be used directly rather than in a list. +The `packages:` key may have a value that is: + +- A list of valid package references +- A mapping of keys to package references. When a mapping is used, the keys are for reference only and have no significance in themselves. + Examples of all formats are shown below. ## Local Packages @@ -186,8 +188,8 @@ sensor: ``` ```yaml -# only one package is included here, no need for a list -packages: !include common.yaml +packages: + - !include common.yaml sensor: - id: !extend uptime_sensor @@ -255,7 +257,8 @@ the ID of the entry to modify. For example, to remove a common uptime sensor that is shared between configurations: ```yaml -packages: !include common.yaml # see above +packages: + - !include common.yaml # see above sensor: - id: !remove uptime_sensor @@ -277,7 +280,8 @@ lvgl: To remove captive portal for a specific device: ```yaml -packages: !include common.yaml # see above +packages: + - !include common.yaml # see above captive_portal: !remove ``` From eb025f743c7b68a45dad48f161fd213f20572e13 Mon Sep 17 00:00:00 2001 From: Javier Peletier Date: Sat, 29 Nov 2025 08:09:44 +0100 Subject: [PATCH 047/109] [mipi_spi] add JC4827W543 (#5659) --- content/components/display/mipi_spi.md | 1 + 1 file changed, 1 insertion(+) diff --git a/content/components/display/mipi_spi.md b/content/components/display/mipi_spi.md index 00a482acbe..4de25e89cc 100644 --- a/content/components/display/mipi_spi.md +++ b/content/components/display/mipi_spi.md @@ -73,6 +73,7 @@ using an octal SPI bus, so references here to parallel and octal SPI are equival | JC3248W535 | Guition | | | JC3636W518 | Guition | | | JC3636W518V2 | Guition | | +| JC4827W543 | Guition | | | LANBON-L8 | Lanbon | | | T4-S3 | Lilygo | | | T-EMBED | Lilygo | | From cf6b18342990873be9350a8802efbdd60cb24f34 Mon Sep 17 00:00:00 2001 From: Jonathan Swoboda <154711427+swoboda1337@users.noreply.github.com> Date: Mon, 1 Dec 2025 07:53:49 -0500 Subject: [PATCH 048/109] [psram] C5 docs (#5708) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [psram] Document ESP32-C5 support Update PSRAM documentation to include ESP32-C5: - Supports quad mode only - Supports 40, 80, 120 MHz speeds 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude * [psram] Add ESP32-S2 to documentation ESP32-S2 also supports quad mode only with 40/80/120 MHz speeds. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude * [psram] Sort variants alphabetically 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --------- Co-authored-by: Claude --- content/components/psram.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/content/components/psram.md b/content/components/psram.md index afc496d82a..d3ce9aba88 100644 --- a/content/components/psram.md +++ b/content/components/psram.md @@ -23,7 +23,7 @@ psram: ## Configuration variables - **mode** (*Optional*): Defines the operating mode the PSRAM should utilize. One of `quad`, `octal` or `hex`. - Defaults to `quad` for ESP32 and `hex` for ESP32-P4. ESP32-S3 has no default and *requires* this option to be set. + Defaults to `quad` for ESP32, ESP32-C5, ESP32-S2 and `hex` for ESP32-P4. ESP32-S3 has no default and *requires* this option to be set. See notes below. - **speed** (*Optional*, int): The speed at which the PSRAM should operate. One of `40MHz` (default), `80MHz` or `120MHz`. - **enable_ecc** (*Optional*, bool): For octal mode, enable ECC (Error Correction Code) for the PSRAM (default is off.) @@ -39,7 +39,7 @@ psram: ## Modes -The ESP32 PSRAM is only available in `quad` mode, and ESP32-P4 only supports `hex` mode. These are the defaults +The ESP32, ESP32-C5 and ESP32-S2 PSRAM is only available in `quad` mode, and ESP32-P4 only supports `hex` mode. These are the defaults when using those variants. For ESP32-S3, the `mode` option is required and must be set to `quad` or `octal`. Typically on ESP32-S3 modules, a 2MB PSRAM will use quad mode, while 8 or 16MB will use octal mode, but check the datasheet for the module you are using to be sure. From 34dd2abb7a074ec140565373d5d485f7d014a596 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?H=2E=20=C3=81rkosi=20R=C3=B3bert?= Date: Wed, 3 Dec 2025 10:18:29 +0100 Subject: [PATCH 049/109] [gree] `turbo`, `light`, `health`, `xfan` switches (#5698) --- content/components/climate/climate_ir.md | 28 ++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/content/components/climate/climate_ir.md b/content/components/climate/climate_ir.md index 256af86d8a..64aa607efd 100644 --- a/content/components/climate/climate_ir.md +++ b/content/components/climate/climate_ir.md @@ -131,7 +131,7 @@ The Daikin ARC remotes (`daikin_arc` climate, `daikin_arc417`, `daikin_arc480` p ### `gree` -- **model** (**Required**, string): GREE has a few different protocols depending on model. One of these will work for you. +- **model** (**Required**, string): GREE has a few different protocols depending on model. One of these will likely work for you: - `generic` - `yan` @@ -142,14 +142,38 @@ The Daikin ARC remotes (`daikin_arc` climate, `daikin_arc417`, `daikin_arc480` p - `yag` ```yaml -# Example configuration entry +# Example configuration entry for climate only climate: - platform: gree name: "AC" + id: my_gree_ac sensor: room_temperature model: yan ``` +Models `yan`, `yaa`, `yac` and `yac1fb9` support a couple of additional features which can be controlled with switches: + +- **gree_id** (**Required**, [ID](/guides/configuration-types#id)): Specify the ID of the `gree` climate to which these swicthes should belong. +- **light** (*Optional*, [Switch](/components/switch#config-switch)): To turn off indoor unit display/LED at night for complete room darkness. +- **turbo** (*Optional*, [Switch](/components/switch#config-switch)): For maximum fan speed and fastest results. +- **health** (*Optional*, [Switch](/components/switch#config-switch)): Removal of dust and germs from the environment by ionizing the air flowing through the blades. +- **xfan** (*Optional*, [Switch](/components/switch#config-switch)): Prevention of excess moisture in the machine that cause mold, mildew, and unpleasant odors. Indoor fan will keep running for short period after turning turn off the AC, to dry the blades. + +```yaml +# Example configuration entry for switches of the climate +switch: + - platform: gree + gree_id: my_gree_ac + light: + name: "AC Lights" + turbo: + name: "AC Turbo" + health: + name: "AC Health" + xfan: + name: "AC X-Fan" +``` + {{< anchor "midea_ir" >}} ### `midea_ir` From c5e1ac7015089118d6cd50728e0933048ce29aab Mon Sep 17 00:00:00 2001 From: lygris Date: Wed, 3 Dec 2025 09:42:21 -0600 Subject: [PATCH 050/109] CC1101 docs (#5614) * Add CC1101 docs * lint fixes * More lint fixes * final lint fixes * fix img to be standard html * update with settings name changes * Update Docs to match latest commit. * Requested Fixes * missed these ones * lint fixes * moar lint fixes * add begin/end tx actions to examples * Remove some commented lines and fix lint error * Fix transmitter config example * Fix image link * actually fix image link * Add missing Idle action description. * Update for new code commit * lint fixes * Update to match latest component config * lint fixes * fix links * Clean up * Fix * Clean up * Clean up * Clean up * Add detail * Add detail * Add detail * Clean up --------- Co-authored-by: Jonathan Swoboda <154711427+swoboda1337@users.noreply.github.com> --- content/components/_index.md | 1 + content/components/cc1101.md | 248 +++++++++++++++++++++ content/components/images/cc1101-full.webp | Bin 0 -> 39320 bytes static/images/cc1101.webp | Bin 0 -> 39320 bytes 4 files changed, 249 insertions(+) create mode 100644 content/components/cc1101.md create mode 100644 content/components/images/cc1101-full.webp create mode 100644 static/images/cc1101.webp diff --git a/content/components/_index.md b/content/components/_index.md index 6f11bbe91d..2944f894a7 100644 --- a/content/components/_index.md +++ b/content/components/_index.md @@ -1042,6 +1042,7 @@ Used for creating infrared (IR) or radio frequency (RF) remote control transmitt ESPHome to cellular networks. **Does not encompass Wi-Fi.** {{< imgtable >}} +"CC1101","components/cc1101","cc1101.webp","" "IR Remote Climate","components/climate/climate_ir","air-conditioner-ir.svg","dark-invert" "Remote Receiver","components/remote_receiver","remote.svg","dark-invert" "Remote Transmitter","components/remote_transmitter","remote.svg","dark-invert" diff --git a/content/components/cc1101.md b/content/components/cc1101.md new file mode 100644 index 0000000000..2785db6db6 --- /dev/null +++ b/content/components/cc1101.md @@ -0,0 +1,248 @@ +--- +title: CC1101 Low-Power Sub-1 GHz RF Transceiver +description: Instructions for setting up CC1101 RF Transceiver in ESPHome. +image: /components/images/cc1101-full.webp +keywords: [cc1101] +--- + +The **CC1101** component provides a driver for the **Texas Instruments CC1101** Sub-1 GHz RF Transceiver +([datasheet](https://www.ti.com/lit/ds/symlink/cc1101.pdf)). The CC1101 is a low-cost, low-power radio +chip commonly used for wireless communication in the 300-928 MHz frequency bands, including the popular +315 MHz, 433 MHz, 868 MHz, and 915 MHz ISM bands. + +The **CC1101** supports multiple modulation schemes (ASK/OOK, 2-FSK, 4-FSK, GFSK, MSK), configurable data +rates from 600 to 500,000 baud, and adjustable output power from -30 dBm to +11 dBm. It connects to +ESPHome via the [SPI Bus](/components/spi) and integrates with the +[Remote Transmitter](/components/remote_transmitter) and +[Remote Receiver](/components/remote_receiver) components for encoding and decoding RF protocols. + +{{< img src="cc1101-full.webp" alt="CC1101 Module" width="50.0%" class="align-center" >}} + +## Component Configuration + +```yaml +# Minimal Example +cc1101: + cs_pin: GPIOXX + frequency: 433.92MHz +``` + +## Configuration Variables + +### Hardware Settings + +- **cs_pin** (**Required**, [Pin](/guides/configuration-types/#pin)): + The SPI Chip Select (CSN) pin connected to the module. + +### General Settings + +- **frequency** (*Optional*, frequency): The operating frequency. + Range: `300MHz` to `928MHz`. Defaults to `433.92MHz`. +- **output_power** (*Optional*, float): The transmission power in dBm. + Range: `-30` to `11`. Defaults to `10`. +- **modulation_type** (*Optional*, enum): The modulation format. + Options: `ASK/OOK` (default), `2-FSK`, `4-FSK`, `GFSK`, `MSK`. +- **symbol_rate** (*Optional*, int): The symbol rate in Baud. + Range: `600` to `500000`. Defaults to `5000`. +- **rx_attenuation** (*Optional*, enum): Internal RX attenuation. + Options: `0dB`, `6dB`, `12dB`, `18dB`. Defaults to `0dB`. +- **dc_blocking_filter** (*Optional*, boolean): Enable the digital DC blocking filter. Defaults to `true`. + +### Tuner Settings + +- **filter_bandwidth** (*Optional*, frequency): The receive filter bandwidth. + Range: `58kHz` to `812kHz`. Defaults to `203kHz`. +- **fsk_deviation** (*Optional*, frequency): Frequency deviation for FSK/GFSK modulation. +- **channel** (*Optional*, int): Channel number (added to base frequency). Defaults to `0`. +- **channel_spacing** (*Optional*, frequency): Spacing between channels. Defaults to `200kHz`. +- **if_frequency** (*Optional*, frequency): Intermediate Frequency. Defaults to `153kHz`. +- **pktlen** (*Optional*, int): Packet length configuration. Sets the expected packet size for + fixed-length packet mode. Range: `1` to `255`. Not typically needed for OOK/ASK modulation. + +### AGC (Automatic Gain Control) Settings + +Advanced users can fine-tune the AGC dynamics. The AGC automatically adjusts receiver gain to handle +signals of varying strength. These settings control how aggressively and quickly the gain adapts. +See the [CC1101 Datasheet](https://www.ti.com/lit/ds/symlink/cc1101.pdf) for detailed information. + +- **magn_target** (*Optional*, dB): Target signal amplitude for the AGC loop. Higher values increase + sensitivity but may cause clipping on strong signals. + Range: `24dB` to `42dB` in increments of 3 (e.g., `33dB`). Defaults to `42dB`. +- **max_lna_gain** (*Optional*, dB): Limits the maximum LNA (Low Noise Amplifier) gain. Use to prevent + saturation in high-signal environments. Defaults to `Default`. + Options: `Default`, `2.6dB`, `6.1dB`, `7.4dB`, `9.2dB`, `11.5dB`, `14.6dB`, `17.1dB`. +- **max_dvga_gain** (*Optional*, enum): Limits the maximum DVGA (Digital Variable Gain Amplifier) gain. + Options: `Default`, `-1`, `-2`, `-3`. Defaults to `-3`. +- **lna_priority** (*Optional*, boolean): If true, reduce LNA gain before DVGA gain when decreasing + overall gain. Useful for optimizing noise figure. Defaults to `false`. +- **carrier_sense_abs_thr** (*Optional*, int): Absolute RSSI threshold for carrier sense. The radio + considers a carrier present when RSSI exceeds this level. +- **carrier_sense_rel_thr** (*Optional*, enum): Relative RSSI threshold for carrier sense, compared + to the current noise floor. Options: `Default`, `+6dB`, `+10dB`, `+14dB`. +- **filter_length_fsk_msk** (*Optional*, enum): Averaging length for AGC in FSK/MSK modes. + Longer values provide more stable gain but slower response. Options: `8`, `16`, `32`, `64`. +- **filter_length_ask_ook** (*Optional*, enum): Averaging length for AGC in ASK/OOK modes. + Longer values provide more stable gain but slower response. Options: `4dB`, `8dB`, `12dB`, `16dB`. +- **freeze** (*Optional*, enum): Controls when AGC gain is frozen (held constant). + Options: `Default`, `On Sync`, `Analog Only`, `Analog And Digital`. +- **wait_time** (*Optional*, enum): Time to wait after a gain change before allowing another adjustment. + Options: `8`, `16`, `24`, `32`. Defaults to `32`. +- **hyst_level** (*Optional*, enum): Hysteresis level to prevent gain oscillation on borderline signals. + Options: `None`, `Low`, `Medium`, `High`. + +## Actions + +This component provides actions to control the radio state, primarily used for coordinating transmission. + +- **cc1101.begin_tx**: Puts the radio into TX mode. Must be called before transmitting. +- **cc1101.begin_rx**: Puts the radio into RX mode. Call after transmitting to resume receiving. +- **cc1101.set_idle**: Puts the radio into an idle state. In single-pin configurations, this should be + called before switching between TX and RX modes to ensure clean state transitions. +- **cc1101.reset**: Resets the CC1101 chip and re-applies configuration. + +## Integration with Remote Receiver/Transmitter + +The component automatically configures the GDO pins to support both dual and single pin wiring schemes +without any extra configuration. + +### 1. Dual Pin Wiring (Recommended) + +This is the simplest and recommended wiring scheme. It uses separate pins for transmitting and receiving data. + +- **GDO0 (Module Pin 3)**: Connect to the MCU pin used by `remote_transmitter`. +- **GDO2 (Module Pin 8)**: Connect to the MCU pin used by `remote_receiver`. + +```yaml +cc1101: + cs_pin: GPIOXX + +remote_transmitter: + pin: GPIOXX # Must match GDO0 + carrier_duty_percent: 100% + on_transmit: + then: + - cc1101.begin_tx + on_complete: + then: + - cc1101.begin_rx + +remote_receiver: + pin: GPIOXX # CC1101 GDO2 + dump: all +``` + +### 2. Single Pin Wiring + +This wiring scheme uses a single MCU pin for both transmitting and receiving data, connected to GDO0. +This requires careful configuration of the `remote_transmitter` and `remote_receiver` to avoid conflicts. +Using an open-drain pin mode is recommended to simplify the setup. + +- **GDO0 (Module Pin 3)**: Connect to a single MCU GPIO pin. +- **GDO2 (Module Pin 8)**: Leave disconnected. + +#### Single Pin with Open-Drain + +ESP32 must use this method when using single-pin wiring. The shared pin should be set to open-drain with a +pullup. The `eot_level` option (from `remote_transmitter`) controls the pin state after transmission +completes - setting it to `false` keeps the pin low until explicitly released. In addition to setting the +CC1101 mode in `on_transmit`/`on_complete`, the pin should be driven low before `begin_tx` and released +before `begin_rx`. + +```yaml +cc1101: + cs_pin: GPIOXX + +remote_receiver: + pin: + number: GPIOXX # Must match GDO0 + mode: + input: true + output: true + pullup: true + open_drain: true + allow_other_uses: true + dump: all + +remote_transmitter: + pin: + number: GPIOXX # Must match GDO0 + mode: + input: true + output: true + pullup: true + open_drain: true + allow_other_uses: true + eot_level: false + carrier_duty_percent: 100% + on_transmit: + then: + - cc1101.set_idle + - remote_transmitter.digital_write: false + - cc1101.begin_tx + on_complete: + then: + - cc1101.set_idle + - remote_transmitter.digital_write: true + - cc1101.begin_rx +``` + +#### Single Pin with Mode Switching + +This method requires lambdas to manually switch the pin mode between input and output around transmissions. +On boot, the pin must be set to input mode so the receiver can operate. + +```yaml +esphome: + on_boot: + - priority: 0 + then: + - lambda: id(rx_pin)->pin_mode(gpio::FLAG_INPUT); + +cc1101: + cs_pin: GPIOXX + +remote_receiver: + pin: + id: rx_pin + number: GPIOXX # Must match GDO0 + allow_other_uses: true + dump: all + +remote_transmitter: + pin: + id: tx_pin + number: GPIOXX # Must match GDO0 + allow_other_uses: true + carrier_duty_percent: 100% + on_transmit: + then: + - cc1101.set_idle + - lambda: id(tx_pin)->pin_mode(gpio::FLAG_OUTPUT); + - cc1101.begin_tx + on_complete: + then: + - cc1101.set_idle + - lambda: id(rx_pin)->pin_mode(gpio::FLAG_INPUT); + - cc1101.begin_rx +``` + +## Troubleshooting + +### "FF0F was found" Error + +If you see a log entry stating `FF0F`, `0000`, or `FFFF` during setup, this indicates an SPI +communication failure. Check your wiring (MISO/MOSI/CS). + +### No Signal during Transmit + +- **Check Pinout**: For all modes, the data line must be connected to GDO0 (Module Pin 3), + as the CC1101 chip only supports transmission input via the GDO0 pin. +- **Check Pin Mode**: If using the Single Pin with Mode Switching method, + ensure your `on_transmit`/`on_complete` logic correctly flips the pin mode. + +## See Also + +- [Remote Receiver](/components/remote_receiver) +- [Remote Transmitter](/components/remote_transmitter) +- [SPI Component](/components/spi) +- [CC1101 Datasheet](https://www.ti.com/lit/ds/symlink/cc1101.pdf) diff --git a/content/components/images/cc1101-full.webp b/content/components/images/cc1101-full.webp new file mode 100644 index 0000000000000000000000000000000000000000..f99bf15e975e3a2fdc377b0c9e73f9a901536562 GIT binary patch literal 39320 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 BSZ)9S literal 0 HcmV?d00001 diff --git a/static/images/cc1101.webp b/static/images/cc1101.webp new file mode 100644 index 0000000000000000000000000000000000000000..f99bf15e975e3a2fdc377b0c9e73f9a901536562 GIT binary patch literal 39320 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 BSZ)9S literal 0 HcmV?d00001 From e6aecb6aa5fd89c695a2ccd376481471a7912b3d Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Thu, 27 Nov 2025 22:11:24 -0600 Subject: [PATCH 051/109] [wifi] Clarify fast_connect behavior and add hidden network documentation (#5682) Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- content/components/wifi.md | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/content/components/wifi.md b/content/components/wifi.md index ce3d88df10..d5795f010e 100644 --- a/content/components/wifi.md +++ b/content/components/wifi.md @@ -97,13 +97,19 @@ wifi: for ESP8266 is 20dB, 20.5dB might cause unexpected restarts. - **fast_connect** (*Optional*, boolean): If enabled, directly connects to WiFi network without doing a full scan - first. This is required for hidden networks and can significantly improve connection times (thus reducing power - consumption). Defaults to `off`. + first. This can significantly improve connection times (thus reducing power consumption). Defaults to `off`. The downside is that this option connects to the first network the ESP sees, even if that network is very far away and better ones are available. If multiple networks are configured, the last successfully connected one is tested first. In case it fails, all networks are then tested one after the other in their declared order, starting with the first one in the list. + > [!NOTE] + > While `fast_connect` skips the initial scan, if the connection attempt fails, ESPHome will still perform a scan + > to find available networks. For hidden networks, use `hidden: true` on the network configuration (see + > [Connecting to Multiple Networks](#wifi-networks)) to ensure the device always connects without scanning. + > Be aware that marking networks as hidden prevents ESPHome from finding the best access point to connect to, + > so the device may not connect to the AP with the best signal strength. + - **min_auth_mode** (*Optional*, string): Only on `esp32` and `esp8266`. Sets the minimum WiFi authentication mode that the device will accept when connecting to access points. This controls the weakest encryption your device will allow. Possible values are: @@ -300,11 +306,27 @@ wifi: - **hidden** (*Optional*, boolean): Whether this network is hidden. Defaults to false. If you add this option you also have to specify ssid. + > [!TIP] + > Set `hidden: true` if your network does not broadcast its SSID. This ensures the device attempts to connect + > using hidden network mode without first scanning for visible networks. Note that when connecting to a hidden + > network, ESPHome cannot determine which access point has the best signal strength, potentially resulting in + > connections to APs with weaker signals when multiple APs share the same SSID. + - **priority** (*Optional*, int): The priority of this network (range: -128 to 127). The network with the highest priority is chosen. After each connection failure, the priority is decreased by one. If all tracked BSSIDs have identical priorities, they are automatically reset to 0 to start fresh. Defaults to `0`. +### Example: Connecting to a Hidden Network + +```yaml +wifi: + networks: + - ssid: MyHiddenNetwork + password: VerySafePassword + hidden: true +``` + {{< anchor "eap" >}} ## Enterprise Authentication From 1d49c7b0ddb3d0c4cbe7bbbcf0585f2524ff5572 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vinc=C3=A8n?= Date: Fri, 28 Nov 2025 14:26:44 +0100 Subject: [PATCH 052/109] Add DFRobot Edge101 Ethernet configuration example (#5686) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Update ethernet.md Added sample code for DFRobot Edge101 device (configuration tested with hardware) * updated syntax syntax update for encoding of the clock GPIO and mode --------- Co-authored-by: Jonathan Swoboda <154711427+swoboda1337@users.noreply.github.com> Co-authored-by: H. Árkosi Róbert --- content/components/ethernet.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/content/components/ethernet.md b/content/components/ethernet.md index 3f6da480d4..ceaab53aba 100644 --- a/content/components/ethernet.md +++ b/content/components/ethernet.md @@ -240,6 +240,20 @@ ethernet: power_pin: GPIO5 ``` +**DFRobot Edge101** and **ESP32-DOWD-V3**: + +```yaml +ethernet: + type: IP101 + mdc_pin: GPIO4 + mdio_pin: GPIO13 + clk: + pin: GPIO0 + mode: CLK_EXT_IN + power_pin: GPIO2 + phy_addr: 1 +``` + **AiThinker ESP32-G Gateway**: ```yaml From ebfebff3da2716bc31b59419f83a29e893923ca9 Mon Sep 17 00:00:00 2001 From: Jonathan Swoboda <154711427+swoboda1337@users.noreply.github.com> Date: Sun, 30 Nov 2025 21:22:08 -0500 Subject: [PATCH 053/109] [remote_receiver] Add missing default value for idle config option (#5700) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Document that the idle configuration option defaults to 10ms. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: Claude --- content/components/remote_receiver.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/components/remote_receiver.md b/content/components/remote_receiver.md index f29d02915c..9e69d7809a 100644 --- a/content/components/remote_receiver.md +++ b/content/components/remote_receiver.md @@ -85,7 +85,7 @@ Multiple remote receivers can be configured as a list of dict definitions within glitches from noisy signals. Allowed values are in range `0` to `4294967295us`. Defaults to `50us`. - **idle** (*Optional*, [Time](/guides/configuration-types#time)): The amount of time that a signal should remain stable/unchanged for it to - be considered complete. The maximum allowable value is: + be considered complete. Defaults to `10ms`. The maximum allowable value is: - `65536us` on the `ESP32` and `ESP32-S2` variants - `32767us` on all other ESP32 variants From 748b3265347ad5efbe96d8c1c53c7840579074a2 Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Mon, 1 Dec 2025 15:22:24 +1300 Subject: [PATCH 054/109] [psram] Fix breaking change for psram missing key info (#5707) --- content/changelog/2025.11.0.md | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/content/changelog/2025.11.0.md b/content/changelog/2025.11.0.md index 79d63bc42f..b0d316e520 100644 --- a/content/changelog/2025.11.0.md +++ b/content/changelog/2025.11.0.md @@ -382,7 +382,15 @@ HTTP request actions now pass trigger variables correctly into `on_response` and - **ESP32 brownout protection**: ESP-IDF now reduces PHY TX power during brownout to prevent boot loops. Can be disabled with `sdkconfig_options: CONFIG_ESP_PHY_REDUCE_TX_POWER: n` if needed. [#11306](https://github.com/esphome/esphome/pull/11306) -- **ESP32-S3 PSRAM**: PSRAM mode is now required when multiple PSRAM modes are available (ESP32-S3 only). Users must explicitly choose PSRAM mode in configuration. [#11470](https://github.com/esphome/esphome/pull/11470) +- **ESP32 PSRAM**: PSRAM is no longer auto-loaded by components that depend on it (such as `esp32_camera`, `speaker`, and `media_player`). Users must now explicitly add a `psram:` configuration block to their YAML. Additionally, for ESP32-S3, the `mode` option is now required since S3 supports both quad and octal modes. Typically, 2MB PSRAM uses `quad` mode while 8 or 16MB uses `octal` mode—check your module's datasheet. Example configuration: + + ```yaml + psram: + mode: octal # Required for ESP32-S3, use 'quad' or 'octal' + speed: 80MHz + ``` + + [#11470](https://github.com/esphome/esphome/pull/11470) ### Component Behavior Changes From 3a84daf9897f56d0a449f27a755948c9fe02710a Mon Sep 17 00:00:00 2001 From: Peter Zich Date: Mon, 1 Dec 2025 11:17:49 -0800 Subject: [PATCH 055/109] [esp32_cam] Add PSRAM requirement note to ESP32 Camera Component (#5710) --- content/components/esp32_camera.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/components/esp32_camera.md b/content/components/esp32_camera.md index cc3c9a9b99..019e321bc6 100644 --- a/content/components/esp32_camera.md +++ b/content/components/esp32_camera.md @@ -10,7 +10,7 @@ params: The `esp32_camera` component allows you to use ESP32-based camera boards in ESPHome that directly integrate into Home Assistant through the native API. -Requires an {{< docref "/components/i2c" >}} to be set up. +Requires an {{< docref "/components/i2c" >}} and {{< docref "/components/psram" >}} to be configured. ```yaml # Example configuration entry From 4ee8b84ef4760fb2b84594da7a0728a533476281 Mon Sep 17 00:00:00 2001 From: Jonathan Swoboda <154711427+swoboda1337@users.noreply.github.com> Date: Wed, 3 Dec 2025 14:57:56 -0500 Subject: [PATCH 056/109] [cst816] Add CST836 and CST816D to supported chips list (#5718) --- content/components/touchscreen/cst816.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/content/components/touchscreen/cst816.md b/content/components/touchscreen/cst816.md index b3a4cb090e..99399ca50d 100644 --- a/content/components/touchscreen/cst816.md +++ b/content/components/touchscreen/cst816.md @@ -10,8 +10,8 @@ params: The `cst816` touchscreen platform allows using the touch screen controllers based on the CST816 series of chips with ESPHome. The [I²C](/components/i2c) is required to be set up in your configuration for this touchscreen to work. -This controller is used in the Lilygo T-Display S3 AMOLED. The component should work with CST816T, CST816S, CST820, CST826 and CST716 -controller chips. +This controller is used in the Lilygo T-Display S3 AMOLED. The component should work with CST716, CST816D, CST816S, +CST816T, CST820, CST826, and CST836 controller chips. {{< img src="cst816.jpg" alt="Image" caption="cst816t touchscreen on T-Display S3 AMOLED" width="50.0%" class="align-center" >}} From c95b735c2d927bc47a8872913625993d6d49d61a Mon Sep 17 00:00:00 2001 From: Kevin Ahrendt Date: Wed, 3 Dec 2025 15:19:05 -0500 Subject: [PATCH 057/109] [wifi_info] Document a new wifi power mode text sensor (#5512) --- content/components/text_sensor/wifi_info.md | 30 ++++++++++++--------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/content/components/text_sensor/wifi_info.md b/content/components/text_sensor/wifi_info.md index 078518d765..95d3fd0ca2 100644 --- a/content/components/text_sensor/wifi_info.md +++ b/content/components/text_sensor/wifi_info.md @@ -15,32 +15,34 @@ via text sensors. text_sensor: - platform: wifi_info ip_address: - name: ESP IP Address + name: Device IP Address address_0: - name: ESP IP Address 0 + name: Device IP Address 0 address_1: - name: ESP IP Address 1 + name: Device IP Address 1 address_2: - name: ESP IP Address 2 + name: Device IP Address 2 address_3: - name: ESP IP Address 3 + name: Device IP Address 3 address_4: - name: ESP IP Address 4 + name: Device IP Address 4 ssid: - name: ESP Connected SSID + name: Device Connected SSID bssid: - name: ESP Connected BSSID + name: Device Connected BSSID mac_address: - name: ESP Mac Wifi Address + name: Device Mac Wifi Address scan_results: - name: ESP Latest Scan Results + name: Device Latest Scan Results dns_address: - name: ESP DNS Address + name: Device DNS Address + power_save_mode: + name: Device Wifi Power Save Mode ``` ## Configuration variables -- **ip_address** (*Optional*): Expose the IP Address of the ESP as a text sensor. +- **ip_address** (*Optional*): Expose the IP Address of the device as a text sensor. All options from [Text Sensor](/components/text_sensor#config-text_sensor). - **address_0** (*Optional*): With dual stack (IPv4 and IPv6) the device will have at least two IP addresses, often more. @@ -59,9 +61,11 @@ text_sensor: - **scan_results** (*Optional*): Expose the latest networks found during the latest scan. All options from [Text Sensor](/components/text_sensor#config-text_sensor). -- **dns_address** (*Optional*): Expose the DNS Address of the ESP as text sensor. +- **dns_address** (*Optional*): Expose the DNS Address of the device as text sensor. [Text Sensor](/components/text_sensor#config-text_sensor). +- **power_save_mode** (*Optional*) Expose the WiFi Power save mode of the device as a text sensor. + ## See Also - {{< docref "/components/wifi" >}} From e9d2054e2687b3736db6b5870a92660628229e45 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Wed, 3 Dec 2025 21:40:59 -0600 Subject: [PATCH 058/109] [esp32] Document freertos_in_iram advanced option (#5693) --- content/components/esp32.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/content/components/esp32.md b/content/components/esp32.md index 802cf56fad..f238137112 100644 --- a/content/components/esp32.md +++ b/content/components/esp32.md @@ -198,6 +198,19 @@ The following options disable unused VFS features to save flash memory: future storage components) automatically enable it regardless of this setting. Disabling this saves approximately 0.5 KB+ of flash. Defaults to `true` (VFS directory support disabled to save flash). +**FreeRTOS Memory Options:** + +- **freertos_in_iram** (*Optional*, boolean): Keep FreeRTOS functions in IRAM instead of moving them to flash. By default, + non-ISR FreeRTOS functions are placed in flash to save up to 8 KB of IRAM. ISR-safe functions (`FromISR` variants) always + remain in IRAM. Testing on ESP-IDF 5.5 with Bluetooth proxies shows no performance difference thanks to fast XIP (execute + in place) from flash. Bluetooth proxies are one of the most IRAM-intensive and timing-sensitive use cases, which is likely + why Espressif made this the default in IDF 6.0. This matches + the default behavior in ESP-IDF 6.0 where `CONFIG_FREERTOS_PLACE_FUNCTIONS_INTO_FLASH` is removed and replaced by + `CONFIG_FREERTOS_IN_IRAM` to restore the old behavior (see [ESP-IDF 6.0 breaking changes](https://github.com/espressif/esp-idf/issues/17052) + and [migration guide](https://docs.espressif.com/projects/esp-idf/en/latest/esp32/migration-guides/release-6.x/6.0/system.html#memory-placement)). + Set to `true` only if you encounter issues with code that incorrectly calls FreeRTOS functions from ISRs with flash cache + disabled. Defaults to `false` (FreeRTOS functions in flash to save IRAM). + Some options can be disabled to save flash memory without affecting typical ESPHome functionality. The performance options (defaulting to `true` ) improve socket operation performance but can be disabled if you need better multi-threaded scalability (which is uncommon since ESPHome uses an event loop). From 82fe88a4a1c84082bae93b85df66b8f52bed219a Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Thu, 4 Dec 2025 04:41:51 +0000 Subject: [PATCH 059/109] [esp32] Document ringbuf_in_iram advanced option (#5694) * [esp32] Document freertos_in_iram advanced option * [esp32] Document ringbuf_in_iram advanced option * Revert "[esp32] Document ringbuf_in_iram advanced option" This reverts commit f1fd76bfdb9862f7c9918dc672d6fb39c96da39d. * Revert "Revert "[esp32] Document ringbuf_in_iram advanced option"" This reverts commit a5b7cb8436c6d4e5f47e40167e58d8e77db74b2c. * remove enable_ringbuf_in_iram --- content/components/esp32.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/content/components/esp32.md b/content/components/esp32.md index f238137112..98ff529e59 100644 --- a/content/components/esp32.md +++ b/content/components/esp32.md @@ -211,6 +211,12 @@ The following options disable unused VFS features to save flash memory: Set to `true` only if you encounter issues with code that incorrectly calls FreeRTOS functions from ISRs with flash cache disabled. Defaults to `false` (FreeRTOS functions in flash to save IRAM). +- **ringbuf_in_iram** (*Optional*, boolean): Keep ring buffer functions in IRAM instead of moving them to flash. By default, + ring buffer functions are placed in flash to save ~1.5 KB of IRAM. Ring buffer functions are typically only called every + ~10ms for audio components, so the overhead of loading from flash vs IRAM is negligible compared to actual data processing. + This matches the default behavior in ESP-IDF 6.0 (see [migration guide](https://docs.espressif.com/projects/esp-idf/en/latest/esp32/migration-guides/release-6.x/6.0/system.html#id1)). + Set to `true` only if you encounter issues. Defaults to `false` (ring buffer functions in flash to save IRAM). + Some options can be disabled to save flash memory without affecting typical ESPHome functionality. The performance options (defaulting to `true` ) improve socket operation performance but can be disabled if you need better multi-threaded scalability (which is uncommon since ESPHome uses an event loop). From 9959473380f8646258949d9b84401d8948ca8af6 Mon Sep 17 00:00:00 2001 From: Sergio Livi Date: Thu, 4 Dec 2025 04:37:46 +0100 Subject: [PATCH 060/109] Add missing information for inkplate (#5696) --- content/components/display/inkplate.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/content/components/display/inkplate.md b/content/components/display/inkplate.md index ca1fca1749..b654b3e04c 100644 --- a/content/components/display/inkplate.md +++ b/content/components/display/inkplate.md @@ -72,6 +72,8 @@ display: - `inkplate_10` - `inkplate_6_plus` - `inkplate_6_v2` + - `inkplate_5` + - `inkplate_5_v2` - **greyscale** (*Optional*, boolean): Makes the screen display 3 bit colors. Defaults to `false` - **partial_updating** (*Optional*, boolean): Makes the screen update partially, which is faster, but leaves burnin. Defaults to `false` @@ -138,6 +140,7 @@ esphome: esp32: board: esp-wrover-kit + cpu_frequency: 240MHz logger: @@ -237,6 +240,8 @@ font: id: helvetica_48 size: 48 +psram: + display: - platform: inkplate id: inkplate_display @@ -398,7 +403,7 @@ display: greyscale: true partial_updating: false update_interval: never - model: inkplate_5_v2 + model: inkplate_5 # or inkplate_5_v2 ckv_pin: 32 sph_pin: 33 From f2c2e3ffb1d1d11dff127b6638c949ba38ce9d82 Mon Sep 17 00:00:00 2001 From: phoenix-9 Date: Wed, 3 Dec 2025 21:41:15 -0600 Subject: [PATCH 061/109] Update rf_bridge.md (#5695) Update rf_bridge references to my_rf_bridge. Compiler complains: ID 'rf_bridge' conflicts with the name of an esphome integration, please use another ID name. send_advanced_code() expects struct RFBridgeAdvancedData, not three individual parameters. --- content/components/rf_bridge.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/content/components/rf_bridge.md b/content/components/rf_bridge.md index b0d45347b1..a77be3cc3e 100644 --- a/content/components/rf_bridge.md +++ b/content/components/rf_bridge.md @@ -91,7 +91,7 @@ Configuration options: > This action can also be written in [lambdas](/automations/templates#config-lambda): > > ```cpp -> id(rf_bridge).send_code(0x700, 0x800, 0x1000, 0xABC123); +> id(my_rf_bridge).send_code(0x700, 0x800, 0x1000, 0xABC123); > ``` {{< anchor "rf_bridge-beep_action" >}} @@ -116,7 +116,7 @@ Configuration options: > This action can also be written in [lambdas](/automations/templates#config-lambda): > > ```cpp -> id(rf_bridge).beep(100); +> id(my_rf_bridge).beep(100); > ``` {{< anchor "rf_bridge-learn_action" >}} @@ -140,7 +140,7 @@ Configuration options: > This action can also be written in [lambdas](/automations/templates#config-lambda): > > ```cpp -> id(rf_bridge).learn(); +> id(my_rf_bridge).learn(); > ``` {{< anchor "rf_bridge-send_raw_action" >}} @@ -170,7 +170,7 @@ Configuration options: > This action can also be written in [lambdas](/automations/templates#config-lambda): > > ```cpp -> id(rf_bridge).send_raw("AAA5070008001000ABC12355"); +> id(my_rf_bridge).send_raw("AAA5070008001000ABC12355"); > ``` ## Portisch firmware @@ -225,7 +225,7 @@ Configuration options: > This action can also be written in [lambdas](/automations/templates#config-lambda): > > ```cpp -> id(rf_bridge).send_advanced_code(0x04, 0x01, "ABC123"); +> id(my_rf_bridge).send_advanced_code({0x04, 0x01, "ABC123"}); > ``` {{< anchor "rf_bridge-start_advanced_sniffing_action" >}} @@ -249,7 +249,7 @@ Configuration options: > This action can also be written in [lambdas](/automations/templates#config-lambda): > > ```cpp -> id(rf_bridge).start_advanced_sniffing(); +> id(my_rf_bridge).start_advanced_sniffing(); > ``` {{< anchor "rf_bridge-stop_advanced_sniffing_action" >}} @@ -272,7 +272,7 @@ Configuration options: > This action can also be written in [lambdas](/automations/templates#config-lambda): > > ```cpp -> id(rf_bridge).stop_advanced_sniffing(); +> id(my_rf_bridge).stop_advanced_sniffing(); > ``` {{< anchor "rf_bridge-start_bucket_sniffing_action" >}} @@ -304,7 +304,7 @@ Configuration options: > This action can also be written in [lambdas](/automations/templates#config-lambda): > > ```cpp -> id(rf_bridge).start_bucket_sniffing(); +> id(my_rf_bridge).start_bucket_sniffing(); > ``` {{< anchor "rf_bridge-restart_radio_controller" >}} From f9653c3ed185e1ba17641014ce3bd4f06a3ea266 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 4 Dec 2025 03:41:59 +0000 Subject: [PATCH 062/109] Bump actions/stale from 10.1.0 to 10.1.1 (#5720) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/stale.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml index 12fc5138d7..3042ad2f27 100644 --- a/.github/workflows/stale.yml +++ b/.github/workflows/stale.yml @@ -16,7 +16,7 @@ jobs: stale: runs-on: ubuntu-latest steps: - - uses: actions/stale@5f858e3efba33a5ca4407a664cc011ad407f2008 # v10 + - uses: actions/stale@997185467fa4f803885201cee163a9f38240193d # v10 with: days-before-pr-stale: 60 days-before-pr-close: 7 From 3919df6ddc52c4bb275d0a10acb30ead4b1e1c0e Mon Sep 17 00:00:00 2001 From: whc2001 Date: Wed, 3 Dec 2025 22:57:17 -0500 Subject: [PATCH 063/109] fix: Unintuitive config documentations for ES8311 (#5691) * fix: Unintuitive config documentations for ES8311 * Update content/components/audio_dac/es8311.md --------- Co-authored-by: Jonathan Swoboda <154711427+swoboda1337@users.noreply.github.com> --- content/components/audio_dac/es8311.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/components/audio_dac/es8311.md b/content/components/audio_dac/es8311.md index 2ae4a03a3f..00754aecb2 100644 --- a/content/components/audio_dac/es8311.md +++ b/content/components/audio_dac/es8311.md @@ -26,7 +26,7 @@ audio_dac: - **bits_per_sample** (*Optional*, enum): The bit depth of the audio samples. One of `16bit`, `24bit`, or `32bit`. Defaults to `16bit`. - **sample_rate** (*Optional*, positive integer): I2S sample rate. Defaults to `16000`. - **use_mclk** (*Optional*, bool): Use the MCLK signal to control the clock. Defaults to `True`. -- **use_microphone** (*Optional*, bool): Configure the codec's ADC for microphone input. Defaults to `False`. +- **use_microphone** (*Optional*, bool): Configure the codec's ADC to use PDM microphone input instead of analog. Defaults to False. - **mic_gain** (*Optional*, enum): The gain applied to the ADC microphones. One of `MIN`, `0DB`, `6DB`, `12DB`, `18DB`, `24DB`, `30DB`, `36DB`, `42DB`, or `MAX`. Defaults to `42DB`. - **address** (*Optional*, int): The I²C address of the driver. Defaults to `0x18`. - **i2c_id** (*Optional*): The ID of the [I²C bus](/components/i2c) the ES8311 is connected to. From 1489f80638c56e100e1b949b747204b874c7263c Mon Sep 17 00:00:00 2001 From: nepozs <56661567+nepozs@users.noreply.github.com> Date: Thu, 4 Dec 2025 08:04:10 +0400 Subject: [PATCH 064/109] Update mcp230xx.md - update datasheets to current versions and links to HTTPS (#5581) * Update mcp230xx.md Update outdated MCP23017 datasheet * Update mcp230xx.md Updated also datasheets of current revision MCP23008 (important differences) and MCP23016 (new link only, document revision is the same) --------- Co-authored-by: Jonathan Swoboda <154711427+swoboda1337@users.noreply.github.com> --- content/components/mcp230xx.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/content/components/mcp230xx.md b/content/components/mcp230xx.md index 11b6af5460..03dc0b2fc2 100644 --- a/content/components/mcp230xx.md +++ b/content/components/mcp230xx.md @@ -19,7 +19,7 @@ The Microchip MCP230xx series of general purpose, parallel I/O expansion for I² ## MCP23008 Component -The MCP23008 component ([datasheet](http://ww1.microchip.com/downloads/en/devicedoc/21919e.pdf), +The MCP23008 component ([datasheet](https://ww1.microchip.com/downloads/aemDocuments/documents/APID/ProductDocuments/DataSheets/MCP23008-MCP23S08-Data-Sheet-DS20001919.pdf), [Adafruit](https://www.adafruit.com/product/593)) has 8 GPIOs that can be configured independently. ```yaml @@ -78,7 +78,7 @@ binary_sensor: ## MCP23016 Component -The MCP23016 component ([datasheet](http://ww1.microchip.com/downloads/en/devicedoc/20090c.pdf)) +The MCP23016 component ([datasheet](https://ww1.microchip.com/downloads/aemDocuments/documents/APID/ProductDocuments/DataSheets/20090C.pdf)) has 16 GPIOs and can be configured the same way than the other variants. > [!NOTE] @@ -131,7 +131,7 @@ binary_sensor: ## MCP23017 Component The MCP23017 component allows you to use MCP23017 I/O expanders -([datasheet](http://ww1.microchip.com/downloads/en/devicedoc/20001952c.pdf), +([datasheet](https://ww1.microchip.com/downloads/aemDocuments/documents/APID/ProductDocuments/DataSheets/MCP23017-Data-Sheet-DS20001952.pdf), [Adafruit](https://www.adafruit.com/product/732)) in ESPHome. It uses the [I²C Bus](/components/i2c) for communication. From 8d331cf2c7c096a306848fa4199930a4874272b7 Mon Sep 17 00:00:00 2001 From: Manuel <30572287+manuel-rw@users.noreply.github.com> Date: Thu, 4 Dec 2025 04:05:47 +0000 Subject: [PATCH 065/109] Add warning about sensor membrane tampering (#5496) * Add warning about sensor membrane tampering Added a warning about the sensor's white membrane * Add warning about tampering with sensor membrane Added a warning about the sensor's white membrane to ensure proper operation. --------- Co-authored-by: Jonathan Swoboda <154711427+swoboda1337@users.noreply.github.com> --- content/components/sensor/scd4x.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/content/components/sensor/scd4x.md b/content/components/sensor/scd4x.md index 4876211ef5..85ec8de623 100644 --- a/content/components/sensor/scd4x.md +++ b/content/components/sensor/scd4x.md @@ -25,6 +25,9 @@ sensor: name: "Workshop Humidity" ``` +> [!WARNING] +> The white membrane on the sensor must not be removed or tampered with [to ensure proper operation](https://community.home-assistant.io/t/scd41-question-white-tape-on-sensor/730240). + ## Configuration variables - **co2** (*Optional*): The information for the CO₂ sensor. From 2d04d20db738cb718aea83738b59834f1378a14b Mon Sep 17 00:00:00 2001 From: Bohrium332 <167631481+Bohrium332@users.noreply.github.com> Date: Thu, 4 Dec 2025 13:07:06 +0800 Subject: [PATCH 066/109] Add Seeed Studio XIAO ESP32-S3 PoE to Bluetooth Proxy device list (#5540) Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: J. Nick Koston Co-authored-by: J. Nick Koston Co-authored-by: J. Nick Koston --- .../bluetooth-proxy/seeed-esp32-poe.png | Bin 0 -> 106198 bytes .../layouts/_default/projects.html | 42 +++++++++++++++++- 2 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 static/projects/bluetooth-proxy/seeed-esp32-poe.png diff --git a/static/projects/bluetooth-proxy/seeed-esp32-poe.png b/static/projects/bluetooth-proxy/seeed-esp32-poe.png new file mode 100644 index 0000000000000000000000000000000000000000..345bbdf9e2d5070983ef889c55fb5b369d54aa42 GIT binary patch literal 106198 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 Mt@HM~zaEMCA2jeg00000 literal 0 HcmV?d00001 diff --git a/themes/esphome-theme/layouts/_default/projects.html b/themes/esphome-theme/layouts/_default/projects.html index 1cff55bb6e..36617e52d6 100644 --- a/themes/esphome-theme/layouts/_default/projects.html +++ b/themes/esphome-theme/layouts/_default/projects.html @@ -348,6 +348,18 @@

For advanced users

alt="Olimex ESP32 Power-over-Ethernet ISO" /> +