From 52bc4cb3158159209f967c8cec3dffbfa0c3bf64 Mon Sep 17 00:00:00 2001 From: "Rita C." <215712047+Laufmaschine@users.noreply.github.com> Date: Wed, 29 Apr 2026 16:38:49 +0100 Subject: [PATCH 01/28] Update name of light action (#45082) --- source/_triggers/air_quality.smoke_detected.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_triggers/air_quality.smoke_detected.markdown b/source/_triggers/air_quality.smoke_detected.markdown index 17741bb2ec9e..9fe2bfe819c1 100644 --- a/source/_triggers/air_quality.smoke_detected.markdown +++ b/source/_triggers/air_quality.smoke_detected.markdown @@ -89,7 +89,7 @@ Picture this: it is the middle of the night and a smoke sensor activates in the - **Target**: All smoke sensors (by label) - **Trigger when**: Any - **For at least**: 00:00:00 -- **Action**: Light: Turn on (flash) +- **Action**: Light: Turn on light (flash) - **Action**: Send a mobile notification {% details "YAML example for a smoke detection alert" %} From 0b05dd1a374d39220534be6e37777e4c21cc2e33 Mon Sep 17 00:00:00 2001 From: "Etienne C." <59794011+etiennec78@users.noreply.github.com> Date: Thu, 30 Apr 2026 00:18:08 +0200 Subject: [PATCH 02/28] Remove LLM errors in the new templating syntax documentation (#45095) --- source/_docs/templating/syntax.markdown | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/source/_docs/templating/syntax.markdown b/source/_docs/templating/syntax.markdown index cb18107a7b9c..2b9f4a401446 100644 --- a/source/_docs/templating/syntax.markdown +++ b/source/_docs/templating/syntax.markdown @@ -185,19 +185,13 @@ Here is a gotcha that catches everyone at least once. The `|` symbol binds tight {% example %} template: | - {{ 10 / 10 | round(2) }} -output: "1" + {{ 10 / 3 | round(2) }} +output: "3.3333333333333335" {% endexample %} -You might read that as "ten divided by ten, rounded to two decimals", which should be `1.0`. But because filters take priority, it actually runs as "ten divided by (ten rounded to two decimals)", which is `10 / 10.0 = 1.0`... Wait, that's also `1.0`. Let me try a clearer example: +You might read that as "ten divided by three, rounded to two decimals", which should be `3.33`. But because filters take priority, it actually runs as "ten divided by (three rounded to two decimals)", which is `10 / 3.0 = 3.3333333333333335`. -{% example %} -template: | - {{ 20 - 5 | round(0) }} -output: "15" -{% endexample %} - -This one also happens to work. The gotcha bites hardest when the filter changes the value meaningfully. When in doubt, add parentheses so the order you want is clear: +The gotcha bites hardest when the filter changes the value meaningfully. When in doubt, add parentheses so the order you want is clear: {% example %} template: | From 7baeb9e0cf3f5f5cd4fd41af69c47aa78f4709ae Mon Sep 17 00:00:00 2001 From: Simone Chemelli Date: Thu, 30 Apr 2026 07:44:13 +0200 Subject: [PATCH 03/28] Fix spell checker errors for Alexa Devices (#45089) --- source/_integrations/alexa_devices.markdown | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/source/_integrations/alexa_devices.markdown b/source/_integrations/alexa_devices.markdown index a1928d3c133e..d3c662f304df 100644 --- a/source/_integrations/alexa_devices.markdown +++ b/source/_integrations/alexa_devices.markdown @@ -42,7 +42,7 @@ There is support for the following device families within Home Assistant: {% warning %} -This integration requires multifactor authentication using an authentication app (such as Microsoft Authenticator, for example). To enable MFA, in your Amazon account settings select **Login & Security** > **2-step verification** > **Backup methods** > **Add new app**. See [Amazon's documentation](https://www.amazon.com/gp/help/customer/display.html?nodeId=G9MX9LXNWXFKMJYU) for more information. +This integration requires multi-factor authentication using an authentication app (such as Microsoft Authenticator, for example). To enable MFA, in your Amazon account settings select **Login & Security** > **2-step verification** > **Backup methods** > **Add new app**. See [Amazon's documentation](https://www.amazon.com/gp/help/customer/display.html?nodeId=G9MX9LXNWXFKMJYU) for more information. You must ensure the authenticator app is setup as your preferred method for 2FA. @@ -101,7 +101,7 @@ The `alexa_devices.send_text_command` action allows you to control Alexa using t The `alexa_devices.send_sound` action allows you to play one of the built-in Alexa sounds. The full list of sounds is available in [Amazon's documentation (needs authentication)](https://alexa.amazon.com/api/behaviors/entities?skillId=amzn1.ask.1p.sound) {%tip%} -Additional sounds are available through advanced markup using the `notify.send_message` [action](#action-notifysend_message) +Additional sounds are available through advanced markup using the `notify.send_message` [action](#action-send-message) {%endtip%} | Data attribute | Optional | Description | @@ -163,7 +163,7 @@ automation: data: message: Welcome home Simone target: - entity_id: notify.echo_dot_livingroom_announce + entity_id: notify.echo_dot_living_room_announce ``` ### Ask the time @@ -250,7 +250,7 @@ This integration {% term polling polls %} data from the device every five minute ## Known limitations -- This integration requires multifactor authentication using an authentication app (such as Microsoft Authenticator). To enable MFA, in your Amazon account settings, select **Login & Security** > **2-step verification** > **Backup methods** > **Add new app**. See [Amazon's documentation](https://www.amazon.com/gp/help/customer/display.html?nodeId=G9MX9LXNWXFKMJYU) for more information. +- This integration requires multi-factor authentication using an authentication app (such as Microsoft Authenticator). To enable MFA, in your Amazon account settings, select **Login & Security** > **2-step verification** > **Backup methods** > **Add new app**. See [Amazon's documentation](https://www.amazon.com/gp/help/customer/display.html?nodeId=G9MX9LXNWXFKMJYU) for more information. - Reminders may not be added to the sensor if the configured account is linked to an Alexa Household. - [Amazon Japan](https://www.amazon.co.jp) appears to use a different login mechanism to other locations preventing setup of the integration. This should be resolved in a future release. From 10ca0461698f3a7afae8fde3647acb584e613ebb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20Bregu=C5=82a?= Date: Thu, 30 Apr 2026 09:53:17 +0200 Subject: [PATCH 04/28] Revise Google Drive integration documentation (#45098) Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- source/_integrations/google_drive.markdown | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/source/_integrations/google_drive.markdown b/source/_integrations/google_drive.markdown index 53e422d88d17..a688fc420c5d 100644 --- a/source/_integrations/google_drive.markdown +++ b/source/_integrations/google_drive.markdown @@ -26,7 +26,11 @@ ha_platforms: - sensor --- -This {% term integration %} allows you to connect your [Google Drive](https://drive.google.com) with Home Assistant Backups. When you set up this integration, your Google Drive will have a new folder called `Home Assistant` where all the backups will be stored. To open this folder, go to **Settings** > **Devices & services** > **Google Drive**, and select **Visit**. You can rename this folder to whatever you like in Google Drive at any point in time. If you delete the folder, it will automatically be re-created as long as you have the {% term integration %} enabled. +This {% term integration %} allows you to connect your [Google Drive](https://drive.google.com) with [Home Assistant Backups](/common-tasks/general/#backups). + +When you set up this integration, your Google Drive will have a new folder called `Home Assistant` where all the backups will be stored. A separate folder is created for each of your Home Assistant instances. You can rename this folder to whatever you like in Google Drive at any point in time. If you delete the folder, it will automatically be re-created as long as you have the {% term integration %} enabled. + +To open the backup folder, go to **Settings** > **Devices & services** > **Google Drive**, and select **Visit**. For a video walkthrough of the setup instructions, see this video from 13:50 to 19:20 @@ -89,11 +93,11 @@ actions: {% include integrations/remove_device_service.md %} -- If you remove the integration, the Home Assistant folder in Google Drive is not automatically deleted. You have to manually delete it in Google Drive. +- If you remove the integration, the backup folder in Google Drive is not automatically deleted. You have to manually delete it in Google Drive. ## Known limitations -- The integration can only access files that it creates in the Home Assistant folder. It cannot access or modify any other files in your Google Drive. +- The integration can only access files that it creates in the backup folder. It cannot access or modify any other files in your Google Drive. ## Troubleshooting From 78dba3139ff2601d0798a545d2b507d565e2f837 Mon Sep 17 00:00:00 2001 From: Dan Long Date: Thu, 30 Apr 2026 09:39:45 +0100 Subject: [PATCH 05/28] Update homepage "sponsors" (#45055) Co-authored-by: Copilot --- sass/homeassistant/_overrides.scss | 45 ++++++++++++++++++- source/_includes/site/footer.html | 2 +- .../commercial-partners/apollo-automation.svg | 1 + source/index.html | 10 +++-- 4 files changed, 52 insertions(+), 6 deletions(-) create mode 100644 source/images/commercial-partners/apollo-automation.svg diff --git a/sass/homeassistant/_overrides.scss b/sass/homeassistant/_overrides.scss index 6cf57faac21a..2a232b8daee8 100644 --- a/sass/homeassistant/_overrides.scss +++ b/sass/homeassistant/_overrides.scss @@ -1417,15 +1417,56 @@ a.material-card:hover { } + .sponsor { + margin-top: 5rem; + } + .sponsored-by { text-align: center; img { + width: 100%; + max-width: 180px; + max-height: 160px; border: 0; border-radius: 0; box-shadow: none; - margin: 24px; - max-height: 160px; + } + + &-title { + max-width: 800px; + margin: 0 auto 24px; + font-size: 1.4rem; + line-height: 1.4; + font-weight: 600; + + @media screen and (min-width: 768px) { + font-size: 1.6rem; + line-height: 1.6; + } + } + + &-subtitle { + font-size: 1rem; + margin-bottom: 0; + font-weight: 400; + + @media screen and (min-width: 768px) { + font-size: 1.2rem; + } + } + + &-grid { + display: flex; + flex-direction: row; + align-items: center; + justify-content: center; + gap: 2rem; + margin-top: 2rem; + + @media screen and (min-width: 768px) { + gap: 4rem; + } } } } diff --git a/source/_includes/site/footer.html b/source/_includes/site/footer.html index 690cd2fb061a..d31c64b9da42 100644 --- a/source/_includes/site/footer.html +++ b/source/_includes/site/footer.html @@ -17,7 +17,7 @@ />

- Home Assistant is a project from the Open Home Foundation, sponsored by Nabu Casa. + Home Assistant is a project from the Open Home Foundation.

diff --git a/source/images/commercial-partners/apollo-automation.svg b/source/images/commercial-partners/apollo-automation.svg new file mode 100644 index 000000000000..467e46b238e3 --- /dev/null +++ b/source/images/commercial-partners/apollo-automation.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/source/index.html b/source/index.html index 5270f50ce67f..7a66cbe929b9 100644 --- a/source/index.html +++ b/source/index.html @@ -23,11 +23,15 @@ From edfaedc8f1c3f5d1b2f8d5fee18d784a7017bffb Mon Sep 17 00:00:00 2001 From: Penny Wood Date: Thu, 30 Apr 2026 19:25:38 +0800 Subject: [PATCH 06/28] Revise iZone network settings documentation (#45030) Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com> --- source/_integrations/izone.markdown | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/source/_integrations/izone.markdown b/source/_integrations/izone.markdown index 4612da060197..b30253811b75 100644 --- a/source/_integrations/izone.markdown +++ b/source/_integrations/izone.markdown @@ -49,7 +49,9 @@ exclude: ## Network settings -The iZone system uses UDP broadcasts over the local network to find and communicate with iZone devices. For this to work properly, UDP port 12107 must be able to be broadcasted on, 7005 needs to be listened to for broadcasted messages, and TCP port 80 for HTTP data to the bridge. The integration currently listens on `0.0.0.0` and broadcasts to all broadcast IPv4 local addresses, which is not configurable. +The iZone system uses UDP broadcast discovery on the local network to find and communicate with iZone devices. For discovery to work reliably, Home Assistant must be able to receive this broadcast discovery traffic. In most cases, this means Home Assistant and the iZone bridge need to be on the same local network segment, like the same VLAN. If they are on different segments, standard routing is usually not enough. Your network must support a UDP broadcast relay, directed broadcast, or a similar feature to forward this traffic between segments. + +For connectivity, Home Assistant must be able to send outbound UDP discovery packets to destination port `12107`, listen locally for inbound UDP iZone messages on port `7005`, and use TCP port `80` for HTTP communication with the bridge. The integration currently listens on `0.0.0.0` and sends discovery to local IPv4 broadcast addresses, which is not configurable. ## Master controller From 94de6694567d4ca2709795c55ce4bc64f57c07eb Mon Sep 17 00:00:00 2001 From: OldSurferDude Date: Fri, 1 May 2026 00:15:29 -0700 Subject: [PATCH 07/28] Update section titles and descriptions for clarity (#45124) Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- source/_integrations/insteon.markdown | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/source/_integrations/insteon.markdown b/source/_integrations/insteon.markdown index 5240b4b048d9..2825dae99c0f 100644 --- a/source/_integrations/insteon.markdown +++ b/source/_integrations/insteon.markdown @@ -80,7 +80,7 @@ In order for any two Insteon devices to talk with one another, they must be link ### Managing Insteon scenes -Insteon scenes can be created, changed or deleted using the **Scenes** tab of the [Insteon configuration panel](#insteon-configuration-panel). To trigger an Insteon scene see [Triggering Insteon Scenes](#triggering-insteon-scenes) below. +Insteon scenes can be created, changed, or deleted using the **Scenes** tab of the [Insteon configuration panel](#insteon-configuration-panel). To control an Insteon scene, see [Controlling Insteon scenes](#controlling-insteon-scenes) below. ### Device properties @@ -120,9 +120,9 @@ Editing a device's All-Link Database can cause the device to become unresponsive - **Configure device overrides**: Add or remove device overrides. See [Device overrides](#device-overrides) below. - **Delete device**: Delete an Insteon device from the network using the device's Insteon address. -## Triggering Insteon scenes +## Controlling Insteon scenes -Triggering an Insteon scene on or off is done via automations. Two actions are provided to support this feature: +Controlling an Insteon scene on or off is done via automations. Two actions are provided to support this feature: - **insteon.scene_on** - **group**: (required) The Insteon scene number to trigger. @@ -131,11 +131,12 @@ Triggering an Insteon scene on or off is done via automations. Two actions are p ```yaml automation: - # Trigger an Insteon scene 25 + # Control an Insteon scene 25 - alias: "Turn on scene 25" actions: - action: insteon.scene_on - group: 25 + data: + group: 25 ``` ## Events and Mini-Remotes From bbaf45fc22b33cc720a137a717e37894b23e0da2 Mon Sep 17 00:00:00 2001 From: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com> Date: Fri, 1 May 2026 09:16:26 +0200 Subject: [PATCH 08/28] Humidity: add condition (Labs feature) (#45110) --- source/_conditions/humidity.is_value.markdown | 228 ++++++++++++++++++ source/_integrations/humidity.markdown | 4 +- 2 files changed, 231 insertions(+), 1 deletion(-) create mode 100644 source/_conditions/humidity.is_value.markdown diff --git a/source/_conditions/humidity.is_value.markdown b/source/_conditions/humidity.is_value.markdown new file mode 100644 index 000000000000..6884cd4c93a1 --- /dev/null +++ b/source/_conditions/humidity.is_value.markdown @@ -0,0 +1,228 @@ +--- +title: "Relative humidity" +condition: humidity.is_value +domain: humidity +description: "Tests if a relative humidity value is above a threshold, below a threshold, or in a range of values." +--- + +The **Relative humidity** condition passes when a humidity reading meets a threshold you define. You can check that humidity is above, below, or within a specific range. The condition works with humidity sensors, climate devices, humidifiers, and weather entities. Use it to run an automation only when the bedroom feels too damp, or only when the air is dry enough to need attention. + +When you target more than one entity, the condition's **Condition passes if** option controls how the check combines results. You can require any targeted entity to meet the threshold, or demand that all of them do. + +{% include integrations/labs_entity_triggers_note.md %} + +{% include conditions/ui_header.md %} + +To use **Relative humidity** in an automation: + +1. Go to {% my automations title="**Settings** > **Automations & scenes**" %}. +2. Open an existing automation, or select **Create automation** > **Create new automation**. +3. In the **And if** section, select **Add condition**. +4. Select what you want to check. Under **By target** (see [Targets](#targets)), pick the area your humidity sensor is in (like your bedroom or bathroom). You can also select a device, a specific entity, or a label. +5. From the conditions shown for that target, select **Relative humidity**. +6. Under **Threshold type**, set the humidity level the condition checks against: + - Select **Number** to enter a fixed percentage directly, for example `65` for 65%. + - Select **Entity** to use a helper or sensor as the threshold. When you pick an `input_number` or `number` helper, you can adjust the threshold without editing the automation. When you pick a humidity sensor, its current reading becomes the threshold and updates automatically as the sensor changes. This is useful for comparing two humidity readings, for example to check whether indoor humidity is higher than outdoor humidity. + Then pick whether the reading must be above, below, or within a range of the threshold. +7. Under **Condition passes if** (see [Behavior](#behavior-with-multiple-targets)), pick **Any** or **All**. +8. Select **Save**. + +### Options in the UI + +{% options_ui %} +Threshold type: + description: > + The humidity level the entity has to meet for the condition to pass. You can enter a fixed percentage between 0 and 100 (select **Number**), or pick an entity as a dynamic threshold (select **Entity**). When you pick an `input_number` or `number` helper, you can change the threshold without editing the automation. When you pick a humidity sensor, its live reading becomes the threshold, which is useful for comparing two humidity values, for example indoor versus outdoor. In both cases, also pick whether the reading must be above, below, or within a range of that value. + required: true +Condition passes if: + description: When multiple entities are targeted, controls how results combine. Pick **Any** to pass if at least one targeted entity meets the threshold, or **All** to pass only when every targeted entity does. + required: true +{% endoptions_ui %} + +{% include conditions/yaml_header.md %} + +In YAML, refer to this condition as `humidity.is_value`. A basic example looks like this: + +{% example %} +condition: | + condition: humidity.is_value + target: + entity_id: sensor.bedroom_humidity + options: + threshold: + above: 60 + behavior: any +{% endexample %} + +This passes when the bedroom humidity sensor reads above 60%. + +To check that humidity stays below a certain level: + +{% example %} +condition: | + condition: humidity.is_value + target: + entity_id: sensor.bedroom_humidity + options: + threshold: + below: 40 + behavior: any +{% endexample %} + +This passes when the bedroom humidity sensor reads below 40%. + +To check that humidity stays within a comfortable range: + +{% example %} +condition: | + condition: humidity.is_value + target: + entity_id: sensor.bedroom_humidity + options: + threshold: + above: 40 + below: 60 + behavior: any +{% endexample %} + +This passes when the bedroom humidity sensor reads between 40% and 60%. + +### Options in YAML + +{% options_yaml %} +threshold: + description: > + The humidity level the entity has to meet for the condition to pass. Use `above` to set a minimum, `below` to set a maximum, or both to define a range. Accepts a fixed number between 0 and 100, or a reference to an `input_number`, `number`, or `sensor` entity. When you reference a sensor, its current reading is used as the threshold at the moment the condition is evaluated. This lets you compare two humidity readings dynamically, for example checking whether indoor humidity is above outdoor humidity. + required: true + type: any +behavior: + description: > + When multiple entities are targeted, controls how results combine. Accepts `all` or `any`. + required: true + type: string + default: any +{% endoptions_yaml %} + +{% include conditions/targets.md %} + +{% include conditions/behavior.md %} + +## Good to know + +- The condition works with humidity sensors, climate entities (using the current humidity reading), humidifier entities (using the current humidity reading), and weather entities. +- Entities that are unavailable (`unavailable`) or have an unknown state (`unknown`) are skipped for **Any** and fail for **All**. +- Humidity is expressed as a percentage. Indoor comfort is generally between 40% and 60%. Below 30% often feels dry and can irritate airways. Above 65% can encourage mold and dust mites. +- This condition checks the entity's _current_ humidity reading, not its target setpoint. To check a humidifier's target setpoint instead, use the [Humidifier target humidity](/conditions/humidifier.is_target_humidity/) condition. +- When you use a sensor as a dynamic threshold, its value is read at the moment the condition runs. The threshold is not continuously tracked; it is re-evaluated each time the automation fires. + +{% include conditions/try_it.md %} + +{% include conditions/more_examples.md %} + +### Automation: run a dehumidifier when the room gets too damp + +When the bedroom humidity sensor reads above 65%, turn on the dehumidifier to bring levels back to a comfortable range. The condition prevents the dehumidifier from running when the air is already dry enough. + +- **Trigger**: Time pattern: Every 15 minutes +- **Condition**: Relative humidity (above 65%) +- **Target**: Bedroom humidity sensor +- **Condition passes if**: Any +- **Action**: Switch: Turn on + +{% details "YAML example for running a dehumidifier when humidity is high" %} + +{% example %} +automation: | + alias: "Run dehumidifier when bedroom is too damp" + triggers: + - trigger: time_pattern + minutes: "/15" + conditions: + - condition: humidity.is_value + target: + entity_id: sensor.bedroom_humidity + options: + threshold: + above: 65 + behavior: any + actions: + - action: switch.turn_on + target: + entity_id: switch.bedroom_dehumidifier +{% endexample %} + +{% enddetails %} + +### Automation: send an alert when the air gets too dry + +At midnight, check the living room humidity. If it has dropped below 30%, send a notification so you can switch on a humidifier before you go to sleep. + +- **Trigger**: Time: 00:00 +- **Condition**: Relative humidity (below 30%) +- **Target**: Living room humidity sensor +- **Condition passes if**: Any +- **Action**: Notify mobile app + +{% details "YAML example for a low humidity alert" %} + +{% example %} +automation: | + alias: "Alert when living room air is too dry" + triggers: + - trigger: time + at: "00:00:00" + conditions: + - condition: humidity.is_value + target: + entity_id: sensor.living_room_humidity + options: + threshold: + below: 30 + behavior: any + actions: + - action: notify.mobile_app_phone + data: + message: > + The living room humidity is below 30%. + Consider switching on the humidifier. +{% endexample %} + +{% enddetails %} + +### Automation: run the ventilation fan when indoor humidity exceeds outdoor humidity + +Every 15 minutes, check whether the living room is more humid than the outside air. If so, open the ventilation to let drier air in. The outdoor humidity sensor acts as a live threshold, so the condition always compares the two current readings. + +- **Trigger**: Time pattern: Every 15 minutes +- **Condition**: Relative humidity (above, entity: outdoor humidity sensor) +- **Target**: Living room humidity sensor +- **Condition passes if**: Any +- **Action**: Switch: Turn on ventilation fan + +{% details "YAML example for comparing indoor to outdoor humidity" %} + +{% example %} +automation: | + alias: "Ventilate when indoor humidity exceeds outdoor" + triggers: + - trigger: time_pattern + minutes: "/15" + conditions: + - condition: humidity.is_value + target: + entity_id: sensor.living_room_humidity + options: + threshold: + above: sensor.outdoor_humidity + behavior: any + actions: + - action: switch.turn_on + target: + entity_id: switch.ventilation_fan +{% endexample %} + +{% enddetails %} + +{% include conditions/stuck.md %} + +{% include conditions/related.md %} diff --git a/source/_integrations/humidity.markdown b/source/_integrations/humidity.markdown index 58815f98e649..db8561a3a6d6 100644 --- a/source/_integrations/humidity.markdown +++ b/source/_integrations/humidity.markdown @@ -11,4 +11,6 @@ ha_domain: humidity ha_integration_type: system --- -This {% term integration %} provides automation triggers for climate, humidifier, and weather entities as well as sensors with device class humidity. There are no configuration options for this integration. +This {% term integration %} provides automation triggers and conditions for climate, humidifier, and weather entities as well as sensors with device class humidity. There are no configuration options for this integration. + +{% include integrations/conditions.md %} From 7e514cc0766106c4619218cc0e5a2b95a727f1c2 Mon Sep 17 00:00:00 2001 From: robotsnh <88983536+robotsnh@users.noreply.github.com> Date: Fri, 1 May 2026 08:17:03 +0100 Subject: [PATCH 09/28] docs: fix grammar in bug report section of main help page (#45118) --- source/help/index.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/help/index.markdown b/source/help/index.markdown index 94c85923aee2..d2a01e9b8166 100644 --- a/source/help/index.markdown +++ b/source/help/index.markdown @@ -17,7 +17,7 @@ There are various ways to get in touch with the Home Assistant community. It doe ## Bugs, Feature requests, and alike -Have you found an issue in your Home Assistant installation? Please report it. Reporting it makes it easy to track and ensures that it gets fixed. For more details please refer to [Reporting issues](/help/reporting_issues/) page. +Have you found an issue in your Home Assistant installation? Please report it. Reporting it makes it easy to track and ensures that it gets fixed. For more details, please refer to the [Reporting issues](/help/reporting_issues/) page. - [Feature requests](https://github.com/orgs/home-assistant/discussions) (Don't post feature requests in the issue trackers. Thanks!) - [Issue tracker Home Assistant Core](https://github.com/home-assistant/core/issues) From f3cf31b28602847775e11404daf9169360b6ab33 Mon Sep 17 00:00:00 2001 From: robotsnh <88983536+robotsnh@users.noreply.github.com> Date: Sat, 2 May 2026 17:54:57 +0100 Subject: [PATCH 10/28] docs: fix punctuation errors on debug page explaining why lxc marks installations as unsupported (#45140) --- source/more-info/unsupported/lxc.markdown | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/source/more-info/unsupported/lxc.markdown b/source/more-info/unsupported/lxc.markdown index e5385dbc0f60..02b735f66c86 100644 --- a/source/more-info/unsupported/lxc.markdown +++ b/source/more-info/unsupported/lxc.markdown @@ -5,11 +5,8 @@ description: "More information on why LXC marks the installation as unsupported. ## The issue -Running the Supervisor in an LXC virtual machine will cause issues both with -performance and with container management in general. Using LXC in combination -with the Supervisor is not supported. +Running the Supervisor in an LXC virtual machine will cause issues both with performance and with container management in general. Using LXC in combination with the Supervisor is not supported. ## The solution -You need to reinstall the host operating system that runs the Supervisor, -for instructions on how to proceed with that [have a look here](/more-info/unsupported/os). +You need to reinstall the host operating system that runs the Supervisor. For instructions on how to proceed with that, [have a look here](/more-info/unsupported/os). From 5d7b601c7a64297fee659f99450e9887f058f56c Mon Sep 17 00:00:00 2001 From: robotsnh <88983536+robotsnh@users.noreply.github.com> Date: Sat, 2 May 2026 17:57:31 +0100 Subject: [PATCH 11/28] docs: added Oxford comma to `cloud/index.markdown` (#45135) --- source/cloud/index.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/cloud/index.markdown b/source/cloud/index.markdown index b172af08f5a5..e8ddc2ea1e5e 100644 --- a/source/cloud/index.markdown +++ b/source/cloud/index.markdown @@ -8,7 +8,7 @@ ha_iot_class: Cloud Push ha_domain: cloud --- -Home Assistant Cloud is a subscription service provided by our partner Nabu Casa, Inc. Check out [their website](https://www.nabucasa.com) for more information on features, pricing and [how to configure Home Assistant](https://www.nabucasa.com/config/). +Home Assistant Cloud is a subscription service provided by our partner Nabu Casa, Inc. Check out [their website](https://www.nabucasa.com) for more information on features, pricing, and [how to configure Home Assistant](https://www.nabucasa.com/config/).
Logo of Nabu Casa, Inc
From 7605fd259f5d36f5764a62243cf3c62f5e043e4c Mon Sep 17 00:00:00 2001 From: robotsnh <88983536+robotsnh@users.noreply.github.com> Date: Sat, 2 May 2026 18:00:37 +0100 Subject: [PATCH 12/28] =?UTF-8?q?docs:=20used=20flowing=20verse=20on=20the?= =?UTF-8?q?=20debug=20page=20explaining=20why=20unprivilege=E2=80=A6=20(#4?= =?UTF-8?q?5138)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Simon Lamon <32477463+silamon@users.noreply.github.com> Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --- source/more-info/unhealthy/privileged.markdown | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/source/more-info/unhealthy/privileged.markdown b/source/more-info/unhealthy/privileged.markdown index 61ccc266d07b..443a766f4612 100644 --- a/source/more-info/unhealthy/privileged.markdown +++ b/source/more-info/unhealthy/privileged.markdown @@ -5,14 +5,10 @@ description: "More information on why not running with privileged marks the inst ## The issue -The Supervisor needs to have privileged access to the docker runtime on your host -to be able to do everything it needs to do. +The Supervisor needs privileged access to the Docker runtime on your host so it can perform all required tasks. ## The solution -If you are running an older version of our Home Assistant OS, update it in the -{% my configuration title="Configuration" %} panel. +If you are running an older version of our Home Assistant OS, update it in the {% my configuration title="Configuration" %} panel. -If this is not our Home Assistant OS, your operating system might be out of date. Try checking for and -installing updates, then restarting your system. If this doesn't work, you may need to re-run our -[convenience installation script](https://github.com/home-assistant/supervised-installer). +If this is not our Home Assistant OS, your operating system might be out of date. Try checking for and installing updates, then restarting your system. If this doesn't work, you may need to re-run our [convenience installation script](https://github.com/home-assistant/supervised-installer). From cdbb4507f7a07cea90f6439ff91da813a44d5ed5 Mon Sep 17 00:00:00 2001 From: robotsnh <88983536+robotsnh@users.noreply.github.com> Date: Sat, 2 May 2026 18:01:22 +0100 Subject: [PATCH 13/28] =?UTF-8?q?docs:=20used=20the=20Home=20Assistant-sta?= =?UTF-8?q?ndard=20flowing=20verse=20on=20the=20help=20page=E2=80=A6=20(#4?= =?UTF-8?q?5136)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/more-info/unsupported/os.markdown | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/source/more-info/unsupported/os.markdown b/source/more-info/unsupported/os.markdown index 7e63f4f49754..24c653ca9776 100644 --- a/source/more-info/unsupported/os.markdown +++ b/source/more-info/unsupported/os.markdown @@ -11,7 +11,4 @@ The Home Assistant Supervisor is only supported on Home Assistant OS. You need to reinstall the host machine running the Supervisor using Home Assistant OS. -The best approach here is to [create a backup](/common-tasks/general/#backups) of your -current installation, then reinstall your system using Home Assistant OS. During -[Onboarding of Home Assistant](/getting-started/onboarding/), choose to **Restore from -backup**. +The best approach here is to [create a backup](/common-tasks/general/#backups) of your current installation, then reinstall your system using Home Assistant OS. During [Onboarding of Home Assistant](/getting-started/onboarding/), choose to **Restore from backup**. From 262f8320e8bee4680e0b1f5cc3434fb6cf802a0c Mon Sep 17 00:00:00 2001 From: robotsnh <88983536+robotsnh@users.noreply.github.com> Date: Sat, 2 May 2026 18:02:10 +0100 Subject: [PATCH 14/28] =?UTF-8?q?docs:=20used=20flowing=20verse=20on=20the?= =?UTF-8?q?=20help=20page=20for=20flagged-as-unsupported=20=E2=80=A6=20(#4?= =?UTF-8?q?5137)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../unsupported/docker_configuration.markdown | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/source/more-info/unsupported/docker_configuration.markdown b/source/more-info/unsupported/docker_configuration.markdown index 5e6b54705cf1..667414e95937 100644 --- a/source/more-info/unsupported/docker_configuration.markdown +++ b/source/more-info/unsupported/docker_configuration.markdown @@ -7,8 +7,7 @@ description: "More information on why Docker configuration marks the installatio The Supervisor has some expectations of how the Docker daemon is configured to maintain the stability and performance of the host running the Supervisor. -The logging driver for the Docker daemon needs to be set to `journald` and the storage driver -needs to be set to `overlay2`. +The logging driver for the Docker daemon needs to be set to `journald` and the storage driver needs to be set to `overlay2`. We only support cgroup version 1 on our hardware handling. @@ -16,10 +15,7 @@ We only support cgroup version 1 on our hardware handling. If you are running an older version of our Home Assistant OS, update it to the latest version in the {% my configuration title="Configuration" %} panel. -If you are running Home Assistant Supervised, you need to modify the Docker daemon -configuration on the host. The configuration is located at `/etc/docker/daemon.json`. -If that file doesn't exist, you can create it and make sure it at least has the -following contents: +If you are running Home Assistant Supervised, you need to modify the Docker daemon configuration on the host. The configuration is located at `/etc/docker/daemon.json`. If that file doesn't exist, you can create it and make sure it at least has the following contents: ```json { @@ -28,8 +24,7 @@ following contents: } ``` -When the Docker configuration file is changed and saved, you need to restart the -Docker service on the host machine. +When the Docker configuration file is changed and saved, you need to restart the Docker service on the host machine. To fix issues with the cgroup level, adjust the `/etc/default/grub`, add `systemd.unified_cgroup_hierarchy=false` to `GRUB_CMDLINE_LINUX_DEFAULT` and run `sudo update-grub`. After this change is made, you need to reboot the host completely. From b422ddc3ceabf196201027a351b2d5ef37bb249e Mon Sep 17 00:00:00 2001 From: robotsnh <88983536+robotsnh@users.noreply.github.com> Date: Sat, 2 May 2026 18:05:56 +0100 Subject: [PATCH 15/28] =?UTF-8?q?docs:=20used=20flowing=20verse=20on=20the?= =?UTF-8?q?=20debug=20page=20explaining=20why=20LXC=20might=20m=E2=80=A6?= =?UTF-8?q?=20(#45139)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Simon Lamon <32477463+silamon@users.noreply.github.com> Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --- source/more-info/unsupported/lxc.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/more-info/unsupported/lxc.markdown b/source/more-info/unsupported/lxc.markdown index 02b735f66c86..9f8a5b19cecd 100644 --- a/source/more-info/unsupported/lxc.markdown +++ b/source/more-info/unsupported/lxc.markdown @@ -9,4 +9,4 @@ Running the Supervisor in an LXC virtual machine will cause issues both with per ## The solution -You need to reinstall the host operating system that runs the Supervisor. For instructions on how to proceed with that, [have a look here](/more-info/unsupported/os). +You need to reinstall the host operating system that runs the Supervisor. For instructions on how to proceed, [have a look here](/more-info/unsupported/os). From 158f6416e9897beb66af0923f6a0d37584971ea0 Mon Sep 17 00:00:00 2001 From: PiedeGrue Date: Sat, 2 May 2026 18:08:33 +0100 Subject: [PATCH 16/28] Update action selection wording in battery alerts tutorial (#45145) --- source/_docs/templating/tutorial-battery-alerts.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_docs/templating/tutorial-battery-alerts.markdown b/source/_docs/templating/tutorial-battery-alerts.markdown index 9a8235b2d7c3..0b91be18e834 100644 --- a/source/_docs/templating/tutorial-battery-alerts.markdown +++ b/source/_docs/templating/tutorial-battery-alerts.markdown @@ -140,7 +140,7 @@ You want this to run once every morning. ### Add the action 1. Under **Then do**, select **Add action**. -2. Choose **Call service**, then pick your `notify` action (like `notify.mobile_app_your_phone`). +2. Choose **Perform Action**, then pick your `notify` action (like `notify.mobile_app_your_phone`). 3. Fill in the message field with the template you built in step 3. In YAML, the action looks like this: From 706aa88b9d939b2605aa39f47658280c070b0198 Mon Sep 17 00:00:00 2001 From: robotsnh <88983536+robotsnh@users.noreply.github.com> Date: Sat, 2 May 2026 18:08:56 +0100 Subject: [PATCH 17/28] docs: use flowing verse on debug page explaining DNS server failures (#45141) Co-authored-by: Simon Lamon <32477463+silamon@users.noreply.github.com> --- .../more-info/unsupported/dns_server.markdown | 30 +++++-------------- 1 file changed, 8 insertions(+), 22 deletions(-) diff --git a/source/more-info/unsupported/dns_server.markdown b/source/more-info/unsupported/dns_server.markdown index b23f1e32e3ca..8b752320af98 100644 --- a/source/more-info/unsupported/dns_server.markdown +++ b/source/more-info/unsupported/dns_server.markdown @@ -5,28 +5,23 @@ description: "More information on why issues with a DNS server marks the install ## The issue -Home Assistant requires a working DNS server to function. Without one it may be -unable to provide functionality like checking and executing updates, showing -documentation, reach external services required by add-ons and integrations, etc. +Home Assistant requires a working DNS server to function. Without one, it may be unable to provide functionality like checking and executing updates, showing documentation, reaching external services required by add-ons and integrations, and other tasks that depend on internet access. ## The solution -The easiest solution is to re-enable the fallback DNS option by executing the following -command in the CLI: +The easiest solution is to re-enable the fallback DNS option by executing the following command in the CLI: ```sh ha dns options --fallback=true ``` -Alternatively review your system issues by executing the following command in the -CLI: +Alternatively review your system issues by executing the following command in the CLI: ```sh ha resolution info ``` -You will see one or more issues with a context of `dns_server`. For each such issue, -take the following actions based on the issue type. +You will see one or more issues with a context of `dns_server`. For each such issue, take the following actions based on the issue type. ### `dns_server_failed` @@ -36,8 +31,7 @@ take the following actions based on the issue type. ### `dns_server_ipv6_error` -If you see this that means the application you are using for DNS is not handling -A and AAAA requests correctly. You can test this by executing the following commands: +If you see this, that means the application you are using for DNS is not handling A and AAAA requests correctly. You can test this by executing the following commands: ```sh server="" @@ -45,14 +39,6 @@ dig "@$server" _checkdns.home-assistant.io +noall +comments +answer A dig "@$server" _checkdns.home-assistant.io +noall +comments +answer AAAA ``` -A DNS server handling A and AAAA requests correctly will respond with status `NOERROR` -for both of those queries even though there are no answers for the AAAA request. -A DNS server mishandling this request will only return a `NOERROR` response for -the first one and will return `NXDOMAIN`, `REFUSED`, `SERVFAIL` or some other error -status for the second. - -It is important to use a DNS server that handles this situation correctly since -Home Assistant uses alpine for many of its containers. Alpine follows the DNS spec -and will treat the entire domain as if it can't be resolved if it receives an error -status for either query. Home Assistant will run into many unexpected issues in -this situation, particularly around updates and installing software. +A DNS server handling A and AAAA requests correctly will respond with status `NOERROR` for both of those queries even though there are no answers for the AAAA request. A DNS server mishandling this request will only return a `NOERROR` response for the first one and will return `NXDOMAIN`, `REFUSED`, `SERVFAIL` or some other error status for the second. + +It is important to use a DNS server that handles this situation correctly since Home Assistant uses Alpine Linux for many of its containers. Alpine follows the DNS spec and will treat the entire domain as if it can't be resolved if it receives an error status for either query. Home Assistant will run into many unexpected issues in this situation, particularly around updates and installing software. From 926cba5616c4cdf923c836ca7e9a8cfc0286d5ff Mon Sep 17 00:00:00 2001 From: Andrej Walilko <3455017+ch604@users.noreply.github.com> Date: Mon, 4 May 2026 01:45:21 -0400 Subject: [PATCH 18/28] update config flow for ecobee (#45087) Co-authored-by: Andrej Walilko Co-authored-by: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com> --- source/_integrations/ecobee.markdown | 76 ++++++++-------------------- 1 file changed, 22 insertions(+), 54 deletions(-) diff --git a/source/_integrations/ecobee.markdown b/source/_integrations/ecobee.markdown index 3e0b8929982f..ad42b361821f 100644 --- a/source/_integrations/ecobee.markdown +++ b/source/_integrations/ecobee.markdown @@ -30,65 +30,33 @@ ha_integration_type: hub The **ecobee** {% term integration %} lets you control and view sensor data from [ecobee](https://ecobee.com) thermostats. -## Preliminary steps - -You will need to obtain an API key from ecobee's [developer site](https://www.ecobee.com/developers/) to use this integration. To get the key, your thermostat must be registered on ecobee's website (which you likely would have already done while installing your thermostat). Once you have done that, perform the following steps. - -{% warning %} -As of March 28th, 2024, ecobee is no longer accepting new developer subscriptions, nor are existing developer accounts able to create new API keys. There is no ETA for when they will be allowed again. Existing API keys will continue to function. - -In the meantime, you can use the [HomeKit Device](/integrations/homekit_controller/) integration as a fully functional alternative. -{% endwarning %} - -1. Click on the **Become a developer** link on the [developer site](https://www.ecobee.com/home/developer/loginDeveloper.jsp). -2. Log in with your ecobee credentials. (Make sure multifactor authentication is disabled to meet the developer login form's limits. If you've already enabled MFA, the web portal doesn't support disabling it. The iOS and Android apps do under Account > Account Security. You can re-enable MFA after becoming a developer.) -3. Accept the SDK agreement. -4. Fill in the fields. -5. Click **save**. - -Log in to the regular consumer portal and click the overflow menu button in the upper right. You will see a new option named **Developer**. Now an application can be created to integrate with Home Assistant. - -1. Select the **Developer** option from the hamburger menu on the top-right. -2. Select **Create New**. -3. Complete the form on the right. (Neither of the fields are referenced by Home Assistant) - - Name: Must be unique across all ecobee users. - - Summary: Does not need to be unique. -4. Click *Authorization method* and select **ecobee PIN**. -5. Click **Create**. - -Your new application will now appear on the left. Upon clicking on the application, API key will appear on the right. Copy this key and use it in the configuration section below. Click **X** to close the Developer section. - -## Configuration - -1. In the {% my integrations title="**Settings** > **Devices & services**" %} menu, click **+** and then select "ecobee" from the pop-up menu. -2. In the pop-up box, enter the API key you obtained from ecobee's [developer portal](https://ecobee.com/developers). -3. In the next pop-up box, you will be presented with a unique 8 character code separated by a dash (format: XXXX-XXXX), which you will need to authorize in the [ecobee consumer portal](https://www.ecobee.com/consumerportal/index.html). You can do this by logging in, selecting **My Apps** from the hamburger menu, clicking **Add Application** on the left, entering the PIN code from Home Assistant, clicking **Validate** and then **Add Application** in the bottom right. -4. After authorizing the app with ecobee, return to Home Assistant and click **Submit**. If the authorization was successful, a configuration entry will be created and your thermostats, ventilators and sensors will be available in Home Assistant. - -## Manual configuration - -If you prefer to set up the integration in your {% term "`configuration.yaml`" %} file, add your API key (and optional parameters) as follows (however, you must still complete authorization via the **Integrations** panel). -{% include integrations/restart_ha_after_config_inclusion.md %} - -```yaml -# Example configuration.yaml entry -ecobee: - api_key: YOUR_API_KEY -``` - -{% configuration %} -api_key: - description: Your ecobee API key. This is only needed for the initial setup of the integration. Once registered it can be removed. If you revoke the key in the ecobee portal, you will need to remove the existing `ecobee` configuration in the **Integrations** panel, update this, and then configure the integration again. - required: false - type: string -{% endconfiguration %} -

+

-You must [restart Home Assistant](/docs/configuration/#reloading-changes) for the changes to take effect. After restarting, go to {% my integrations title="**Settings** > **Devices & services**" %} and select the integration. Then, select **Configure** and continue to authorize the app according to the above **Automatic Configuration**, starting at step 2. +## Prerequisites + +- Username and password for [ecobee.com](https://ecobee.com). + - You will need it when adding the integration to set up a connection between the integration and Home Assistant. +- Have the devices connected to your ecobee.com account. + - You can add devices either before or after you configure the service in Home Assistant, but having them connected to your ecobee.com account ahead of time is recommended to confirm that they are picked up by the service correctly. + +{% note %} +Since version 2026.3, it is no longer required to get a [developer API key](https://www.ecobee.com/developers/) to use this integration. Existing API keys will continue to function. If you revoke your existing key in the ecobee portal, the integration will fail, and you will need to remove the service in Home Assistant and set it up again. +{% endnote %} + +{% include integrations/config_flow.md %} + +{% configuration_basic %} +API key: + description: If you have a developer API key, use this field and ignore the others. If you are logging in without an API key, leave this field blank and use username and password. +username: + description: The email address you use to sign in to [ecobee.com](https://ecobee.com). +password: + description: The password for the above account. +{% endconfiguration_basic %} ## Notifications From b72e0b4f2cffd35657ec3198c327821f3dc23d65 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20Bregu=C5=82a?= Date: Mon, 4 May 2026 08:05:49 +0200 Subject: [PATCH 19/28] Add cross-references between database docs and SQL integration (#45147) Co-authored-by: mik-laj <12058428+mik-laj@users.noreply.github.com> Co-authored-by: Claude Sonnet 4.6 --- source/_docs/backend/database.markdown | 6 ++++++ source/_integrations/recorder.markdown | 7 ++++++- source/_integrations/sql.markdown | 4 +++- 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/source/_docs/backend/database.markdown b/source/_docs/backend/database.markdown index 734c34f40ebd..774d2016eb35 100644 --- a/source/_docs/backend/database.markdown +++ b/source/_docs/backend/database.markdown @@ -263,4 +263,10 @@ group.all_switches 8018 If you don't want to keep certain entities, you can delete them permanently by using the [actions provided by the recorder](/integrations/recorder/#action-purge_entities). +### Use the SQL sensor for live queries + +Beyond manual exploration, you can run SQL queries directly inside Home Assistant using the [SQL](/integrations/sql/) {% term integration %}. It connects to the same recorder database by default and lets you expose query results as sensor entities, or call queries from automations using the `sql.query` action — no external tools needed. + +### Data Science Portal + For a more interactive way of working with the database, check the [Data Science Portal](https://data.home-assistant.io/). diff --git a/source/_integrations/recorder.markdown b/source/_integrations/recorder.markdown index b59954c384f2..d425d90bf1cf 100644 --- a/source/_integrations/recorder.markdown +++ b/source/_integrations/recorder.markdown @@ -10,6 +10,11 @@ ha_iot_class: Local Push ha_codeowners: - '@home-assistant/core' ha_integration_type: system +related: + - docs: /docs/backend/database/ + title: Database schema + - docs: /integrations/sql/ + title: SQL integration --- The **Recorder** {% term integration %} is by default enabled as dependency of the [`history`](/integrations/history/) integration. @@ -28,7 +33,7 @@ The supported database solutions are: Although SQLAlchemy supports database solutions in addition to the ones supported by Home Assistant, it will behave differently on different databases, and features relied on by the recorder may work differently, or not at all, in different databases. -The default, and recommended, database engine is [SQLite](https://www.sqlite.org/) which does not require any configuration. The database is stored in your Home Assistant configuration directory ('/config/') and is named `home-assistant_v2.db`. +The default, and recommended, database engine is [SQLite](https://www.sqlite.org/) which does not require any configuration. The database is stored in your Home Assistant configuration directory ('/config/') and is named `home-assistant_v2.db`. For details on the database structure, including available tables and columns, see the [Database](/docs/backend/database/) documentation. {% caution %} Changing database used by the recorder may result in losing your existing history. Migrating data is not supported. diff --git a/source/_integrations/sql.markdown b/source/_integrations/sql.markdown index fc8cf1bb2d28..003fd910fc10 100644 --- a/source/_integrations/sql.markdown +++ b/source/_integrations/sql.markdown @@ -17,6 +17,8 @@ ha_integration_type: integration related: - docs: /docs/configuration/ title: Configuration file + - docs: /docs/backend/database/ + title: Database schema --- The **SQL** {% term integration %} enables you to use values from an [SQL](https://en.wikipedia.org/wiki/SQL) database supported by the [sqlalchemy](https://www.sqlalchemy.org) library, to populate a sensor state (and attributes). @@ -193,7 +195,7 @@ result: See [supported engines](/integrations/recorder/#custom-database-engines) for which you can connect with this integration. -The SQL integration will connect to the Home Assistant Recorder database if "Database URL" has not been specified. +The SQL integration will connect to the Home Assistant Recorder database if "Database URL" has not been specified. For a full overview of available tables, columns, and indexes in that database, see the [Database](/docs/backend/database/) documentation. There is no explicit configuration required for attributes. The integration will set all columns returned by the query as attributes. From af46a82682404d2049c410d00b0958b0b4187902 Mon Sep 17 00:00:00 2001 From: robotsnh <88983536+robotsnh@users.noreply.github.com> Date: Mon, 4 May 2026 07:06:48 +0100 Subject: [PATCH 20/28] docs: fixed grammar errors and inaccuracies in DNS server IPv6 error section of debug page explaining DNS server failures (#45142) Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --- source/more-info/unsupported/dns_server.markdown | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/source/more-info/unsupported/dns_server.markdown b/source/more-info/unsupported/dns_server.markdown index 8b752320af98..b358fc6e8f69 100644 --- a/source/more-info/unsupported/dns_server.markdown +++ b/source/more-info/unsupported/dns_server.markdown @@ -5,7 +5,7 @@ description: "More information on why issues with a DNS server marks the install ## The issue -Home Assistant requires a working DNS server to function. Without one, it may be unable to provide functionality like checking and executing updates, showing documentation, reaching external services required by add-ons and integrations, and other tasks that depend on internet access. +Home Assistant requires a working DNS server to function. Without one, it may be unable to provide functionality like checking for and executing updates, showing documentation, and reaching external services required by add-ons and integrations. ## The solution @@ -15,13 +15,13 @@ The easiest solution is to re-enable the fallback DNS option by executing the fo ha dns options --fallback=true ``` -Alternatively review your system issues by executing the following command in the CLI: +Alternatively, review your system issues by executing the following command in the CLI: ```sh ha resolution info ``` -You will see one or more issues with a context of `dns_server`. For each such issue, take the following actions based on the issue type. +You will see one or more issues in the context of `dns_server`. For each such issue, take the following actions based on the issue type. ### `dns_server_failed` @@ -31,7 +31,7 @@ You will see one or more issues with a context of `dns_server`. For each such is ### `dns_server_ipv6_error` -If you see this, that means the application you are using for DNS is not handling A and AAAA requests correctly. You can test this by executing the following commands: +If you see this, it means the application you are using for DNS is not handling A and AAAA requests correctly. You can test this by executing the following commands: ```sh server="" @@ -39,6 +39,6 @@ dig "@$server" _checkdns.home-assistant.io +noall +comments +answer A dig "@$server" _checkdns.home-assistant.io +noall +comments +answer AAAA ``` -A DNS server handling A and AAAA requests correctly will respond with status `NOERROR` for both of those queries even though there are no answers for the AAAA request. A DNS server mishandling this request will only return a `NOERROR` response for the first one and will return `NXDOMAIN`, `REFUSED`, `SERVFAIL` or some other error status for the second. +A DNS server handling A and AAAA requests correctly will respond with status `NOERROR` for both of those queries even though there are no answers for the AAAA request. A DNS server mishandling this request will only return a `NOERROR` response for the first one and will return `NXDOMAIN`, `REFUSED`, `SERVFAIL`, or some other error status for the second. It is important to use a DNS server that handles this situation correctly since Home Assistant uses Alpine Linux for many of its containers. Alpine follows the DNS spec and will treat the entire domain as if it can't be resolved if it receives an error status for either query. Home Assistant will run into many unexpected issues in this situation, particularly around updates and installing software. From bcfb0ce5faa084ac2f7a227f2cb452e8770b3ac8 Mon Sep 17 00:00:00 2001 From: "A. Gideonse" Date: Mon, 4 May 2026 08:21:54 +0200 Subject: [PATCH 21/28] Enhance Indevolt integration documentation for gold scale requirements (#45157) Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --- source/_integrations/indevolt.markdown | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/source/_integrations/indevolt.markdown b/source/_integrations/indevolt.markdown index 11b93958ff5f..fc45c9dfc0ab 100644 --- a/source/_integrations/indevolt.markdown +++ b/source/_integrations/indevolt.markdown @@ -25,7 +25,15 @@ The **Indevolt** {% term integration %} enables direct local communication betwe ## Use cases -With this integration, you can monitor energy production and consumption as well as battery status, and configure power limits and other battery protection settings. +With this integration, you can monitor energy production, consumption, and battery status in real time. + +Beyond basic monitoring, the Indevolt integration enables advanced energy management automations within Home Assistant. For example, you can: + +- Optimize battery charging and discharging based on solar production forecasts +- Automatically adjust energy modes to take advantage of variable electricity pricing +- Prevent grid feed-in during peak tariff periods by dynamically limiting output power +- Maintain a minimum battery charge for backup scenarios by adjusting discharge limits when applicable +- Coordinate battery behavior with other Home Assistant energy devices for whole-home optimization ## Supported devices @@ -130,7 +138,8 @@ The Indevolt integration automatically retrieves data from your devices by polli ## Known limitations -- Energy mode can only be set when the device is not in "Outdoor / Portable"-mode +- Real-time configuration changes may appear with a small delay in Home Assistant and the Indevolt app. +- Energy mode can only be set when the device is not in "Outdoor / Portable"-mode. - Some sensors are device generation-specific and may not appear for all models. - Some sensors / configurations available in the app are not (yet) available in the integration. @@ -141,7 +150,7 @@ The Indevolt integration automatically retrieves data from your devices by polli 1. Ensure the device is powered on and functioning normally. 2. Confirm both the device and Home Assistant are connected to the same local network. 3. Ensure the device's IP address is correct and hasn't changed. -4. Check the device's settings in the Indevolt app to ensure that the API is enabled. +4. Check the device's settings in the Indevolt app to ensure that the API is enabled in "HTTP" mode. Check the Home Assistant logs for more information. From 94d1670fc3ed371481ce83851be9384f59ba9b4a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Debette?= Date: Mon, 4 May 2026 08:26:27 +0200 Subject: [PATCH 22/28] Revise Roborock vacuum area cleaning instructions (#45158) --- source/_integrations/roborock.markdown | 30 ++++++++++++++------------ 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/source/_integrations/roborock.markdown b/source/_integrations/roborock.markdown index a4751a458f3f..665351001b3e 100644 --- a/source/_integrations/roborock.markdown +++ b/source/_integrations/roborock.markdown @@ -425,23 +425,25 @@ We plan to make the process simpler in the future, but for now, it is a multi-st "17": Living room ``` -3. Go back to {% my developer_call_service service="vacuum.send_command" title="**Settings** > **Developer tools** > **Actions** > **Vacuum: Send Command**" %} then type `app_segment_clean` as your command and `segments` with a list of the 2-digit IDs you want to clean. Then, add `repeat` with a number (ranging from 1 to 3) to determine how many times you want to clean these areas. +3. You can then apply [Mapping your vacuum areas to Home Assistant areas](/integrations/vacuum/#mapping-your-vacuum-areas-to-home-assistant-areas) to the Roborock vacuum entity linked to your Roborock device. -Example: + Alternatively, go back to {% my developer_call_service service="vacuum.send_command" title="**Settings** > **Developer tools** > **Actions** > **Vacuum: Send Command**" %} then type `app_segment_clean` as your command and `segments` with a list of the 2-digit IDs you want to clean. Then, add `repeat` with a number (ranging from 1 to 3) to determine how many times you want to clean these areas. -```yaml -action: vacuum.send_command -data: - command: app_segment_clean - params: - - segments: - - 22 - - 23 - repeat: 2 -target: - entity_id: vacuum.s7_roborock + Example: -``` + ```yaml + action: vacuum.send_command + data: + command: app_segment_clean + params: + - segments: + - 22 + - 23 + repeat: 2 + target: + entity_id: vacuum.s7_roborock + + ``` ## Troubleshooting From 92d985a9d62418c64bbad242ce1054b6fe8c32cc Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 4 May 2026 08:27:01 +0200 Subject: [PATCH 23/28] Build(deps-dev): Bump json from 2.19.4 to 2.19.5 (#45160) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 9341ae1edeb3..f21189b7aef9 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -61,7 +61,7 @@ GEM nokogiri (~> 1.12) jekyll-watch (2.2.1) listen (~> 3.0) - json (2.19.4) + json (2.19.5) kramdown (2.5.2) rexml (>= 3.4.4) kramdown-parser-gfm (1.1.0) From a367da89cb2342f295fba6065597160f54759f36 Mon Sep 17 00:00:00 2001 From: Allen Porter Date: Sun, 3 May 2026 23:41:20 -0700 Subject: [PATCH 24/28] Clarify MCP Server setup instructions for local and remote clients (#45156) Co-authored-by: Copilot Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> Co-authored-by: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com> --- source/_integrations/mcp_server.markdown | 143 ++++++++++++++++------- 1 file changed, 103 insertions(+), 40 deletions(-) diff --git a/source/_integrations/mcp_server.markdown b/source/_integrations/mcp_server.markdown index 3482532fc6b8..a1d419de82c5 100644 --- a/source/_integrations/mcp_server.markdown +++ b/source/_integrations/mcp_server.markdown @@ -77,10 +77,10 @@ Clients that support OAuth can use this to allow you to give the client access to your Home Assistant MCP server. Home Assistant has adopted [IndieAuth](https://indieauth.spec.indieweb.org/) and does not require you to pre-define -an OAuth Client ID. Instead, the Client ID is the base of the redirect URL. +an OAuth Client ID. Instead, the Client ID is the base URL of the client application making the request. -- *Client ID*: If your redirect-uri is `https://www.example.com/mcp/redirect`, your client ID should be `https://www.example.com`. -- *Client Secret*: This is not used by Home Assistant and can be ignored or set to any value. +- *Client ID*: This is the base URL of the LLM application configuring the connector (for example, `https://claude.ai` for Claude, or `https://chatgpt.com` for ChatGPT). It should **not** be your Home Assistant server's URL. +- *Client Secret*: This is not used by Home Assistant. If the client strictly requires a value, you can put any random text or leave it blank. #### Long-Lived Access Tokens @@ -97,24 +97,76 @@ For more information about Authentication in Home Assistant, refer to the [Authe ### Example: Claude for Desktop -Claude for Desktop now supports remote MCP servers, making it extremely easy to connect to your -Home Assistant instance: +Claude for Desktop can connect to Home Assistant using either a cloud-based remote connector or a local MCP proxy server. + +**Option 1: Remote connector (requires public Home Assistant URL)** + +When using a remote custom connector in Claude for Desktop, the connection is brokered through Anthropic's cloud infrastructure. This means your Home Assistant instance must be publicly accessible from the internet. 1. Download [Claude for Desktop](https://claude.ai/download) and log in. -2. Click your profile name, select **Settings**, and go to **Connectors**. -3. Click **Add Custom Connector**. +2. Select your profile name, select **Settings**, and go to **Connectors**. +3. Select **Add Custom Connector**. 4. Enter the following details: - **Name**: "Home Assistant" (or any more descriptive name you prefer) - - **Remote MCP Server URL**: `https:///api/mcp` + - **Remote MCP Server URL**: `https:///api/mcp` - Under advanced settings: - **OAuth Client ID**: `https://claude.ai` - **OAuth Client Secret**: Leave this blank -5. Click **OK**. Now click **Connect** next to the entry created with the name you provided above. +5. Select **OK**. Now select **Connect** next to the entry created with the name you provided above. 6. Log in to your Home Assistant instance and allow the redirect back to Claude Desktop. 7. You can now enable tools from Home Assistant when chatting with Claude, allowing you to control Home Assistant in a similar way to how you control it through the Voice Assistant. Claude will ask you for permission before calling any tools. ![Screenshot of Claude for Desktop adding an item to a Home Assistant To-do list](/images/integrations/mcp_server/claude-todo-list-control.png) +**Option 2: Local MCP proxy server (for internal/local Home Assistant URLs)** + +If your Home Assistant instance is only accessible on your local network (for example, `http://homeassistant.local:8123` or `http://192.168.1.10:8123`) or behind a VPN, you can use a local MCP proxy. This allows Claude Desktop to connect directly from your computer without routing through Anthropic's cloud. + +1. Make sure you have a [Long-lived access token](#long-lived-access-tokens) from your Home Assistant account. +2. Install `mcp-proxy` following the instructions in the [README](https://github.com/sparfenyuk/mcp-proxy). For example: `uv tool install git+https://github.com/sparfenyuk/mcp-proxy`. +3. Locate your Claude Desktop configuration file (for example, `~/Library/Application Support/Claude/claude_desktop_config.json` on macOS or `%APPDATA%\Claude\claude_desktop_config.json` on Windows). +4. Add the following to your `mcpServers` configuration: + + ```json + { + "mcpServers": { + "Home Assistant": { + "command": "mcp-proxy", + "args": [ + "--transport=streamablehttp", + "--stateless", + "http://:8123/api/mcp" + ], + "env": { + "API_ACCESS_TOKEN": "" + } + } + } + } + ``` +5. Restart Claude for Desktop to connect. + +### Example: ChatGPT + +ChatGPT supports connecting to remote Model Context Protocol servers for Plus, Pro, Business, and Enterprise/Edu users. ChatGPT currently only supports remote connections, which means your Home Assistant instance must be publicly accessible from the internet. + +1. Log in to [ChatGPT](https://chatgpt.com). Ensure developer mode is enabled for your account (this can be toggled in **Settings** > **Apps** > **Advanced Settings**). +2. Navigate to **Workspace settings** (or user settings), select **Apps**, and select **Create**. +3. Enter the following details: + - **Name**: "Home Assistant" (or any name you prefer). + - **MCP Server URL**: `https:///api/mcp` + - Select **OAuth** for the authentication mechanism. ChatGPT will attempt to auto discover OAuth settings. If this does not work you will need to manually enter the settings under **Advanced OAuth Settings** > **User defined oauth client**: + - Under **Client registration**: + - **OAuth Client ID**: `https://chatgpt.com` + - **OAuth Client Secret**: Enter any random text (it is not used by Home Assistant, but the ChatGPT configuration form may require a value). + - **Token endpoint auth method**: `client_secret_post` + - Under **OAuth endpoints**: + - **Auth URL**: `https:///auth/authorize` + - **Token URL**: `https:///auth/token` + - **Authorization server base**: `https://` +4. Select **Create**. Once created, the app will appear in your **Enabled Apps**. +5. Begin a new chat in ChatGPT, open the apps menu, and select your newly created Home Assistant app. ChatGPT will prompt you to authenticate, which will redirect you to Home Assistant to log in and authorize the connection. + ### Example: Claude Code Claude Code supports remote MCP servers, making it easy to connect to your Home Assistant instance: @@ -132,7 +184,7 @@ Claude Code supports remote MCP servers, making it easy to connect to your Home } }' --client-secret ``` - The name "HA", the URL "https://", and the callback port "12345" are examples; adjust them to match your setup. + The name `"HA"`, the URL `"https://"`, and the callback port `"12345"` are examples; adjust them to match your setup. *(Note: `clientId: "http://localhost:12345"` is correct for the Claude Code CLI's internal local callback server. Do not change this to your Home Assistant URL.)* 3. Start `claude` and type `/mcp`. Navigate to your MCP listing (for example, **HA**) and press Enter. Select **Authenticate** to open a web browser to your Home Assistant login page. 4. After you authenticate to your Home Assistant server, Home Assistant will tell you that you can close the web browser. @@ -144,24 +196,25 @@ Claude Code supports remote MCP servers, making it easy to connect to your Home 2. Install `mcp-proxy` following the instructions in the [README](https://github.com/sparfenyuk/mcp-proxy). For example, `uv tool install git+https://github.com/sparfenyuk/mcp-proxy`. 3. Open the main Cursor Settings and select **MCP**. -4. Click **Add new global MCP server** and add the Home Assistant server configuration: +4. Select **Add new global MCP server** and add the Home Assistant server configuration: + ```json - { - "mcpServers": { - "Home Assistant": { - "command": "mcp-proxy", - "args": [ - "--transport=streamablehttp", - "--stateless", - "http://localhost:8123/api/mcp" - ], - "env": { - "API_ACCESS_TOKEN": "" - } - } - } - } - ``` + { + "mcpServers": { + "Home Assistant": { + "command": "mcp-proxy", + "args": [ + "--transport=streamablehttp", + "--stateless", + "http://:8123/api/mcp" + ], + "env": { + "API_ACCESS_TOKEN": "" + } + } + } + } + ``` 5. Save your `mcp.json` file. You can also find this file in the `$HOME/.cursor/mcp.json` directory. 6. Restart Cursor and return to the MCP settings. You should see the Home Assistant server in the list. The indicator should be green. 7. In chat agent mode (Ctrl+I), ask it to control your home and the tool should be used. @@ -205,18 +258,16 @@ The [MCP Prompts](https://modelcontextprotocol.io/docs/concepts/prompts) provide inform LLMs how to call the tools. The tools used by the configured LLM API are exposed. -## Known Limitations +## Known limitations The Home Assistant Model Context Protocol integration currently only supports a subset of MCP features: -| Feature | Supported by Home Assistant | -| ------- | --------- | -| Prompts | ✅ | -| Tools | ✅ | -| Resources | ❌ | -| Sampling | ❌ | -| Notifications | ❌ | +- **Prompts**: Supported +- **Tools**: Supported +- **Resources**: Not supported +- **Sampling**: Not supported +- **Notifications**: Not supported ## Troubleshooting @@ -254,17 +305,29 @@ or the MCP server in Home Assistant is not configured. To understand the root cause, first check debug logs on the client. For example in Claude for Desktop: -1. Visit **Settings...**. +1. Select **Settings...**. 2. Select **Developer**. -3. Select the `Home Assistant` MCP server. +3. Select the **Home Assistant** MCP server. 4. Select **Open Logs Folder**. 5. View `mcp-server-Home Assistant.log`. These are known problems and their resolution: - - `Client error '404 Not Found' for url 'http://localhost:8123/api/mcp'`: + - `Client error '404 Not Found' for URL 'http://:8123/api/mcp'`: this means the MCP Server integration is not configured in Home Assistant. - - `Client error '401 Unauthorized' for url 'http://localhost:8123/api/mcp'`: - this means that the long live access token is not correct. + - `Client error '401 Unauthorized' for URL 'http://:8123/api/mcp'`: + this means that the long-lived access token is not correct. ... +### Repeated OAuth failures + +#### Symptom: Unable to access Home Assistant after several failed login attempts + +If authentication keeps failing during the OAuth setup flow, the most likely cause is that one or more OAuth details are incorrect, like the client ID, client secret, or Home Assistant URL. + +##### Resolution + +Review the OAuth configuration in your client and enter the details again. Make sure the client ID, client secret, and Home Assistant URL exactly match the values you configured for the MCP server in Home Assistant. + +If you have explicitly enabled IP bans in Home Assistant and repeated failed sign-in attempts caused a ban, check the `ip_bans.yaml` file in your Home Assistant configuration directory. If your computer's IP address or the client's IP address is listed there, remove it, restart Home Assistant, and then try authenticating again. + ## Removing the integration This integration can be removed by following these steps: From ca735dd02cc346b0e8eb784e989f28b05c8de336 Mon Sep 17 00:00:00 2001 From: bkobus-bbx Date: Mon, 4 May 2026 12:57:32 +0200 Subject: [PATCH 25/28] blebox: add documentation for energy meters (#45163) Co-authored-by: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com> --- source/_integrations/blebox.markdown | 31 ++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/source/_integrations/blebox.markdown b/source/_integrations/blebox.markdown index b3ef0d1d423b..a395b8014d43 100644 --- a/source/_integrations/blebox.markdown +++ b/source/_integrations/blebox.markdown @@ -441,6 +441,22 @@ This integration adds the Blebox device as a sensor entity to Home Assistant. - Periodic read of illuminance (unit: lx) +### smartMeter DIN + +This integration adds the Blebox device as multiple sensor entities to Home Assistant. + +#### Key supported features + +- Periodic read of energy consumption (forward and reverse) +- Periodic read of power (active, reactive, and apparent) +- Periodic read of voltage, current, and frequency + +#### Additional features + +- Option to configure the number of phases (1 or 3) is available in the wBox app. +- Option to enable/disable reverse energy measurement is available in the wBox app. +- After a settings change, the device needs to be reloaded. + ### actionBox, actionBoxS, and proxiBox This integration does not add direct support for actionBox, actionBoxS, and proxiBox @@ -769,3 +785,18 @@ This integration adds the Wikęd device ("blebox inside") as a cover entity to H - Open - Door state (open, close, unknown) +### Pstryk smartEnergyMeter + +This integration adds the Pstryk device ("blebox inside") as multiple sensor entities to Home Assistant. + +#### Key supported features + +- Periodic read of energy consumption (forward and reverse) +- Periodic read of power (active, reactive, and apparent) +- Periodic read of voltage, current, and frequency + +#### Additional features + +- Option to configure the number of phases (1 or 3) is available in the wBox app. +- Option to enable/disable reverse energy measurement is available in the wBox app. +- After a settings change, the device needs to be reloaded. From 252bcaffdccff7515efdec94e91ded4ae343754b Mon Sep 17 00:00:00 2001 From: Andreas Date: Mon, 4 May 2026 13:06:33 +0200 Subject: [PATCH 26/28] Update Ecovacs integration documentation (#45164) Co-authored-by: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com> Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --- source/_integrations/ecovacs.markdown | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/source/_integrations/ecovacs.markdown b/source/_integrations/ecovacs.markdown index b39d65b7bf69..19999f2bcc16 100644 --- a/source/_integrations/ecovacs.markdown +++ b/source/_integrations/ecovacs.markdown @@ -28,13 +28,17 @@ ha_platforms: ha_integration_type: hub --- -The **Ecovacs** {% term integration %} is the main integration to integrate [Ecovacs](https://www.ecovacs.com) (Deebot) vacuums and mowers. +The **Ecovacs** {% term integration %} integrates [Ecovacs](https://www.ecovacs.com) robotic vacuum cleaners and lawn mowers. + +This is for the "Deebot" series of robotic vacuum cleaners and the "GOAT" series of robotic lawn mowers from Ecovacs. + +Note that Ecovacs also has other types of cleaning robots that are not supported by this integration at this time. ## Prerequisites -You will need your Ecovacs account information (username, password) to discover and control vacuums and mowers in your account. Your username is your email address. +You will need your Ecovacs account information (username and password) to discover and control vacuums and mowers in your account. Your username is the same as your email address. -Additional note: There are some issues during the password encoding. Using some special characters (e.g., `-`) in your password does not work. +Additional note: There are some issues with password encoding. Using some special characters, for example `-` and `?`, in your password may not work. {% include integrations/config_flow.md %} From 569837be7ea0632a9d7656172b2f67813db98401 Mon Sep 17 00:00:00 2001 From: Tom Hagan <71011137+tomhagan29@users.noreply.github.com> Date: Mon, 4 May 2026 14:58:25 +0100 Subject: [PATCH 27/28] Update concepts and terminology page: cloud icon replaced by globe icon (#45169) --- .../concepts-terminology.markdown | 2 +- source/images/getting-started/cloud-icon.png | Bin 9809 -> 0 bytes source/images/getting-started/globe-icon.png | Bin 0 -> 1538 bytes 3 files changed, 1 insertion(+), 1 deletion(-) delete mode 100644 source/images/getting-started/cloud-icon.png create mode 100644 source/images/getting-started/globe-icon.png diff --git a/source/getting-started/concepts-terminology.markdown b/source/getting-started/concepts-terminology.markdown index fd172a31c87c..b9cf29119cf2 100644 --- a/source/getting-started/concepts-terminology.markdown +++ b/source/getting-started/concepts-terminology.markdown @@ -12,7 +12,7 @@ Integrations are pieces of software that allow Home Assistant to connect to othe Some integration cards show an icon: -- The cloud icon Cloud icon indicates that this integration depends on the cloud. +- The globe icon Globe icon indicates that this integration requires the internet. - The file icon Configuration file icon indicates that this integration was not set up via the UI. You have either set it up in your {% term "`configuration.yaml`" %} file, or it is a dependency set up by another integration. If you want to configure it, you will need to do so in your {% term "`configuration.yaml`" %} file. - The custom icon Custom icon indicates that this is not an official Home Assistant integration but that it was custom made. It could be imported from another source, for example downloaded from HACS. diff --git a/source/images/getting-started/cloud-icon.png b/source/images/getting-started/cloud-icon.png deleted file mode 100644 index b41ddbb7b30d1b999dfb7c53098c1b654280660f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9809 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 Date: Tue, 5 May 2026 15:09:30 +0200 Subject: [PATCH 28/28] blebox: add documentation for inputSensor devices --- source/_integrations/blebox.markdown | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/source/_integrations/blebox.markdown b/source/_integrations/blebox.markdown index a395b8014d43..a88a3ce1b11a 100644 --- a/source/_integrations/blebox.markdown +++ b/source/_integrations/blebox.markdown @@ -414,6 +414,22 @@ This integration adds the Blebox device as a binary sensor entity to Home Assist - Periodic read of state of rain detection +### inputSensorD + +This integration adds the Blebox device as 2 binary sensor entities to Home Assistant. + +#### Key supported features + +- Periodic read of state of 2 input sensors + +### inputSensorQ + +This integration adds the Blebox device as 4 binary sensor entities to Home Assistant. + +#### Key supported features + +- Periodic read of state of 4 input sensors + ### airSensor This integration adds the Blebox device as a sensor entity to Home Assistant.