@@ -174,4 +199,4 @@
-
+
\ No newline at end of file
diff --git a/source/_includes/energy/ct_clamp.md b/source/_includes/energy/ct_clamp.md
index 5eb0f2919f4..953ead1269b 100644
--- a/source/_includes/energy/ct_clamp.md
+++ b/source/_includes/energy/ct_clamp.md
@@ -2,7 +2,8 @@ Current transformer (CT) clamp sensors measure your energy usage by looking at t
- The off-the-shelf solution that we advise is the [Shelly EM](https://www.shelly.com/en/products/shop/shelly-em-120a/shelly-em-50a?tracking=A7FsiPIfUWsFpnfKHa8SRyUYLXjr2hPq). The device has a local API, updates are pushed to Home Assistant and it has a high quality [integration](/integrations/shelly/).
- You can build your own using ESPHome's [CT Clamp Current sensor](https://esphome.io/components/sensor/ct_clamp.html) or energy meter sensors like the [ATM90E32](https://esphome.io/components/sensor/atm90e32.html). For the DIY route, check out [this video by digiblur](https://www.youtube.com/watch?v=n2XZzciz0s4) to get started.
+- Using a Raspberry Pi, you can use a CT clamp HAT from LeChacal called [RPICT hats](https://lechacal.com/docs/RPICT/Raspberrypi_Current_and_Temperature_Sensor_Adaptor/). They can be stacked to expand the number of lines to monitor. They also provide Active, Apparent, and Reactive power and power factor for single-phase and three-phase installations. They integrate with Home Assistant using MQTT.
_Attention! Installing CT clamp sensor devices requires opening your electrical cabinet. This work should be done by someone familiar with electrical wiring and may require a licensed professional in some regions. Your qualified installer will know how to do this._
-_Disclaimer: Some links in this section are affiliate links._
\ No newline at end of file
+_Disclaimer: Some links in this section are affiliate links._
diff --git a/source/_includes/installation/operating_system.md b/source/_includes/installation/operating_system.md
index 6fb6ce909d8..04d61f3211e 100644
--- a/source/_includes/installation/operating_system.md
+++ b/source/_includes/installation/operating_system.md
@@ -32,6 +32,9 @@ Variants without pre-installed Home Assistant:
- [ODROID-C4](https://ameridroid.com/products/odroid-c4?ref=eeb6nfw07e)
- [ODROID-M1](https://ameridroid.com/products/odroid-M1?ref=eeb6nfw07e)
- ODROID-M1S, [4 GB RAM](https://ameridroid.com/products/odroid-m1s?variant=47425396474135?ref=eeb6nfw07e) or [8 GB RAM](https://ameridroid.com/products/odroid-m1s?variant=47425396506903?ref=eeb6nfw07e)
+
+Related components:
+
- [Power Supply](https://ameridroid.com/products/12v-2a-power-supply-plug?ref=eeb6nfw07e)
- [CR2032 Coin Cell](https://ameridroid.com/products/rtc-bios-battery?ref=eeb6nfw07e)
- [eMMC Module](https://ameridroid.com/products/emmc-module-n2-linux-red-dot?ref=eeb6nfw07e)
@@ -441,7 +444,7 @@ Minimum recommended assignments:
- title: VMware ESXi/vSphere
content: |
- Use the “E1001” or “E1001E” virtual network adapter. There are confirmed mDNS/Multicast discovery issues when using VMware’s “VMXnet3” virtual network adapter.
+ Use the `E1000` or `E1000E` virtual network adapter. There are confirmed mDNS/Multicast discovery issues when using VMware’s `VMXnet3` virtual network adapter.
{% endif %}
{% if page.installation_type == 'windows' %}
- title: Hyper-V
diff --git a/source/_includes/installation/supervised.md b/source/_includes/installation/supervised.md
index 39bf52fb273..edc34702830 100644
--- a/source/_includes/installation/supervised.md
+++ b/source/_includes/installation/supervised.md
@@ -10,7 +10,7 @@ Unless you really need this installation type, you should install Home Assistant
1. First make sure you understand the
requirements.
2. This installation method has very strict requirements, for example, it only
- supports Debian (and Ubuntu, Armbian, Raspberry Pi OS are **not**
+ supports Debian (Ubuntu, Armbian, and Raspberry Pi OS are **not**
supported). So, make sure you understand the requirements from step 1 above.
3. Then head over to
home-assistant/supervised-installer to set it up.
diff --git a/source/_includes/integrations/google_client_secret.md b/source/_includes/integrations/google_client_secret.md
index 5e5bf5b0303..51e16721a67 100644
--- a/source/_includes/integrations/google_client_secret.md
+++ b/source/_includes/integrations/google_client_secret.md
@@ -26,29 +26,29 @@ This section explains how to generate a client ID and client secret on
3. **Enable** the {{ api }}.
4. Navigate to **APIs & Services** (left sidebar) > [Credentials](https://console.cloud.google.com/apis/credentials).
5. In the left sidebar, select **OAuth consent screen**.
- - Select **External** and **Create**.
- - Set the **App name** (the name of the application asking for consent) to anything you want, e.g., *Home Assistant*.
-6. You then need to select a **Support email**.
- - From the dropdown menu, select your email address.
-7. Under **Developer contact information**, enter your email address (the same as above is fine).
-8. Scroll to the bottom and select **Save and continue**.
- - You don't have to fill out anything else here. Adding other information to this page (like an app logo) may trigger an additional review process from Google and delay setup by days.
-9. You will then be automatically taken to the **Scopes** page.
- - You do not need to add any scopes here. Select **Save and continue** to move to the **Test users** page.
- - You do not need to add anything to the **Test users** page. Select **Save and continue**, which will take you to the **Summary** page.
- - Select **Back to dashboard**.
-10. Select **OAuth consent screen** again and under **Publishing status**, select **Publish app**.
- - Otherwise your credentials will expire every 7 days.
-11. Make sure **Publishing status** is set to **In production**.
-12. In the left sidebar, select **Credentials**, then select **Create credentials** (at the top of the screen), then select **OAuth client ID**.
-13. Set the **Application type** to **Web application** and give this credential set a name (like "Home Assistant Credentials").
-14. Add `https://my.home-assistant.io/redirect/oauth` to **Authorized redirect URIs** then select **Create**.
- - This is not a placeholder. It is the URI that must be used.
-15. You will then be presented with a pop-up saying **OAuth client created**, showing **Your client ID** and **Your client secret**.
- - Make a note of these (for example, copy and paste them into a text editor), as you will need them shortly.
- - Once you have noted these strings, select **OK**.
- - If you need to find these credentials again at any point, then navigate to **APIs & Services** > **Credentials**, and you will see **Home Assistant Credentials** (or whatever you named them in the previous step) under **OAuth 2.0 Client IDs**.
- - To view both the **Client ID** and **Client secret**, select the pencil icon. This will take you to the settings page for these credentials, and the information will be on the right-hand side of the page.
-16. Congratulations! You are now the keeper of a client secret. Guard it in your treasure box. In most cases your new credentials will be active within a few moments. However, Google states that activation may take up to five hours in some circumstances.
-
+6. It will take you to the Overview page and ask for **Project Configuration**:
+ - Complete the App Information:
+ - Set the **App name** (the name of the application asking for consent) to anything you want, for example, *Home Assistant*.
+ - For a **Support email**, choose your email address from the dropdown menu.
+ - Click **Next**.
+ - For Audience, select **External** then click **Next**.
+ - Under Contact Information, enter your email address (the same as above is fine). Click **Next**.
+ - Read the policy and check the box if you agree. Click **Continue**.
+ - Click **Create**.
+7. In the left sidebar, select **Audience**:
+ - Under **Publishing status > Testing**, select **Publish app**.
+ > Otherwise, your credentials will expire every 7 days.
+8. In the left sidebar, select **Clients**:
+ - Click **+ Create Client**.
+ - For Application type, choose **Web Application** and give this client ID a name (like "Home Assistant Client").
+ - Add `https://my.home-assistant.io/redirect/oauth` to **Authorized redirect URIs** then select **Create**.
+ > **Note**: This is not a placeholder. It is the URI that must be used.
+ - Click **Create**.
+9. Find the client you just created. Under the Actions column, choose **Download OAuth client** (download icon), which will show you the **Client ID** and **Client Secret**.
+ - Make a note of these (for example, copy and paste them into a text editor), as you will need them shortly.
+ - Once you have noted these strings, select **Close**.
+ - Congratulations! You are now the keeper of a client secret. Guard it in your treasure box. In most cases, your new credentials will be active within a few minutes. However, Google states that activation may take up to five hours in some circumstances.
+ > If you need to find these credentials again at any point, then navigate to **APIs & Services** > **Credentials**, and you will see **Home Assistant Credentials** (or whatever you named them in the previous step) under **OAuth 2.0 Client IDs**.
+ >
+ > To view the **Client ID** and **Client Secret**, click the **Download OAuth client** (download icon) under the Actions column.
{% enddetails %}
diff --git a/source/_integrations/_integration_docs_template.markdown b/source/_integrations/_integration_docs_template.markdown
index f8b33a17150..6b49608f02d 100644
--- a/source/_integrations/_integration_docs_template.markdown
+++ b/source/_integrations/_integration_docs_template.markdown
@@ -158,7 +158,7 @@ link to the blueprint on the [blueprints
## Data updates
-The **My integration** integration fetches data from the device every 5 minutes by default.
+The **My integration** integration {% term polling polls %} data from the device every 5 minutes by default.
Newer devices (the ones running MyOS) have the possibility to push data.
In this case, pushing data is enabled when the integration is started. If enabling data push fails, the integration uses data {% term polling %}.
diff --git a/source/_integrations/acaia.markdown b/source/_integrations/acaia.markdown
index 7a5506d6e64..0f8c9abe21c 100644
--- a/source/_integrations/acaia.markdown
+++ b/source/_integrations/acaia.markdown
@@ -108,7 +108,7 @@ actions:
- While this integration is configured for your device, you won't be able to use the official app, as only one connection at a time is supported.
-## Remove integration
+## Removing the integration
This integration follows standard integration removal, no extra steps are required.
diff --git a/source/_integrations/airgradient.markdown b/source/_integrations/airgradient.markdown
index 706f5f75cfc..6bd789f5ce6 100644
--- a/source/_integrations/airgradient.markdown
+++ b/source/_integrations/airgradient.markdown
@@ -51,10 +51,20 @@ The integration will fetch data from each device. The following sensors are supp
- PM10 density
- Raw nitrogen
- Raw total volatile organic compounds
+- Raw PM2.5
- Signal strength
- Temperature
- Total volatile organic compounds index
+A number of configuration entities are available as sensors to automate with if you control the device via the AirGradient dashboard instead of set it to control locally.
+- CO2 automatic baseline calibration days
+- NOx learning offset
+- Total volatile organic compounds learning offset
+- Data used for the LED bar
+- LED bar brightness
+- Display temperature unit
+- Display brightness
+
## Available configuration entities
The integration provides a few configuration entities to customize the device experience.
@@ -67,9 +77,15 @@ The following entities are supported:
- Requesting CO2 calibration
- Requesting LED bar test
- Toggling sharing metrics with AirGradient
+- Configuration source
+- Data used for the LED bar
+- Display PM standard
+- CO2 automatic baseline calibration days
+- NOx learning offset
+- Total volatile organic compounds learning offset
-## Remove integration
+## Removing the integration
This integration follows standard integration removal, no extra steps are required.
-{% include integrations/remove_device_service.md %}
\ No newline at end of file
+{% include integrations/remove_device_service.md %}
diff --git a/source/_integrations/alexa.smart_home.markdown b/source/_integrations/alexa.smart_home.markdown
index 21ea56f7103..01be1469774 100644
--- a/source/_integrations/alexa.smart_home.markdown
+++ b/source/_integrations/alexa.smart_home.markdown
@@ -396,7 +396,8 @@ alexa:
type: string
{% endconfiguration %}
-### Alexa locale
+
+### Alexa locale
The `locale` should match the location and language used for your Amazon echo devices.
@@ -421,7 +422,8 @@ The supported locales are:
See [List of Capability Interfaces and Supported Locales][alexa-supported-locales].
-### Proactive events
+
+### Proactive events
The `endpoint`, `client_id` and `client_secret` are optional, and are only required if you want to enable Alexa's proactive mode (i.e., "Send Alexa Events" enabled). Please note the following if you want to enable proactive mode:
@@ -429,7 +431,8 @@ The `endpoint`, `client_id` and `client_secret` are optional, and are only requi
- The `client_id` and `client_secret` are not the ones used by the skill that have been set up using "Login with Amazon" (in the [Alexa Developer Console][alexa-dev-console]: Build > Account Linking), but rather from the "Alexa Skill Messaging" (in the Alexa Developer Console: Build > Permissions > Alexa Skill Messaging). To get them, you need to enable the "Send Alexa Events" permission.
- If the "Send Alexa Events" permission was not enabled previously, you need to unlink and relink the skill using the Alexa App, or else Home Assistant will show the following error: "Token invalid and no refresh token available. Also, you need to restart your Home Assistant after each disabling/enabling the skill in Alexa."
-### Configure filter
+
+### Configure filter
By default, no entity will be excluded. To limit which entities are being exposed to Alexa, you can use the `filter` parameter. Keep in mind that only [supported platforms](#supported-platforms) can be added.
@@ -451,7 +454,8 @@ alexa:
See the [troubleshooting](#troubleshooting) if you're experiencing issues setting up the integration.
-### Alexa Display Categories
+
+### Alexa Display Categories
Configure a display category to override the display category and iconography each entity is shown in the Alexa app. This makes it easier to find and monitor devices.
@@ -1103,13 +1107,15 @@ If the water heater entity supports on/off, use _"turn on"_ and _"turn off"_ utt
## Troubleshooting
-### Binary Sensor not available in Routine Trigger
+
+### Binary Sensor not available in Routine Trigger
Binary Sensors with a [`device_class`](/integrations/binary_sensor/#device-class) attribute of `door` `garage_door` `opening` `window` `motion` `presense` are supported.
Use the [Entity Customization Tool](/docs/configuration/customizing-devices/#customization-using-the-ui) to override the `device_class` attribute to expose a `binary_sensor` to Alexa.
-### Token Invalid and no Refresh Token Available
+
+### Token Invalid and no Refresh Token Available
Disable and re-enable the skill using the Alexa App; then restart Home Assistant.
diff --git a/source/_integrations/alpha_vantage.markdown b/source/_integrations/alpha_vantage.markdown
index c659bc62981..ac7b6ef3d39 100644
--- a/source/_integrations/alpha_vantage.markdown
+++ b/source/_integrations/alpha_vantage.markdown
@@ -80,7 +80,7 @@ foreign_exchange:
## API information
-Alpha Vantage offers two tiers of the API key, one free and one paid for. If you are using the free version, you will be limited to twenty-five queries per day. The sensor polls every 5 minutes, so you will only get data for the first two hours per day. This can be configured using the `scan_interval` variable.
+Alpha Vantage offers two tiers of the API key, one free and one paid for. If you are using the free version, you will be limited to twenty-five queries per day. The sensor polls every 5 minutes, so you will only get data for the first two hours per day. This can be configured using the `scan_interval` variable. To find the necessary symbols, you can use the search function of the API. For example, try [this SYMBOL_SEARCH query](https://www.alphavantage.co/query?function=SYMBOL_SEARCH&apikey=
&keywords=IBM).
The paid version starts at 75 queries per minute, increasing ticker quantity quite a bit.
diff --git a/source/_integrations/amberelectric.markdown b/source/_integrations/amberelectric.markdown
index b74b52d5f4c..f24630631c0 100644
--- a/source/_integrations/amberelectric.markdown
+++ b/source/_integrations/amberelectric.markdown
@@ -45,7 +45,7 @@ It exposes the following {% term sensors %} for each channel type:
- **Price** - Your current electricity price in $/kWh
- **Forecast** - The forecasted prices for the next 12 hours
-- **Descriptor** - A description of the price. Useful if you want to create a Amber light that matches the app.
+- **Descriptor** - A description of the price. Useful if you want to create an Amber light that matches the app. Possible values: `extremely_low`, `very_low`, `low`, `neutral`, `high`, and `spike`.
There are two additional sensors:
diff --git a/source/_integrations/apcupsd.markdown b/source/_integrations/apcupsd.markdown
index 862dec901ff..624900f3242 100644
--- a/source/_integrations/apcupsd.markdown
+++ b/source/_integrations/apcupsd.markdown
@@ -18,24 +18,41 @@ ha_platforms:
ha_integration_type: integration
---
-[apcupsd](http://www.apcupsd.org/) status information can be integrated into Home Assistant when the Network Information Server (NIS) is configured on the APC device.
+The **APC UPS Daemon** {% term integration %} is used to integrate with UPS devices from [APC](www.apc.com) when the Network Information Server ([apcupsd](http://www.apcupsd.org/)) is configured on the APC devices. Use case: When the Notify integration is set up in Home Assistant, you can send notifications. For example, when the UPS switches to battery power, or when the battery level drops low. You can also use it to track the UPS load.
-There is currently support for the following device types within Home Assistant:
+## Supported devices
-- [Binary sensor](#binary-sensor)
-- [Sensor](#sensors)
+Generally any device supported by [apcupsd](http://www.apcupsd.org/) is also supported by this integration. This includes most APC UPS models, such as Smart-UPS models and simple signaling models like Back-UPS models.
-## Home Assistant add-on installation
+## Prerequisites
-Install this [unofficial add-on](https://github.com/korylprince/hassio-apcupsd/) to use this integration with Home Assistant. Keep in mind that we can't give you support for this add-on.
+1. Install apcupsd.
-After installation, follow the instructions on the GitHub page to configure the plugin. Then continue to follow the integration configurations below.
+ First, install [apcupsd](http://www.apcupsd.org/) on the machine connected to your UPS. It works on Linux, macOS, Windows, BSD, Solaris, and more.
+ You can usually install it through your operating system’s package manager.
+
+
+2. Configure apcupsd for network access.
+
+ - Open the `apcupsd.conf` file (usually found in `/etc/apcupsd/`) and make sure it’s set to listen for network connections.
+ - Look for the lines: `NISIP 0.0.0.0` and `NISPORT 3551`.
+ - This setting allows it to accept connections on all network interfaces on port 3551.
+ - If you prefer, you can set this to a specific IP address and port that Home Assistant can reach.
+
+3. Start the apcupsd service.
{% include integrations/config_flow.md %}
+{% configuration_basic %}
+Host:
+ description: "The IP address of the APC UPS Daemon configured above."
+Port:
+ description: "The port of the APC UPS Daemon configured above."
+{% endconfiguration_basic %}
+
{% note %}
-If you get `ConnectionRefusedError: Connection refused` errors in the Home Assistant logs, ensure the [apcupsd](http://www.apcupsd.org/) configuration directives used by its Network Information Server is set to permit connections from all addresses NISIP 0.0.0.0, else non-local addresses will not connect.
+If you get `ConnectionRefusedError: Connection refused` errors in the Home Assistant logs, it means that Home Assistant is not able to connect to the daemon. Please check if the `NISIP` is properly configured.
{% endnote %}
@@ -123,3 +140,17 @@ Some sensors are disabled by default, since they provide information that is onl
- UPS Transfer from Battery (XOFFBAT)
- UPS Transfer from Battery (XOFFBATT)
- UPS Transfer to Battery (XONBATT)
+
+## Data updates
+
+The integration {% term polling polls %} data from your APC UPS Daemon every 60 seconds by default.
+
+## Known limitations
+
+This integration does not allow you to control the UPS. For example, you cannot run a self-test. To run a self-test, use the `aptest` command provided by [apcupsd](http://www.apcupsd.org/).
+
+## Removing the integration
+
+This integration follows standard integration removal. No extra steps are required.
+
+{% include integrations/remove_device_service.md %}
diff --git a/source/_integrations/apollo_automation.markdown b/source/_integrations/apollo_automation.markdown
index 5024f83245f..3d3f5aeb881 100644
--- a/source/_integrations/apollo_automation.markdown
+++ b/source/_integrations/apollo_automation.markdown
@@ -1,19 +1,50 @@
---
title: Apollo Automation
-description: Connect and control your Apollo Automation ESPHome devices using the ESPHome integration
-ha_release: '2025.3'
-ha_iot_class: Local Push
+description: Connect and control your Apollo Automation devices using the ESPHome integration
+ha_release: 0.85
ha_category:
- - Sensor
- - Presence detection
+ - Alarm
+ - DIY
+ - Update
ha_domain: apollo_automation
-ha_integration_type: brand
+ha_integration_type: virtual
ha_supporting_domain: esphome
ha_supporting_integration: ESPHome
-ha_platforms:
- - sensor
works_with:
- local
+ha_codeowners:
+ - '@OttoWinter'
+ - '@jesserockz'
+ - '@kbx81'
+ - '@bdraco'
+ha_config_flow: true
+ha_platforms:
+ - alarm_control_panel
+ - assist_satellite
+ - binary_sensor
+ - button
+ - camera
+ - climate
+ - cover
+ - date
+ - datetime
+ - diagnostics
+ - event
+ - fan
+ - light
+ - lock
+ - media_player
+ - number
+ - select
+ - sensor
+ - switch
+ - text
+ - time
+ - update
+ - valve
+ha_iot_class: Local Push
+ha_dhcp: true
+ha_zeroconf: true
---
[Apollo automation](https://apolloautomation.com/) is a member of the Made for ESPHome program.
diff --git a/source/_integrations/apsystems.markdown b/source/_integrations/apsystems.markdown
index 8c155974c8f..6aad8bc603b 100644
--- a/source/_integrations/apsystems.markdown
+++ b/source/_integrations/apsystems.markdown
@@ -53,6 +53,9 @@ The **APsystems** {% term integration %} allows you to read the data from your [
| output_limit | number | Sets the max output of the inverter
+## Flash Endurance
+
+There has been a discussion about the inverter's lifetime being shortened when using the `output_limit` setting excessively. APsystems officially confirmed this to me while also acknowledging that newer hardware versions don't have this issue, while older ones should be updated at most every 300 seconds. Newer inverters have a serial number starting with `Ex701` and thus aren't at risk of flash wear when setting the `output_limit` more frequently than every 300 seconds.
## Prerequisites
diff --git a/source/_integrations/aquacell.markdown b/source/_integrations/aquacell.markdown
index 938c97f376a..b6e5e8692eb 100644
--- a/source/_integrations/aquacell.markdown
+++ b/source/_integrations/aquacell.markdown
@@ -98,7 +98,7 @@ There are no known limitations for this integration.
There are no commonly known issues with this integration.
-## Remove integration
+## Removing the integration
This integration follows standard integration removal, no extra steps are required.
diff --git a/source/_integrations/azure_storage.markdown b/source/_integrations/azure_storage.markdown
index 8e16bb27a83..cc367a13522 100644
--- a/source/_integrations/azure_storage.markdown
+++ b/source/_integrations/azure_storage.markdown
@@ -10,7 +10,7 @@ ha_domain: azure_storage
ha_codeowners:
- '@zweckj'
ha_integration_type: service
-ha_quality_scale: bronze
+ha_quality_scale: platinum
---
This integration allows you to use [Azure storage accounts](https://learn.microsoft.com/en-us/azure/storage/common/storage-account-overview) for use with Home Assistant Backups.
diff --git a/source/_integrations/backup.markdown b/source/_integrations/backup.markdown
index 59b82a5b5f9..0bed3503008 100644
--- a/source/_integrations/backup.markdown
+++ b/source/_integrations/backup.markdown
@@ -11,8 +11,9 @@ ha_codeowners:
- '@home-assistant/core'
ha_iot_class: Calculated
ha_platforms:
+ - diagnostics
- sensor
-ha_integration_type: system
+ha_integration_type: service
related:
- docs: /common-tasks/general/#backups
title: Backups
@@ -38,8 +39,9 @@ However, it is no longer needed to create your own automation. Follow these step
### Action backup.create_automatic
The {% my developer_call_service service="backup.create_automatic" %} action can be used
-to create a backup of your Home Assistant instance, using the same settings as those used
-by [automatic backups](/common-tasks/general/#setting-up-an-automatic-backup-process).
+to create a backup of your Home Assistant instance.
+
+The automation editor does not show a UI editor because the action uses the same settings you defined under {% my backup title="**Settings** > **System** > **Backups**" %}, under **Backup settings**. For a more detailed description, refer to the documentation on [automatic backups](/common-tasks/general/#setting-up-an-automatic-backup-process).
This action can be called to create backups with pre-defined settings at a more flexible
schedule than the schedule which can be configured for automatic backups.
@@ -56,8 +58,13 @@ action: backup.create_automatic
The {% my developer_call_service service="backup.create" %} action can be used
to create a backup of your Home Assistant instance.
-This action is only available in [core and container installations](/installation/#advanced-installation-methods).
-The action has no additional options or parameters.
+
+- This action is only available in [core and container installations](/installation/#advanced-installation-methods).
+- The action has no additional options or parameters.
+- The backup will only be saved on the local storage.
+- The backup created with `backup.create` always includes the database.
+- The backup will be created without a password.
+
Example action:
```yaml
diff --git a/source/_integrations/bluetooth.markdown b/source/_integrations/bluetooth.markdown
index 21fd43fe8da..23b67144dc8 100644
--- a/source/_integrations/bluetooth.markdown
+++ b/source/_integrations/bluetooth.markdown
@@ -274,6 +274,14 @@ The Bluetooth integration supports receiving advertisement data from external ad
When adding multiple remote adapters to increase range or available connection slots, separate them enough to avoid interference with each other.
+For development and testing of Bluetooth proxies, the Home Assistant Bluetooth integration team primarily uses the [Olimex ESP32-POE-ISO-EA](https://www.olimex.com/Products/IoT/ESP32/ESP32-POE-ISO/open-source-hardware) together with the [Olimex BOX-ESP32-POE-ISO-EA-F](https://www.olimex.com/Products/IoT/ESP32/BOX-ESP32-POE-ISO/). These devices are compatible with [ESPHome ready-made projects](https://esphome.io/projects/index.html).
+
+{% tip %}
+- The `-EA` variant offers significantly better RF performance compared to the standard non-`EA` model.
+- If the `ESP32-POE-ISO-EA` is out of stock, the `ESP32-POE-ISO-EA-IND` is a good alternative.
+- The `ESP32-POE-ISO-WROVER-EA` model is **not recommended**, as it uses a different pin configuration and is not compatible with ESPHome ready-made projects.
+{% endtip %}
+
The following remote adapters are supported:
- [ESPHome](https://esphome.io/projects/?type=bluetooth)
diff --git a/source/_integrations/bluetooth_tracker.markdown b/source/_integrations/bluetooth_tracker.markdown
index b8676ddfbf0..c1d685a7cfe 100644
--- a/source/_integrations/bluetooth_tracker.markdown
+++ b/source/_integrations/bluetooth_tracker.markdown
@@ -14,6 +14,10 @@ ha_quality_scale: legacy
This tracker discovers new devices on boot and tracks Bluetooth devices periodically based on `interval_seconds` value. It is not required to pair the devices with each other! Devices discovered are stored with 'bt_' as the prefix for device MAC addresses in `known_devices.yaml`.
+{% important %}
+This integration is only available on Home Assistant Core installation types. Unfortunately, it cannot be used with Home Assistant OS, Supervised, or Container.
+{% endimportant %}
+
{% details "Notes for Home Assistant Core Installations" %}
This platform requires `pybluez` to be installed. On Debian based installs, run
diff --git a/source/_integrations/bosch_alarm.markdown b/source/_integrations/bosch_alarm.markdown
index e46a593b47a..9672027d188 100644
--- a/source/_integrations/bosch_alarm.markdown
+++ b/source/_integrations/bosch_alarm.markdown
@@ -52,12 +52,12 @@ A sensor is provided per area that lists how many points are currently in a faul
The primary means of authentication for the _Mode 2_ API is the _Automation_ passcode. It needs to be at least 10 characters long, and it is different from the _User_ code -- a shorter numeric pin used to arm/disarm the panel.
The integration will prompt for the required passcodes, which depend on the panel type.
-| Panel | Code |
-| --- | --- |
-| Solution | User [^2] |
+| Panel | Code |
+| -------- | ---------- |
+| Solution | User [^2] |
| B Series | Automation |
| G Series | Automation |
-| AMAX | Both |
+| AMAX | Both |
[^2]: The user needs to have the "master code functions" authority if you wish to interact with history events.
@@ -65,18 +65,95 @@ The integration will prompt for the required passcodes, which depend on the pane
Since the _Mode 2_ automation user has "superuser" privileges, it bypasses the regularly configured alarm pin: you will _not_ be prompted for a _User_ code when arming/disarming through the integration.
{% endimportant %}
-If your authentication changes, the integration will automatically prompt you to enter the new credentials.
+## Data updates
-## Reconfiguration
-
-This integration supports reconfiguration, so it is possible to change the configuration such as the IP Address after it is configured.
+The **Bosch Alarm** {% term integration %} fetches data from the device every 30 seconds.
+Newer devices and firmware revisions have the possibility to push data instead of needing to rely on {% term polling %}.
+At startup, the integration checks whether your panel supports push data updates and falls back to {% term polling %} if not.
## Troubleshooting
-### Diagnostics information
+### Issues with Bosch Solution 2000/3000/4000 panels
-Consider uploading [the diagnostics file](/docs/configuration/troubleshooting/#debug-logs-and-diagnostics) along with your issue report to allow faster triaging and pinpointing the issue.
-The information contained in the generated diagnostics file is redacted to avoid any sensitive information while still remaining useful for developers to fix the issue.
+We have found that some panels end up with a configuration on them that is incompatible with the integration.
+When this happens, you will get a connection error when attempting to communicate with the panel, even if the credentials are correct.
+If you continue to have connection errors even after rebooting your panel, then you have an issue with your configuration.
+The easiest way to solve this is to follow the full reset and restore procedure outline below.
+
+#### Resetting the configuration and restoring the integration
+
+1. Update firmware (Recommended).
+ 1. Download and install the latest firmware for the control panel and IP module from the Bosch Security website.
+2. Back up the existing configuration.
+ 1. Connect to the panel via A-Link Plus.
+ 2. Perform an upload of the panel configuration.
+ 3. Save the configuration to your computer.
+3. Default the control panel.
+ 1. Press the default/reset button on the panel.
+ 2. Use installer code 1234.
+ 3. Set:
+ 1. Location 0081 = 3 (Enables IP module mode)
+ 2. Location 4456 = 4 (Enables RSC+ communication)
+ 4. Set date and time using master code `25806#`.
+4. Initial Home Assistant test.
+ 1. Wait 2 to 5 minutes after resetting the panel.
+ 2. Set up the integration on the panel using its IP address.
+ 3. Home Assistant should connect using default configuration and show panel status.
+5. Restore your original configuration.
+ 1. Reconnect to the panel using A-Link Plus.
+ 2. Modify zones, outputs, and user codes to match the original setup.
+ 3. Save and download the updated config to the panel.
+ 4. Wait 2 to 5 minutes.
+6. Reconnect to Home Assistant.
+ 1. Open Home Assistant.
+ 2. The integration should now detect the updated configuration.
+ 3. All relevant entities (zones, partitions, outputs) should appear automatically.
+
+#### Restarting a panels network stack
+
+We have found that the Solution panels have a bug where they can get into a state where the network module stops letting us use the _Mode 2_ API.
+If your configuration information is correct, but you are still unable to connect to your panel, then you are likely encountering this bug.
+This can be resolved by restarting the network modules, which can be done with the following steps.
+
+##### Resetting network module 1
+
+Using the codepad, enter your master code, followed by the `[9][4][1]` and `[#]` keys.
+
+##### Resetting network module 2
+
+Using the codepad, enter your master code, followed by the `[9][4][2]` and `[#]` keys.
+
+### Issues with the Bosch B/G Series (B3512/B4512/B5512/B8512/B9512)
+
+The following procedure can be used to configure the panel correctly so that it will work with the integration.
+
+#### Panel configuration procedure
+
+1. Update Firmware (Recommended).
+ 1. Use RPS to update the control panel and B426 (IP module if used) to the latest firmware.
+ 2. Download firmware from the Bosch Security website.
+2. Set IP Address.
+ 1. Configure the panel’s IP settings using RPS or via the codepad.
+ 2. Use DHCP for initial setup (optional), or assign a static IP.
+3. Configure the automation device.
+ 1. In RPS:
+ 1. Set **Automation Device** to **Mode 2** (Bosch Standard Protocol).
+ 2. Set your automation passcode (used for Home Assistant authentication).
+4. Wait for changes to apply.
+ 1. Wait 2 to 5 minutes for the panel to reboot and apply settings.
+5. Connect to Home Assistant.
+ 1. Set up the integration using the panel’s IP address.
+ 2. Enter the automation passcode in the Home Assistant configuration.
+ 3. Home Assistant should connect and display panel status, zones, and partitions.
+
+#### TLS issues
+
+Some older firmwares for these panels use outdated certificates that are no longer trusted by Home Assistant. If you have issues connecting and see a TLS error in your logs, update the firmware on your panel.
+
+## Known limitations
+
+- The integration does not allow you to configure the panel; you can instead do this via the panel's configuration utility.
+- Some older firmware versions for the Solution / AMAX series panels only support a single connection at a time. If you try to have a cloud connection and use the integration on these panels simultaneously, the panel's network stack can lock up, and the integration will stop working.
## Removing the integration
diff --git a/source/_integrations/bring.markdown b/source/_integrations/bring.markdown
index ca5e6f26095..d214b7afe73 100644
--- a/source/_integrations/bring.markdown
+++ b/source/_integrations/bring.markdown
@@ -218,7 +218,7 @@ The **Bring!** integration relies on an active internet connection to communicat
In any case, when reporting an issue, please enable [debug logging](/docs/configuration/troubleshooting/#debug-logs-and-diagnostics), restart the integration, and as soon as the issue reoccurs, stop the debug logging again (*download of debug log file will start automatically*). Further, if still possible, please also download the [diagnostics](/integrations/diagnostics) data. If you have collected the debug log and the diagnostics data, provide them with the issue report.
-## Remove integration
+## Removing the integration
This integration can be removed by following these steps:
diff --git a/source/_integrations/comelit.markdown b/source/_integrations/comelit.markdown
index cf1c4ae93a6..f5385d57750 100644
--- a/source/_integrations/comelit.markdown
+++ b/source/_integrations/comelit.markdown
@@ -30,12 +30,14 @@ ha_integration_type: hub
The **Comelit SimpleHome** {% term integration %} allows you to control your [Comelit home automation devices](https://comelitgroup.it/installatore/offerta/home-building-automation/).
+The integration provides information on connected devices and enables control of the alarm system.
+
## Supported devices
-There is support for the following platform types within Home Assistant:
+There is support for the following devices within Home Assistant:
-- **Comelit Serial Bridge** - allows local control for light, cover, irrigation, climate, humidifier/dehumidifier and "other" devices; creates power sensors.
-- **Comelit VEDO System** - allows local control of the alarm system.
+- **Comelit Serial Bridge**
+- **Comelit VEDO System**
{% include integrations/config_flow.md %}
@@ -55,6 +57,47 @@ There is support for the following platform types within Home Assistant:
description: Comelit VEDO System.
{% endconfiguration_basic %}
+## Examples
+
+### Automation: Activate the alarm when you leave home
+
+```yaml
+automation:
+- alias: "Arm alarm away"
+ id: "arm_alarm_away"
+ triggers:
+ - platform: state
+ entity_id: person.simone
+ to: "not_home"
+ actions:
+ - action: alarm_control_panel.alarm_arm_away
+ target:
+ entity_id: alarm_control_panel.home
+ data:
+ code: "12345"
+```
+
+### Automation: Close the covers at sunset if you are not at home
+
+```yaml
+automation:
+- alias: Close covers at sunset
+ id: "covers_close_sunset"
+ trigger:
+ - platform: sun
+ event: sunset
+ condition:
+ conditions:
+ - alias: "condition alias (not home)"
+ condition: state
+ entity_id: group.person_family
+ state: "not_home"
+ action:
+ entity_id:
+ - cover.group_home_covers
+ service: cover.close_cover
+```
+
## Data updates
This integration {% term polling polls %} data from the device every 5 seconds by default.
@@ -63,9 +106,37 @@ This integration {% term polling polls %} data from the device every 5 seconds b
The **Comelit SimpleHome** {% term integration %} provides the following entities:
-### Alarm control panel
+### Comelit Serial Bridge
-The integration will create an alarm entity for each area. Additionally, it will create a sensor and a presence detection binary sensor for each zone, enhancing monitoring capabilities.
+- Climate
+- Cover
+- Dehumidifier
+- Humidifier
+- Light
+- Sensor - power consumption
+- Switch - irrigation and sockets (other)
+
+### Comelit VEDO System
+
+- Alarm control panel - per area
+- Binary sensor - per zone presence detection
+- Sensor - per zone status
+
+## Troubleshooting
+
+### Can’t set up the device
+
+#### Symptom: "Cannot connect"
+
+When trying to set up the integration, the form shows the message "Cannot connect".
+
+##### Description
+
+This means that the IP address or the port specified is wrong.
+
+##### Resolution
+
+To resolve this issue, verify the device’s IP address and port by navigating to them in a web browser.
## Removing the integration
diff --git a/source/_integrations/control4.markdown b/source/_integrations/control4.markdown
index 89d82cf9a33..0332d6c21dc 100644
--- a/source/_integrations/control4.markdown
+++ b/source/_integrations/control4.markdown
@@ -23,6 +23,8 @@ The **Control4** {% term integration %} allows you to control and monitor lights
Before setting up, you should assign a static IP address/DHCP reservation on your router to your Control4 controller. Home Assistant must be able to communicate with the controller over the local network; 4Sight remote access is not supported.
+The username and password required for this integration are the same credentials you use to log in to the Control4 site at [https://my.control4.com/](https://my.control4.com/).
+
{% include integrations/config_flow.md %}
## Options
diff --git a/source/_integrations/cookidoo.markdown b/source/_integrations/cookidoo.markdown
index 7dc2e7c19fa..1003ef5bf3e 100644
--- a/source/_integrations/cookidoo.markdown
+++ b/source/_integrations/cookidoo.markdown
@@ -111,7 +111,7 @@ The Home Assistant to-do list interface allows both renaming items and changing
The Cookidoo integration fetches data from the device every 90 seconds by default.
-## Remove integration
+## Removing the integration
This integration follows standard integration removal, no extra steps are required.
diff --git a/source/_integrations/daikin.markdown b/source/_integrations/daikin.markdown
index 376bd2ab6c6..e3df334a558 100644
--- a/source/_integrations/daikin.markdown
+++ b/source/_integrations/daikin.markdown
@@ -45,7 +45,9 @@ There is currently support for the following device types within Home Assistant:
{% note %}
-- The integration for BRP072Cxx and SKYFi based units need API-key / password respectively. The API-key/password can be found on a sticker under the front cover. The other models are auto detected and the API-key and password field must be left empty.
+- BRP072Cxx adapters require an API key to be entered, which is labelled "KEY" on the device sticker alongside SSID, MAC, and S/N. Password should be left blank.
+- SKYFi-based units require a password to be entered. API key should be left blank.
+- Other models are auto-detected and the API key and password fields must be left blank.
- BRP084Cxx firmware update from 1.19.0 to 2.8.0 breaks local API there is however ongoing work in fixing local API support again.
{% endnote %}
diff --git a/source/_integrations/denonavr.markdown b/source/_integrations/denonavr.markdown
index 2d494c01b7b..3358698ca3e 100644
--- a/source/_integrations/denonavr.markdown
+++ b/source/_integrations/denonavr.markdown
@@ -66,6 +66,7 @@ Known supported devices:
- Denon AVR-3313CI
- Denon AVR-4810
- Denon AVR-E300
+- Denon AVR-E400
- Denon AVR-S650H
- Denon AVC-S660H
- Denon AVR-S710W
diff --git a/source/_integrations/eafm.md b/source/_integrations/eafm.md
index ff4f15548be..9e308858fb1 100644
--- a/source/_integrations/eafm.md
+++ b/source/_integrations/eafm.md
@@ -10,7 +10,7 @@ ha_codeowners:
- '@Jc2k'
---
-The `eafm` integration offers integration with the [UK Environment Agency Flood Monitoring](https://flood-warning-information.service.gov.uk/) API to provide sensors for nearby water levels. Combined with Home Assistant notifications, you could give yourself a warning if a nearby river was likely to flood your local cycle path or the only road out of your village.
+The `eafm` integration offers integration with the [UK Environment Agency Flood Monitoring](https://environment.data.gov.uk/flood-monitoring/doc/reference) API to provide sensors for nearby water levels. Combined with Home Assistant notifications, you could give yourself a warning if a nearby river was likely to flood your local cycle path or the only road out of your village.
{% important %}
@@ -22,6 +22,6 @@ The UK Environment Agency Flood Monitoring only provides data for England - Nort
Home Assistant offers the flood monitoring integration through **Settings** -> **Devices & services** -> **Environment Agency Flood Gauges**.
-You will be prompted to select a monitoring station. You can find the name of nearby monitoring stations on the Flood information service [website](https://flood-warning-information.service.gov.uk/river-and-sea-levels).
+You will be prompted to select a monitoring station. You can find the name of nearby monitoring stations on the Flood information service [website](https://check-for-flooding.service.gov.uk/river-and-sea-levels).
Sensors for that monitoring station should then appear in your Home Assistant instance.
diff --git a/source/_integrations/easyenergy.markdown b/source/_integrations/easyenergy.markdown
index f7f9ab43472..d08245a41de 100644
--- a/source/_integrations/easyenergy.markdown
+++ b/source/_integrations/easyenergy.markdown
@@ -92,6 +92,10 @@ Fetches the hourly prices for gas.
| `start` | yes | Start time to get prices. Defaults to today 00:00:00 | 2023-01-01 00:00:00 |
| `end` | yes | End time to get prices. Defaults to today 00:00:00 | 2023-01-01 00:00:00 |
+{% tip %}
+You can get your `config_entry` by using actions within the [developer tools](/docs/tools/dev-tools/): use one of the easyEnergy actions and view the YAML.
+{% endtip %}
+
#### Response data
The response data is a dictionary with the gas timestamps and prices as string and float values.
@@ -122,6 +126,10 @@ Fetches the hourly prices for energy that you use (buy).
| `start` | yes | Start time to get prices. Defaults to today 00:00:00 | 2023-01-01 00:00:00 |
| `end` | yes | End time to get prices. Defaults to today 00:00:00 | 2023-01-01 00:00:00 |
+{% tip %}
+You can get your `config_entry` by using actions within the [developer tools](/docs/tools/dev-tools/): use one of the easyEnergy actions and view the YAML.
+{% endtip %}
+
#### Response data
The response data is a dictionary with the energy timestamps as strings and prices as float values.
@@ -151,6 +159,10 @@ Fetches the hourly prices for energy that you return (sell).
| `start` | yes | Start time to get prices. Defaults to today 00:00:00 | 2023-01-01 00:00:00 |
| `end` | yes | End time to get prices from. Defaults to today 00:00:00 | 2023-01-01 00:00:00 |
+{% tip %}
+You can get your `config_entry` by using actions within the [developer tools](/docs/tools/dev-tools/): use one of the easyEnergy actions and view the YAML.
+{% endtip %}
+
#### Response data
The response data is a dictionary with the energy timestamps as strings and prices as float values.
diff --git a/source/_integrations/ecowitt.markdown b/source/_integrations/ecowitt.markdown
index 572512f9875..1515522b932 100644
--- a/source/_integrations/ecowitt.markdown
+++ b/source/_integrations/ecowitt.markdown
@@ -39,4 +39,8 @@ The integration will display a Server IP / Host Name, Path, and Port. You can in
- Enter the Server IP / Host Name, Path, and Port from the integration.
- Save
-Ecowitt doesn't support TLS/SSL, you can use the NGINX TLS Proxy Add-on to support HTTPS and HTTP at the same time.
+## TLS/SSL limitations
+
+Ecowitt devices do not support TLS/SSL connections (HTTPS). If your Home Assistant instance is configured to use HTTPS only, the Ecowitt integration will not work properly. You must ensure your Home Assistant instance is accessible via HTTP (non-secure) for the Ecowitt devices to successfully send data.
+
+If you're using SSL/TLS for your Home Assistant instance, you'll need to configure your setup to accept both secure (HTTPS) and non-secure (HTTP) connections. This can typically be done by adjusting your reverse proxy configuration or by using the NGINX Home Assistant add-on which can handle both HTTP and HTTPS traffic simultaneously.
diff --git a/source/_integrations/edimax.markdown b/source/_integrations/edimax.markdown
index 818c7a2116b..5550feaeb27 100644
--- a/source/_integrations/edimax.markdown
+++ b/source/_integrations/edimax.markdown
@@ -15,7 +15,7 @@ related:
ha_quality_scale: legacy
---
-This `edimax` switch {% term integration %} allows you to control the state of your [Edimax](https://www.edimax.com/edimax/merchandise/merchandise_list/data/edimax/global/home_automation_smart_plug/) switches.
+This Edimax {% term integration %} allows you to control the state of your [Edimax](https://www.edimax.com/edimax/merchandise/merchandise_list/data/edimax/global/home_automation_smart_plug/) switches.
To use your Edimax switch in your installation, add the following to your {% term "`configuration.yaml`" %} file.
{% include integrations/restart_ha_after_config_inclusion.md %}
@@ -48,25 +48,3 @@ name:
default: Edimax Smart Plug
type: string
{% endconfiguration %}
-
-## Power consumption sensor
-
-Starting with [version 2 of the firmware](https://www.edimax.com/edimax/download/download/data/edimax/global/download/), the Edimax switches can also report the current and accumulated daily power consumption in their state objects. Use a [template sensor](/integrations/template) to extract their values:
-
-{% raw %}
-
-```yaml
-template:
- - sensor:
- - name: Edimax Current power consumption
- unit_of_measurement: "W"
- state: "{{ state_attr('switch.edimax_smart_plug', 'current_power_w') | default(0, true) }}"
-
- - name: Edimax Accumulated daily power consumption
- unit_of_measurement: "kWh"
- state: "{{ state_attr('switch.edimax_smart_plug', 'today_energy_kwh') | default(0, true) }}"
-```
-
-{% endraw %}
-
-Note that if the smart plug is off, these states report the string `None`. By using a `replace()` in the template, these sensors report purely numerical values.
diff --git a/source/_integrations/edl21.markdown b/source/_integrations/edl21.markdown
index b00a3604e41..b242a1eba71 100644
--- a/source/_integrations/edl21.markdown
+++ b/source/_integrations/edl21.markdown
@@ -20,6 +20,7 @@ Compatible transceivers:
- [DIY](https://wiki.volkszaehler.org/hardware/controllers/ir-schreib-lesekopf-rs232-ausgang)
- [Weidmann Elektronik Schreib-/Lesekopf USB](https://shop.weidmann-elektronik.de/index.php?page=product&info=24)
+- [Wattwächter](https://www.smartcircuits.de)
Tested smart meters:
@@ -29,6 +30,7 @@ Tested smart meters:
- EMH metering eHZ Generation K (enable InF as described in manual to retrieve full data)
- efr SGM-C4 (enable InF as described in manual to retrieve full data)
- easymeter Q3 ([Link](https://www.easymeter.com/products/zaehler/q3a))
+- EBZ DD3 (tested version: DD3 2R06 DTA - SMZ1)
{% include integrations/config_flow.md %}
diff --git a/source/_integrations/eheimdigital.markdown b/source/_integrations/eheimdigital.markdown
index f45c8f8bc59..7cb8318ca70 100644
--- a/source/_integrations/eheimdigital.markdown
+++ b/source/_integrations/eheimdigital.markdown
@@ -72,7 +72,7 @@ Currently, the following devices and entities are supported:
Support for additional EHEIM Digital devices and entities will be added in future updates.
-## Remove integration
+## Removing the integration
This integration follows standard integration removal, no extra steps are required.
diff --git a/source/_integrations/electric_kiwi.markdown b/source/_integrations/electric_kiwi.markdown
index bb1b7ce081a..7af64c1c35d 100644
--- a/source/_integrations/electric_kiwi.markdown
+++ b/source/_integrations/electric_kiwi.markdown
@@ -70,7 +70,7 @@ actions:
{% endraw %}
{% enddetails %}
-## Remove integration
+## Removing the integration
This integration follows standard integration removal, no extra steps are required.
diff --git a/source/_integrations/energyzero.markdown b/source/_integrations/energyzero.markdown
index 27a4c61d4d4..dbde863429d 100644
--- a/source/_integrations/energyzero.markdown
+++ b/source/_integrations/energyzero.markdown
@@ -81,6 +81,10 @@ Fetches the gas prices. The `config_entry` value be found using the **Actions**
| `start` | yes | Start time to get prices. Defaults to today 00:00:00 | 2023-01-01 00:00:00 |
| `end` | yes | End time to get prices. Defaults to today 00:00:00 | 2023-01-01 00:00:00 |
+{% tip %}
+You can get your `config_entry` by using actions within the [developer tools](/docs/tools/dev-tools/): use one of the EnergyZero actions and view the YAML.
+{% endtip %}
+
#### Response data
The response data is a dictionary with the gas timestamps and prices as string and float values.
@@ -116,6 +120,10 @@ Fetches the energy prices. The `config_entry` value be found using the **Actions
| `start` | yes | Start time to get prices. Defaults to today 00:00:00 | 2023-01-01 00:00:00 |
| `end` | yes | End time to get prices. Defaults to today 00:00:00 | 2023-01-01 00:00:00 |
+{% tip %}
+You can get your `config_entry` by using actions within the [developer tools](/docs/tools/dev-tools/): use one of the EnergyZero actions and view the YAML.
+{% endtip %}
+
#### Response data
The response data is a dictionary with the energy timestamps and prices as string and float values.
diff --git a/source/_integrations/enigma2.markdown b/source/_integrations/enigma2.markdown
index 6460dff7f6c..e1b30f96ced 100644
--- a/source/_integrations/enigma2.markdown
+++ b/source/_integrations/enigma2.markdown
@@ -90,7 +90,7 @@ There are two possible solutions to resolve this problem:
If you choose to enable VPN access without authentication, ensure your network is properly secured as OpenWebif is not designed for publicly facing the internet.
{% endnote %}
-## Remove integration
+## Removing the integration
This integration follows standard integration removal, no extra steps are required.
diff --git a/source/_integrations/esphome.markdown b/source/_integrations/esphome.markdown
index 5c80e6c17e9..2e39ec30d34 100644
--- a/source/_integrations/esphome.markdown
+++ b/source/_integrations/esphome.markdown
@@ -46,16 +46,111 @@ works_with:
- local
---
+## Overview
+
This integration allows [ESPHome](https://esphome.io) devices to connect directly to Home Assistant with the [native ESPHome API](https://esphome.io/components/api.html).
+ESPHome is a firmware generator and configuration system that enables the transformation of microcontrollers into fully customizable smart home devices. Using a simple YAML configuration file, ESPHome allows users to define hardware components like sensors, actuators, and peripherals. These configurations are then compiled into custom firmware that can be flashed onto the target device.
+
+### Key Features
+- **YAML Configuration**: Specify hardware components, sensors, actuators, and integrations using a clean and straightforward YAML syntax.
+- **Custom Firmware Generation**: ESPHome compiles the provided configuration into a highly optimized, device-specific firmware image that is ready to be flashed onto microcontrollers.
+- **Seamless Integration**: After flashing, ESPHome devices can integrate seamlessly with Home Assistant using the ESPHome native API. This documentation page focuses on the [native API](https://esphome.io/components/api.html), which allows devices to communicate directly with Home Assistant for real-time automation and monitoring. For other integrations, such as MQTT or HTTP, please refer to the relevant sections of the [ESPHome documentation](https://esphome.io/).
+
+ESPHome supports a variety of microcontrollers beyond just the ESP family. These include:
+
+- **ESP32**: A powerful microcontroller with Wi-Fi and Bluetooth capabilities.
+- **ESP8266**: A low-cost microcontroller with Wi-Fi support.
+- **BK72xx**: A series of microcontrollers from Beken, commonly used in smart home applications.
+- **RP2040**: A microcontroller developed by Raspberry Pi, known for its flexibility and cost-effectiveness.
+- **RTL87xx**: A series of microcontrollers from Realtek, supporting various wireless communication protocols.
+
+For a list of officially supported microcontrollers and devices, refer to the [ESPHome device database](https://devices.esphome.io/). Keep in mind that this database represents only a portion of the ecosystem—many other devices and peripherals are supported but may not appear in the database.
+
+For inspiration and examples of complete, ready-to-use configurations, check out the [ESPHome ready-made projects](https://esphome.io/projects/index.html). These include setups like [Bluetooth proxies](https://esphome.io/components/bluetooth_proxy.html), which can extend the [Bluetooth](/integrations/bluetooth/#remote-adapters-bluetooth-proxies) range of Home Assistant.
+
+If you're looking for pre-built solutions, the [Voice PE](https://www.home-assistant.io/voice-pe/) is an excellent example. It's a pre-built voice assistant device powered by ESPHome, offering an easy way to integrate voice control into your Home Assistant system. Many pre-built solutions, like the Voice PE, are open-source and can be customized, giving you flexibility to adapt them to your needs.
+
+For detailed information on configuring unsupported or custom devices, consult the official [ESPHome documentation](https://esphome.io/), which provides in-depth guides on expanding and customizing your setup beyond the pre-configured devices.
+
{% include integrations/config_flow.md %}
-## Home Assistant actions
+### Required manual input
-ESPHome devices can perform actions to any [Home Assistant action](https://esphome.io/components/api.html#homeassistant-service-action). This functionality is not enabled by default for newly configured device, but can be turned on the options flow on a per device basis.
+To configure an ESPHome device, enter the following information:
+
+{% configuration_basic %}
+
+host:
+ description: "IP address or hostname of the ESPHome device.
This will be pre-filled if the device was auto-discovered."
+port:
+ description: "Port used by the ESPHome native API (default: 6053).
This will be pre-filled if the device was auto-discovered."
+noise_psk:
+ description: "The pre-shared key used for encryption.
This is a 32‑byte base64‑encoded string. Leave blank if native encryption is not enabled."
+password:
+ description: "Device password (deprecated).
Use a Noise PSK (encryption key) instead – password support will be removed in a future release."
+
+{% endconfiguration_basic %}
+
+For more information, see the [ESPHome Native API Component documentation](https://esphome.io/components/api.html).
+
+## Removing the integration
+
+This integration follows the standard integration removal process; no extra steps are required.
+
+{% include integrations/remove_device_service.md %}
{% include integrations/option_flow.md %}
+These options are disabled by default and not required—only set them if specifically needed.
+
+{% configuration_basic %}
+Allow the device to perform Home Assistant actions:
+ description: "No/Yes
When enabled, ESPHome devices can perform Home Assistant actions, such as calling services or sending events. Only enable this if you trust the device."
+Subscribe to logs from the device:
+ description: "No/Yes
When enabled, the device will send logs to Home Assistant and you can view them in the logs panel."
+{% endconfiguration_basic %}
+
+## Supported devices
+
+The ESPHome integration works with devices that run ESPHome firmware and expose their functionality through the [native ESPHome API](https://esphome.io/components/api.html). This API is designed for tight, efficient integration with Home Assistant, enabling ESPHome devices to push updates directly to Home Assistant in **near real time**.
+
+## Updating data
+
+Rather than polling for sensor values or device states, Home Assistant maintains a persistent connection to each ESPHome device using the native API. This allows state changes—such as a temperature sensor update, a button press, or a binary sensor trigger—to be sent immediately as they happen, reducing latency and improving responsiveness in automations.
+
+### Additional Technical Details
+- **Efficient Communication Protocol**: ESPHome uses a lightweight, bi-directional protocol over TCP, optimized for microcontrollers. This protocol is implemented in [aioesphomeapi](https://github.com/esphome/aioesphomeapi), the async Python library used by Home Assistant to handle real-time communication with ESPHome devices. It enables low-latency updates and near instant command execution.
+- **Automatic Reconnection**: Home Assistant maintains a persistent connection to each ESPHome device and will automatically attempt to reconnect if the connection is lost. This includes support for "sleepy" or battery-powered devices that periodically wake from deep sleep. When such a device comes online, Home Assistant quickly re-establishes the connection—especially when **mDNS** (Multicast DNS) is available—allowing the device to be discovered and connected without requiring static IPs or manual configuration.
+
+This real-time behavior enables fast, reactive automations and a smooth user experience compared to traditional polling-based integrations.
+
+## Supported Functionality
+
+### Entities
+
+The available entities depend on the components defined in the ESPHome YAML configuration for each device. These entities are exposed through the [Native API Component](https://esphome.io/components/api.html).
+
+### Firing Events on the Home Assistant Event Bus
+
+When using the native API with Home Assistant, you can trigger events on the Home Assistant event bus directly from ESPHome. For more details, see the [homeassistant.event Action](https://esphome.io/components/api.html#homeassistant-event-action).
+
+### Actions
+
+Each device can define Home Assistant Actions based on its ESPHome YAML configuration. For more information, refer to the [Actions](https://esphome.io/components/api.html#actions) section in the [Native API Component](https://esphome.io/components/api.html) documentation.
+
+### Retrieving Data from Home Assistant
+
+ESPHome can retrieve the state of Home Assistant entities using the [Native API](https://esphome.io/components/api.html) with [User-Defined Actions](https://esphome.io/components/api.html#user-defined-actions).
+
+### Home Assistant Actions
+
+ESPHome devices can call any [Home Assistant Action](https://esphome.io/components/api.html#homeassistant-service-action). This feature is not enabled by default for newly added devices but can be enabled through the options flow on a per-device basis.
+
+### Tag Scanning Support
+
+The [Native API Component](https://esphome.io/components/api.html) also supports sending tag scan events to Home Assistant. See the [homeassistant.tag_scanned Action](https://esphome.io/components/api.html#homeassistant-tag-scanned-action) for more information.
+
## Entity naming and IDs
- Entity name is a combination of the friendly name (or name if unset) and component name
@@ -86,7 +181,22 @@ sensor:
The entity will be named `livingroomdesk Temperature` and will default to having an entity ID of `sensor.livingroomdesk_temperature`.
-## Obtaining logs from the device
+## Troubleshooting
+
+### Viewing Live Logs
+
+To troubleshoot your ESPHome devices, you can easily view live logs, whether you're using the [**ESPHome Device Builder Add-on**](https://my.home-assistant.io/redirect/supervisor_addon/?addon=5c53de3b_esphome&repository_url=https%3A%2F%2Fgithub.com%2Fesphome%2Fhome-assistant-addon) or the **ESPHome CLI**. The logs contain detailed information such as Wi-Fi connection status, errors, and debug messages, which can help you identify and resolve issues with your device.
+
+#### Using the [**ESPHome Device Builder Add-on**](https://my.home-assistant.io/redirect/supervisor_addon/?addon=5c53de3b_esphome&repository_url=https%3A%2F%2Fgithub.com%2Fesphome%2Fhome-assistant-addon)
+1. In the [**ESPHome Device Builder Add-on**](https://my.home-assistant.io/redirect/supervisor_addon/?addon=5c53de3b_esphome&repository_url=https%3A%2F%2Fgithub.com%2Fesphome%2Fhome-assistant-addon) add-on, find the device you're working with.
+2. Click the **LOGS** button to open the log view.
+
+#### Using the **ESPHome CLI**
+If you're using the **ESPHome CLI**, follow the instructions for the [logs Command](https://esphome.io/guides/cli.html#logs-command) to access the logs.
+
+### Obtaining Logs from the Device
+
+If you want the device to send logs without requiring you to be actively monitoring, follow these steps:
1. To have the device send logs to Home Assistant, in the [options flow](#options), enable `Subscribe to logs from the device`.
- They are logged under the `homeassistant.components.esphome` logger at the equivalent level.
@@ -101,41 +211,8 @@ The entity will be named `livingroomdesk Temperature` and will default to having
homeassistant.components.esphome: debug
```
-## Reconfiguration and Device Replacement
+## Known Limitations
-This integration supports reconfiguration, allowing you to make changes—such as updating the IP address—even after a device has already been set up.
+Each ESPHome device must have a **unique name**. This name is important for mDNS announcements, ensuring that the device can be properly discovered, quickly reconnected when it comes online or wakes from deep sleep (for devices that support deep sleep), and correctly linked to the [**ESPHome Device Builder Add-on**](https://my.home-assistant.io/redirect/supervisor_addon/?addon=5c53de3b_esphome&repository_url=https%3A%2F%2Fgithub.com%2Fesphome%2Fhome-assistant-addon). It's also crucial for **DHCP discovery** if mDNS is not available.
-### Name Conflict Resolution
-
-If Home Assistant detects multiple devices with the same [**name**](https://esphome.io/components/esphome.html#configuration-variables), it will automatically initiate **Name Conflict Resolution**. This process is designed to help you seamlessly replace a failed or retired device with new hardware, while preserving your existing configuration if desired.
-
-This process gives you two options:
-
-- **Migrate**: Transfers the existing entity configuration to the new device. This preserves all your settings, entity names, and history. Use this when you're replacing the hardware but keeping the same YAML configuration.
-- **Overwrite**: Replaces the existing configuration with the new device.
- **Caution:** This will **erase all existing settings** for the old device including entity names, customizations, and history will be lost. Use this only if the new device is completely different and you don’t need anything from the previous setup.
-
-{% tip %}
-If you’re using the same YAML file on the new device, choose **Migrate**. If it’s a totally different device (even if it shares the same name), **Overwrite** is the safer option.
-{% endtip %}
-
----
-
-### Requirements for Name Conflict Resolution
-
-To trigger Name Conflict Resolution, all of the following must be true:
-
-- The new device must be running **ESPHome 2025.4.0 or later**.
-- The new device must use the same [**name**](https://esphome.io/components/esphome.html#configuration-variables) (not just the friendly name).
-- The original (old) device must be **offline**.
-
----
-
-### How to Trigger Name Conflict Resolution
-
-You can trigger Name Conflict Resolution in several ways:
-
-- Connecting a new device with the same name and a **static IP address** will automatically launch a repair flow.
-- Using the **Reconfigure** option in the UI to point to a different IP that hosts a device with the same name.
-- Configuring a **newly discovered device** that uses the same name.
-- **Manually adding** a device with the same name via the integration setup.
+Using duplicate names can lead to connection issues, failed discovery, and unexpected behavior with both the integration and the add-on.
diff --git a/source/_integrations/eve.markdown b/source/_integrations/eve.markdown
index b7c6a09b884..c3fb407b6af 100644
--- a/source/_integrations/eve.markdown
+++ b/source/_integrations/eve.markdown
@@ -15,7 +15,7 @@ ha_iot_standard: matter
ha_brand: true
---
-[Eve](https://www.evehome.com/) is a manufacturer of Matter products.
+[Eve](https://www.evehome.com/) is a member of the Works with Home Assistant partner program for their Matter products. Eve is committed to making sure their products are up-to-date and ready to use in Home Assistant.
Eve Matter devices work locally and integrate seamlessly with the Matter integration in Home Assistant. As all connectivity is happening locally, status updates and controlling your devices happen instantly in Home Assistant.
@@ -25,13 +25,13 @@ Eve Matter devices work locally and integrate seamlessly with the Matter integra
The following devices are supported:
-- [Door & Window](https://www.evehome.com/en/eve-door-window)
-- [Energy Outlet](https://www.evehome.com/en/eve-energy-outlet)
-- [Energy Outdoor](https://www.evehome.com/en/eve-energy-outdoor)
-- [Energy](https://www.evehome.com/en/eve-energy)
-- [Light Switch](https://www.evehome.com/en/eve-light-switch)
-- [Dimmer Switch](https://www.evehome.com/en/eve-dimmer-switch)
-- [Motion](https://www.evehome.com/en/eve-motion)
-- [MotionBlinds](https://www.evehome.com/en/eve-blinds-collection)
-- [Thermo](https://www.evehome.com/en/eve-thermo)
-- [Weather](https://www.evehome.com/en/eve-weather)
+- [Eve Door & Window](https://www.evehome.com/en/eve-door-window)
+- [Eve Energy Outlet](https://www.evehome.com/en/eve-energy-outlet)
+- [Eve Energy Outdoor](https://www.evehome.com/en/eve-energy-outdoor)
+- [Eve Energy](https://www.evehome.com/en/eve-energy)
+- [Eve Light Switch](https://www.evehome.com/en/eve-light-switch)
+- [Eve Dimmer Switch](https://www.evehome.com/en/eve-dimmer-switch)
+- [Eve Motion](https://www.evehome.com/en/eve-motion)
+- [Eve MotionBlinds](https://www.evehome.com/en/eve-blinds-collection)
+- [Eve Thermo](https://www.evehome.com/en/eve-thermo)
+- [Eve Weather](https://www.evehome.com/en/eve-weather)
diff --git a/source/_integrations/feedreader.markdown b/source/_integrations/feedreader.markdown
index 6d4d8a4e5d0..3f8fee4603d 100644
--- a/source/_integrations/feedreader.markdown
+++ b/source/_integrations/feedreader.markdown
@@ -12,8 +12,8 @@ ha_platforms:
- event
ha_integration_type: integration
related:
- - docs: /docs/configuration/
- title: Configuration file
+ - docs: /common-tasks/general/#defining-a-custom-polling-interval
+ title: Defining a custom polling interval
ha_codeowners:
- '@mib1185'
---
@@ -22,9 +22,23 @@ Add an RSS/Atom feed reader that polls feeds every hour and sends new entries in
{% include integrations/config_flow.md %}
+{% configuration_basic %}
+URL:
+ description: The URL of the RSS/Atom feed you want to integrate.
+{% endconfiguration_basic %}
+
+{% include integrations/option_flow.md %}
+
+{% configuration_basic %}
+Maximum feed entries:
+ description: The maximum number of entries to extract from each feed.
+{% endconfiguration_basic %}
+
## Usage
-Feedreader events can be used out of the box to trigger automation actions, e.g.:
+### Automation
+
+Feedreader events can be used out of the box to {% term trigger %} automation actions, e.g.:
```yaml
automation:
@@ -58,18 +72,28 @@ automation:
{% endraw %}
-Any field under the `` tag in the feed can be used for example `trigger.event.data.content` will get the body of the feed entry.
+The `trigger.event.data` variable contains at least the following keys, there might be more depending on the data the configured feed is providing.
-### Event
+| Key | Description |
+| --- | --- |
+| `trigger.event.data.link` | The URL to this feed entry. |
+| `trigger.event.data.title` | The title of this feed entry. |
+| `trigger.event.data.description` | The description of this feed entry. |
+| `trigger.event.data.content` | The content of this feed entry. |
-An event entity will be created for each configured feed which always represents the latest entry of the feed.
+### Event entity
+
+An {% term "Event entity" %} entity will be created for each configured feed which always represents the latest entry of the feed.
### Video tutorial
-This video tutorial explains how to set up the feedreader and show the latest news feed item on your dashboard in Home Assistant.
-
+This video tutorial explains how to set up the feedreader and show a list of news feed items on your dashboard in Home Assistant.
-For more advanced use cases, a custom integration registering to the `feedreader` event type could be used instead:
+
+
+### Event listener
+
+For more advanced use cases, a custom integration registering to the `feedreader` {% term Event %} type could be used instead:
```python
EVENT_FEEDREADER = "feedreader"
@@ -78,4 +102,10 @@ hass.bus.listen(EVENT_FEEDREADER, event_listener)
To get started developing custom integrations, please refer to the [developers](/developers) documentation
+### Other examples
+
For a drop in packaged complete example of Feedreader, you can use the [PodCast notifier](https://github.com/CCOSTAN/Home-AssistantConfig/blob/22c19375ac5dcb49e0648aa16c431537407aa5e4/config/packages/hasspodcast.yaml).
+
+## Remove the integration
+
+{% include integrations/remove_device_service.md %}
diff --git a/source/_integrations/flick_electric.markdown b/source/_integrations/flick_electric.markdown
index 91928e6309d..5ba112959c1 100644
--- a/source/_integrations/flick_electric.markdown
+++ b/source/_integrations/flick_electric.markdown
@@ -103,7 +103,7 @@ actions:
The integration will {% term polling poll %} the Flick Electric API every 5 minutes to check for the current power price. You can also use the `homeassistant.update_entity` action to trigger a refresh on-demand.
-## Remove integration
+## Removing the integration
This integration follows standard integration removal, no extra steps are required.
diff --git a/source/_integrations/frankever.markdown b/source/_integrations/frankever.markdown
index 4da40a21c3e..1e1cef23da4 100644
--- a/source/_integrations/frankever.markdown
+++ b/source/_integrations/frankever.markdown
@@ -1,6 +1,6 @@
---
title: FrankEver
-description: Integrate FrankEver (Powered by Shelly) devices
+description: Connect and control your FrankEver devices using the Shelly integration
ha_category:
- Binary sensor
- Climate
@@ -15,17 +15,18 @@ ha_category:
- Text
- Update
- Valve
-ha_release: '0.115'
+ha_release: 0.115
+ha_domain: frankever
+ha_integration_type: virtual
+ha_supporting_domain: shelly
+ha_supporting_integration: Shelly
ha_codeowners:
- '@balloob'
- '@bieniu'
- '@thecode'
- '@chemelli74'
- '@bdraco'
-ha_iot_class: Local Push
-ha_domain: frankever
ha_config_flow: true
-ha_zeroconf: true
ha_platforms:
- binary_sensor
- button
@@ -41,9 +42,8 @@ ha_platforms:
- text
- update
- valve
-ha_integration_type: virtual
-ha_supporting_domain: shelly
-ha_supporting_integration: Shelly
+ha_iot_class: Local Push
+ha_zeroconf: true
---
{% include integrations/supported_brand.md %}
diff --git a/source/_integrations/fritz.markdown b/source/_integrations/fritz.markdown
index a21a9fe3825..4228d813cb0 100644
--- a/source/_integrations/fritz.markdown
+++ b/source/_integrations/fritz.markdown
@@ -43,20 +43,48 @@ There is support for the following platform types within Home Assistant:
- **{% term Switch %}** - call deflection, port forward, parental control and Wi-Fi networks.
- **{% term Update %}** - firmware status of the device.
-{% include integrations/config_flow.md %}
+## Prerequisites
{% important %}
Both the TR-064 (_Permit access for apps_) and UPnP (_Transmit status information over UPnP_) protocol needs to be enabled in the FRITZ!Box under **Home Network** > **Network** > **Network settings** > **Access Settings in the Home Network** for Home Assistant to login and read device info.
{% endimportant %}
-## Username
+### Username
It is recommended to create a separate user to connect Home Assistant to your FRITZ!Box. To create a user, in the FRITZ!Box go to **System** > **FRITZ!Box Users** > **Users** > **Add User**. Make sure the user has the **FRITZ!Box Settings** permission.
{% note %}
-If you still want to use the predefined user, please note that as of FRITZ!OS 7.24, the FRITZ!Box creates a random username for the admin user if you didn't set one yourself. This can be found after logging into the FRITZ!Box and visiting **System** > **FRITZ!Box Users** > **Users**. The username starts with `fritz` followed by four random numbers. Under properties on the right it says `created automatically`. Prior to FRITZ!OS 7.24, the default username was `admin`.
+If you still want to use the predefined user, please note that as of FRITZ!OS 7.24, the FRITZ!Box creates a random username for the admin user if you didn't set one yourself. This can be found after logging into the FRITZ!Box and visiting **System** > **FRITZ!Box Users** > **Users**. The username starts with `fritz` followed by four random numbers. Under properties on the right it says `created automatically`. Before FRITZ!OS 7.24, the default username was `admin`.
{% endnote %}
+{% include integrations/config_flow.md %}
+
+{% configuration_basic %}
+Host:
+ description: "The hostname or IP address of your FRITZ!Box router."
+Port:
+ description: "The port used to connect to your FRITZ!Box router. Leave it empty to use the default port."
+Username:
+ description: "Name of the user to connect Home Assistant to your FRITZ!Box (_see [username](#username)_)"
+Password:
+ description: "Password for the user to connect Home Assistant to your FRITZ!Box (_see [username](#username)_)"
+Uses an SSL certificate:
+ description: "Whether to use SSL encryption for connecting to your FRITZ!Box router."
+{% endconfiguration_basic %}
+
+{% include integrations/option_flow.md %}
+
+{% configuration_basic %}
+Consider home:
+ description: Number of seconds that must elapse before considering a disconnected device "not at home".
+Enable old discovery method:
+ description: Required in scenarios such as networks without mesh support (_FritzOS <= 6.x_) or mixed brands network devices or LAN switches.
+{% endconfiguration_basic %}
+
+## Data updates
+
+This integration fetches the data every 30 seconds from the FRITZ!Box router.
+
## Actions
Available {% term actions %}: `set_guest_wifi_password`
@@ -71,19 +99,6 @@ Set a new password for the guest wifi. The password Length must be between 8 and
| `password` | no | New password for the guest wifi (_will be auto-generated if not defined_) |
| `length` | no | Length of the auto-generated password. (_default 12_) |
-## Integration options
-
-It is possible to change some behaviors through the integration options.
-To change the settings, go to {% my integrations title="**Settings** > **Devices & services**" %}. Select the **AVM FRITZ!Box Tools** integration, then select **Configure**.
-
-### Consider home
-
-Number of seconds that must elapse before considering a disconnected device "not at home".
-
-### Enable old discovery method
-
-Needed on some scenarios like no mesh support (_FritzOS <= 6.x_) or mixed brands network devices or LAN switches.
-
## Additional information
### Parental control switches
@@ -170,3 +185,9 @@ Check if one of the following cases applies:
- You're using additional network equipment like a network switch or Wi-Fi access point other than an AVM Fritz!Repeater or other AVM components, but not configured as a [mesh](https://en.avm.de/service/knowledge-base/dok/FRITZ-Box-7590/3329_Mesh-with-FRITZ/) in your home network.
If one of the above cases applies to your setup, try [enabling the old discovery method](#enable-old-discovery-method) in the [integration options](#integration-options). This might resolve the issue.
+
+## Remove the integration
+
+{% include integrations/remove_device_service.md %}
+
+If you don't use the separately created FRITZ!Box user anymore, then remove it from the FRITZ!Box under **System** > **FRITZ!Box Users** > **Users**.
diff --git a/source/_integrations/fronius.markdown b/source/_integrations/fronius.markdown
index 586a914e1f4..156bd21f1da 100644
--- a/source/_integrations/fronius.markdown
+++ b/source/_integrations/fronius.markdown
@@ -15,7 +15,7 @@ ha_platforms:
- sensor
ha_dhcp: true
ha_integration_type: integration
-ha_quality_scale: gold
+ha_quality_scale: platinum
---
The Fronius integration polls a [Fronius](https://www.fronius.com/) solar inverter or datalogger for details of a Fronius SolarNet setup and integrate it in your Home Assistant installation.
@@ -196,7 +196,7 @@ The Solar API used by this integration is read-only. It does not provide any mea
Some data, like photovoltaic production, is only provided by the Fronius device when non-zero.
When the integration is added at night, there might be no entities added providing photovoltaic related data. Entities will be added on sunrise, when the Fronius devices begin to provide more data.
-## Remove integration
+## Removing the integration
This integration can be removed by following these steps:
diff --git a/source/_integrations/fyta.markdown b/source/_integrations/fyta.markdown
index 19378fa5291..501293748ed 100644
--- a/source/_integrations/fyta.markdown
+++ b/source/_integrations/fyta.markdown
@@ -115,7 +115,7 @@ The integration provides the data exposed by means of the plant API. The light m
Please note that in order to be able to access your plant data over the API, you need a [FYTA hub](https://fyta.de/collections/all/products/single-hub) that uploads the data from the Beam sensor to the FYTA server. Alternatively, the mobile app can serve as a gateway to upload the data from the Beam to the server. No direct connection to the FYTA Beam is supported (as the Beam only provides raw data, that needs to be processed on the FYTA server).
-## Remove integration
+## Removing the integration
For this integration the general process to remove integrations applies:
diff --git a/source/_integrations/gardena_bluetooth.markdown b/source/_integrations/gardena_bluetooth.markdown
index 09fee793103..341ffb1d439 100644
--- a/source/_integrations/gardena_bluetooth.markdown
+++ b/source/_integrations/gardena_bluetooth.markdown
@@ -52,7 +52,8 @@ The paring of the device may require a [factory reset](#factory-reset) before it
### Limitations
-Irrigation valves are currently untested, but expected to work.
+- Irrigation valves are currently untested, but expected to work.
+- Irrigation Valve 9 V Bluetooth requires firmware version 1.7.23.29 or newer (update via Gardena Bluetooth App).
## Lawn mowers
diff --git a/source/_integrations/google_assistant.markdown b/source/_integrations/google_assistant.markdown
index fc3cda1d2c1..de73cf787a2 100644
--- a/source/_integrations/google_assistant.markdown
+++ b/source/_integrations/google_assistant.markdown
@@ -76,7 +76,7 @@ To use Google Assistant, your Home Assistant configuration has to be [externally
5. Go to **Keys** and **Add key**.
6. Create a private key in JSON format.
7. This will start a download of a JSON file.
- 1. Rename the file to `SERVICE_ACCOUNT.JSON`.
+ 1. Rename the file to `SERVICE_ACCOUNT.json`.
2. In Home Assistant, add this file to your config-folder. This will be the same folder as your {% term "`configuration.yaml`" %}.
8. Go to the **Search (/) for resources, documentation, products, and more** at the top middle and search for **Homegraph API** and select it.
9. Enable the HomeGraph API.
diff --git a/source/_integrations/google_generative_ai_conversation.markdown b/source/_integrations/google_generative_ai_conversation.markdown
index 77313d10c43..b2c5135f433 100644
--- a/source/_integrations/google_generative_ai_conversation.markdown
+++ b/source/_integrations/google_generative_ai_conversation.markdown
@@ -8,6 +8,7 @@ ha_iot_class: Cloud Polling
ha_config_flow: true
ha_codeowners:
- '@tronikos'
+ - '@ivanlh'
ha_domain: google_generative_ai_conversation
ha_integration_type: service
ha_platforms:
@@ -69,8 +70,65 @@ Maximum Tokens to Return in Response:
description: The maximum number of words or "tokens" that the AI model should generate.
Safety settings:
description: Thresholds for different [harmful categories](https://ai.google.dev/gemini-api/docs/safety-settings).
+Enable Google Search tool:
+ description: Enables the model to [query Google Search](https://ai.google.dev/gemini-api/docs/grounding). This can only be enabled when the "Control Home Assistant" setting is set to "No control". See below for a workaround using it with "Assist".
{% endconfiguration_basic %}
+## Google Search
+
+Due to an API limitation we cannot have the [Google Search tool](https://ai.google.dev/gemini-api/docs/grounding) together with other tools. Request fails with `400 INVALID_ARGUMENT. {'error': {'code': 400, 'message': 'Tool use with function calling is unsupported', 'status': 'INVALID_ARGUMENT'}}`.
+But you can do the following workaround that exposes a script to voice assistants. The script calls a Google Generative AI Conversation that only has the Google Search tool enabled.
+
+{% details "Workaround for Google Search tool" %}
+
+1. Add a second Google Generative AI service.
+2. Select **Configure**
+3. Select **No control** under **Control Home Assistant**
+4. Uncheck **Recommended model settings**
+5. Select **Submit**
+6. Check **Enable Google Search tool**
+7. Increase **Maximum tokens to return in response**
+8. Select **Submit**
+9. Create a script (**Settings** > **Automations & scenes** > **Scripts** > **Create script**)
+10. Select 3 dots > **Edit in YAML** and enter the following (edit the `conversation.google_generative_ai_2` to match the entity created from the 1st step):
+
+{% raw %}
+
+```yaml
+sequence:
+ - action: conversation.process
+ metadata: {}
+ data:
+ agent_id: conversation.google_generative_ai_2
+ text: "{{ query }}"
+ response_variable: result
+ - variables:
+ result:
+ response: "{{ result.response.speech.plain.speech }}"
+ - stop: ""
+ response_variable: result
+alias: "Assist: Search Google"
+description: >-
+ Makes a Google search to answer questions that are completely unrelated with
+ the smart home and are exclusively about current events or information in
+ real-time like the current president, results of last night's game, release
+ dates, etc.
+fields:
+ query:
+ selector:
+ text: null
+ name: Query
+ description: The query to search Google for
+ required: true
+```
+{% endraw %}
+
+11. Select **Save script**
+12. Select 3 dots > **Settings** > **Voice assistants**
+13. Check **Expose** **Assist**
+
+{% enddetails %}
+
## Talking to Super Mario
You can use this integration to [talk to Super Mario and, if you want, have him control devices in your home](/voice_control/assist_create_open_ai_personality/).
diff --git a/source/_integrations/habitica.markdown b/source/_integrations/habitica.markdown
index 237adde36af..16ccc3ac3b0 100644
--- a/source/_integrations/habitica.markdown
+++ b/source/_integrations/habitica.markdown
@@ -574,7 +574,7 @@ The Habitica integration relies on an active internet connection to communicate
In any case, when reporting an issue, please enable [debug logging](/docs/configuration/troubleshooting/#debug-logs-and-diagnostics), restart the integration, and as soon as the issue reoccurs stop the debug logging again (*download of debug log file will start automatically*). Further, if still possible, please also download the [diagnostics](/integrations/diagnostics) data. If you have collected the debug log and the diagnostics data, provide them with the issue report.
-## Remove integration
+## Removing the integration
This integration can be removed by following these steps:
diff --git a/source/_integrations/home_connect.markdown b/source/_integrations/home_connect.markdown
index e321c5c2c93..5d6dc3f0e13 100644
--- a/source/_integrations/home_connect.markdown
+++ b/source/_integrations/home_connect.markdown
@@ -27,6 +27,7 @@ ha_platforms:
- select
- sensor
- switch
+ - time
ha_integration_type: integration
---
@@ -93,6 +94,7 @@ The integration configuration will ask for the *Client ID* and *Client Secret* c
{% note %}
- The entities availability depends on the appliance type, but the appliance might not support all the entities for its type.
+- The program option entities will not be provided by the integration until they are available in the selected or active program.
- Some appliances don't report data while they are turned off, so corresponding entities will not appear in the Home Connect integration after loading until the appliances are turned on.
{% endnote %}
diff --git a/source/_integrations/homeassistant_hardware.markdown b/source/_integrations/homeassistant_hardware.markdown
index d3546cd575d..596264d4364 100644
--- a/source/_integrations/homeassistant_hardware.markdown
+++ b/source/_integrations/homeassistant_hardware.markdown
@@ -4,10 +4,13 @@ description: Home Assistant Hardware provides functionality shared between Home
ha_release: 2022.12
ha_category:
- Other
+ - Update
ha_codeowners:
- '@home-assistant/core'
ha_domain: homeassistant_hardware
ha_integration_type: system
+ha_platforms:
+ - update
---
The Home Assistant Hardware integration provides functionality
diff --git a/source/_integrations/homeassistant_sky_connect.markdown b/source/_integrations/homeassistant_sky_connect.markdown
index 28515e1e0f2..df8aaa64825 100644
--- a/source/_integrations/homeassistant_sky_connect.markdown
+++ b/source/_integrations/homeassistant_sky_connect.markdown
@@ -4,11 +4,14 @@ description: Home Assistant Connect ZBT-1 provides hardware information for the
ha_release: 2022.9
ha_category:
- Other
+ - Update
ha_codeowners:
- '@home-assistant/core'
ha_domain: homeassistant_sky_connect
ha_integration_type: hardware
ha_config_flow: true
+ha_platforms:
+ - update
---
The Home Assistant Connect ZBT-1 integration provides hardware information for the hardware configuration page.
diff --git a/source/_integrations/homeassistant_yellow.markdown b/source/_integrations/homeassistant_yellow.markdown
index 3e3b9ce1ccf..b63fb0049e0 100644
--- a/source/_integrations/homeassistant_yellow.markdown
+++ b/source/_integrations/homeassistant_yellow.markdown
@@ -4,10 +4,13 @@ description: Home Assistant Yellow provides hardware information for the hardwar
ha_release: 2022.7
ha_category:
- Other
+ - Update
ha_codeowners:
- '@home-assistant/core'
ha_domain: homeassistant_yellow
ha_integration_type: hardware
+ha_platforms:
+ - update
---
The Home Assistant Yellow integration provides hardware information for the hardware configuration page.
diff --git a/source/_integrations/homewizard.markdown b/source/_integrations/homewizard.markdown
index 8b42457f3bb..c3dbaabcf38 100644
--- a/source/_integrations/homewizard.markdown
+++ b/source/_integrations/homewizard.markdown
@@ -181,7 +181,7 @@ It may happen that you can't find your devices or they won't show up in the inte
Some sensors are disabled by default. You can enable them in the integration setup. See the [enabling or disabling entities](/common-tasks/general/#enabling-or-disabling-entities) documentation for more information.
-## Remove integration
+## Removing the integration
This integration follows standard integration removal.
diff --git a/source/_integrations/http.markdown b/source/_integrations/http.markdown
index e43e284dca3..218f2698e5f 100644
--- a/source/_integrations/http.markdown
+++ b/source/_integrations/http.markdown
@@ -35,7 +35,7 @@ server_host:
type: [list, string]
default: "0.0.0.0, ::"
server_port:
- description: Let you set a port to use.
+ description: Allows you to specify which port Home Assistant should listen on.
required: false
type: integer
default: 8123
@@ -75,7 +75,7 @@ ip_ban_enabled:
type: boolean
default: true
login_attempts_threshold:
- description: "Number of failed login attempt from single IP after which it will be automatically banned if `ip_ban_enabled` is `true`. When set to -1 no new automatic bans will be added."
+ description: "Number of failed login attempts from a single IP after which it will be automatically banned if `ip_ban_enabled` is `true`. When set to -1 no new automatic bans will be added."
required: false
type: integer
default: -1
@@ -129,7 +129,7 @@ The `http` platforms are not real platforms within the meaning of the terminolog
To use those kind of [sensors](#sensor) or [binary sensors](#binary-sensor) in your installation no configuration in Home Assistant is needed. All configuration is done on the devices themselves. This means that you must be able to edit the target URL or endpoint and the payload. The entity will be created after the first message has arrived.
-If you want to use HTTP sensors, create a [Long-Lived Access Tokens](https://developers.home-assistant.io/docs/auth_api/#long-lived-access-token) in the Home Assistant UI in the **Security** section of your {% my profile title="**User profile**" %} page.
+If you want to use an HTTP sensor, create a [Long-Lived Access Token](https://developers.home-assistant.io/docs/auth_api/#long-lived-access-token) in the Home Assistant UI in the **Security** section of your {% my profile title="**User profile**" %} page.
All [requests](https://developers.home-assistant.io/docs/api/rest#post-apistatesentity_id) need to be sent to the endpoint of the device and must be **POST**.
@@ -142,7 +142,14 @@ If you want to apply additional IP filtering, and automatically ban brute force
banned_at: "2016-11-16T19:20:03"
```
-After a ban is added a Persistent Notification is populated to the Home Assistant frontend.
+After a ban is added a Persistent Notification will appear in the Home Assistant frontend.
+
+To clear an IP ban, you can either:
+
+- Remove the specific IP entry from `ip_bans.yaml`, or
+- Delete the entire `ip_bans.yaml` file. It will be recreated automatically the next time a ban occurs.
+
+After making changes, restart Home Assistant to apply them.
## Hosting files
diff --git a/source/_integrations/huawei_lte.markdown b/source/_integrations/huawei_lte.markdown
index 26e625f0147..22fe1d04645 100644
--- a/source/_integrations/huawei_lte.markdown
+++ b/source/_integrations/huawei_lte.markdown
@@ -75,8 +75,29 @@ entities varies by device model and firmware version.
{% include integrations/config_flow.md %}
-Unauthenticated mode and default list of notification recipient phone
-numbers can be set using the integration's configuration options.
+{% configuration_basic %}
+URL:
+ description: Base URL to the API of the router. Typically, something like `http://192.168.X.1` where `X` is, for example, `1`, `8`, or `100`. This is the beginning of the location shown in a browser when accessing the router's web interface.
+Verify SSL certificate:
+ description: Whether to verify the SSL certificate of the router when accessing it. Applicable only if the router is accessed via HTTPS. In other words, if the configured URL starts with `https://`.
+Username:
+ description: Username for accessing the router's API. Typically, either `admin`, or left empty (recommended if that works).
+Password:
+ description: Password for accessing the router's API.
+{% endconfiguration_basic %}
+
+{% include integrations/option_flow.md %}
+
+{% configuration_basic %}
+Notification service name:
+ description: Name of the notification service. Used to distinguish between notification services in case there are multiple Huawei LTE devices configured. The name here will be prefixed with `notify.`. For example, specifying `huawei_lte` will yield `notify.huawei_lte` as the complete service name.
+Notification recipients:
+ description: Comma separated list of default recipient SMS phone numbers for the notification service, used in case the notification sender does not specify any. Accepted formats may vary between device models and subscription types, but international [E.164](https://en.wikipedia.org/wiki/E.164) format including the `+` prefix and country code, numbers only, is a good first bet.
+Track wired network clients:
+ description: Whether the device tracker entities track also clients attached to the router's wired Ethernet network, in addition to wireless clients.
+Unauthenticated mode:
+ description: Whether to run in unauthenticated mode. See above for more information between authenticated and unauthenticated modes.
+{% endconfiguration_basic %}
## Actions
@@ -106,3 +127,9 @@ It is the intention and highly likely that this integration works with all devic
[reported working with the underlying huawei-lte-api library](https://github.com/Salamek/huawei-lte-api#tested-on).
It will not work on ones noted as not working in that list.
+
+## Removing the integration
+
+This integration follows standard integration removal. No extra steps are required.
+
+{% include integrations/remove_device_service.md %}
diff --git a/source/_integrations/husqvarna_automower.markdown b/source/_integrations/husqvarna_automower.markdown
index 90b2695470c..6a1904636b5 100644
--- a/source/_integrations/husqvarna_automower.markdown
+++ b/source/_integrations/husqvarna_automower.markdown
@@ -226,7 +226,7 @@ data:
- The mower can only be started using the `lawn_mower.start_mowing` action during the schedules configured in the Automower Connect App. To start the mower outside the scheduled times, use the `husqvarna_automower.override_schedule` action. In both cases, the battery must be fully charged beforehand.
- Stay-out zone handling is not supported for mowers equipped with EPOS technology.
-## Remove integration
+## Removing the integration
This integration can be removed by following these steps:
diff --git a/source/_integrations/igloohome.markdown b/source/_integrations/igloohome.markdown
index 9a606b4a7e8..c597897c607 100644
--- a/source/_integrations/igloohome.markdown
+++ b/source/_integrations/igloohome.markdown
@@ -10,6 +10,7 @@ ha_codeowners:
- '@keithle888'
ha_domain: igloohome
ha_platforms:
+ - lock
- sensor
ha_integration_type: integration
ha_quality_scale: bronze
diff --git a/source/_integrations/incomfort.markdown b/source/_integrations/incomfort.markdown
index af3132936f9..996c0f219c2 100644
--- a/source/_integrations/incomfort.markdown
+++ b/source/_integrations/incomfort.markdown
@@ -20,6 +20,7 @@ ha_platforms:
ha_integration_type: integration
ha_config_flow: true
ha_dhcp: true
+ha_quality_scale: platinum
---
This integration links Home Assistant with your Intergas gateway, including the boiler and any room thermostats attached to it.
@@ -92,7 +93,7 @@ In case setting up an older gateway type fails, then try to leave `username` and
The Intergas gateway will fetch state data from the gateway every 30 seconds. When the target temperature on the thermostat is changed, it might take some time for the set point to be updated on the Home Assistant climate {% term entity %}.
-## Remove integration
+## Removing the integration
This integration follows standard integration removal, no extra steps are required.
diff --git a/source/_integrations/iometer.markdown b/source/_integrations/iometer.markdown
index 19159751bd8..48c0a772d47 100644
--- a/source/_integrations/iometer.markdown
+++ b/source/_integrations/iometer.markdown
@@ -14,6 +14,7 @@ ha_iot_class: Local Polling
ha_config_flow: true
ha_zeroconf: true
ha_platforms:
+ - binary_sensor
- sensor
---
@@ -58,7 +59,7 @@ The following sensors are supported:
There are no commonly known issues with this integration.
-## Remove integration
+## Removing the integration
This integration follows standard integration removal. No extra steps are required.
diff --git a/source/_integrations/iron_os.markdown b/source/_integrations/iron_os.markdown
index ff8129f796c..56b80f6ee6a 100644
--- a/source/_integrations/iron_os.markdown
+++ b/source/_integrations/iron_os.markdown
@@ -25,6 +25,7 @@ ha_platforms:
- sensor
- switch
- update
+ha_quality_scale: platinum
---
The **IronOS** {% term integration %} seamlessly connects Home Assistant with PINE64's Pinecil V2 soldering irons, allowing for remote monitoring and control. This integration provides real-time updates on temperature, power, and various other settings and diagnostic information.
diff --git a/source/_integrations/ista_ecotrend.markdown b/source/_integrations/ista_ecotrend.markdown
index f980b667e26..00996ad3ef4 100644
--- a/source/_integrations/ista_ecotrend.markdown
+++ b/source/_integrations/ista_ecotrend.markdown
@@ -107,7 +107,13 @@ The integration checks for new readings every 24 hours.
- The integration does not support two-factor authentication. To connect Home Assistant to **ista Ecotrend**, you must first disable two-factor authentication. To do this, navigate to **Menü -> Benutzerkonto -> Zwei-Stufen-Authentifizierung** and remove any registered authentication devices.
- Sensor values reflect the meter readings from the previous month, as **ista** publishes new readings a few days after the end of the billing period. Long-term statistics are adjusted to display these readings as of the last day of the corresponding month.
-## Remove integration
+## Troubleshooting
+
+The **ista EcoTrend** integration relies on an active internet connection to communicate with ista. If you encounter issues, verify that your network connection is stable. Additionally, the ista EcoTrend service itself may experience downtime, whether unexpected or due to scheduled maintenance.
+
+In any case, when reporting an issue, please enable [debug logging](/docs/configuration/troubleshooting/#debug-logs-and-diagnostics), restart the integration, and as soon as the issue reoccurs, stop the debug logging again (*download of debug log file will start automatically*). Further, if still possible, please also download the [diagnostics](/integrations/diagnostics) data. If you have collected the debug log and the diagnostics data, provide them with the issue report.
+
+## Removing the integration
This integration can be removed by following these steps:
diff --git a/source/_integrations/jewish_calendar.markdown b/source/_integrations/jewish_calendar.markdown
index 3ed79e466f8..38352f6ff49 100644
--- a/source/_integrations/jewish_calendar.markdown
+++ b/source/_integrations/jewish_calendar.markdown
@@ -36,7 +36,7 @@ This defines how many minutes before sunset is considered candle-lighting time.
### Minutes after sunset for Havdalah
-By default havdalah time is considered the moment the sun is 8.5 degrees below the horizon. By specifying this offset, havdalah time will be calculated as a static offset pas the time of sunset.
+By default havdalah time is considered the moment the sun is 8.5 degrees below the horizon. By specifying this offset, havdalah time will be calculated as a static offset past the time of sunset.
### Latitude, Longitude, Time Zone and Elevation
@@ -71,6 +71,7 @@ Time sensor states are represented as ISO8601 formatted *UTC time*.
- `plag_hamincha`: Time of the Plag Hamincha (פלג המנחה)
- `shkia`: Sunset (Shkiya - שקיעה)
- `t_set_hakochavim`: Time at which the first stars are visible (Tseit Hakochavim - צאת הכוכבים)
+- `t_set_hakochavim_3_stars`: Time at which 3 stars are visible, mostly used for Havdalah
- `upcoming_shabbat_candle_lighting`: The time of candle lighting for either the current Shabbat (if it is currently Shabbat) or the immediately upcoming Shabbat.
- `upcoming_shabbat_havdalah`: The time of havdalah for either the current Shabbat (if it is currently Shabbat) or the immediately upcoming Shabbat. If it is currently a three-day holiday, this value *could* be None (i.e., if a holiday is Sat./Sun./Mon. and it's Saturday, there will be no `shabbat_havdalah` value. See comments in hdate library for details.)
- `upcoming_candle_lighting`: The time of candle lighting for either the current Shabbat OR Yom Tov, or the immediately upcoming Shabbat OR Yom Tov. If, for example, today is Sunday, and Rosh Hashana is Monday night through Wednesday night, this reports the candle lighting for Rosh Hashana on Monday night. This avoids a situation of triggering pre-candle-lighting automations while it is currently Yom Tov. To always get the Shabbat times, use the `upcoming_shabbat_candle_lighting` sensor.
diff --git a/source/_integrations/knx.markdown b/source/_integrations/knx.markdown
index b7ec84d3746..d67486d0bfd 100644
--- a/source/_integrations/knx.markdown
+++ b/source/_integrations/knx.markdown
@@ -2456,7 +2456,7 @@ The `unique_id` for KNX entities is generated based on required configuration va
There can not be multiple entities on the same platform sharing these exact group addresses, even if they differ in other configuration.
-## Remove integration
+## Removing the integration
This integration can be removed by following these steps:
diff --git a/source/_integrations/lcn.markdown b/source/_integrations/lcn.markdown
index 20befb354e8..77ee7de26b6 100644
--- a/source/_integrations/lcn.markdown
+++ b/source/_integrations/lcn.markdown
@@ -813,7 +813,7 @@ The motor values specify which hardware relay or outputs configuration will be u
Whenever a key has to be provided, it is defined by a joint string consisting of the table identifier (`a`, `b`, `c`, `d`) and the corresponding key number.
Examples: `a1`, `a5`, `d8`.
-## Remove integration
+## Removing the integration
This integration follows standard integration removal, no extra steps are required.
diff --git a/source/_integrations/letpot.markdown b/source/_integrations/letpot.markdown
index 138886b3ee2..e8d40ed8355 100644
--- a/source/_integrations/letpot.markdown
+++ b/source/_integrations/letpot.markdown
@@ -114,7 +114,7 @@ When **Light on** and **Light off** are set to the same time, the built-in light
The integration receives updates when the device state changes, enabling immediate updates of the data in Home Assistant.
-## Remove integration
+## Removing the integration
This integration follows standard integration removal, no extra steps are required.
diff --git a/source/_integrations/lg_thinq.markdown b/source/_integrations/lg_thinq.markdown
index 1267d1c0197..c3413f51f98 100644
--- a/source/_integrations/lg_thinq.markdown
+++ b/source/_integrations/lg_thinq.markdown
@@ -19,6 +19,7 @@ ha_platforms:
- sensor
- switch
- vacuum
+ - water_heater
ha_integration_type: integration
---
diff --git a/source/_integrations/linkedgo.markdown b/source/_integrations/linkedgo.markdown
index 96243799b2c..ecbda40c290 100644
--- a/source/_integrations/linkedgo.markdown
+++ b/source/_integrations/linkedgo.markdown
@@ -1,6 +1,6 @@
---
title: LinkedGo
-description: Integrate LinkedGo (Powered by Shelly) devices
+description: Connect and control your LinkedGo devices using the Shelly integration
ha_category:
- Binary sensor
- Climate
@@ -15,17 +15,18 @@ ha_category:
- Text
- Update
- Valve
-ha_release: '0.115'
+ha_release: 0.115
+ha_domain: linkedgo
+ha_integration_type: virtual
+ha_supporting_domain: shelly
+ha_supporting_integration: Shelly
ha_codeowners:
- '@balloob'
- '@bieniu'
- '@thecode'
- '@chemelli74'
- '@bdraco'
-ha_iot_class: Local Push
-ha_domain: linkedgo
ha_config_flow: true
-ha_zeroconf: true
ha_platforms:
- binary_sensor
- button
@@ -41,9 +42,8 @@ ha_platforms:
- text
- update
- valve
-ha_integration_type: virtual
-ha_supporting_domain: shelly
-ha_supporting_integration: Shelly
+ha_iot_class: Local Push
+ha_zeroconf: true
---
{% include integrations/supported_brand.md %}
diff --git a/source/_integrations/matter.markdown b/source/_integrations/matter.markdown
index 591c9fcc2da..f8de8c8d9e6 100644
--- a/source/_integrations/matter.markdown
+++ b/source/_integrations/matter.markdown
@@ -139,7 +139,7 @@ Make sure you have all these components ready before trying to add a Matter devi
- On the device packaging, check for both the Matter logo and for either the Wi-Fi or the {% term Thread %} logo.
- Check if the QR code or the numeric setup code is on the device.
- If you reset your device you'll need the QR code *or* numeric setup code to {% term commission %} that device again! Without this information, commissioning won't be possible.
- - If the QR code or the numeric setup code is only in accompanied documentation, it is good practice to snap a picture of the QR code and/or numeric setup code as a backup, ideally along with the device for reference, and store the code in a safe place.
+ - If the QR code or the numeric setup code is only in accompanied documentation, it is a good practice to snap a picture of the QR code and/or numeric setup code as a backup, ideally along with the device for reference, and store it in a safe place.
#### Prepare Android or iPhone
diff --git a/source/_integrations/mcp.markdown b/source/_integrations/mcp.markdown
index c24b0ef1f7e..29ab8eda309 100644
--- a/source/_integrations/mcp.markdown
+++ b/source/_integrations/mcp.markdown
@@ -105,8 +105,7 @@ general tips on debugging MCP. If you are developing your own MCP server and hav
with Home Assistant, you can also use the [MCP Inspector](https://github.com/modelcontextprotocol/inspector)
to verify that your MCP server is working correctly.
-
-## Remove integration
+## Removing the integration
This integration can be removed by following these steps:
diff --git a/source/_integrations/mcp_server.markdown b/source/_integrations/mcp_server.markdown
index ab29bad5687..034f5cbeacf 100644
--- a/source/_integrations/mcp_server.markdown
+++ b/source/_integrations/mcp_server.markdown
@@ -234,7 +234,7 @@ To understand the root cause, first check debug logs on the client. For example
this means that the long live access token is not correct.
...
-## Remove integration
+## Removing the integration
This integration can be removed by following these steps:
diff --git a/source/_integrations/media_source.markdown b/source/_integrations/media_source.markdown
index a8c82ed2b43..9f98b47403f 100644
--- a/source/_integrations/media_source.markdown
+++ b/source/_integrations/media_source.markdown
@@ -96,4 +96,19 @@ data:
media_content_id: "media-source://media_source/local/videos/favourites/Epic Sax Guy 10 Hours.mp4"
```
-[basic-configuration]: /integrations/homeassistant/#media_dirs
\ No newline at end of file
+[basic-configuration]: /integrations/homeassistant/#media_dirs
+
+### Identifying a media source from the media browser
+
+If you wish to make use of the `media-source://` URI for an action, and the media is already available in the media browser (either as locally stored on the Home Assistant machine, or mapped using network storage) the following steps can help to determine the `media-source` uri.
+
+1. Select **Media** in the sidebar.
+2. Navigate to the folder containing the media you wish to play.\
+ *In this example, we will go **My media** > **NAS_Media**. This folder is a network share containing a collection of .mp3 files. One of which is named `my-music.mp3`.*
+3. Copy the current URL from the URL bar.\
+ *for example: `https://home-assistant.local/media-browser/browser/app%2Cmedia-source%3A%2F%2Fmedia_source/%2Cmedia-source%3A%2F%2Fmedia_source%2Flocal%2FNAS_Media`*
+4. Search for an online URL Decoder, paste in the copied text and decode.\
+ *`https://home-assistant.local/media-browser/browser/app,media-source://media_source/,media-source://media_source/local/NAS_Media`*
+
+The last media source, in this case `media-source://media_source/local/NAS_Media` makes up the first part of the path, with the complete path being:
+`media-source://media_source/local/NAS_Media/my-music.mp3`
diff --git a/source/_integrations/modem_callerid.markdown b/source/_integrations/modem_callerid.markdown
index fe740706089..ce57037c662 100644
--- a/source/_integrations/modem_callerid.markdown
+++ b/source/_integrations/modem_callerid.markdown
@@ -27,6 +27,7 @@ This integration also offers a button to pick up and then hang up the call to pr
Reported models with this integration include that work:
- [StarTech.com USB56KEMH2](https://www.startech.com/en-us/networking-io/usb56kemh2)
+- Zoom USB Modem Model 3095
Devices that did not work:
- [StarTech.com USB56KEM3](https://www.startech.com/en-us/networking-io/usb56kem3)
diff --git a/source/_integrations/music_assistant.markdown b/source/_integrations/music_assistant.markdown
index ef03cbfaf55..a54f35becc1 100644
--- a/source/_integrations/music_assistant.markdown
+++ b/source/_integrations/music_assistant.markdown
@@ -15,7 +15,7 @@ ha_zeroconf: true
ha_integration_type: integration
---
-The **Music Assistant** (MA) {% term integration %} allows you to connect Home Assistant to a [Music Assistant Server](https://music-assistant.io/). Once configured, all [MA Players](https://music-assistant.io/player-support/) show up as Home Assistant [media player entities](/integrations/media_player/). Media players will allow you to control media playback and see the currently playing item.
+The **Music Assistant** (MA) {% term integration %} allows you to connect Home Assistant to a [Music Assistant Server](https://music-assistant.io/) (Required version 2.4 or later). Once configured, all [MA Players](https://music-assistant.io/player-support/) show up as Home Assistant [media player entities](/integrations/media_player/). Media players will allow you to control media playback and see the currently playing item.
There is currently support for the following Home Assistant Platforms:
@@ -39,15 +39,17 @@ These URIs can be obtained from, for example, the output of the `get_library` or
Under normal circumstances, Home Assistant automatically discovers your running Music Assistant Server. If there is something special about the Home Assistant or MA setup (for example, the MA server is running as a remote Docker container) or discovery is not working, you can manually specify the URL to your Music Assistant server. If the Music Assistant Server is not installed, then follow these [installation instructions](https://music-assistant.io/installation/).
-## Media player entities
+## Supported functionality
-The Music Assistant integration creates media player entities for all players available in MA, including those imported from Home Assistant. This is needed to provide the full functionality Music Assistant has to offer. These entities will display media information, playback progress, and playback controls.
+### Media player entities
+
+The Music Assistant integration creates media player entities for all players and groups available in MA, including those imported from Home Assistant. This is needed to provide the full functionality Music Assistant has to offer. This full functionality includes transfer of the playing queue of music from one player to another, automatic pausing of playback during announcements, and richer options for selecting the media for playback. These entities will display media information, playback progress, and playback controls.
## Actions
### Action `music_assistant.play_media`
-Play media on a Music Assistant player with more fine-grained control options.
+Play media on a Music Assistant player with more fine-grained control options. This action is more powerful than the [`media_player.play_media`](https://www.home-assistant.io/integrations/media_player/#action-media_playerplay_media) action because it allows multiple items to be added to the queue at once, it allows more specific control of the media item to be played (e.g. a track from a specific album can be specified) and Music Assistant's radio mode (where the queue is filled with similar tracks to that enqueued) can be enabled.
- **Data attribute**: `media_id`
- **Optional**: No.
@@ -81,7 +83,7 @@ Play media on a Music Assistant player with more fine-grained control options.
### Action `music_assistant.play_announcement`
-Play announcement on a Music Assistant player with more fine-grained control options.
+Play an announcement which is accessible via URL on a Music Assistant player. Home Assistant [TTS](https://www.home-assistant.io/integrations/tts/) actions are used for announcements provided as text.
- **Data attribute**: `url`
- **Optional**: No.
@@ -98,7 +100,7 @@ Play announcement on a Music Assistant player with more fine-grained control opt
### Action `music_assistant.transfer_queue`
-Transfer the player's queue to another player.
+Transfer the player's queue to another player. This could be combined with presence sensors to allow music to follow you around the house.
- **Data attribute**: `source_player`
- **Optional**: Yes.
@@ -109,13 +111,31 @@ Transfer the player's queue to another player.
- **Description**: Start playing the queue on the target player. Omit to use the default behavior.
- **Example**: `true`
+#### Example
+
+In this example, the queue of the first player found playing will be transferred to the kitchen when a motion sensor is triggered in that room.
+
+```yaml
+automation:
+ - id: auto_queue_transfer_kitchen
+ alias: Automatically Transfer Queue to Kitchen
+ trigger:
+ platform: state
+ entity_id: binary_sensor.kitchen_motion_sensor_occupancy
+ to: 'on'
+ action:
+ service: music_assistant.transfer_queue
+ target:
+ entity_id: media_player.ma_kitchen_speaker
+```
+
### Action `music_assistant.search`
-Perform a global search on the Music Assistant library and all providers.
+Perform a global search on the Music Assistant library and all providers. This allows programmatic access to all of the music provider's catalogs and could be used to build a HA dashboard where any track could be found for playback.
- **Data attribute**: `config_entry_id`
- **Optional**: No.
- - **Description**: The Music Assistant instance that the search will be performed upon. Allows for multiple servers to be running.
+ - **Description**: The Music Assistant instance that the search will be performed upon. Allows for multiple servers to be running. This is obtained from a dropdown in the GUI editor. Users of YAML can use the dev tools action tab and select from the dropdown and then switch to YAML to get the actual value.
- **Example**: `Music Assistant`
- **Data attribute**: `name`
- **Optional**: No.
@@ -144,7 +164,7 @@ Perform a global search on the Music Assistant library and all providers.
### Action `music_assistant.get_library`
-Perform a local search on the Music Assistant library.
+Perform a local search on the Music Assistant library. This provides programmatic access to concise information about the media item. This information could be used to create a queue of tracks for playback.
- **Data attribute**: `config_entry_id`
- **Optional**: No.
@@ -183,19 +203,86 @@ Perform a local search on the Music Assistant library.
- **Description**: When `album` is the `media_type` then this option will restrict the result according to the selection of either album, single, compilation, EP or unknown.
- **Example**: `album`
+#### Example
+
+This example will start playback of ten random tracks.
+
+```yaml
+script:
+ create_random_queue:
+ mode: single
+ sequence:
+ - service: music_assistant.get_library
+ data:
+ limit: 10
+ media_type: track
+ config_entry_id: 01JEXNDHT21V0BHJXM7A5SZANV
+ order_by: random
+ response_variable: random_tracks
+ - action: music_assistant.play_media
+ data:
+ media_id: {% raw %}"{{ random_tracks['items'] | map(attribute='uri') | list }}" {% endraw %}
+ media_type: track
+ enqueue: replace
+ target:
+ entity_id: media_player.ma_kitchen_speaker
+```
+
### Action `music_assistant.get_queue`
-Get the queue details of a Music Assistant player queue.
+Get the queue details of a Music Assistant player queue. This provides programmatic access to comprehensive information about the current and next media item in the queue. This information could be used to create a bespoke media dashboard.
- **Data attribute**: `entity_id`
- **Optional**: No.
- **Description**: The entity_id of the player holding the queue to be retrieved.
- **Example**: `media_player.kitchen_speaker`
+#### Example
+
+This example sets the name of the currently playing track in an [`input_text`](https://www.home-assistant.io/integrations/input_text/) which could then be used on a dashboard.
+
+```yaml
+script:
+ get_now_playing:
+ mode: queued
+ alias: "Get Now Playing Track Name"
+ sequence:
+ - action: music_assistant.get_queue
+ data:
+ entity_id: media_player.ma_kitchen_speaker
+ response_variable: queue_info
+ - service: input_text.set_value
+ data:
+ entity_id: input_text.now_playing
+ value: {% raw %}"{{ queue_info['media_player.ma_kitchen_speaker'].current_item.name }}" {% endraw %}
+```
+
## Notes
- Any Home Assistant players added to Music Assistant will appear duplicated as the MA version of the player is created. The original HA player can be hidden if desired.
+## Known limitations
+
+The data returned by the `get_queue` action will be partially limited if the item is not in the library (For example, if an item was selected for playback directly from Spotify). Metadata such as favorite status, explicit status, last played, played count, and disc art URL are only available for items that are in the MA library.
+
+Radio mode is only available with certain music providers, and an error will be shown if attempting to enable radio mode on an item that isn't linked to one of those providers. Review the [Music Assistant documentation](https://www.music-assistant.io/music-providers/#summary) to identify which providers support this functionality.
+
+## Troubleshooting
+
+### Can’t find the MA actions
+
+#### Symptom: No Music Assistant actions are shown in the editor
+
+When trying to set up a script or automation via the GUI, no MA actions can be found.
+
+##### Description
+
+This means the add-on may have been installed, but the integration has not.
+
+##### Resolution
+
+Go to the [Configuration section](https://www.home-assistant.io/integrations/music_assistant/#configuration) and install the integration.
+
## Removing the integration
This integration follows standard integration removal.
diff --git a/source/_integrations/nest.markdown b/source/_integrations/nest.markdown
index 5f5992f5748..3550d8b2e64 100644
--- a/source/_integrations/nest.markdown
+++ b/source/_integrations/nest.markdown
@@ -46,6 +46,19 @@ You are in control of the information and capabilities exposed to Home Assistant
## Configuration
+{% details "Important: Remove existing Google credentials first" %}
+
+If you have previously set up the Google integration or a Nest integration, you should remove any existing Google integration credentials before proceeding.
+
+To remove existing credentials:
+1. Go to **{% my integrations title="Settings > Devices & services" %}**.
+2. Select the three dots (⋮) menu in the upper right corner.
+3. Review the list for any previous Google or Nest integrations.
+4. Remove any existing Google/Nest integration by selecting it and choosing "Delete".
+
+This ensures that Home Assistant will use your latest Google integration configuration and prevents authentication conflicts.
+{% enddetails %}
+
To add the **Nest** integration to your Home Assistant, use this My Button:
{% my config_flow_start badge domain=page.ha_domain %}
@@ -311,10 +324,6 @@ This feature is enabled by the following permissions:
- *Allow Home Assistant to access and control your thermostat*
{% endnote %}
-{% note %}
-Additional Nest Temperature Sensors are not supported by the SDM API. The Temperature reported by the API will be pulled from whichever device is currently configured as the Active Sensor, which can be adjusted via manual selection or the schedule offered in the Nest App.
-{% endnote %}
-
## Camera
@@ -524,15 +533,71 @@ This feature is enabled by the following permissions:
{% endnote %}
+## Known limitations
+
+### Google account types
+
+There are limitations to which Google accounts can use the SDM API. See the [Device Access Registration](https://developers.google.com/nest/device-access/registration) documentation for details.
+
+The primary limitations are the following:
+
+- Google Workspace accounts are not supported. Only consumer accounts (for example, gmail.com) can be used.
+- Once a Google Account is associated with your Device Access Project, it cannot be changed. Be sure you are signed in to the correct Google Account before continuing.
+
+Keep in mind, the US$5 registration fee is non-refundable.
+
+### Google Home App migration and cameras
+
+Migrating your cameras to the Google Home App converts cameras from RTSP to WebRTC, which results in the loss of snapshot functionality. Additionally, there is a known issue where media is not currently published for these events; this has been reported to the Nest SDM team and is an unexpected side effect of their migration.
+
+### Temperature sensors partially supported
+
+Additional Nest temperature sensors are not supported by the SDM API. The temperature reported by the API will be pulled from whichever device is currently configured as the Active Sensor, which can be adjusted via manual selection or the schedule offered in the Nest App. If multiple sensors are available, only the temperature from the active sensor will be displayed.
+
## Troubleshooting
-- *No access to partner information* "Information could not be retrieved" error message during the setup wizard means that the Google Account used is not able to access the Home. Please ensure that you have successfully migrated your Nest Account to a Google Account using the Google Nest App. Additionally, if your home has multiple members, please note that the individual who initially set up the home must complete the migration of their Nest Account to a Google Account before you can establish a connection with Home Assistant.
+### Can't link Google account
-- You can add or remove devices and permissions granted to Home Assistant in the Nest [Partner Connections Manager](https://nestservices.google.com/partnerconnections). Reload the Nest integration to make new devices available. See the [SDM API Troubleshooting](https://developers.google.com/nest/device-access/authorize#modify_account_permissions) documentation for more details.
+#### Symptom: Can’t link to [Project Name]: Please contact [Project Name] if the issue persists
-- *Error 400: redirect_uri_mismatch* means that your OAuth Client ID is not configured to match the *My Home Assistant* callback URL. Home Assistant's redirect URL behavior may have changed since you initially set this up!
+##### Description
-{% details "Details about resolving redirect_uri_mismatch" %}
+The error *Can’t link to [Project Name]* typically means that the *OAuth Client ID* used is
+mismatched in Home Assistant [Application Credentials](/integrations/application_credentials/).
+
+##### Resolution
+
+The simplest approach is to remove Application Credentials from Home Assistant and then verify
+that the *OAuth Client ID* used must be consistent across these three places:
+
+- [Google Cloud Console](https://console.cloud.google.com/apis/credentials) - See instructions above to create new Web Auth OAuth Credentials if needed.
+- [Device Access Project](https://console.nest.google.com/device-access/project-list) - The OAuth Client ID for your Device Access Project must refer to the Web Auth OAuth Client ID in the Google Cloud Console.
+- Make sure you are using the same Google Account in the Device Access Console and Google Cloud Console. For example, double-check the photo and account name in the top right of the screen.
+- [Application Credentials](/integrations/application_credentials/) - Home Assistant needs to be configured with the same credentials. Delete any existing entries if they do not match, then either manually enter or re-enter as part of the setup.
+
+ 
+
+#### Symptom: No access to partner information or Information could not be retrieved
+
+##### Description
+
+The error *No access to partner information* or *Information could not be retrieved* shown
+during the account linking process means that the Google Account used cannot access the Google Home.
+
+##### Resolution
+
+- You can organize your homes and devices in the Google Home App and [share homes and devices](https://support.google.com/googlenest/answer/9155535) across accounts. Ensure the account being used has access to the Home.
+- If you formerly had a Nest account, ensure that it is migrated successfully to a Google Account. If your Google Home has multiple members, please note that the individual who initially set up the home must complete the migration of their Nest Account to a Google Account before you can establish a connection with Home Assistant.
+
+#### Symptom: Error 400: redirect_uri_mismatch
+
+##### Description
+
+This error *Error 400: redirect_uri_mismatch* means that your OAuth Client ID is not configured to match the *My Home Assistant* callback URL. Home Assistant's redirect URL behavior may have changed since you initially set this up!
+
+##### Resolution
+
+For users with a default configuration:
- This should show the redirect URI `https://my.home-assistant.io/redirect/oauth` in the error message. If the error message has a different URL, then you are running an older version of Home Assistant need to upgrade or manually disabled My Home Assistant (see below).
@@ -543,77 +608,171 @@ This feature is enabled by the following permissions:

-{% enddetails %}
+For users who have manually disabled *My Home Assistant*:
-{% details "I have manually disabled My Home Assistant" %}
+- Google applies strict [Redirect URI validation rules](https://developers.google.com/identity/protocols/oauth2/web-server#uri-validation) to keep your login credentials secure. In practice, this means that you must access Home Assistant *over SSL* and a *public top-level domain*. See the documentation on [Securing](/docs/configuration/securing/) and note that you don't actually need to enable remote access.
-Google applies strict [Redirect URI validation rules](https://developers.google.com/identity/protocols/oauth2/web-server#uri-validation) to keep your login credentials secure. In practice, this means that you must access Home Assistant *over SSL* and a *public top-level domain*. See the documentation on [Securing](/docs/configuration/securing/) and note that you don't actually need to enable remote access.
-
-If you don't have [My Home Assistant](/integrations/my) on your installation,
+- If you don't have [My Home Assistant](/integrations/my) on your installation,
you can use `/auth/external/callback` as the redirect URI
instead.
-The `` must be the same as used during the configuration/
+- The `` must be the same as used during the configuration/
authentication process.
-{% enddetails %}
+#### Symptom: Something went wrong: Please contact the developer of this app if the issue persists
-- *Something went wrong: Please contact the developer of this app if the issue persists*: This
-typically means you are using the wrong type of credential or have credentials
-mixed up between accounts. Make sure the credential in the [Google Cloud Console](https://console.developers.google.com/apis/credentials) is a *Web Application* credential following the instructions above. If you have multiple Google accounts logged into the current browser session, Google may default to the first logged in account while switching between pages. To avoid this, log out of other accounts or use a private/incognito browser window with only the desired Google account logged in.
+##### Description
-- *Something went wrong, please try again in a few minutes*: According to Google's [Partner Connections Manager Error Reference](https://developers.google.com/nest/device-access/reference/errors/pcm), this error covers all other undocumented internal errors within Partner Connections. One of the issues that cause this error is synchronization problems between the Nest and Google Home apps. Confirm that your Nest device is visible within both apps under the same Home. If it is missing within Google Home, create a new dummy home on the Nest app, which triggers the synchronization process. (This is the workaround recommended by the Google support team). The dummy entry can be deleted once the Nest device is visible within the Google Home app.
+This typically means you are using the wrong type of credential or have credentials
+mixed up between accounts.
-- *Can’t link to [Project Name]: Please contact [Project Name] if the issue persists*: This typically means that the *OAuth Client ID* used is mismatched
+##### Resolution
-{% details "Resolving mismatched OAuth Client ID" %}
+Make sure the credential in the [Google Cloud Console](https://console.developers.google.com/apis/credentials) is a *Web Application* credential following the instructions above. If you have multiple Google accounts logged into the current browser session, Google may default to the first logged in account while switching between pages. To avoid this, log out of other accounts or use a private/incognito browser window with only the desired Google account logged in.
-The *OAuth Client ID* used must be consistent, so check these:
+#### Symptom: Something went wrong, please try again in a few minutes
-- [Google Cloud Console](https://console.cloud.google.com/apis/credentials) - See instructions above to create new Web Auth OAuth Credentials if needed
-- [Device Access Project](https://console.nest.google.com/device-access/project-list) - The OAuth Client ID for your Device Access Project must refer to the Web Auth OAuth Client ID in the Google Cloud Console
-- Make sure you are using the same Google Account in the Device Access Console and Google Cloud Console e.g. double-check the photo and account name in the top right of the screen
-- [Application Credentials](/integrations/application_credentials/) - Home Assistant needs to be configured with the same credentials. Delete any existing entries if they do not match, then either manually enter or re-enter as part of the setup.
+##### Description
- 
+According to Google's [Partner Connections Manager Error Reference](https://developers.google.com/nest/device-access/reference/errors/pcm), this error covers all other undocumented internal errors within Partner Connections. One of the issues that cause this error is synchronization problems between the Nest and Google Home apps.
+##### Resolution
-{% enddetails %}
+Confirm that your Nest device is visible within the Google Home App and Nest App under the same Home. If it is missing within Google Home, create a new dummy home on the Nest app, which triggers the synchronization process. (This is the workaround recommended by the Google support team). The dummy entry can be deleted once the Nest device is visible within the Google Home app.
-- *Reauthentication required often*: If you are getting logged out every 7 days, this means an OAuth Consent Screen misconfiguration or your authentication token was revoked by Google for some other reason.
+#### Symptom: Error 403: access_denied or Access blocked: home-assistant.io has not completed Google's verification process
-{% details "Details about reauthentication issues" %}
+##### Description
+
+The error *Error 403: access_denied* means that the OAuth Consent screen may be misconfigured,
+either because it does not allow access to your Google Account or because you have entered
+extra information that triggered Google's verification process. Google will require
+verification when you add extra information to the branding page.
+
+#### Resolution
+
+Visit the OAuth [Verification Center](https://console.cloud.google.com/auth/verification) and
+confirm the *Verification Status* is *Verification not required*. If verification
+is required:
+
+1. Navigate to the [Branding](https://console.cloud.google.com/auth/branding) page.
+2. Remove additional fields that are not required and Save. See the set up instruction above and
+make sure not to enter extra fields.
+3. Go back to the Verification Center and confirm the status is correct.
+
+Additionally you need to make sure the Audience configuration is correct by following these steps:
+
+1. Visit the OAuth [Audience](https://console.cloud.google.com/auth/audience) page.
+2. Make sure the account is set to *In production*.
+
+You may now repeat the integration setup and account linking steps.
+
+#### Symptom: Error: invalid_client no application name
+
+##### Description
+
+The error *Error: invalid_client no application name* means the OAuth Consent screen has not been
+fully configured for the project and needs additional information.
+
+#### Resolution
+
+Visit the [OAuth Consent Screen](https://console.developers.google.com/apis/credentials/consent) and
+enter the required fields (App Name, Support Email, Developer Email) and leave everything else as default.
+
+### Can't find devices
+
+#### Symptom: Devices do not appear in Home Assistant
+
+##### Description
+
+This typically means that Home Assistant does not have access to the device because it was not returned
+from the SDM API.
+
+##### Resolution
+
+You can add or remove devices and permissions granted to Home Assistant in the Nest [Partner Connections Manager](https://nestservices.google.com/partnerconnections). Reload the Nest integration to make new devices available. See the [SDM API Troubleshooting](https://developers.google.com/nest/device-access/authorize#modify_account_permissions) documentation for more details.
+
+#### Symptom: Thermostats do not appear in Home Assistant or are unavailable
+
+There have been reports that Thermostats may not appear or are unavailable due to a bug in the SDM API. A common fix to get the API to work again is to try these steps:
+
+- Restart the Thermostat device. See [How to restart or reset a Nest thermostat](https://support.google.com/googlenest/answer/9247296) for more details.
+- In the official Nest app or on https://home.nest.com: Move the Thermostat to a different or fake/temporary room.
+- Reload the integration in Home Assistant: Navigate to {% my integrations title="**Settings** > **Devices & services**" %}, select {% icon "mdi:dots-vertical" %} next to *Nest* and choose **Reload**.
+
+#### Symptom: Devices do not appear when the API is disabled
+
+##### Description
+
+The SDM API may not return devices for the authorized account when the SDM API is disabled.
+
+##### Resolution
+
+Double-check that GCP is configured correctly and [Enable the API](https://developers.google.com/nest/device-access/get-started#set_up_google_cloud_platform) and authorize at least one device in the OAuth setup flow. If you have trouble here, then you may want to walk through the Google instructions and issue commands directly against the API until you successfully get back the devices.
+
+### Authentication problems
+
+#### Symptom: Re-authentication required often
+
+##### Description
+
+You may be asked to reauthenticate more often than you expect, such as every 7 days. This means an OAuth Consent Screen is misconfigured, or your authentication token was revoked by Google for some other reason.
+
+##### Resolution
- This most likely reason is the *OAuth Consent Screen* is set to *Testing* by default which expires the token after 7 days.
- Follow the steps above to set it to *Production* to resolve this and reauthorize your integration one more time to get a new token.
- You may also see this as the error message *invalid_grant: Token has been expired or revoked*.
- See [Google Identity: Refresh token expiration](https://developers.google.com/identity/protocols/oauth2#expiration) for more reasons on why your token may have expired.
-{% enddetails %}
+### Integration set up failure
-- Check **Settings** -> **System** -> **Logs** to see if there are any error messages or misconfigurations then see the error messages below.
+#### Symptom: Configuration error: Failed to create subscriber `subscription/name` was not found
-- *Thermostat does not appear or is unavailable* happens due to a bug where the SDM API does return the devices. A common fix get the API to work again is to:
+##### Description
-{% details "How to restart thermostat" %}
+The integration fails to start because it attempts to create a subscriber with a subscription
+name that is not found in your Google Account. By default, Google pub/sub subscriptions will be deleted after 31 days of inactivity ([reference](https://cloud.google.com/knowledge/kb/pub-sub-subscriptions-disappeared-without-any-deletion-logs-000004170)). If this happens, then the integration will fail, and you will see the preceding log line in your Home Assistant logs.
-- Restart the Thermostat device. See [How to restart or reset a Nest thermostat](https://support.google.com/googlenest/answer/9247296) for more details.
-- In the official Nest app or on https://home.nest.com: Move the Thermostat to a different or fake/temporary room.
-- Reload the integration in Home Assistant: Navigate to **Configuration** then **Devices & services**, click `...` next to *Nest* and choose **Reload**.
+##### Resolution.
-{% enddetails %}
+To repair the subscriber:
-- *No devices or entities are created* if the SDM API is not returning any devices for the authorized account. Double-check that GCP is configured correctly to [Enable the API](https://developers.google.com/nest/device-access/get-started#set_up_google_cloud_platform) and authorize at least one device in the OAuth setup flow. If you have trouble here, then you may want to walk through the Google instructions and issue commands directly against the API until you successfully get back the devices.
+ 1. Go to the [Device Access Console](https://console.nest.google.com/device-access/project-list) and re-enable the Pub/Sub topic.
+ 2. The Nest integration may need to be recreated to pick up the new Pub/Sub topic.
+ 3. (Optional) To prevent future expirations, go to your [Google Cloud Console Pub/Sub subscription page](https://console.cloud.google.com/cloudpubsub/subscription/list) and edit the Pub/Sub subscription created by Nest to not expire by default.
-- *Error 403: access_denied* means that you need to visit the [OAuth Consent Screen](https://console.developers.google.com/apis/credentials/consent) and add your Google Account as a *Test User*.
+### Nest integration data issues
-- *Error: invalid_client no application name* means the [OAuth Consent Screen](https://console.developers.google.com/apis/credentials/consent) has not been fully configured for the project. Enter the required fields (App Name, Support Email, Developer Email) and leave everything else as default.
+#### Symptom: Not receiving camera motion and person events
-- *Not receiving updates* typically means a problem with the subscriber configuration. Make sure to check the logs for any error messages. Changes for things like sensors or thermostat temperature set points should be instantly published to a topic and received by the Home Assistant subscriber when everything is configured correctly.
+The Nest integration subscribes a Google Pub/sub subscription to listen for camera motion
+or person events. The settings in the Google Home app also control which events
+are published, so if they are not set properly you may not receive events.
-- You can see stats about your subscriber in the [Cloud Console](https://console.cloud.google.com/cloudpubsub/subscription/list) which includes counts of messages published by your devices, and how many have been acknowledged by your Home Assistant subscriber. You can also `View Messages` to see examples of published. Many old unacknowledged messages indicate the subscriber is not receiving the messages and working properly or not connected at all.
+#### Resolution
-- To aid in diagnosing subscriber problems or camera stream issues it may help to turn up verbose logging by adding some or all of these to your {% term "`configuration.yaml`" %} depending on where you are having trouble:
+- Verify that you have allowed Home Assistant to access camera streams, and permissions are correctly set in [Partner Connections Manager](https://nestservices.google.com/partnerconnections).
+- If you are then still not seeing events, it's possible you need to adjust the Google Home App settings. Refer to the [Google Home App Notification Settings](#google-home-app-notification-settings) for details.
+
+#### Symptom: Devices not receiving updated information
+
+##### Description
+
+You may see changes in Google Home that are unexpectedly not reflected in Home Assistant. The Nest integration subscribes to updates from a Google Pub/sub subscription and problems with stale information
+usually indicate a problem with subscriber configuration.
+
+Changes for things like sensors or thermostat temperature set points should be instantly published to a topic and received by the Home Assistant subscriber when everything is configured correctly.
+
+##### Resolution
+
+To learn more about how Google Pub/Sub works see the [Pull subscription workflow documentation](https://cloud.google.com/pubsub/docs/pull#pull-workflow). To investigate subscription related issues follow these steps:
+
+- Check the logs for any relevant error messages.
+- View stats about your subscriber in the [Cloud Console](https://console.cloud.google.com/cloudpubsub/subscription/list). The stats include the number of messages published by your devices, and how many have been acknowledged by your Home Assistant subscriber. You can also `View Messages` to see examples of published. Many old unacknowledged messages indicate the subscriber is not receiving the messages and working properly or not connected at all.
+- Note that it is normal to see info messages such as *API error in streaming pull: 503 The service was unable to fulfill your request. Please try again* as part of the streaming pull flow. The pull requests are long
+running requests that will send an error after a few minutes and then are retried as needed. These are described in more detail in the [Pull subscription workflow documentation](https://cloud.google.com/pubsub/docs/pull#pull-workflow).
+- Enable verbose logging by adding some or all of these to your {% term "`configuration.yaml`" %} depending on where you are having trouble:
```yaml
@@ -633,10 +792,13 @@ logger:
google_nest_sdm.event: debug
```
-- *Not receiving camera motion and person events*: assuming the integration is correctly configured (for example, the oauth and SDM API are set up correctly, you can see camera streams, and permissions are correctly set in [Partner Connections Manager](https://nestservices.google.com/partnerconnections)): If you are then still not seeing events, it's possible you need to adjust the Google Home App settings. Refer to the [Google Home App Notification Settings](#google-home-app-notification-settings) for details.
+## Removing the integration
-- **Configuration error: Failed to create subscriber `subscription/name` was not found** - By default, Google pub/sub subscriptions will be deleted after 31 days of inactivity ([reference](https://cloud.google.com/knowledge/kb/pub-sub-subscriptions-disappeared-without-any-deletion-logs-000004170)). If this happens, then the integration will fail, and you will see the preceding log line in your Home Assistant logs. If that is the case, then:
+This integration follows standard integration removal. No extra steps are required.
- 1. Go to the [Device Access Console](https://console.nest.google.com/device-access/project-list) and re-enable the Pub/Sub Topic.
- 2. The Nest integration may need to be recreated to pick up the new Pub/Sub topic.
- 3. (Optional) To prevent future expirations, go to your [Google Cloud Console Pub/Sub subscription page](https://console.cloud.google.com/cloudpubsub/subscription/list) and edit the Pub/Sub subscription created by Nest to not expire by default.
+{% include integrations/remove_device_service.md %}
+
+After deleting the integration, you may also want to remove any unused information in
+your Google Account that was added during the set up process. See the integration
+configuration instructions for how to find where OAuth credentials and Device Access projects
+are configured.
diff --git a/source/_integrations/nordpool.markdown b/source/_integrations/nordpool.markdown
index 7aa59c8f2a0..1f51ab5ec57 100644
--- a/source/_integrations/nordpool.markdown
+++ b/source/_integrations/nordpool.markdown
@@ -97,7 +97,7 @@ The block price sensors are not enabled by default.
| Sensor | Type | Description |
| ------------------------- | ----------------- | --------------------------------------------------------------------------------- |
| Currency | [Currency] | The configured currency. |
-| Exchange rate | Integer | The exchange rate between the configure currency and Euro's. |
+| Exchange rate | Decimal | The exchange rate between the configure currency and Euro's. |
| Last updated | Datetime | The time when the market prices were last updated. |
## Actions
@@ -129,6 +129,10 @@ Tomorrow's prices are typically released around 13:00 CET, and trying to get the
{% endnote %}
+{% tip %}
+You can get your `config_entry` by using actions within the [developer tools](/docs/tools/dev-tools/): use one of the Nord Pool actions and view the YAML.
+{% endtip %}
+
#### Example action with data
{% raw %}
@@ -193,11 +197,15 @@ template:
Using a trigger template, you can create a template sensor to calculate tomorrow's lowest price which also puts the list of all prices in the attributes of the sensor. All prices are returned in [Currency]/MWh.
{% note %}
-You need to replace the `config_entry` with your own Nord Pool config entry id.
Below example will convert the action call response to kWh prices in the selected currency and add all prices for tomorrow as a list in an attribute.
+
{% endnote %}
+{% tip %}
+You can get your `config_entry` by using actions within the [developer tools](/docs/tools/dev-tools/): use one of the Nord Pool actions and view the YAML.
+{% endtip %}
+
{% raw %}
```yaml
diff --git a/source/_integrations/nuki.markdown b/source/_integrations/nuki.markdown
index ae4ef7e1003..5b0fd4b1be1 100644
--- a/source/_integrations/nuki.markdown
+++ b/source/_integrations/nuki.markdown
@@ -78,7 +78,7 @@ Many Nuki Smart Locks support local alternatives. Consult the [Nuki website](htt
### HomeKit support
-The 2nd and 3rd Generation Smart Locks support [HomeKit via Bluetooth](https://help.nuki.io/hc/en-001/articles/19948907390737-Apple-HomeKit-via-Bluetooth) and can directly integrate with Home Assistant through the (HomeKit integration)(/integrations/homekit_controller/#adding-a-homekit-device-through-bluetooth).
+The 2nd and 3rd Generation Smart Locks support [HomeKit via Bluetooth](https://help.nuki.io/hc/en-001/articles/19948907390737-Apple-HomeKit-via-Bluetooth) and can directly integrate with Home Assistant through the [HomeKit integration](/integrations/homekit_controller/#adding-a-homekit-device-through-bluetooth).
### MQTT support
diff --git a/source/_integrations/nut.markdown b/source/_integrations/nut.markdown
index 4384ba6aa6c..c64e3fe2cd5 100644
--- a/source/_integrations/nut.markdown
+++ b/source/_integrations/nut.markdown
@@ -3,8 +3,8 @@ title: Network UPS Tools (NUT)
description: Instructions on how to set up NUT sensors within Home Assistant.
ha_category:
- Button
- - System monitor
- Switch
+ - System monitor
ha_iot_class: Local Polling
ha_release: 0.34
ha_domain: nut
@@ -28,6 +28,10 @@ related:
The **Network UPS Tools (NUT)** {% term integration %} allows you to monitor and manage an Uninterruptible Power Supply (UPS) for battery backup, a Power Distribution Unit (PDU), or other similar power device using a [NUT](https://networkupstools.org/) server. It lets you view the status, receive notifications about important events, and execute commands as device actions for one or more such devices.
+This integration cannot communicate directly with a UPS or power device.
+For this reason, a NUT server is required. The integration talks to the
+NUT server using the NUT protocol to retrieve data and status information.
+
## Supported devices
This integration supports hardware devices compatible with
@@ -58,9 +62,9 @@ Host:
Port:
description: "The network port of your NUT server. The NUT server's default port is '3493'."
Username:
- description: "The username to log into the NUT server. This is configured in NUT."
+ description: "The username to sign in to your NUT server. The username is optional."
Password:
- description: "The password associated with the username to log into the NUT server. This is configured in NUT."
+ description: "The password to sign in to your NUT server. The password is optional."
{% endconfiguration_basic %}
You can update these settings after installation. To do so,
@@ -71,6 +75,12 @@ and select **Reconfigure**.
## Supported functionality
+{% note %}
+This NUT integration uses the NUT protocol to retrieve "variables"
+from the NUT server. Only sensors and diagnostic sensors available for
+your device are added to Home Assistant.
+{% endnote %}
+
{% important %}
The username and password configured for the device must be granted
`instcmds` permissions on the NUT server to use buttons and
@@ -80,6 +90,178 @@ documentation](https://networkupstools.org/documentation.html) for
configuration information.
{% endimportant %}
+### Sensors
+
+Sensors provide information about a NUT device.
+
+The following sensors may be available:
+
+- **Alarms**: UPS alarms
+- **Battery charge (%)**: Battery charge
+- **Charging status**: Status of the battery charger, with the available states: `charging`, `discharging`, `floating`, `resting`, `unknown`, `disabled`, and `off`
+- **Input current (A)**: Input current
+- **Input load (%)**: Load on (ePDU) input
+- **Input voltage (V)**: Input voltage
+- **Load (%)**: Load on UPS
+- **Outlet voltage (V)**: Total output voltage
+- **Output phases**: Output phases
+- **Output voltage (V)**: Output voltage
+- **Status**: Human-readable version of "Status data" (see below)
+- **Status data**: UPS status
+
+The **Status data** sensor is translated into a human-readable virtual
+sensor named **Status**.
+
+Some power devices provide monitoring information about individual
+outlets. The following sensors may be available for each such outlet:
+
+- **Outlet NAME current (A)**: Current of named outlet
+- **Outlet NAME description**: Description of named outlet
+- **Outlet NAME power (VA)**: Apparent power of named outlet
+- **Outlet NAME real power (W)**: Real power of named outlet
+
+Additional information about the values reported for these sensors can
+be found in the Network UPS Tools repository documentation on
+[variable names](https://github.com/networkupstools/nut/blob/master/docs/nut-names.txt).
+
+### Diagnostic sensors
+
+Diagnostic sensors provide additional information about a NUT device.
+
+{% important %}
+Most of this integration's diagnostic sensors are disabled by default
+to reduce storage overhead for Home Assistant. The diagnostic sensors
+marked with an asterisk \* are enabled by default. To use a disabled
+sensor, you need to enable them first. See the [enabling or disabling
+entities](/common-tasks/general/#enabling-or-disabling-entities)
+documentation for information on how to do this.
+{% endimportant %}
+
+{% note %}
+Certain diagnostic sensor values are described as "opaque by mfg" in
+the table below and NUT's documentation. This means the value returned
+for the sensor may vary by manufacturer.
+{% endnote %}
+
+The following diagnostic sensors may be available:
+
+- **Ambient humidity (%)**\*: Ambient relative humidity
+- **Ambient humidity status**\*: Ambient humidity status relative to the thresholds, with the available states: `good`, `warning-low`, `critical-low`, `warning-high`, and `critical-high`
+- **Ambient temperature (°C)**\*: Ambient temperature
+- **Ambient temperature status**\*: Ambient temperature status relative to the thresholds, with the available states: `good`, `warning-low`, `critical-low`, `warning-high`, and `critical-high`
+- **Apparent power (VA)**: Current value of apparent power
+- **Battery alarm threshold**: Battery alarm threshold
+- **Battery capacity (Ah)**: Battery capacity
+- **Battery chemistry**: Battery chemistry (opaque by mfg)
+- **Battery current (A)**: Battery current
+- **Battery date**: Battery installation or last change date (opaque by mfg)
+- **Battery manuf date**: Battery manufacturing date (opaque by mfg)
+- **Battery runtime (secs)**: Battery runtime
+- **Battery temperature (°C)**: Battery temperature
+- **Battery voltage (V)**: Battery voltage
+- **Beeper status**: UPS beeper status, with the available states: `enabled`, `disabled`, and `muted`
+- **Efficiency (%)**: Efficiency of the UPS (ratio of output to input current)
+- **External contacts**: UPS external contact sensors (opaque by mfg)
+- **High battery voltage (V)**: Maximum battery voltage (100% charge)
+- **High voltage transfer (V)**: High voltage transfer point
+- **Input L1 current (A)**: Input L1 current
+- **Input L1 line frequency (Hz)**: Input L1 line frequency
+- **Input L1 real power (W)**: Input L1 current sum value of all (ePDU) phases real power
+- **Input L1-N voltage (V)**: Input L1-N voltage
+- **Input L2 current (A)**: Input L2 current
+- **Input L2 line frequency (Hz)**: Input L2 line frequency
+- **Input L2 real power (W)**: Input L2 current sum value of all (ePDU) phases real power
+- **Input L2-N voltage (V)**: Input L2-N voltage
+- **Input L3 current (A)**: Input L3 current
+- **Input L3 line frequency (Hz)**: Input L3 line frequency
+- **Input L3-N voltage (V)**: Input L3-N voltage
+- **Input L3 real power (W)**: Input L3 current sum value of all (ePDU) phases real power
+- **Input bypass L1 current (A)**: Input bypass L1 current
+- **Input bypass L1 real power (W)**: Input bypass L1 value of real power
+- **Input bypass L1-N voltage (V)**: Input bypass L1-N voltage
+- **Input bypass L2 current (A)**: Input bypass L2 current
+- **Input bypass L2 real power (W)**: Input bypass L2 value of real power
+- **Input bypass L2-N voltage (V)**: Input bypass L2-N voltage
+- **Input bypass L3 current (A)**: Input bypass L3 current
+- **Input bypass L3 real power (W)**: Input bypass L3 value of real power
+- **Input bypass L3-N voltage (V)**: Input bypass L3-N voltage
+- **Input bypass current (A)**: Input bypass current
+- **Input bypass frequency (Hz)**: Input bypass line frequency
+- **Input bypass phases**: Input bypass line phases
+- **Input bypass real power (W)**: Input bypass value of real power
+- **Input bypass voltage (V)**: Input bypass voltage
+- **Input current status**: Current status relative to the thresholds, with the available states: `good`, `warning-low`, `critical-low`, `warning-high`, and `critical-high`
+- **Input frequency (Hz)**: Input line frequency
+- **Input frequency status**: Frequency status, with the available states: `good` and `out-of-range`
+- **Input nominal frequency (Hz)**: Nominal input line frequency
+- **Input phases**: Input line phases
+- **Input power (VA)**: Current sum value of all (ePDU) phases apparent power
+- **Input power sensitivity**: Input power sensitivity
+- **Input real power (W)**: Current sum value of all (ePDU) phases real power
+- **Input voltage status**: Status relative to the thresholds
+- **Language**: Language to use on front panel (opaque by mfg)
+- **Load reboot timer (secs)**: Time before the load will be rebooted
+- **Load restart delay (secs)**: Interval to wait before restarting the load
+- **Load shutdown timer (secs)**: Time before the load will be shutdown
+- **Load start timer (secs)**: Time before the load will be started
+- **Low battery runtime (secs)**: Remaining battery runtime when UPS switches to low battery (LB)
+- **Low battery setpoint (%)**: Remaining battery level when UPS switches to low battery (LB)
+- **Low battery voltage (V)**: Minimum battery voltage that triggers FSD status
+- **Low voltage transfer (V)**: Low voltage transfer point
+- **Minimum battery runtime to start (secs)**: Minimum battery runtime for UPS restart after power-off
+- **Minimum battery to start (%)**: Minimum battery level for UPS restart after power-off
+- **Nominal battery voltage (V)**: Nominal battery voltage
+- **Nominal input voltage (V)**: Nominal input voltage
+- **Nominal output current (A)**: Nominal output current
+- **Nominal output frequency (Hz)**: Nominal output frequency
+- **Nominal output power (VA)**: Nominal output apparent power
+- **Nominal output real power (W)**: Nominal output real power
+- **Nominal output voltage (V)**: Nominal output voltage
+- **Nominal power (VA)**: Nominal value of apparent power
+- **Nominal real power (W)**: Nominal value of real power
+- **Number of bad batteries**: Number of bad battery packs
+- **Number of batteries**: Number of internal battery packs
+- **Output L1 current (A)**: Output L1 current
+- **Output L1 power percent (%)**: Output L1 percentage of apparent power relative to maximum load
+- **Output L1 real power (W)**: Output L1 real power
+- **Output L1-N voltage (V)**: Output L1-N voltage
+- **Output L2 current (A)**: Output L2 current
+- **Output L2 power percent (%)**: Output L2 percentage of apparent power relative to maximum load
+- **Output L2 real power (W)**: Output L2 real power
+- **Output L2-N voltage (V)**: Output L2-N voltage
+- **Output L3 current (A)**: Output L3 current
+- **Output L3 power percent (%)**: Output L3 percentage of apparent power relative to maximum load
+- **Output L3 real power (W)**: Output L3 real power
+- **Output L3-N voltage (V)**: Output L3-N voltage
+- **Output apparent power (VA)**: Output apparent power
+- **Output current (A)**: Output current
+- **Output frequency (Hz)**: Output frequency
+- **Output phases**: Output phases
+- **Output real power (W)**: Output real power
+- **Overload setting (%)**: Load when UPS switches to overload condition
+- **Real power (W)**: Current value of real power
+- **Reboot on battery**: UPS coldstarts from battery
+- **Self test date**: Date of last self test (opaque by mfg)
+- **Self test interval (secs)**: Interval between self tests
+- **Self test result**: Results of last self test (opaque by mfg)
+- **Shutdown ability**: Enable or disable UPS shutdown ability
+- **Start on ac**: UPS starts when power is applied or re-applied
+- **Start on battery**: Allow to start UPS from battery
+- **System identifier**: UPS system identifier (opaque by mfg)
+- **Total battery current (A)**: Total battery current
+- **UPS reboot delay (secs)**: Interval to wait before rebooting the UPS
+- **UPS shutdown delay (secs)**: Interval to wait after shutdown with delay command
+- **UPS temperature (°C)**: UPS temperature
+- **UPS type**: UPS type (opaque by mfg)
+- **Voltage transfer reason**: Reason for last transfer to battery (opaque by mfg)
+- **Warning battery setpoint (%)**: Battery level when UPS switches to "Warning" state
+- **Watchdog status**: UPS watchdog status
+
+The following diagnostic sensors may be available for each
+individually monitored outlet:
+
+- **Outlet NAME current status**: Current status relative to the thresholds for the named outlet
+
### Buttons
This NUT integration will add buttons for NUT server commands
@@ -106,12 +288,88 @@ also [define a custom polling
interval](/common-tasks/general/#defining-a-custom-polling-interval)
if needed.
-## Example Resources
+## Actions
-Given the following example output from NUT (your variables may differ):
+{% important %}
+The username and password configured for the device must be granted
+`instcmds` permissions on the NUT server to use buttons and
+switches. Device {% term actions %} will not be available if user
+credentials are not specified. See the [NUT server
+documentation](https://networkupstools.org/documentation.html) for
+configuration information.
+{% endimportant %}
+
+An action is available for each parameterless NUT
+[command](https://networkupstools.org/docs/user-manual.chunked/apcs03.html)
+supported.
+
+## Automation example
+
+Home Assistant {% term automations %} can be created to monitor and
+take actions on one or more power devices using NUT.
+
+The following example illustrates how to use this integration in a
+Home Assistant automation. This example is just a starting point, and
+you can use it as inspiration to create your own automations.
+
+### UPS Power Failure Notification
+
+The following example sends a notification to your mobile device when
+a monitored UPS loses power and begins using the battery.
+
+#### Prerequisites
+
+- The NUT integration must be installed and
+configured.
+- Your mobile device must be configured for
+notification.
+- In the example below, the NUT server device is `ups` with the status
+sensor named `ups_status`. You must change the YAML sensor name to
+match your system.
+
+#### Example in YAML
```yaml
-$ upsc ups_name@192.168.11.5
+# Send notification on UPS power failure
+automation:
+ alias: "NUT Power failure notification"
+ triggers:
+ - trigger: state
+ entity_id:
+ - sensor.ups_status
+ to: "On Battery Battery Discharging"
+ actions:
+ - action: notify.notify
+ data:
+ title: "UPS power failure"
+ message: "The UPS lost power and is now on battery"
+```
+
+## Known limitations
+
+Not all NUT functionality is available through this integration. The
+following are known limitations:
+
+- This NUT integration only supports a subset of NUT "variables" and
+"commands".
+- This NUT integration only supports retrieving, but not setting, NUT
+"variables".
+- This NUT integration does not support NUT "commands" that require
+parameters.
+
+## Troubleshooting
+
+### Using NUT to list all variables
+
+The NUT server provides "variables" about your power device. If you
+have command line access to the system running your NUT server, you
+can query NUT directly using the `upsc` command.
+
+Below is an example where the NUT server is configured with a device
+named `my_ups`:
+
+```shell
+$ upsc my_ups
ups.timer.reboot: 0
battery.voltage: 27.0
ups.firmware.aux: L3 -P
@@ -147,19 +405,15 @@ output.voltage: 121.50
output.voltage.nominal: 120
```
-Use the values from the left hand column. Support is included for most
-values with `ups`, `battery`, `input` and `output` prefixes.
+### Using NUT to list all commands
-## UPS Status - human-readable version
+The NUT server provides commands for controlling your power device. If
+you have command line access to the system running your NUT server,
+you can query NUT directly for the available remote commands using
+`upscmd -l`.
-An additional virtual sensor type `ups.status.display` is available
-translating the UPS status value retrieved from `ups.status` into a
-human-readable version.
-
-## Device Actions
-
-A device action is available for each parameterless NUT [command](https://networkupstools.org/docs/user-manual.chunked/apcs03.html) supported by the device. To find the list of supported commands for
-your specific UPS device, you can use the `upscmd -l` command followed by the UPS name:
+Below is an example where the NUT server is configured with a device
+named `my_ups`:
```bash
$ upscmd -l my_ups
@@ -170,9 +424,7 @@ test.battery.start.quick - Start a quick battery test
test.battery.stop - Stop the battery test
```
-These commands will be available as device actions in Home Assistant, allowing you to interact with your UPS.
-
-### User Credentials and Permissions
+### User credentials and permissions
To execute device actions through the NUT integration, you must specify user credentials in the configuration. These credentials are stored in the `upsd.users` file, part of the NUT server configuration. This file defines the usernames, passwords, and permissions for users accessing the UPS devices.
@@ -191,7 +443,7 @@ In this example, the user `my_user` has permission to execute all commands (`ins
Please note that Home Assistant cannot determine whether a user can access a specific action without executing it. If you attempt to perform an action for which the user does not have permission, an exception will be thrown at runtime.
-## Remove integration
+## Removing the integration
This integration follows standard integration removal. No extra steps
are required.
diff --git a/source/_integrations/ogemray.markdown b/source/_integrations/ogemray.markdown
index ffbc2e4f5cc..9a090855a55 100644
--- a/source/_integrations/ogemray.markdown
+++ b/source/_integrations/ogemray.markdown
@@ -1,6 +1,6 @@
---
title: Ogemray
-description: Integrate Ogemray (Powered by Shelly) devices
+description: Connect and control your Ogemray devices using the Shelly integration
ha_category:
- Binary sensor
- Climate
@@ -15,17 +15,18 @@ ha_category:
- Text
- Update
- Valve
-ha_release: '0.115'
+ha_release: 0.115
+ha_domain: ogemray
+ha_integration_type: virtual
+ha_supporting_domain: shelly
+ha_supporting_integration: Shelly
ha_codeowners:
- '@balloob'
- '@bieniu'
- '@thecode'
- '@chemelli74'
- '@bdraco'
-ha_iot_class: Local Push
-ha_domain: ogemray
ha_config_flow: true
-ha_zeroconf: true
ha_platforms:
- binary_sensor
- button
@@ -41,9 +42,8 @@ ha_platforms:
- text
- update
- valve
-ha_integration_type: virtual
-ha_supporting_domain: shelly
-ha_supporting_integration: Shelly
+ha_iot_class: Local Push
+ha_zeroconf: true
---
{% include integrations/supported_brand.md %}
diff --git a/source/_integrations/ohme.markdown b/source/_integrations/ohme.markdown
index 28f9af05a6b..7b0a46936e3 100644
--- a/source/_integrations/ohme.markdown
+++ b/source/_integrations/ohme.markdown
@@ -12,6 +12,7 @@ ha_config_flow: true
ha_domain: ohme
ha_platforms:
- button
+ - diagnostics
- number
- select
- sensor
diff --git a/source/_integrations/onedrive.markdown b/source/_integrations/onedrive.markdown
index 28e1986e52a..427fc4b6222 100644
--- a/source/_integrations/onedrive.markdown
+++ b/source/_integrations/onedrive.markdown
@@ -15,11 +15,14 @@ related:
title: Backups
ha_quality_scale: platinum
ha_platforms:
+ - diagnostics
- sensor
---
This integration allows you to use [OneDrive](https://www.microsoft.com/en-us/microsoft-365/onedrive/online-cloud-storage) for [Home Assistant Backups](/common-tasks/general/#backups) as well as uploading generic files to your OneDrive.
+Backup encryption is enabled by default and can be disabled as shown in the [backup documentation](/common-tasks/general/#to-define-the-backup-location-for-automatic-backups).
+
Backups will be created in a folder called `Home Assistant\backups_` in the `App Folder` of your OneDrive by default.
`id` is part of your Home Assistant instance's unique id to allow backups from multiple instances to the same OneDrive account.
diff --git a/source/_integrations/opower.markdown b/source/_integrations/opower.markdown
index 044e1f75d44..52569e86d04 100644
--- a/source/_integrations/opower.markdown
+++ b/source/_integrations/opower.markdown
@@ -55,7 +55,7 @@ This is typically the same information needed to access your utility's website.
## Utility Authentication Requirements
-For many utilities, only a username and password are required to access your accounts. Some utilities requires additional authentication information.
+For many utilities, only a username and password are required to access your accounts. Some utilities require additional authentication information.
It might be necessary to configure your utility account with an authentication method that is compatible with the Opower integration.
Utility-specific authentication requirements are listed below:
diff --git a/source/_integrations/overseerr.markdown b/source/_integrations/overseerr.markdown
index f673fb85ba5..f75db5664aa 100644
--- a/source/_integrations/overseerr.markdown
+++ b/source/_integrations/overseerr.markdown
@@ -139,7 +139,7 @@ There are a few known limitations for using the integration:
This means you can only have 1 Home Assistant instance connected to your Overseerr instance at a time.
- The integration is not able to function with CSRF protection turned on. In Overseer, go to **Settings** and turn off the **CSRF Protection**.
-## Remove integration
+## Removing the integration
This integration follows standard integration removal, no extra steps are required.
diff --git a/source/_integrations/pglab.markdown b/source/_integrations/pglab.markdown
index 65f50d672e7..4846317d4da 100644
--- a/source/_integrations/pglab.markdown
+++ b/source/_integrations/pglab.markdown
@@ -3,8 +3,8 @@ title: PG LAB Electronics
description: Instructions on how to integrate PG LAB Electronics with Home Assistant.
ha_category:
- Cover
- - Switch
- Sensor
+ - Switch
ha_release: '2025.3'
ha_iot_class: Local Push
ha_config_flow: true
@@ -13,8 +13,8 @@ ha_codeowners:
ha_domain: pglab
ha_platforms:
- cover
- - switch
- sensor
+ - switch
ha_integration_type: integration
ha_quality_scale: bronze
---
diff --git a/source/_integrations/powerfox.markdown b/source/_integrations/powerfox.markdown
index 90227136b58..5f3cbe96620 100644
--- a/source/_integrations/powerfox.markdown
+++ b/source/_integrations/powerfox.markdown
@@ -92,7 +92,7 @@ It will create the following sensors:
There are no commonly known issues with this integration.
-## Remove integration
+## Removing the integration
This integration follows standard integration removal. No extra steps are required.
diff --git a/source/_integrations/pyload.markdown b/source/_integrations/pyload.markdown
index 16f022aae31..1d1dfd75b90 100644
--- a/source/_integrations/pyload.markdown
+++ b/source/_integrations/pyload.markdown
@@ -162,7 +162,7 @@ This integration {% term polling polls %} your **pyLoad** instance every 20 seco
In any case, when reporting an issue, please enable [debug logging](/docs/configuration/troubleshooting/#debug-logs-and-diagnostics), restart the integration, and as soon as the issue reoccurs, stop the debug logging again (*download of debug log file will start automatically*). Further, if still possible, please also download the [diagnostics](/integrations/diagnostics) data. If you have collected the debug log and the diagnostics data, provide them with the issue report.
-## Remove integration
+## Removing the integration
This integration can be removed by following these steps:
diff --git a/source/_integrations/rainbird.markdown b/source/_integrations/rainbird.markdown
index 80c893ab763..a11ee4115c1 100644
--- a/source/_integrations/rainbird.markdown
+++ b/source/_integrations/rainbird.markdown
@@ -137,12 +137,16 @@ than what is possible using the built in schedule in the Rain Bird app.
## Known Limitations
+The new Rain Bird 2.0 App and Firmware is not compatible with Home Assistant.
+The upgrade process will migrate devices to require use of the new Rain Bird
+IQ4 cloud, and Home Assistant will not be able to access the device.
+
The Rain Bird LNK WiFi can only receive one incoming request at a time. It may
not be possible for Home Assistant to send commands to the device while you
are also using the Rain Bird App. Home Assistant tries to carefully limit
connections to the device to avoid failures.
-## Remove integration
+## Removing the integration
This integration can be removed by following these steps:
diff --git a/source/_integrations/remote_calendar.markdown b/source/_integrations/remote_calendar.markdown
index c051bbafdf7..ca1069d31fa 100644
--- a/source/_integrations/remote_calendar.markdown
+++ b/source/_integrations/remote_calendar.markdown
@@ -1,17 +1,19 @@
---
-title: Remote calendar
+title: Remote Calendar
description: Instructions on how to use remote calendars in Home Assistant.
ha_category:
- Calendar
ha_iot_class: Cloud Polling
-ha_release: 2025.04
+ha_release: 2025.4
ha_config_flow: true
ha_domain: remote_calendar
ha_platforms:
- calendar
+ - diagnostics
ha_codeowners:
- '@Thomas55555'
ha_integration_type: service
+ha_quality_scale: silver
---
The **Remote calendar** {% term integration %} allows you to read a calendar in Home Assistant for powering automations.
diff --git a/source/_integrations/renault.markdown b/source/_integrations/renault.markdown
index 012bdb16521..9d0706b4175 100644
--- a/source/_integrations/renault.markdown
+++ b/source/_integrations/renault.markdown
@@ -138,6 +138,22 @@ Notes:
duration: 15
```
+## Known limitations
+
+- Some of the features may require a subscription such as the *Pack EV Remote Control* and/or the *Pack Smart Navigation* subscription.
+- Newer vehicles use new endpoints for some actions, which are not yet supported by the underlying library. The corresponding actions will currently fail with error code `err.func.wired.forbidden`.
+
+## Troubleshooting
+
+The **Renault** integration relies on:
+
+- A stable internet connection.
+- Renault server availability (unexpected downtime or scheduled maintenance).
+
+You can quickly verify service status by opening the official Android/iOS app.
+
+In any case, when reporting an issue, please enable [debug logging](/docs/configuration/troubleshooting/#debug-logs-and-diagnostics), restart the integration, and as soon as the issue reoccurs, stop the debug logging again (*download of debug log file will start automatically*). Further, if still possible, please also download the [diagnostics](/integrations/diagnostics) data. If you have collected the debug log and the diagnostics data, provide them with the issue report.
+
## Removing the integration
This integration follows standard integration removal. No extra steps are required.
diff --git a/source/_integrations/reolink.markdown b/source/_integrations/reolink.markdown
index 57f81f51d04..39fb64e504d 100644
--- a/source/_integrations/reolink.markdown
+++ b/source/_integrations/reolink.markdown
@@ -32,6 +32,8 @@ related:
title: Controlling the camera from the dashboard
- url: https://reolink.com/
title: Reolink product page
+works_with:
+ - local
---
The integration allows you to control [Reolink](https://reolink.com/) NVRs or cameras. Reolink cameras are known for their local storage, without the need for a cloud subscription or account. Reolink cameras can operate fully locally on your network, putting privacy first. When blocking internet access for the Reolink devices, the Home Assistant integration, as well as the Reolink app/client, will continue to work as usual. Reolink cameras provide excellent day- and nighttime video clarity at an affordable price. An SD card in the camera offers local recording, while an optional Reolink NVR/Hub can offer a large recording capacity indoors. As evident by the list of entities in this documentation, Reolink cameras are highly configurable and tightly integrated into Home Assistant.
@@ -331,6 +333,8 @@ Recordings up to 1 month old can be viewed in Home Assistant.
## Tested models
+Models marked as bold in the lists below have been certified under the **Works with Home Assistant** program.
+
### Tested directly connected models
The following models have been tested and confirmed to work with a direct link to Home Assistant:
@@ -344,6 +348,7 @@ The following models have been tested and confirmed to work with a direct link t
- [E1 Outdoor](https://reolink.com/product/e1-outdoor/)
- [E1 Outdoor PoE](https://reolink.com/product/e1-outdoor-poe/)
- [E1 Outdoor Pro](https://reolink.com/product/e1-outdoor-pro/)
+- [Lumus Pro](https://reolink.com/product/lumus-pro/)
- RLC-410*
- [RLC-410W](https://reolink.com/product/rlc-410w/)
- RLC-411*
@@ -364,11 +369,12 @@ The following models have been tested and confirmed to work with a direct link t
- [RLC-820A](https://reolink.com/product/rlc-820a/)
- [RLC-822A](https://reolink.com/product/rlc-822a/)
- [RLC-823A](https://reolink.com/product/rlc-823a/)
+- **[RLC-823S2](https://reolink.com/product/rlc-823s2/)**
- [RLC-830A](https://reolink.com/product/rlc-830a/)
- [RLC-833A](https://reolink.com/product/rlc-833a/)
- [RLC-843A](https://reolink.com/product/rlc-843a/)
- [RLC-1212A](https://reolink.com/product/rlc-1212a/)
-- [RLC-1224A](https://reolink.com/product/rlc-1224a/)
+- **[RLC-1224A](https://reolink.com/product/rlc-1224a/)**
- [RLN8-410 NVR](https://reolink.com/product/rln8-410/)
- [RLN16-410 NVR](https://reolink.com/product/rln16-410/)
- [RLN36 NVR](https://reolink.com/product/rln36/)
@@ -378,12 +384,14 @@ The following models have been tested and confirmed to work with a direct link t
- [Reolink Chime](https://reolink.com/product/reolink-chime/) (when connected to a doorbell)
- [Reolink Duo WiFi](https://reolink.com/product/reolink-duo-wifi-v1/)
- [Reolink Duo 2 WiFi](https://reolink.com/product/reolink-duo-wifi/)
-- [Reolink Duo 3 PoE](https://reolink.com/product/reolink-duo-3-poe/)
+- **[Reolink Duo 3 PoE](https://reolink.com/product/reolink-duo-3-poe/)**
- Reolink Duo Floodlight ([PoE](https://reolink.com/product/reolink-duo-floodlight-poe/) and [Wi-Fi](https://reolink.com/product/reolink-duo-floodlight-wifi/))
- [Reolink Home Hub](https://reolink.com/product/reolink-home-hub/)
- [Reolink Home Hub Pro](https://reolink.com/product/reolink-home-hub-pro/)
-- Reolink TrackMix ([PoE](https://reolink.com/product/reolink-trackmix-poe/) and [Wi-Fi](https://reolink.com/product/reolink-trackmix-wifi/))
-- Reolink Video Doorbell ([PoE Black](https://reolink.com/product/reolink-video-doorbell/), [Wi-Fi Black](https://reolink.com/product/reolink-video-doorbell-wifi/), [PoE White](https://reolink.com/product/reolink-video-doorbell/) and [Wi-Fi White](https://reolink.com/product/reolink-video-doorbell-wifi/))
+- **[Reolink TrackMix PoE](https://reolink.com/product/reolink-trackmix-poe/)**
+- [Reolink TrackMix Wi-Fi](https://reolink.com/product/reolink-trackmix-wifi/)
+- Reolink Video Doorbell ([PoE Black](https://reolink.com/product/reolink-video-doorbell/), [PoE White](https://reolink.com/product/reolink-video-doorbell/))
+- **Reolink Video Doorbell ([Wi-Fi Black](https://reolink.com/product/reolink-video-doorbell-wifi/), [Wi-Fi White](https://reolink.com/product/reolink-video-doorbell-wifi/))**
*These models are discontinued and not sold anymore, they will continue to work with Home Assistant.
@@ -393,7 +401,7 @@ Battery-powered Reolink cameras can be used with Home Assistant with the help of
The following hubs/NVRs have been tested and confirmed to work with battery-powered models in Home Assistant:
-- [Reolink Home Hub](https://reolink.com/product/reolink-home-hub/)
+- **[Reolink Home Hub](https://reolink.com/product/reolink-home-hub/)**
- [Reolink Home Hub Pro](https://reolink.com/product/reolink-home-hub-pro/)
- [RLN8-410 NVR](https://reolink.com/product/rln8-410/) (only hardware versions N7MB01, N3MB01, N2MB02, or H3MB18. Hardware versions H3MB02 and H3MB16 did not get firmware updates since 2022)
- [RLN16-410 NVR](https://reolink.com/product/rln16-410/) (only hardware versions N6MB01 or H3MB18. Hardware version H3MB02 did not get firmware updates since 2022)
@@ -408,8 +416,8 @@ The following battery-powered models have been tested and confirmed to work thro
- [Argus Eco](https://reolink.com/product/argus-eco/)
- [Argus Eco Ultra](https://reolink.com/product/argus-eco-ultra/)
- [Argus PT](https://reolink.com/product/argus-pt/)
-- [Argus Track](https://reolink.com/product/argus-track/)
-- [Reolink Doorbell Battery](https://reolink.com/roadmap/)
+- **[Argus Track](https://reolink.com/product/argus-track/)**
+- **[Reolink Doorbell Battery](https://reolink.com/roadmap/)**
Reolink provides [this larger list of battery camera models](https://support.reolink.com/hc/en-us/articles/32379509281561-Reolink-Home-Hub-Compatibility/) which are compatible with the Home Hub and should work with Home Assistant.
@@ -486,7 +494,7 @@ Then power up the camera while pointing it at the QR code. It takes about a minu
Set up the Reolink integration in Home Assistant using the credentials you set in step 1.
-## Remove integration
+## Removing the integration
### Removing a directly connected camera/NVR/Home Hub
@@ -765,7 +773,7 @@ Prerequisites:
- Note that almost all entities, including motion/ai detection and the camera streams, will be unavailable when privacy mode is turned ON. Check the history of the **Privacy mode** entity to see if this is causing the issues.
- Setting a static IP address for Reolink cameras/NVRs in your router is advisable to prevent (temporal) connectivity issues when the IP address changes.
-- Do not set a static IP in the Reolink device itself, but leave the **Connection Type** on **DHCP** under **Settings** > **Network** > **Network Information** > **Set Up**. If you set it to **static** on the Reolink device itself, this is known to cause incorrect DHCP requests on the network. The incorrect DHCP request causes Home Assistant to use the wrong IP address for the camera, resulting in connection issues. The issue originates from the Reolink firmware, which keeps sending DCHP requests even when you set a static IP address in the Reolink device.
+- Do not set a static IP in the Reolink device itself, but leave the **Connection Type** on **DHCP** under **Settings** > **Network** > **Network Information** > **Set Up**. If you set it to **static** on the Reolink device itself, this is known to cause incorrect DHCP requests on the network. The incorrect DHCP request causes Home Assistant to use the wrong IP address for the camera, resulting in connection issues. The issue originates from the Reolink firmware, which keeps sending DHCP requests even when you set a static IP address in the Reolink device.
- Reolink cameras can support a limited amount of simultaneous connections. Therefore using third-party software like Frigate, Blue Iris, or Scrypted, or using the ONVIF integration at the same time can cause the camera to drop connections. This results in short unavailabilities of the Reolink entities in Home Assistant. Especially when the connections are coming from the same device (IP) where Home Assistant is running, the Reolink cameras can get confused, dropping one connection in favor of the other originating from the same host IP. If you experience disconnections/unavailabilities of the entities, please first temporarily shut down the other connections (like Frigate) to diagnose if that is the problem. If that is indeed the problem, you could try moving the third-party software to a different host (IP address) since that is known to solve the problem most of the time. You could also try switching the protocol to FLV on Home Assistant and/or the third-party software, as that is known to be less resource-intensive on the camera.
- If the Reolink entities go to unavailable for short periods, the camera may be overloaded with requests resulting in short connection drops. To resolve this, first, check if the integration is using `ONVIF push` instead of `ONVIF long polling` (resource intensive) or `Fast polling` (very resource intensive), see the [Reducing latency of motion events](#reducing-latency-of-motion-events) section. Moreover, try switching to the FLV streaming protocol which is the least resource-intensive for the camera, see the [options](#options) section.
diff --git a/source/_integrations/roborock.markdown b/source/_integrations/roborock.markdown
index 4078e2ec8c5..d92595e067b 100644
--- a/source/_integrations/roborock.markdown
+++ b/source/_integrations/roborock.markdown
@@ -24,16 +24,16 @@ ha_platforms:
- diagnostics
- image
- number
- - scene
- select
- sensor
- switch
- time
- vacuum
ha_integration_type: integration
+ha_quality_scale: silver
+ha_dhcp: true
---
-
The Roborock {% term integration %} allows you to connect your [Roborock](https://us.roborock.com/pages/robot-vacuum-cleaner) robotic vacuums to your Home Assistant. Roborock vacuums are
intelligent home cleaning robots and, depending on the specific device, may have features
like mopping capabilities, laser navigation, and options for changing cleaning
@@ -103,7 +103,7 @@ Zones:
This integration uses both local and cloud {% term polling %} and also receives
cloud push events using MQTT. Local communication is preferred when possible.
-Map data is always fetched through the cloud, and Dyad and Zeo devices are cloud only.
+Map data and routines are always fetched through the cloud, and Dyad and Zeo devices are cloud only.
The integration will automatically discover your Roborock devices using the cloud APIs and get
the needed information to communicate locally with them, if supported. Please ensure your Home Assistant
@@ -250,6 +250,8 @@ There are currently four buttons that allow you to reset the various maintenance
- **Reset air filter**
- **Description**: The air filter is expected to be replaced every 150 hours.
+In addition, some vacuums allow routines to be set up in the app. For each of those routines, a button entity will be created, allowing you to trigger it.
+
#### Actions
##### Action Set Vacuum Goto Position
@@ -260,10 +262,10 @@ the specified coordinates.
- **Data attribute**: `entity_id`
- **Description**: Only act on a specific robot.
- **Optional**: No.
-- **Data attribute**: `x_coord`
+- **Data attribute**: `x`
- **Description**: X-coordinate, integer value. The dock is located at x-coordinate 25500.
- **Optional**: No.
-- **Data attribute**: `y_coord`
+- **Data attribute**: `y`
- **Description**: Y-coordinate, integer value. The dock is located at y-coordinate 25500.
- **Optional**: No.
diff --git a/source/_integrations/samsungtv.markdown b/source/_integrations/samsungtv.markdown
index 252f4129924..4d6d794a9bc 100644
--- a/source/_integrations/samsungtv.markdown
+++ b/source/_integrations/samsungtv.markdown
@@ -25,6 +25,17 @@ The `samsungtv` platform allows you to control a [Samsung Smart TV](https://www.
{% include integrations/config_flow.md %}
+{% configuration_basic %}
+ host:
+ description: The IP address of the TV.
+ name:
+ description: The friendly name of the TV.
+{% endconfiguration_basic %}
+
+## Data updates
+
+The **SamsungTV** integration uses a local REST API with a WebSocket notification channel for immediate state information for media metadata, playback progress, volume etc.
+
### Turn on action
If the integration knows the MAC address of the TV from discovery, it will attempt to wake it using wake on LAN when calling turn on. Wake on LAN must be enabled on the TV for this to work. If the TV is connected to a smart strip or requires a more complex turn-on process, a `turn_on` action can be provided that will take precedence over the built-in wake on LAN functionality.
@@ -73,15 +84,18 @@ The integration supports the `remote` platform. The remote allows you to send ke
{% details "Full keycodes list" %}
-**Power Keys**
+#### Power Keys
+
Key|Description
---|-----------
KEY_POWEROFF|PowerOFF
KEY_POWERON|PowerOn
KEY_POWER|PowerToggle
+
____________
-**Input Keys**
+#### Input Keys
+
Key|Description
---|-----------
KEY_SOURCE|Source
@@ -101,9 +115,11 @@ KEY_TV|TV
KEY_ANTENA|AnalogTV
KEY_DTV|DigitalTV
KEY_AMBIENT|AmbientMode
-_____________
-**Number Keys**
+____________
+
+#### Number Keys
+
Key|Description
---|-----------
KEY_1|Key1
@@ -116,9 +132,11 @@ KEY_7|Key7
KEY_8|Key8
KEY_9|Key9
KEY_0|Key0
-___________
-**Misc Keys**
+____________
+
+#### Misc Keys
+
Key|Description
---|-----------
KEY_PANNEL_CHDOWN|3D
@@ -126,9 +144,11 @@ KEY_ANYNET|AnyNet+
KEY_ESAVING|EnergySaving
KEY_SLEEP|SleepTimer
KEY_DTV_SIGNAL|DTVSignal
-______________
-**Channel Keys**
+____________
+
+#### Channel Keys
+
Key|Description
---|-----------
KEY_CHUP|ChannelUp
@@ -138,17 +158,21 @@ KEY_FAVCH|FavoriteChannels
KEY_CH_LIST|ChannelList
KEY_AUTO_PROGRAM|AutoProgram
KEY_MAGIC_CHANNEL|MagicChannel
-_____________
-**Volume Keys**
+____________
+
+#### Volume Keys
+
Key|Description
---|-----------
KEY_VOLUP|VolumeUp
KEY_VOLDOWN|VolumeDown
KEY_MUTE|Mute
-________________
-**Direction Keys**
+____________
+
+#### Direction Keys
+
Key|Description
---|-----------
KEY_UP|NavigationUp
@@ -158,9 +182,11 @@ KEY_RIGHT|NavigationRight
KEY_RETURN|NavigationReturn/Back
KEY_ENTER|NavigationEnter
KEY_EXIT|NavigationExit
+
____________
-**Media Keys**
+#### Media Keys
+
Key|Description
---|-----------
KEY_REWIND|Rewind
@@ -173,9 +199,11 @@ KEY_LIVE|Live
KEY_QUICK_REPLAY|fnKEY_QUICK_REPLAY
KEY_STILL_PICTURE|fnKEY_STILL_PICTURE
KEY_INSTANT_REPLAY|fnKEY_INSTANT_REPLAY
-____________________
-**Picture in Picture**
+____________
+
+#### Picture in Picture
+
Key|Description
---|-----------
KEY_PIP_ONOFF|PIPOn/Off
@@ -188,9 +216,11 @@ KEY_AUTO_ARC_PIP_WIDE|PIPWide
KEY_AUTO_ARC_PIP_RIGHT_BOTTOM|PIPBottomRight
KEY_AUTO_ARC_PIP_SOURCE_CHANGE|PIPSourceChange
KEY_PIP_SCAN|PIPScan
-_______
-**Modes**
+____________
+
+#### Modes
+
Key|Description
---|-----------
KEY_VCR_MODE|VCRMode
@@ -200,25 +230,31 @@ KEY_TV_MODE|TVMode
KEY_DVD_MODE|DVDMode
KEY_STB_MODE|STBMode
KEY_PCMODE|PCMode
+
____________
-**Color Keys**
+#### Color Keys
+
Key|Description
---|-----------
KEY_GREEN|Green
KEY_YELLOW|Yellow
KEY_CYAN|Cyan
KEY_RED|Red
-__________
-**Teletext**
+____________
+
+#### Teletext
+
Key|Description
---|-----------
KEY_TTX_MIX|TeletextMix
KEY_TTX_SUBFACE|TeletextSubface
-______________
-**AspectRatio**
+____________
+
+#### AspectRatio
+
Key|Description
---|-----------
KEY_ASPECT|AspectRatio
@@ -227,9 +263,11 @@ KEY_4_3|AspectRatio4:3
KEY_16_9|AspectRatio16:9
KEY_EXT14|AspectRatio3:4(Alt)
KEY_EXT15|AspectRatio16:9(Alt)
-______________
-**Picture Mode**
+____________
+
+#### Picture Mode
+
Key|Description
---|-----------
KEY_PMODE|PictureMode
@@ -241,9 +279,11 @@ KEY_GAME|PictureModeGame
KEY_CUSTOM|PictureModeCustom
KEY_EXT9|PictureModeMovie(Alt)
KEY_EXT10|PictureModeStandard(Alt)
-_______
-**Menus**
+____________
+
+#### Menus
+
Key|Description
---|-----------
KEY_MENU|Menu
@@ -255,9 +295,11 @@ KEY_GUIDE|Guide
KEY_DISC_MENU|DiscMenu
KEY_DVR_MENU|DVRMenu
KEY_HELP|Help
-_____
-**OSD**
+____________
+
+#### OSD
+
Key|Description
---|-----------
KEY_INFO|Info
@@ -265,9 +307,11 @@ KEY_CAPTION|Caption
KEY_CLOCK_DISPLAY|ClockDisplay
KEY_SETUP_CLOCK_TIMER|SetupClock
KEY_SUB_TITLE|Subtitle
-______
-**Zoom**
+____________
+
+#### Zoom
+
Key|Description
---|-----------
KEY_ZOOM_MOVE|ZoomMove
@@ -275,9 +319,11 @@ KEY_ZOOM_IN|ZoomIn
KEY_ZOOM_OUT|ZoomOut
KEY_ZOOM1|Zoom1
KEY_ZOOM2|Zoom2
+
____________
-**Other Keys**
+#### Other Keys
+
Key|Description
---|-----------
KEY_WHEEL_LEFT|WheelLeft
@@ -335,9 +381,11 @@ KEY_NINE_SEPERATE|
KEY_AUTO_FORMAT|AutoFormat
KEY_DNET|DNET
KEY_MINUS|Minus
-_______________
-**Auto Arc Keys**
+____________
+
+#### Auto Arc Keys
+
Key|Description
---|-----------
KEY_AUTO_ARC_C_FORCE_AGING|
@@ -363,9 +411,11 @@ KEY_AUTO_ARC_CAPTION_KOR|
KEY_AUTO_ARC_ANTENNA_AIR|
KEY_AUTO_ARC_ANTENNA_CABLE|
KEY_AUTO_ARC_ANTENNA_SATELLITE|
+
____________
-**Panel Keys**
+#### Panel Keys
+
Key|Description
---|-----------
KEY_PANNEL_POWER|
@@ -376,9 +426,11 @@ KEY_PANNEL_ENTER|
KEY_PANNEL_MENU|
KEY_PANNEL_SOURCE|
KEY_PANNEL_ENTER|
-_______________
-**Extended Keys**
+____________
+
+#### Extended Keys
+
Key|Description
---|-----------
KEY_EXT1|
@@ -421,7 +473,7 @@ KEY_EXT41|
Please note that some codes are different on the 2016+ TVs. For example, `KEY_POWEROFF` is `KEY_POWER` on the newer TVs.
-The code list has been extracted from: https://github.com/kdschlosser/samsungctl and https://github.com/jaruba/ha-samsungtv-tizen/blob/master/Key_codes.md
+The code list has been extracted from: and
{% enddetails %}
**Example to send sequence of commands:**
@@ -456,3 +508,9 @@ Some televisions from the H and J series use an encrypted protocol and require m
The default setting on newer televisions is to ask for permission on every connection attempt.
To avoid this behavior, please ensure that you adjust this to `First time only` in the `Device connection manager > Access notification` settings of your television.
It is also recommended to cleanup the previous attempts in `Device connection manager > Device list`
+
+## Removing the integration
+
+This integration follows standard integration removal. No extra steps are required.
+
+{% include integrations/remove_device_service.md %}
diff --git a/source/_integrations/sensibo.markdown b/source/_integrations/sensibo.markdown
index 0a74fa8525f..6478fba951f 100644
--- a/source/_integrations/sensibo.markdown
+++ b/source/_integrations/sensibo.markdown
@@ -31,6 +31,7 @@ ha_platforms:
ha_homekit: true
ha_dhcp: true
ha_integration_type: integration
+ha_quality_scale: platinum
---
The **Sensibo** {% term integration %} integrates [Sensibo](https://sensibo.com) devices into Home Assistant.
diff --git a/source/_integrations/sensor.mqtt.markdown b/source/_integrations/sensor.mqtt.markdown
index 1cf23ea7a42..e2d4639f77d 100644
--- a/source/_integrations/sensor.mqtt.markdown
+++ b/source/_integrations/sensor.mqtt.markdown
@@ -201,7 +201,7 @@ state_class:
required: false
type: string
state_topic:
- description: The MQTT topic subscribed to receive sensor values. If `device_class`, `state_class`, `unit_of_measurement` or `suggested_display_precision` is set, and a numeric value is expected, an empty value `''` will be ignored and will not update the state, a `'null'` value will set the sensor to an `unknown` state. The `device_class` can be `null`.
+ description: The MQTT topic subscribed to receive sensor values. If `device_class`, `state_class`, `unit_of_measurement` or `suggested_display_precision` is set, and a numeric value is expected, an empty value `''` will be ignored and will not update the state, a `'None'` value will set the sensor to an `unknown` state. If a `value_template` is used to parse a JSON payload, a `null` value in the JSON [will be rendered as]((/docs/configuration/templating/#using-value-templates-with-mqtt)) `'None'`. Note that the `device_class` can be `null`.
required: true
type: string
unique_id:
diff --git a/source/_integrations/shelly.markdown b/source/_integrations/shelly.markdown
index c6ae4a0d2a5..68d18bba116 100644
--- a/source/_integrations/shelly.markdown
+++ b/source/_integrations/shelly.markdown
@@ -92,7 +92,13 @@ Integration is communicating directly with the device; cloud connection is not n
## Bluetooth Support
-Shelly generation 2+ devices that are not battery-powered can act as a Bluetooth proxy for advertisements. Active or passive listening can be enabled in the options flow.
+Shelly Gen 2 and newer devices (excluding battery-powered models) can act as Bluetooth proxies, forwarding advertisement data. You can enable either active or passive listening through the device’s options flow.
+
+{% tip %}
+Shelly devices do **not** support proxying active (GATT) connections.
+{% endtip %}
+
+For more details, see [Remote Adapters](/integrations/bluetooth/#remote-adapters-bluetooth-proxies) in the [Bluetooth integration](/integrations/bluetooth).
{% include integrations/option_flow.md %}
@@ -163,6 +169,10 @@ If the **Input Mode** of the switch connected to the device is set to `Button`,
Each script which generates events using [Shelly.emitEvent()](https://shelly-api-docs.shelly.cloud/gen2/Scripts/ShellyScriptLanguageFeatures#shellyemitevent) also gets an corresponding event entity. This entity is disabled by default. After changing a script, it's required to manually reload the device before new event types show up.
+{% note %}
+To avoid increased startup time, only the first 5 KB of the script is downloaded and analyzed. If your script exceeds 5 KB, place the event emitting function at the beginning to ensure it is processed.
+{% endnote %}
+
For example, the following script will emit an event every time an input (button or switch) on the device is changed.
```javascript
diff --git a/source/_integrations/slide_local.markdown b/source/_integrations/slide_local.markdown
index 77aadac796b..7c9462c4c4e 100644
--- a/source/_integrations/slide_local.markdown
+++ b/source/_integrations/slide_local.markdown
@@ -77,7 +77,7 @@ The integration fetches data from the device every 15 seconds.
The integration only provides connection with Slide devices via the local API. The cloud API is no longer available.
-## Remove integration
+## Removing the integration
This integration can be removed by following these steps:
diff --git a/source/_integrations/smartthings.markdown b/source/_integrations/smartthings.markdown
index 4935069d6b0..86d51c905a2 100644
--- a/source/_integrations/smartthings.markdown
+++ b/source/_integrations/smartthings.markdown
@@ -29,6 +29,7 @@ ha_platforms:
- button
- climate
- cover
+ - diagnostics
- event
- fan
- light
@@ -43,6 +44,9 @@ ha_platforms:
- valve
ha_dhcp: true
ha_integration_type: integration
+ha_codeowners:
+ - '@joostlek'
+ha_quality_scale: bronze
---
[SmartThings](https://www.samsung.com/smartthings/) is a home automation platform for connecting with Samsung or third-party devices.
diff --git a/source/_integrations/smlight.markdown b/source/_integrations/smlight.markdown
index 9193948c200..6424b263723 100644
--- a/source/_integrations/smlight.markdown
+++ b/source/_integrations/smlight.markdown
@@ -25,12 +25,9 @@ ha_integration_type: device
ha_dhcp: true
---
-The [SMLIGHT](https://smlight.tech) SLZB-06x Ethernet Zigbee coordinators
-provide a convenient way to add Zigbee to your smart home setup.
+The [SMLIGHT](https://smlight.tech) SLZB-06x ethernet Zigbee coordinators provide a reliable and convenient way to integrate Zigbee devices into your smart home setup. By placing the Zigbee gateway closer to your devices, you can improve connectivity and reduce interference, avoiding the limitations of gateways hidden in cupboards or distant locations.
-The **SMLIGHT SLZB** {% term integration %} allows users to monitor and manage their SLZB-06x devices
-directly from within Home Assistant and to directly access many of the
-features found in the SMLIGHT web UI. You can also use these in your automations.
+The **SMLIGHT SLZB** {% term integration %} allows you to monitor and manage your SLZB devices directly from Home Assistant. This integration provides direct access to many features available in the SLZB device's web UI, such as managing firmware updates, monitoring device health through diagnostic sensors, and controlling settings like LED modes or restarting the device. These features can also be incorporated into your automations for central control.
## Prerequisites
@@ -43,13 +40,26 @@ You need a supported SLZB-06 adapter.
- [SLZB-06Mg24](https://smlight.tech/product/slzb-06mg24)
- [SLZB-06p7](https://smlight.tech/product/slzb-06p7)
- [SLZB-06p10](https://smlight.tech/product/slzb-06p10/)
-- SLZB-MR1 - Additional entities will be created for the second Zigbee radio, including Zigbee firmware updates, temperature sensor, and firmware type. (Note: the Zigbee restart and flash mode buttons are shared between both radios.) Requires core firmware `v2.8.x` or later.
+- [SLZB-MR1](https://smlight.tech/product/slzb-mr1/) - Additional entities will be created for the second Zigbee radio, including Zigbee firmware updates, temperature sensor, and firmware type. (Note: the Zigbee restart and flash mode buttons are shared between both radios.) Requires core firmware `v2.8.x` or later.
Core firmware on your SLZB-06x device must be `v2.3.6` or newer. If you have an older `v2.x.x` version, you can update from within Home Assistant. If you have `v0.9.9`, update using the [SMLIGHT web flasher](https://smlight.tech/flasher/#SLZB-06) before installing this integration.
{% include integrations/config_flow.md %}
-## Integration entities
+{% configuration_basic %}
+Host:
+ description: "Hostname or IP address of your SLZB device"
+Username:
+ description: "Username for web login to your SLZB device"
+Password:
+ description: "Password for web login to your SLZB device"
+{% endconfiguration_basic %}
+
+## Data Updates
+
+The **SMLIGHT** {% term integration %} will poll for sensor updates every 5 minutes, except for the internet connectivity sensor which is checked every 15 minutes. Firmware updates for both core and Zigbee are checked once per day.
+
+## Supported functionality
### Sensors
@@ -87,6 +97,8 @@ The following switches will be created:
- **LED night mode** - Enables night mode, which turns off the LEDs overnight, based on the times set in SLZB-06x web UI.
- **Enable VPN** - Enable WireGuard VPN client (requires configuration via the SMLIGHT web UI).
+Switches update in real-time if the settings are changed from the SLZB device web interface.
+
### Updates
The following update entities will be created:
@@ -95,3 +107,29 @@ The following update entities will be created:
- **Zigbee firmware** - Firmware updates of Zigbee chip
The updates offered in Home Assistant will match your currently installed firmware. This is based on the firmware channel (dev, release) and for Zigbee also on the firmware type (coordinator, router, Thread). If you wish to switch channels, install the different firmware type in the SMLIGHT web UI. You will get notifications when new firmware updates are available to install.
+
+## Removing the integration
+
+This integration follows standard integration removal. No extra steps are required.
+
+{% include integrations/remove_device_service.md %}
+
+## Known Limitations
+
+Certain advanced features are not supported directly within this integration and must be configured through the SLZB device's web UI:
+
+- Switching the firmware update channel (for example, stable or development).
+- Changing firmware modes (for example, Zigbee coordinator, Zigbee router, or OpenThread).
+- Configuring security settings.
+- Adjusting network settings.
+- Setting up the WireGuard VPN client.
+
+## Troubleshooting
+
+- In the unlikely event you encounter issues after a firmware update, you can always downgrade the firmware to a previously stable version using the device's web UI.
+
+- If you require access to the SLZB device over IPv6, this can be enabled on the device's web UI.
+
+For any problems with the integration, [open an issue on GitHub][1] and include the device diagnostics from the SMLIGHT integration page. Including diagnostics will help identify and address the issue more efficiently.
+
+[1]: https://github.com/home-assistant/core/issues/new?template=bug_report.yml
diff --git a/source/_integrations/snoo.markdown b/source/_integrations/snoo.markdown
index b55365ce048..84d946f64e2 100644
--- a/source/_integrations/snoo.markdown
+++ b/source/_integrations/snoo.markdown
@@ -4,8 +4,8 @@ description: Instructions on how to integrate Snoo into Home Assistant
ha_category:
- Binary Sensor
- Event
- - Sensor
- Select
+ - Sensor
- Switch
ha_iot_class: Cloud Push
ha_release: 2025.3
@@ -16,8 +16,8 @@ ha_domain: snoo
ha_platforms:
- binary_sensor
- event
- - sensor
- select
+ - sensor
- switch
ha_integration_type: integration
ha_quality_scale: bronze
diff --git a/source/_integrations/solarlog.markdown b/source/_integrations/solarlog.markdown
index 2557b1a6e9e..7a32c8c3b5f 100644
--- a/source/_integrations/solarlog.markdown
+++ b/source/_integrations/solarlog.markdown
@@ -56,12 +56,6 @@ Password:
The integration has no additional configuration options.
-## Remove integration
-
-This integration can be removed by following these steps:
-
-{% include integrations/remove_device_service.md %}
-
## Supported functionality
### Sensors
@@ -143,3 +137,9 @@ The integration provides no additional actions.
The integration only provides the (limited) data exposed by means of the JSON interface. This also entails that the values for the self-consumption are rounded to full kWh.
Firmware versions below 3.x are not supported, as they do not expose the JSON interface. Please contact the Solar-Log support if you need assistance with updating the firmware of your Solar-Log device.
+
+## Removing the integration
+
+This integration can be removed by following these steps:
+
+{% include integrations/remove_device_service.md %}
diff --git a/source/_integrations/spaceapi.markdown b/source/_integrations/spaceapi.markdown
index d694feae988..cc99f10ee13 100644
--- a/source/_integrations/spaceapi.markdown
+++ b/source/_integrations/spaceapi.markdown
@@ -12,13 +12,16 @@ ha_integration_type: integration
related:
- docs: /docs/configuration/
title: Configuration file
+ - docs: /integrations/http/
+ title: HTTP integration
ha_quality_scale: legacy
---
-The `spaceapi` {% term integration %} allow Hackerspaces to expose information to web apps or any other application with the [SpaceAPI](https://spaceapi.io/).
+The `spaceapi` {% term integration %} allow Hackerspaces and Makerspaces to expose information to web apps or any other application with the [SpaceAPI](https://spaceapi.io/). It does this by exposing an API on Home Assistant that hosts the JSON payload that SpaceAPI uses.
## Configuration
+To configure connectivity and authentication to the API that this {% term integration %} exposes, refer to the HTTP {% term integration %} documentation.
To setup the `spaceapi` {% term integration %} in your installation, add the following to your {% term "`configuration.yaml`" %} file.
{% include integrations/restart_ha_after_config_inclusion.md %}
@@ -60,6 +63,21 @@ location:
description: The physical address of the Hackerspace.
required: true
type: string
+spacefed:
+ description: A flag indicating if the hackerspace uses SpaceFED, a federated login scheme so that visiting hackers can use the space Wi-Fi with their home space credentials.
+ required: false
+ type: map
+ keys:
+ spacenet:
+ description: Set to true or false depending on whether your space supports [spacenet](https://spacefed.net/index.php/Category:Howto/Spacenet)
+ required: true
+ type: boolean
+ default: false
+ spacesaml:
+ description: Set to true or false depending on whether your space uses [SpaceSAML](https://spacefed.net/index.php?title=Spacesaml)
+ required: true
+ type: boolean
+ default: false
contact:
description: Contact information of the Hackerspace. At least one entry is mandatory.
required: true
@@ -135,8 +153,8 @@ contact:
required: false
type: string
issue_report_channels:
- description: "The reporting channel for issues. Valid values are `email`, `issue_mail`, `twitter` or `ml`"
- required: true
+ description: "*Removed*. V15 of SpaceAPI no longer supports this. The reporting channel for issues. Valid values are `email`, `issue_mail`, `twitter` or `ml`"
+ required: false
type: list
state:
description: The current state of the Hackerspace.
@@ -144,7 +162,7 @@ state:
type: list
keys:
entity_id:
- description: "The `entity_id` of a binary sensor that represents the current state."
+ description: "The `entity_id` of a binary sensor that represents whether the space is currently open or closed. If the binary sensor is unavailable, the state provided will be false."
required: true
type: string
icon_open:
@@ -213,7 +231,7 @@ feeds:
required: true
type: string
cache:
- description: Specifies options about caching of your SpaceAPI endpoint. Use this if you want to avoid hundreds/thousands of application instances crawling your status.
+ description: "*Removed*. V15 of SpaceAPI no longer supports this. Specifies options about caching of your SpaceAPI endpoint. Use this if you want to avoid hundreds/thousands of application instances crawling your status."
required: false
type: map
keys:
@@ -226,7 +244,7 @@ projects:
required: false
type: list
radio_show:
- description: A list of radio shows that your hackerspace might broadcast.
+ description: "*Removed*. V15 of SpaceAPI no longer supports this. A list of radio shows that your hackerspace might broadcast."
required: false
type: list
keys:
@@ -265,7 +283,7 @@ sensors:
type: string
{% endconfiguration %}
-The list of sensors can be any sensor, not just temperature or humidity.
+Although SpaceAPI supports many other sensors, this {% term integration %} only supports temperature or humidity.
## Examples
diff --git a/source/_integrations/squeezebox.markdown b/source/_integrations/squeezebox.markdown
index ce4f11e00f2..02c7061709b 100644
--- a/source/_integrations/squeezebox.markdown
+++ b/source/_integrations/squeezebox.markdown
@@ -1,6 +1,6 @@
---
title: Squeezebox (Lyrion Music Server)
-description: Instructions on how to integrate Squeezebox players and a Lyrion Music Server (LMS) into Home Assistant.
+description: Instructions on how to integrate Squeezebox players and a Lyrion Music Server (LMS) into Home Assistant.
ha_category:
- Media player
ha_release: pre 0.7
@@ -14,6 +14,7 @@ ha_config_flow: true
ha_dhcp: true
ha_platforms:
- binary_sensor
+ - button
- media_player
- sensor
ha_integration_type: integration
@@ -25,15 +26,36 @@ This integration connects to an existing LMS
The Squeezebox music player ecosystem, which can be controlled through this integration, includes hardware audio players from Logitech, including [Squeezebox 3rd Generation, Squeezebox Boom, Squeezebox Receiver, Transporter, Squeezebox2, Squeezebox and SLIMP3](https://lms-community.github.io/players-and-controllers/hardware-comparison/), and many software emulators like [Squeezelite, SqueezeSlave, SoftSqueeze and SqueezePlay](https://sourceforge.net/projects/lmsclients/files/).
+## Supported devices
+
+The integration supports any [Squeezebox compatible hardware or software players](https://lyrion.org/players-and-controllers/) and both Lyrion Music Servers and Logitech Media Servers.
+
+## Prerequisites
+
+1. One or more [Squeezebox compatible hardware or software players](https://lyrion.org/players-and-controllers/).
+2. One or more [Lyrion Music Servers or Logitech Media Servers (LMS)](https://lyrion.org/getting-started) with the Squeezebox players connected to these servers.
+
{% include integrations/config_flow.md %}
{% note %}
-This platform uses the web interface of the Lyrion Music Server (LMS) to send commands. The default port of the web interface is 9000. It is the same port that you use to access the LMS through your web browser.
+A single configuration entry for the integration adds all Squeezebox devices connected to one LMS to Home Assistant.
{% endnote %}
-{% note %}
-The integration now supports Lyrion Music Servers behind an HTTPS reverse proxy. Please note that Lyrion Music Server natively only supports HTTP traffic. Unless you have configured a reverse proxy, do not select the `https` option. If you have configured a reverse proxy, remember to update the port number.
-{% endnote %}
+When the LMS cannot be discovered, it can be manually configured.
+
+{% configuration_basic %}
+Host:
+ description: "The host name or IP address (e.g., \"192.168.1.2\") of your LMS."
+Port:
+ description: "The integration uses the web interface of the Lyrion Music Server (LMS) to send commands. The default port of the web interface is 9000. It is the same port that you use to access the LMS through your web browser."
+Username:
+ description: "If you have selected \"Password Protection\" in your LMS Advanced Security, enter your Username here."
+Password:
+ description: "If you have selected \"Password Protection\" in your LMS Advanced Security, enter your Password here."
+Connect over HTTPS:
+ description: "The integration now supports Lyrion Music Servers behind an HTTPS reverse proxy. Please note that Lyrion Music Server natively only supports HTTP traffic. Unless you have configured a reverse proxy, do not select the \"Connect over HTTPS\" option. If you have configured a reverse proxy, remember to update the port number."
+{% endconfiguration_basic %}
+
The Logitech Transporter which have two digital inputs can be activated using a script. The following example turns on the Transporter and activates the toslink input interface:
@@ -140,7 +162,7 @@ data:
announce_timeout: 60
```
-## Entities
+## Supported functionality
### Switches
@@ -149,30 +171,64 @@ data:
### Binary sensors
-- **Needs restart**: Server Service needs to be restarted (typically, this is needed to apply updates).
-- **Library rescan**: The music library is currently being scanned by LMS (depending on the type of scan, some content may be unavailable).
+The integration provides the following entities.
-### Buttons
+#### Binary sensors
-- **Preset 1 ... Preset 6**: Play media stored in Preset 1 to Preset 6 on Squeezebox.
-- **Brightness Up, Brightness Down**: Adjust the brightness on Logitech Squeezebox players with built-in screen, such as Radio and Boom.
-- **Bass Up, Bass Down**: Adjust the bass on Logitech Squeezebox players, such as Radio and Boom.
-- **Treble Up, Treble Down**: Adjust the treble on Logitech Squeezebox players, such as Radio and Boom.
+- **Needs restart**
+ - **Description**: Server Service needs to be restarted (typically, this is needed to apply updates).
-### Sensors
+- **Library rescan**
+ - **Description**: The music library is currently being scanned by LMS (depending on the type of scan, some content may be unavailable).
-- **Last scan**: Date of the last library scan.
-- **Player count**: Number of players on the service.
-- **Player count off service**: Number of players not on this service.
-- **Total albums**: Total number of albums currently available in the service.
-- **Total artists**: Total number of artists currently available in the service.
-- **Total duration**: Duration of all tracks in service (HHHH:MM:SS).
-- **Total genres**: Total number of genres used in current service.
-- **Total songs**: Total number of music files currently in service.
+#### Buttons
-## Actions
+- **Preset 1 ... Preset 6**
+ - **Description**: Play media stored in Preset 1 to Preset 6 on Squeezebox.
-### Action `call_method`
+- **Brightness up, Brightness down**
+ - **Description**: Adjust the brightness on Logitech Squeezebox players
+ - **Available on**: Logitech hardware players with built-in screen, such as Radio and Boom.
+
+- **Bass up, Bass down**
+ - **Description**: Adjust the bass on Logitech Squeezebox players, such as Radio and Boom.
+ - **Available on**: Logitech hardware players such as Radio, Duet and Boom.
+
+- **Treble up, Treble down**
+ - **Description**: Adjust the treble on Logitech Squeezebox players, such as Radio and Boom.
+ - **Available on**: Logitech hardware players such as Radio, Duet, and Boom.
+
+#### Sensors
+
+- **Last scan**
+ - **Description**: Date of the last library scan.
+
+- **Player count**
+ - **Description**: Number of players on the service.
+
+- **Player count off service**
+ - **Description**: Number of players not on this service.
+
+- **Total albums**
+ - **Description**: Total number of albums currently available on the service.
+
+- **Total artists**
+ - **Description**: Total number of artists currently available on the service.
+
+- **Total duration**
+ - **Description**: Duration of all tracks in service (HHHH:MM:SS).
+
+- **Total genres**
+ - **Description**: Total number of genres used in current service.
+
+- **Total songs**
+ - **Description**: Total number of music files currently in service.
+
+### Actions
+
+The integration provides the following actions.
+
+#### Action `call_method`
Call a custom Squeezebox JSON-RPC API.
@@ -235,10 +291,10 @@ data:
command: mixer
parameters:
- volume
- - "+5"
+ - '+5'
```
-### Action `call_query`
+#### Action `call_query`
Call a custom Squeezebox JSON-RPC API. The result of the query will be stored in the 'query_result' attribute of the player.
@@ -254,3 +310,17 @@ This action can be used to integrate a Squeezebox query into an automation. For
`hass.services.call("squeezebox", "call_query", { "entity_id": "media_player.kitchen", "command": "albums", "parameters": ["0", "20", "search:beatles", "tags:al"] })`
To work with the results:
`result = hass.states.get("media_player.kitchen").attributes['query_result']`
+
+## Data updates
+
+The integration uses {% term polling %} to receive updates from the Lyrion Music Server (LMS). It uses the web interface of the LMS to send commands. The default port of the web interface is 9000. It is the same port that you use to access the LMS through your web browser.
+
+## Known limitations
+
+The LMS API, which is used by this integration, does not currently provide the ability to override or control fade-in & crossfade settings. This means that if you have enabled **Play or Resume fade-in duration** within the player's audio settings, this fade-in will be applied to any announcement played. This could potentially lead to the start of an announcement being missed as it fades in. You should, therefore, consider a short **Play or Resume fade-in duration** or preferably disabling this feature if you make use of announcements.
+
+## Removing the integration
+
+This integration follows standard integration removal. No extra steps are required.
+
+{% include integrations/remove_device_service.md %}
diff --git a/source/_integrations/suez_water.markdown b/source/_integrations/suez_water.markdown
index 6b54ef11f49..b55246ba2ef 100644
--- a/source/_integrations/suez_water.markdown
+++ b/source/_integrations/suez_water.markdown
@@ -61,7 +61,7 @@ Extra attributes of `Water usage yesterday` sensor:
- Last year total consumption
- Current year total consumption
-## Remove integration
+## Removing the integration
This integration can be removed by following these steps:
diff --git a/source/_integrations/switchbot.markdown b/source/_integrations/switchbot.markdown
index 770676b0d18..84ccbf6d074 100644
--- a/source/_integrations/switchbot.markdown
+++ b/source/_integrations/switchbot.markdown
@@ -30,7 +30,11 @@ ha_config_flow: true
ha_integration_type: integration
---
-The SwitchBot integration allows you to control SwitchBot [devices](https://www.switch-bot.com/).
+The SwitchBot integration allows you to control SwitchBot [devices](https://www.switch-bot.com/) such as sensors, locks, shades, lights, plugs, robot vacuums, hubs and etc.
+
+## How you can use this integration
+
+The SwitchBot integration lets you do many things, such as switching devices on and off, changing device modes, monitoring sensor data and energy usage in the Home Assistant dashboards, and controlling device configurations manually or via automations.
## Prerequisites
@@ -47,50 +51,16 @@ Please note, device names configured in the SwitchBot app are not transferred in
Some SwitchBot devices need to be configured within the app before being controlled by Home Assistant, such as calibrating the cover open/close limits or pairing two covers to move together.
-{% include integrations/config_flow.md %}
-## Supported devices
-- [Color Bulb (WoBulb)](https://switch-bot.com/pages/switchbot-color-bulb)
-- [Bot (WoHand)](https://switch-bot.com/pages/switchbot-bot)
-- [Contact Sensor (WoContact)](https://switch-bot.com/pages/switchbot-contact-sensor)
-- [Curtain (WoCurtain)](https://switch-bot.com/pages/switchbot-curtain) (version 1 & 2)
-- [Curtain 3 (WoCtn3)](https://switch-bot.com/pages/switchbot-curtain-3)
-- Humidifier (WoHumi)
-- Light Strip (WoStrip)
-- [Meter](https://switch-bot.com/pages/switchbot-meter) / [Meter Plus](https://switch-bot.com/pages/switchbot-meter-plus) (WoSensorTH) / [Meter Pro](https://www.switch-bot.com/products/switchbot-meter-pro)
-- [Indoor/Outdoor Meter](https://switch-bot.com/pages/switchbot-indoor-outdoor-thermo-hygrometer) (WoIOSensorTH)
-- [Motion Sensor (WoPresence)](https://switch-bot.com/pages/switchbot-motion-sensor)
-- Plug Mini (WoPlug), both the original (model W1901400) and HomeKit-enabled (model W1901401)
-- [Lock (WoLock)](https://switch-bot.com/pages/switchbot-lock)
-- [Lock Pro (WoLockPro)](https://www.switch-bot.com/pages/switchbot-lock-pro)
-- [Blind Tilt (WoBlindTilt)](https://switch-bot.com/pages/switchbot-blind-tilt)
-- [Hub 2 (WoHub2)](https://switch-bot.com/pages/switchbot-hub-2) (currently only supports retrieving sensor data, does not yet support device control)
-- [Relay Switch 1](https://www.switch-bot.com/products/switchbot-relay-switch-1)
-- [Relay Switch 1PM](https://www.switch-bot.com/products/switchbot-relay-switch-1pm)
-- [Water Leak Detector](https://www.switch-bot.com/products/switchbot-water-leak-detector)
-- [Remote (WoRemote)](https://www.switch-bot.com/products/switchbot-remote) (currently only supports battery level monitoring)
-- [Roller Shade](https://www.switch-bot.com/products/switchbot-roller-shade)
-- [HubMini Matter](https://www.switch-bot.com/products/switchbot-hub-mini-matter-enabled)(currently only supports retrieving sensor data, does not yet support device control)
+### Adding encrypted SwitchBot devices
-## SwitchBot Entity
+Some types of the SwitchBot devices are encrypted for improved security. More types and models will be added as encrypted devices in the future.
-There are three attributes available on the SwitchBot entity to give you more information about your device.
+An encrypted SwitchBot device can be set up in Home Assistant in two different ways.
+You can enter the key ID and encryption key yourself, or Home Assistant can import them from your SwitchBot account.
-- `last_run_success`: If `true` if the last action sent to the SwitchBot succeeded. This attribute is useful for error trapping when Bluetooth connectivity is intermittent. If `false`, see home-assistant.log for specific error messages.
-- `Switch mode`: Specifies the mode of the SwitchBot. If `true` the the SwitchBot is in Pull/Retract mode for toggle switches otherwise the bot is in momentary switch mode.
-
-## SwitchBot Options
-
-- `Retry count`: How many times to retry sending commands to your SwitchBot devices.
-
-## SwitchBot Lock / SwitchBot Lock Pro / Relay Switch 1 / Relay Switch 1PM
-
-The integration currently only uses the primary lock state; in dual lock mode, not all things might work properly.
-
-A SwitchBot lock and relay switch can be set up in Home Assistant in two different ways. You can enter the key id and encryption key yourself, or Home Assistant can import them from your SwitchBot account.
-
-### SwitchBot account (recommended)
+#### SwitchBot account (recommended)
Using this option you can provide your SwitchBot account login credentials and Home Assistant will import the appropriate encryption key from your account.
@@ -105,7 +75,7 @@ Password:
This integration doesn't support SSO accounts (Login with Google, etc.) only username and password accounts.
{% endimportant %}
-### Enter the lock encryption key manually
+#### Enter the lock encryption key manually
This option is for those that would rather obtain the encryption key themselves, and/or want to know exactly where and how are their account credentials used.
@@ -116,9 +86,140 @@ Encryption key:
description: Locks' encryption key
{% endconfiguration_basic %}
-For instructions on how to obtain the locks encryption key, see README in [PySwitchbot](https://github.com/Danielhiversen/pySwitchbot#obtaining-locks-encryption-key) project.
+For instructions on how to obtain the encryption key, see README in [PySwitchbot](https://github.com/Danielhiversen/pySwitchbot#obtaining-locks-encryption-key) project.
-## SwitchBot Blind Tilt
+{% include integrations/config_flow.md %}
+
+## Supported devices
+
+### Plugs and switches
+
+- [Bot (WoHand)](https://switch-bot.com/pages/switchbot-bot)
+- [Plug Mini (WoPlug)](https://www.switch-bot.com/products/switchbot-plug-mini)
+- [Plug Mini (HomeKit Enabled)](https://www.switch-bot.com/products/switchbot-plug-mini-homekit-enabled)
+- [Relay Switch 1](https://www.switch-bot.com/products/switchbot-relay-switch-1)
+- [Relay Switch 1PM](https://www.switch-bot.com/products/switchbot-relay-switch-1pm)
+
+### Cover
+
+- [Curtain (WoCurtain)](https://switch-bot.com/pages/switchbot-curtain) (version 1 & 2)
+- [Curtain 3 (WoCtn3)](https://switch-bot.com/pages/switchbot-curtain-3)
+- [Blind Tilt (WoBlindTilt)](https://switch-bot.com/pages/switchbot-blind-tilt)
+- [Roller Shade](https://www.switch-bot.com/products/switchbot-roller-shade)
+
+### Lights
+
+- [Color Bulb (WoBulb)](https://switch-bot.com/pages/switchbot-color-bulb)
+- [Light Strip (WoStrip)](https://www.switchbot.jp/products/switchbot-strip-light)
+
+### Locks
+
+- [Lock (WoLock)](https://switch-bot.com/pages/switchbot-lock)
+- [Lock Pro (WoLockPro)](https://www.switch-bot.com/pages/switchbot-lock-pro)
+
+### Humidifiers
+
+- [Humidifier (WoHumi)](https://www.switchbot.jp/products/switchbot-smart-humidifier)
+
+### Sensors
+
+- [Meter](https://switch-bot.com/pages/switchbot-meter)
+- [Meter Plus (WoSensorTH)](https://switch-bot.com/pages/switchbot-meter-plus)
+- [Indoor/Outdoor Meter (WoIOSensorTH)](https://switch-bot.com/pages/switchbot-indoor-outdoor-thermo-hygrometer)
+- [Meter Pro](https://www.switch-bot.com/products/switchbot-meter-pro)
+- [Meter Pro CO2 Monitor](https://www.switch-bot.com/products/switchbot-meter-pro-co2-monitor)
+- [Contact Sensor (WoContact)](https://switch-bot.com/pages/switchbot-contact-sensor)
+- [Motion Sensor (WoPresence)](https://switch-bot.com/pages/switchbot-motion-sensor)
+- [Water Leak Detector](https://www.switch-bot.com/products/switchbot-water-leak-detector)
+- [Remote (WoRemote)](https://www.switch-bot.com/products/switchbot-remote) (currently only supports battery level monitoring)
+
+### Hubs
+
+- [Hub 2 (WoHub2)](https://switch-bot.com/pages/switchbot-hub-2) (currently only supports retrieving sensor data, does not yet support device control)
+- [Hub Mini Matter Enabled](https://www.switch-bot.com/products/switchbot-hub-mini-matter-enabled)(currently only supports retrieving sensor data, does not yet support device control)
+
+## Supported functionality
+
+### Common
+
+#### Options
+- `Retry count`: How many times to retry sending commands to your SwitchBot devices.
+
+#### Attributes
+- `last_run_success`: Returns `true` if the last action sent to the SwitchBot succeeded. This attribute is useful for error trapping when Bluetooth connectivity is intermittent. If `false`, see home-assistant.log for specific error messages.
+
+### Plugs and switches
+
+Switch entities are added for Bot, Plug Mini, and Relay Switch.
+
+#### Bot
+
+Password protection: You can set a device password in the SwitchBot app to prevent people nearby take control of your device. When a password is set, you need to enter the correct password in order to add it to the integrations.
+
+Features:
+- turn on or off
+- press
+- get battery level
+
+Attributes:
+- `Switch mode`: Specifies the mode of the device. If `true`, the device is in Pull/Retract mode for toggle switches otherwise the device is in momentary switch mode.
+
+#### Plug Mini
+
+Features:
+- turn on or off
+- get power consumption readings
+
+#### Relay Switch 1
+
+This is an encrypted device.
+
+Features:
+- turn on or off
+
+#### Relay Switch 1PM
+
+This is an encrypted device.
+
+Features:
+- turn on or off
+- get power
+- get voltage
+- get current
+
+### Cover
+
+Cover entities are added for Curtain, Curtain 3, Blind Tilt, and Roller Shade.
+
+#### Curtain
+
+Features:
+- open/close/pause
+- set position
+- get position
+- get light level
+- get battery level
+- get calibration state
+
+#### Curtain 3
+
+Features:
+- open/close/pause
+- set position
+- get position
+- get light level
+- get battery level
+- get calibration state
+
+#### Blind Tilt
+
+Features:
+- close up/close down/pause
+- set position
+- get position
+- get light level
+- get battery level
+- get calibration state
The blind tilt is exposed as a cover entity with control of the tilt position only:
@@ -130,16 +231,7 @@ The blind tilt is exposed as a cover entity with control of the tilt position on
The close button will close the blinds to the closest closed position (either 0% or 100%), and defaults to closing down if the blinds are fully open. Because Home Assistant believes 100% is open, the default cards will disable the open button when the tilt is at 100%, but the action will still work and open the blind to 50%.
-## SwitchBot Roller Shade
-
-The Roller Shade is exposed as a cover entity with control of the position only:
-
-| Tilt position | Roller Shade state |
-| ------------- | ------------------ |
-| <=20% | Open |
-| >20% | Close |
-
-### Simple cover template entity
+##### Simple cover template entity
Some integrations may expose your SwitchBot Blind Tilt to other actions which expect that 100% is open and 0% is fully closed. Using a [Cover Template](/integrations/cover.template), a proxy entity can be created which will be open at 100% and closed at 0%. This template entity is limited to closing in one direction.
@@ -177,7 +269,171 @@ cover:
{% endraw %}
-## Error codes and troubleshooting
+#### Roller Shade
+The Roller Shade is exposed as a cover entity with control of the position only:
+
+| position | Roller Shade state |
+| -------- | ------------------ |
+| <=20% | Open |
+| >20% | Close |
+
+Features:
+- open/close/pause
+- set position
+- get position
+- get battery level
+
+### Sensors
+
+Sensor entiteis are added for thermometer and hygrometer devices, motion sensor, contact sensor, leak sensor, and remote button.
+
+#### Meter
+
+Features:
+- get temperature
+- get humidity
+- get battery level
+
+#### Meter Plus
+
+Features:
+- get temperature
+- get humidity
+- get battery level
+
+#### Indoor/Outdoor Meter
+
+Features:
+- get temperature
+- get humidity
+- get battery level
+
+#### Meter Pro
+
+Features:
+- get temperature
+- get humidity
+- get battery level
+
+#### Meter Pro CO2 Monitor
+
+Features:
+- get temperature
+- get humidity
+- get carbon dioxide
+- get battery level
+
+#### Contact Sensor
+
+Features:
+
+- open or closed state
+- motion detection state
+- get battery level
+
+#### Motion Sensor
+
+Features:
+
+- motion detection state
+- get battery level
+#### Water Leak Detector
+This is an encrypted device.
+
+Features:
+- leak or dry state
+- get battery level
+
+#### Remote
+
+Features:
+- get battery level
+
+### Lights
+
+Light entities are added for Color Bulb and LED Strip Light.
+
+#### Color Bulb
+
+Features:
+- turn on or off
+- change brightness
+- change color temperature
+- change color
+
+#### LED Strip Light
+
+Features:
+- turn on or off
+- change brightness
+- change color
+
+### Locks
+
+Note: The integration currently only uses the primary lock state; in dual lock mode, not all things might work properly.
+
+#### Lock
+
+This is an encrypted device.
+
+Features:
+- Lock or unlock
+- open or closed state
+- auto-lock paused state
+- calibration state
+- get battery level
+
+#### Lock Pro
+
+This is an encrypted device.
+
+Features:
+
+- Lock or unlock
+- open or closed state
+- auto-lock paused state
+- calibration state
+- get battery level
+
+### Hubs
+
+Some of the hubs can be served as a bridge while the sensor data can be retrieved via Bluetooth connection. Hub 2 displays temperature and humidity through a sensor cable. Without a digital display, Hub Mini Matter Enabled can also read from a sensor cable.
+
+#### Hub 2
+
+Features:
+
+- get temperature
+- get humidity
+- get light level
+
+#### Hub Mini Matter Enabled
+
+Features:
+
+- get temperature
+- get humidity
+
+## Data updates
+
+SwitchBot devices utilize a [local push](/blog/2016/02/12/classifying-the-internet-of-things/#classifiers) strategy to maintain real-time status updates. When devices detect state changes, they actively push updates to Home Assistant for immediate synchronization. For user-initiated actions through Home Assistant (for example, when turning a device on/off), the integration performs an additional proactive status fetch to ensure instant confirmation of the new state.
+The integration connects locally to the devices without going via the SwitchBot Cloud.
+
+## Known limitations
+
+### Slow connection times
+
+Move the device closer, or replace the Bluetooth adapter with a faster one. See [Improving connection times](/integrations/bluetooth/#improving-connection-times) for more information.
+
+### Device names not synced
+
+Device names configured in the SwitchBot app are not transferred into Home Assistant.
+
+### Lock state
+
+The integration currently only uses the primary lock state; in dual lock mode, not all things might work properly.
+
+## Troubleshooting
The SwitchBot integration will automatically discover devices once the [Bluetooth](/integrations/bluetooth) integration is enabled and functional.
@@ -189,6 +445,22 @@ Possible custom integration conflict, using a different version of PySwitchbot;
Make sure your devices are powered on and are in range.
{% enddetails %}
-### Slow connection times
-Move the device closer, or replace the Bluetooth adapter with a faster one. See [Improving connection times](/integrations/bluetooth/#improving-connection-times) for more information.
+
+## Examples
+
+### Automation ideas
+
+You can create all sort of automations using sensors as triggers and switches, shades, and lights as actions.
+
+- Turn on or turn off lights and switches when motion is detected.
+- Turn on or turn off the Bot to control a fan, AC remote, or circulator when temperature or humidity are too low.
+- Close the curtain when the temperature is too high.
+- Turn off Relay Switch when power consumption is too high.
+- Change the color of LED Strip Lights or Color Bulb or turn on the circulator using Bot or Relay Switch if carbon dioxide is too high.
+
+## Removing the integration
+
+This integration follows standard integration removal. No extra steps are required.
+
+{% include integrations/remove_device_service.md %}
diff --git a/source/_integrations/system_log.markdown b/source/_integrations/system_log.markdown
index 3390312216a..9d6f5ee9c1e 100644
--- a/source/_integrations/system_log.markdown
+++ b/source/_integrations/system_log.markdown
@@ -9,7 +9,7 @@ ha_domain: system_log
ha_integration_type: system
---
-The `system_log` integration stores information about all logged errors and warnings in Home Assistant. To view your logs, navigate to **Settings** -> **System** -> **Logs**. In order to not overload Home Assistant with log data, only the 50 last errors and warnings will be stored. Older entries are automatically discarded from the log. It is possible to change the number of stored log entries using the parameter `max_entries`.
+The `system_log` integration stores information about all logged errors and warnings in Home Assistant. To view your logs, navigate to {% my logs title="**Settings** > **System** > **Logs**" %} (condensed and full raw logs are available). In order to not overload Home Assistant with log data, only the 50 last errors and warnings will be stored inside a condensed log. Older entries are automatically discarded from a condensed log; a full raw log keeps all records. It is possible to change the number of stored log entries in a condensed log using the parameter `max_entries`.
## Configuration
@@ -22,7 +22,7 @@ system_log:
{% configuration %}
max_entries:
- description: Number of entries to store (older entries are discarded).
+ description: Number of entries to store in a condensed log (older entries are discarded).
required: false
type: integer
default: 50
diff --git a/source/_integrations/tankerkoenig.markdown b/source/_integrations/tankerkoenig.markdown
index 8c3a7c2709e..aa56b2e7f89 100755
--- a/source/_integrations/tankerkoenig.markdown
+++ b/source/_integrations/tankerkoenig.markdown
@@ -16,14 +16,90 @@ ha_platforms:
- diagnostics
- sensor
ha_config_flow: true
+related:
+ - docs: /common-tasks/general/#defining-a-custom-polling-interval
+ title: Defining a custom polling interval
ha_integration_type: integration
---
-The `tankerkoenig` platform allows you to monitor the fuel prices with [tankerkoenig.de](https://www.tankerkoenig.de/) from within Home Assistant and setup automations based on the information.
-To use this sensor you need an API key from tankerkoenig. Go to [tankerkoenig API](https://creativecommons.tankerkoenig.de) and click on API-KEY in the top right, fill out the form and request a key. The API is free, but requests should be limited to less than once every 5 minutes.
+The `tankerkoenig` integration allows you to monitor the fuel prices with [tankerkoenig.de](https://www.tankerkoenig.de/) from within Home Assistant and setup automations based on the information.
-{% include integrations/config_flow.md %}
+## Prerequisites
+
+To use this integration, you need an API key from tankerkoenig.
+1. Go to [tankerkoenig API](https://creativecommons.tankerkoenig.de) and in the top right, select **API-KEY**.
+2. Fill out the form and request a free API key.
{% important %}
The Terms & Conditions of tankerkoenig.de specify that the API is not meant for massive data fetching, but it does not explicitly mention a limit. Having a maximum of 10 monitored fuel stations is recommended, and a warning will be issued otherwise.
+If you consider to [define a custom polling interval](/common-tasks/general/#defining-a-custom-polling-interval), then please keep in mind that requests should be limited to less than once every 5 minutes.
{% endimportant %}
+
+{% include integrations/config_flow.md %}
+
+{% configuration_basic %}
+Region name:
+ description: "The name of the particular region to be added."
+API Key:
+ description: "The tankerkoenig API-KEY to be used (_see [Prerequisites](#prerequisites)_)."
+Location:
+ description: "Pick the location where to search for gas stations (_defaults to the location of your Home which was et during [onboarding](/getting-started/onboarding)_)"
+Search radius:
+ description: "The radius in kilometers to search for gas stations around the selected location (_default: 2km_)"
+Stations:
+ description: "Select the gas stations you want to add to Home Assistant."
+{% endconfiguration_basic %}
+
+{% include integrations/option_flow.md %}
+
+{% configuration_basic %}
+Stations:
+ description: "Select the gas stations you want to add to Home Assistant."
+Show stations on map:
+ description: "Weather to show the station sensors on the map or not."
+{% endconfiguration_basic %}
+
+## Data updates
+
+This integration fetches the data every 30 minutes from the [tankerkoenig API](https://creativecommons.tankerkoenig.de).
+
+## Provides entities
+
+This integrations provides a set of {% term "Binary sensor" %} and {% term Sensor %} entities for each selected gas station.
+
+| Sensors | Description |
+| --- | --- |
+| Status | Indicates if the gas station is opened or closed at the moment. |
+| Diesel | The current price of Diesel fuel. |
+| Super | The current price of Super fuel. |
+| Super E10 | The current price of Super E10 fuel. |
+
+{% note %}
+As the data of [tankerkoenig.de](https://www.tankerkoenig.de/) is based on data from the German market transparency office for fuels (_[Markttransparenzstelle für Kraftstoffe](https://www.bundeskartellamt.de/DE/Aufgaben/MarkttransparenzstelleFuerKraftstoffe/MTS-K_Infotext/mts-k_node.html) MTS-K_), only the three base fuel types `Diesel`, `Super`, and `Super E10` are available.
+{% endnote %}
+
+## Usage examples
+
+### Show current fuel price only when station is opened
+
+The example below uses the common [sensor card](/dashboards/sensor/) in the {% term frontend %} and adds a visibility condition.
+
+```yaml
+graph: line
+type: sensor
+entity: sensor.my_favorite_gas_station_super
+detail: 1
+name: Favorite Gas Station
+visibility:
+ - condition: state
+ entity: binary_sensor.my_favorite_gas_station_status
+ state: "on"
+```
+
+## Troubleshooting
+
+Before reporting an issue, enable [debug logging](/docs/configuration/troubleshooting/#debug-logs-and-diagnostics) and restart the integration. As soon as the issue re-occurs, stop the debug logging again (_download of debug log file will start automatically_). Further, _if still possible_, download the {% term diagnostics %} data. If you have collected the debug log and the diagnostics data, include them in the issue report.
+
+## Remove the integration
+
+{% include integrations/remove_device_service.md %}
diff --git a/source/_integrations/template.markdown b/source/_integrations/template.markdown
index cf2b4a36637..8151c56869f 100644
--- a/source/_integrations/template.markdown
+++ b/source/_integrations/template.markdown
@@ -16,6 +16,7 @@ ha_release: 0.12
ha_iot_class: Local Push
ha_quality_scale: internal
ha_codeowners:
+ - '@Petro31'
- '@PhracturedBlue'
- '@home-assistant/core'
ha_domain: template
@@ -52,12 +53,14 @@ For other types, please see the specific pages:
- [Alarm control panel](/integrations/alarm_control_panel.template/)
- [Cover](/integrations/cover.template/)
- [Fan](/integrations/fan.template/)
-- [Light](/integrations/light.template/)
- [Lock](/integrations/lock.template/)
-- [Switch](/integrations/switch.template/)
- [Vacuum](/integrations/vacuum.template/)
- [Weather](/integrations/weather.template/)
+For Legacy types, please see the specific pages:
+- [Light](/integrations/light.template/)
+- [Switch](/integrations/switch.template/)
+
{% include integrations/config_flow.md %}
{% important %}
@@ -76,7 +79,7 @@ Entities (sensors, binary sensors, buttons, images, numbers, and selections) are
_For old sensor/binary sensor configuration format, [see below](#legacy-binary-sensor-configuration-format)._
-### State-based template binary sensors, buttons, covers, images, numbers, selects, sensors, and weathers
+### State-based template binary sensors, buttons, images, lights, numbers, selects, sensors, switches, and weathers
Template entities will by default update as soon as any of the referenced data in the template updates.
@@ -359,6 +362,125 @@ image:
required: false
type: boolean
default: true
+light:
+ description: List of your lights.
+ required: true
+ type: map
+ keys:
+ state:
+ description: Defines a template to set the state of the light. If not defined, the switch will optimistically assume all commands are successful.
+ required: false
+ type: template
+ default: optimistic
+ level:
+ description: Defines a template to get the brightness of the light.
+ required: false
+ type: template
+ default: optimistic
+ temperature:
+ description: Defines a template to get the color temperature of the light.
+ required: false
+ type: template
+ default: optimistic
+ hs:
+ description: Defines a template to get the HS color of the light. Must render a tuple (hue, saturation).
+ required: false
+ type: template
+ default: optimistic
+ rgb:
+ description: Defines a template to get the RGB color of the light. Must render a tuple or a list (red, green, blue).
+ required: false
+ type: template
+ default: optimistic
+ rgbw:
+ description: Defines a template to get the RGBW color of the light. Must render a tuple or a list (red, green, blue, white).
+ required: false
+ type: template
+ default: optimistic
+ rgbww:
+ description: Defines a template to get the RGBWW color of the light. Must render a tuple or a list (red, green, blue, cold white, warm white).
+ required: false
+ type: template
+ default: optimistic
+ supports_transition:
+ description: Defines a template to get if the light supports transition. Should return a boolean value (True/False). If this value is `True`, the transition parameter in a `turn on` or `turn off` call will be passed as a named parameter `transition` in either of the scripts.
+ required: false
+ type: template
+ default: false
+ effect_list:
+ description: Defines a template to get the list of supported effects. Must render a list.
+ required: inclusive
+ type: template
+ default: optimistic
+ effect:
+ description: Defines a template to get the effect of the light.
+ required: inclusive
+ type: template
+ default: optimistic
+ min_mireds:
+ description: Defines a template to get the minimum mired value of the light.
+ required: false
+ type: template
+ default: optimistic
+ max_mireds:
+ description: Defines a template to get the maximum mired value of the light.
+ required: false
+ type: template
+ default: optimistic
+ turn_on:
+ description: Defines an action to run when the light is turned on. May receive the variables `brightness` and/or `transition`.
+ required: true
+ type: action
+ turn_off:
+ description: Defines an action to run when the light is turned off. May receive the variable `transition`.
+ required: true
+ type: action
+ set_level:
+ description: Defines an action to run when the light is given a brightness command. The script will only be called if the `turn_on` call only ha brightness, and optionally transition. Receives variables `brightness` and, optionally, `transition`.
+ required: false
+ type: action
+ set_temperature:
+ description: Defines an action to run when the light is given a color temperature command. Receives variable `color_temp`. May also receive variables `brightness` and/or `transition`.
+ required: false
+ type: action
+ set_hs:
+ description: "Defines an action to run when the light is given a hs color command. Available variables: `hs` as a tuple, `h` and `s`"
+ required: false
+ type: action
+ set_rgb:
+ description: "Defines an action to run when the light is given an RGB color command. Available variables: `rgb` as a tuple, `r`, `g` and `b`."
+ required: false
+ type: action
+ set_rgbw:
+ description: "Defines an action to run when the light is given an RGBW color command. Available variables: `rgbw` as a tuple, `rgb` as a tuple, `r`, `g`, `b` and `w`."
+ required: false
+ type: action
+ set_rgbww:
+ description: "Defines an action to run when the light is given an RGBWW color command. Available variables: `rgbww` as a tuple, `rgb` as a tuple, `r`, `g` `b`, `cw` and `ww`."
+ required: false
+ type: action
+ set_effect:
+ description: Defines an action to run when the light is given an effect command. Receives the variable `effect`. May also receive the variables `brightness`, and/or `transition`.
+ required: inclusive
+ type: action
+switch:
+ description: List of switches
+ required: true
+ type: map
+ keys:
+ state:
+ description: Defines a template to set the state of the switch. If not defined, the switch will optimistically assume all commands are successful.
+ required: false
+ type: template
+ default: optimistic
+ turn_on:
+ description: Defines an action or list of actions to run when the switch is turned on.
+ required: true
+ type: action
+ turn_off:
+ description: Defines an action or list of actions to run when the switch is turned off.
+ required: true
+ type: action
weather:
description: List of weather entities
required: true
@@ -444,7 +566,7 @@ weather:
description: Unit for precipitation output. Valid options are km, mi, ft, m, cm, mm, in, yd.
required: false
type: string
-"[all sensor, binary sensor, button, cover, image, number, select, weather entities]":
+"[all sensor, binary sensor, button, image, light, number, select, switch, weather entities]":
description: Fields that can be used above for sensors, binary sensors, buttons, numbers, and selects.
required: false
type: map
@@ -502,7 +624,7 @@ This video tutorial explains how to set up a trigger based template that makes u
State-based and trigger-based template entities have the special template variable `this` available in their templates and actions. The `this` variable is the current [state object](/docs/configuration/state_object) of the entity and aids [self-referencing](#self-referencing) of an entity's state and attributes in templates and actions. Trigger-based entities also provide [the trigger data](/docs/automation/templating/).
{% note %}
-Self-referencing using `this` provides the state and attributes for the entity before rendering the templates to calculate a new state. To access the new state, use the `value` or `value_json` variable.
+Self-referencing using `this` provides the state and attributes for the entity before rendering the templates to calculate a new state. In other words, it contains the previous state.
{% endnote %}
### Optimistic mode
diff --git a/source/_integrations/tesla_fleet.markdown b/source/_integrations/tesla_fleet.markdown
index 8a03721ab07..b266d4d4085 100644
--- a/source/_integrations/tesla_fleet.markdown
+++ b/source/_integrations/tesla_fleet.markdown
@@ -50,7 +50,7 @@ You must have:
- [AWS S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/WebsiteHosting.html)
- [Cloudflare Pages](https://pages.cloudflare.com/)
- [Firebase Hosting](https://firebase.google.com/docs/hosting)
-
+
{% include integrations/config_flow.md %}
@@ -102,7 +102,7 @@ The following steps involve sensitive credentials. Never share your `Client Secr
1. Get your OAuth details by going to your [Developer dashboard](https://developer.tesla.com/en_US/dashboard). Under the app you set up for Home Assistant integration select **View Details**. Then, select the **Credentials & APIs** tab. Note the `Client ID` and `Client Secret` strings.
2. Run this CURL request, replacing the variable values as specified in the notes below:
-
+
```shell
CLIENT_ID=REPLACE_THIS_WITH_YOUR_CLIENT_ID
CLIENT_SECRET=REPLACE_THIS_WITH_YOUR_CLIENT_SECRET
@@ -116,20 +116,20 @@ The following steps involve sensitive credentials. Never share your `Client Secr
--data-urlencode "audience=$AUDIENCE" \
'https://fleet-auth.prd.vn.cloud.tesla.com/oauth2/v3/token'
```
-
+
Notes about the variable values:
- For the `CLIENT_SECRET` value, depending on your terminal environment, you may need to escape any `!` and `$` characters in the string, or the curl request will fail.
- Replace the `AUDIENCE` value with your region-specific URL. The URL in the example is for users in North America and Asia-Pacific (excluding China). Refer to the [Base URLs documentation](https://developer.tesla.com/docs/fleet-api/getting-started/base-urls) for the URLs for other regions.
- For the `scope=...` line, replace the values with a space-delimited list of [the official scope keywords](https://developer.tesla.com/docs/fleet-api/authentication/overview#scopes), as you defined them earlier in your app.
3. The CURL request should return a response that looks something like:
-
+
```json
{"access_token":"ACCESS_TOKEN","expires_in":28800,"token_type":"Bearer"}
```
-
+
This is your access token. Copy everything between the double-quotes to be used next.
4. Run this CURL request, replacing the variable values as specified in the notes below:
-
+
```shell
curl --location 'https://fleet-api.prd.na.vn.cloud.tesla.com/api/1/partner_accounts' \
--header 'Content-Type: application/json' \
@@ -138,7 +138,7 @@ The following steps involve sensitive credentials. Never share your `Client Secr
"domain": "my.domain.com"
}'
```
-
+
- If you had to change the `AUDIENCE` URL for your region in step 2, update the main domain of the `--location` arg.
- Replace `ACCESS_TOKEN` with the access token that you copied in the previous step.
- In the `domain:` line, enter your domain without the leading `https://` and the trailing `/`.
@@ -158,6 +158,14 @@ The following steps involve sensitive credentials. Never share your `Client Secr
{% enddetails %}
+## Vehicle data polling interval
+
+The integration is configured to {% term polling poll %} each vehicle every 10 minutes while it's awake.
+This is long enough that a single vehicle can be polled 24/7 without exceeding the USD$10 credit Tesla provides.
+It is expected that most vehicles are asleep over 50% of the day, so the defaults should also suit users with multiple vehicles or that want to run automated commands.
+
+If the default polling interval does not suit your needs, you can [define a custom polling interval](https://www.home-assistant.io/common-tasks/general/#defining-a-custom-polling-interval).
+
## Scopes
When connecting your Tesla account to Home Assistant, you **must** select at least one of the `Vehicle Information` or `Energy Product Information` scopes. It is recommended you select all scopes for full functionality. The `Vehicle Location` scope was added in Home Assistant 2024.1, so any authorizations performed on previous releases that want this scope will need to be [modified](https://accounts.tesla.com/en_au/account-settings/security?tab=tpty-apps).
@@ -337,14 +345,6 @@ These are the entities available in the Tesla Fleet integration. Not all entitie
Constant API polling will prevent most Model S and Model X vehicles manufactured before 2021 from sleeping, so the integration will stop polling these vehicles for 15 minutes, after 15 minutes of inactivity. You can call the `homeassistant.update_entity` service to force polling the API, which will reset the timer.
-## Energy dashboard
-
-The Tesla Fleet API only provides power data for Powerwall and Solar products. This means they cannot be used on the energy dashboard directly.
-
-Energy flows can be calculated from `Battery power` and `Grid power` sensors using a [Template Sensor](/integrations/template/) to separate the positive and negative values into positive import and export values.
-The `Load power`, `Solar power`, and the templated sensors can then use a [Riemann Sum](/integrations/integration/) to convert their instant power (kW) values into cumulative energy values (kWh),
-which then can be used within the energy dashboard.
-
## Troubleshooting
- **General troubleshooting steps**
diff --git a/source/_integrations/todo.markdown b/source/_integrations/todo.markdown
index 445dbc8c54e..94db6a07e60 100644
--- a/source/_integrations/todo.markdown
+++ b/source/_integrations/todo.markdown
@@ -70,12 +70,25 @@ This is a full example that returns all to-do items that have not been completed
```yaml
action: todo.get_items
target:
- entity_id: todo.personal_tasks
+ entity_id: todo.vacation_preparation
data:
status:
- needs_action
```
+This is an example response to the get items action:
+
+```yaml
+todo.vacation_preparation:
+ items:
+ - summary: Water plants
+ uid: 01244b28-e604-11ee-a0a4-e45f0197c057
+ status: needs_action
+ - summary: turn down heating
+ uid: ae993df4-e604-11ee-a0a4-e45f0197c057
+ status: needs_action
+```
+
### Action `todo.add_item`
Add a new to-do item. A to-do list `target` is selected with a [Target Selector](/docs/blueprint/selectors/#target-selector) and the `data` payload supports the following fields:
@@ -105,14 +118,14 @@ data:
Update a to-do item. A to-do list `target` is selected with a [Target Selector](/docs/blueprint/selectors/#target-selector) and the `data` payload supports the following fields:
-| Data attribute | Optional | Description | Example |
-| -------------- | -------- | ----------------------------------------------------------------- | ------------------------------------------------------------ |
-| `item` | no | The name/summary of the to-do item to update. | Submit income tax return |
-| `rename` | yes | The new name of the to-do item. | Something else |
-| `status` | yes | The overall status of the to-do item. | `needs_action` or `completed` |
-| `due_date` | yes | The date the to-do item is expected to be completed. | 2024-04-10 |
-| `due_datetime` | yes | The date and time the to-do item is expected to be completed. | 2024-04-10 23:00:00 |
-| `description` | yes | A more complete description than the one provided by the summary. | Collect all necessary documents and submit the final return. |
+| Data attribute | Optional | Description | Example |
+| -------------- | -------- | ---------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------- |
+| `item` | no | The name/summary of the to-do item. In some cases, for example if you have items with the same name, it can make sense to use the UID instead of the name. To find the UID of an item, perform a `get_items` action on the to-do list. | `Submit income tax return` or `01244b28-e604-11ee-a0a4-e45f0197c057`|
+| `rename` | yes | The new name of the to-do item. | Something else |
+| `status` | yes | The overall status of the to-do item. | `needs_action` or `completed` |
+| `due_date` | yes | The date the to-do item is expected to be completed. | 2024-04-10 |
+| `due_datetime` | yes | The date and time the to-do item is expected to be completed. | 2024-04-10 23:00:00 |
+| `description` | yes | A more complete description than the one provided by the summary. | Collect all necessary documents and submit the final return. |
At least one of `rename` or `status` is required. Only one of `due_date` or `due_datetime` may be specified. This is a full example that updates the status and the name of a to-do item.
@@ -130,9 +143,9 @@ data:
Removing a to-do item. A to-do list `target` is selected with a [Target Selector](/docs/blueprint/selectors/#target-selector), and the `data` payload supports the following fields:
-| Data attribute | Optional | Description | Example |
-| -------------- | -------- | --------------------------- | ------------------------ |
-| `item` | no | The name of the to-do item. | Submit income tax return |
+| Data attribute | Optional | Description | Example |
+| -------------- | -------- | ---------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------- |
+| `item` | no |The name/summary of the to-do item. In some cases, for example if you have items with the same name, it can make sense to use the UID instead of the name. To find the UID of an item, perform a `get_items` action on the to-do list. | `Submit income tax return` or `01244b28-e604-11ee-a0a4-e45f0197c057`|
This is a full example that deletes a to-do Item with the specified name.
diff --git a/source/_integrations/tplink.markdown b/source/_integrations/tplink.markdown
index bddd5efe8f8..eb5fb99b6f6 100644
--- a/source/_integrations/tplink.markdown
+++ b/source/_integrations/tplink.markdown
@@ -112,7 +112,7 @@ Alternatively, you can factory reset and then prevent the device from accessing
- **Wall Switches**: S210, S220, S500D, S505, S505D
- **Bulbs**: L510B, L510E, L530E, L630
- **Light Strips**: L900-10, L900-5, L920-5, L930-5
-- **Cameras**: C100, C210, C220, C225, C325WB, C520WS, C720, TC65, TC70
+- **Cameras**: C100, C120, C210, C220, C225, C325WB, C520WS, C720, TC65, TC70
- **Doorbells and chimes**: D100C, D130, D230
- **Vacuums**: RV20 Max Plus, RV30 Max
- **Hubs**: H100, H200
diff --git a/source/_integrations/ubus.markdown b/source/_integrations/ubus.markdown
index 4aa57c91a8e..0afef1017d1 100644
--- a/source/_integrations/ubus.markdown
+++ b/source/_integrations/ubus.markdown
@@ -57,7 +57,7 @@ Then, create an ACL file at `/usr/share/rpcd/acl.d/hass.json` for the user `hass
}
```
-Restart the services. This ACL file needs to be recreated after updating/upgrading your OpenWrt firmware.
+Restart the services. Add the file path to /etc/sysupgrade.conf so that it remains after updating/upgrading your OpenWrt firmware.
```bash
# /etc/init.d/rpcd restart && /etc/init.d/uhttpd restart
diff --git a/source/_integrations/watergate.markdown b/source/_integrations/watergate.markdown
index 280d23870d5..4f5d14e052f 100644
--- a/source/_integrations/watergate.markdown
+++ b/source/_integrations/watergate.markdown
@@ -12,8 +12,8 @@ ha_codeowners:
- '@adam-the-hero'
ha_domain: watergate
ha_platforms:
- - sensor
- event
+ - sensor
- valve
ha_quality_scale: bronze
ha_integration_type: integration
diff --git a/source/_integrations/webdav.markdown b/source/_integrations/webdav.markdown
index 039685e45d4..2cbe89026cf 100644
--- a/source/_integrations/webdav.markdown
+++ b/source/_integrations/webdav.markdown
@@ -41,6 +41,10 @@ Verify SSL:
- [Owncloud](https://owncloud.com/): `https:///remote.php/webdav/`
- [Hetzner Storage Box](https://www.hetzner.com/storage/storage-box): `https://.your-storagebox.de`
- [Strato HiDrive](https://www.strato.de/): `https://webdav.hidrive.strato.com`
+- [Seafile](https://manual.seafile.com/13.0/extension/webdav/): `https:///seafdav` if you are running your Seafile behind a reverse proxy, make sure to add the relevant port, by default WebDAV serves at port 8080.
+- [Beeline Cloud](https://cloudbeeline.ru/): `https://webdav.cloudbeeline.ru` – free 10GB (forever), to enable WebDAV – navigate to Profile → Security and toggle the setting (screenshots and [detailed explanation here](https://t.me/another_mvp/49)).
+- [Mail.ru Cloud](https://cloud.mail.ru/): `https://webdav.cloud.mail.ru/` – free 8GB (forever).
+
## Removing the integration
@@ -58,5 +62,4 @@ If you experience issues with the backup, please check the server configuration
Following WebDAV services are known to have issues with Home Assistant backups:
- Yandex Disk is not supported, as the speed is artificially slowed down when using WebDAV.
-- mail.ru Cloud is not supported due to the lack of support for WebDAV properties.
-- pCloud WebDAV implementation proved to be unstable and is not recommended for backups.
\ No newline at end of file
+- pCloud WebDAV implementation proved to be unstable and is not recommended for backups.
diff --git a/source/_integrations/weheat.markdown b/source/_integrations/weheat.markdown
index 1305663b723..387bfbaec1a 100644
--- a/source/_integrations/weheat.markdown
+++ b/source/_integrations/weheat.markdown
@@ -83,7 +83,7 @@ There is currently no way to control the heat pump via this integration.
In case no devices are discovered, make sure that you can log in to the [Weheat portal](https://portal.weheat.nl) and the correct heat pumps are visible there. If they are available there, contact Weheat support.
-## Remove integration
+## Removing the integration
This integration follows standard integration removal, no extra steps are required.
diff --git a/source/_integrations/whirlpool.markdown b/source/_integrations/whirlpool.markdown
index 43649191833..c73ce2f227e 100644
--- a/source/_integrations/whirlpool.markdown
+++ b/source/_integrations/whirlpool.markdown
@@ -3,7 +3,7 @@ title: Whirlpool Appliances
description: Instructions on how to integrate Whirlpool appliances with Home Assistant.
ha_category:
- Climate
- - Sensor
+ - Hub
ha_release: '2022.10'
ha_iot_class: Cloud Push
ha_config_flow: true
@@ -18,42 +18,45 @@ ha_platforms:
ha_integration_type: hub
---
-The **Whirlpool Appliances** {% term integration %} integrates Whirlpool 6th Sense Live, and Whirlpool/Maytag Washer and Dryer appliances into Home Assistant.
+The **Whirlpool Appliances** {% term integration %} allows you to connect Whirlpool and Maytag appliances to Home Assistant.
-There is currently support for the following device types within Home Assistant:
+## Supported devices
-- [Supported hardware](#supported-hardware)
-- [Sensor](#sensor)
-- [Climate](#climate)
+The following appliances are confirmed to be working, but other models may also work.
-## Supported hardware
+Air conditioners:
-The following appliances are confirmed to be working, but other models that use the 6th Sense Live application may also work:
-
-Climate:
-
-- Whirlpool SPIW309A2WF / SPIW312A2WF
+- Whirlpool SPIW309A2WF
+- Whirlpool SPIW312A2WF
- Whirlpool SPIW409A2WF
-Washer:
+Washers:
- Whirlpool WTW6120HW2
- Whirlpool WTW8127LW1
- Maytag MHW8630HW0
-Dryer:
+Dryers:
- Whirlpool WGD8127LW3
+## Prerequisites
+
+- Valid Whirlpool/Maytag account credentials.
+- Registered appliances in the official Whirlpool/Maytag app.
+
{% include integrations/config_flow.md %}
-## Sensor
+## Supported functionality
-The `whirlpool` sensor platform integrates Whirlpool Washer and Dryer systems into Home Assistant, allowing views of the machine state, time remaining and the "wash & go" tank fill status as sensors for each device.
+This {% term integration %} maps appliances to entities in Home Assistant. A single appliance may be represented by one or more entities.
-## Climate
+- [Climate](#climate)
+- [Sensor](#sensor)
-The `whirlpool` climate platform integrates Whirlpool air conditioning systems into Home Assistant, allowing control of the appliance trough the user interface. The current inside temperature is also displayed on the thermostat card.
+### Climate
+
+The `whirlpool` climate platform integrates Whirlpool air conditioning systems into Home Assistant, allowing control of the appliance through the user interface. The current inside temperature is also displayed on the thermostat card.
The following actions are also available:
@@ -62,3 +65,13 @@ The following actions are also available:
- [**turn on/off**](/integrations/climate#action-climateturn_on)
- [**fan mode**](/integrations/climate#action-climateset_fan_mode) (`low`, `medium`, `high`)
- [**swing mode**](/integrations/climate#action-climateset_swing_mode) (`off`, `horizontal`)
+
+### Sensor
+
+The `whirlpool` sensor platform integrates Whirlpool Washer and Dryer systems into Home Assistant, allowing views of the machine state, time remaining, and the "wash & go" tank fill status as sensors for each device.
+
+## Removing the integration
+
+This integration follows standard integration removal. No extra steps are required.
+
+{% include integrations/remove_device_service.md %}
diff --git a/source/_integrations/yolink.markdown b/source/_integrations/yolink.markdown
index 96ea4671c3e..9d3888052c6 100644
--- a/source/_integrations/yolink.markdown
+++ b/source/_integrations/yolink.markdown
@@ -44,21 +44,21 @@ If you want to use separate credentials, please contact to
The integration is tested and verified for the following devices from YoLink:
-- YS1603-UC (Hub)
- YS1604-UC (SpeakerHub)
- YS3604-UC (YoLink KeyFob)
-- YS3605-UC (YoLink On/OffFob)
-- YS3606-UC (YoLink DimmerFob)
-- YS3607-UC (YoLink SirenFob)
+- YS3614-UC (Mini FlexFob)
- YS4002-UC (YoLink Thermostat)
- YS4003-UC (YoLink Thermostat Heatpump)
-- YS4004-UC (YoLink Thermostat 2)
+- YS4004-UC (YoLink Thermostat 2)
- YS4906-UC + YS7706-UC (Garage Door Kit 1)
- YS4908-UC + YS7706-UC (Garage Door Kit 2 (Finger))
- YS4909-UC (Water Valve Controller)
- YS5001-UC (X3 Water Valve Controller)
- YS5002-UC (YoLink Motorized Ball Valve)
- YS5003-UC (Water Valve Controller 2)
+- YS5006-UC (FlowSmart Control)
+- YS5007-UC (FlowSmart Meter)
+- YS5008-UC (FlowSmart All-in-One)
- YS5705-UC (In-Wall Switch)
- YS5706-UC (YoLink Relay)
- YS5707-UC (Dimmer Switch)
@@ -77,6 +77,9 @@ The integration is tested and verified for the following devices from YoLink:
- YS7201-UC (Vibration Sensor)
- YS7606-UC (YoLink Smart Lock M1)
- YS7607-UC (YoLink Smart Lock M2)
+- YS7616-UC (YoLink Smart Lock)
+- YS7617-UC (YoLink Smart Lock)
+- YS7618-UC (YoLink Smart Lock)
- YS7704-UC (Door Sensor)
- YS7706-UC (Garage Door Sensor)
- YS7707-UC (Contact Sensor)
@@ -84,22 +87,21 @@ The integration is tested and verified for the following devices from YoLink:
- YS7805-UC (Outdoor Motion Sensor)
- YS7903-UC (Water Leak Sensor)
- YS7904-UC (Water Leak Sensor 2)
+- YS7905-UC (WaterDepthSensor)
- YS7906-UC (Water Leak Sensor 4)
- YS7916-UC (Water Leak Sensor 4 MoveAlert)
-- YS7905-UC (WaterDepthSensor)
- YS7A01-UC (Smart Smoke/CO Alarm)
- YS8003-UC (Temperature Humidity Sensor)
- YS8004-UC (Weatherproof Temperature Sensor)
- YS8005-UC (Weatherproof Temperature & Humidity Sensor)
- YS8006-UC (X3 Temperature & Humidity Sensor)
- YS8007-UC (Thermometer Hygrometer)
+- YS8008-UC (Floating Thermometer)
+- YS8013-UC (Thermometer Hygrometer)
- YS8014-UC (X3 Outdoor Temperature Sensor)
- YS8015-UC (X3 Outdoor Temperature & Humidity Sensor)
-- YS5006-UC (FlowSmart Control)
-- YS5007-UC (FlowSmart Meter)
-- YS5008-UC (FlowSmart All-in-One)
- YS8017-UC (Thermometer)
-- YS8008-UC (Float Thermometer)
+- YS8023-UC (Hygrometer Thermometer)
## Actions
@@ -107,16 +109,16 @@ The integration is tested and verified for the following devices from YoLink:
With this action, you can convert text to speech for playback on SpeakerHub.
-Data attribute | Optional | Description
--|-|-
-`target_device` | no| SpeakerHub device ID for audio playback.
-`message` | no| Text for speech conversion.
-`tone` | yes| Tone before playing audio.
-`volume` | yes| Override the speaker volume during playback of this message only.
-`repeat` | yes| The number of times the text will be repeated.
+| Data attribute | Optional | Description |
+| --------------- | -------- | ----------------------------------------------------------------- |
+| `target_device` | no | SpeakerHub device ID for audio playback. |
+| `message` | no | Text for speech conversion. |
+| `tone` | yes | Tone before playing audio. |
+| `volume` | yes | Override the speaker volume during playback of this message only. |
+| `repeat` | yes | The number of times the text will be repeated. |
## Community notes
-1. This integration requires an MQTT connection to be established via port 8003. If you are using a firewall, please allow communication via port 8003 in the firewall settings.
+1. This integration requires an MQTT connection to be established via port 8003. If you are using a firewall, please allow communication via port 8003 in the firewall settings.
2. If you use a network proxy, such as a VPN, the integration may not be able to update the device status. Turn off the VPN.
3. Please do not use UAC as credentials for the Home Assistant YoLink integration.
diff --git a/source/_posts/2022-07-12-partner-program.markdown b/source/_posts/2022-07-12-partner-program.markdown
index cff55d9e65d..82803e0096b 100644
--- a/source/_posts/2022-07-12-partner-program.markdown
+++ b/source/_posts/2022-07-12-partner-program.markdown
@@ -8,7 +8,8 @@ author: Paulus Schoutsen
author_twitter: balloob
comments: true
categories:
-- Announcements
+ - Announcements
+ - Works-with-Home-Assistant
og_image: /images/blog/2022-07-12-partner-program/partner_program_og.jpg
---
diff --git a/source/_posts/2022-07-27-leviton-partner.markdown b/source/_posts/2022-07-27-leviton-partner.markdown
index 18f3c83f3e4..4bf7407e51e 100644
--- a/source/_posts/2022-07-27-leviton-partner.markdown
+++ b/source/_posts/2022-07-27-leviton-partner.markdown
@@ -7,8 +7,7 @@ date_formatted: "July 27, 2022"
author: Zack Barett
author_twitter: zbarettHA
comments: true
-categories:
-- Announcements
+categories: Works-with-Home-Assistant
og_image: /images/blog/2022-07-27-leviton-partner/social-image.jpg
---
diff --git a/source/_posts/2022-10-13-third-reality-partner.markdown b/source/_posts/2022-10-13-third-reality-partner.markdown
index 240868d8568..77d6153a977 100644
--- a/source/_posts/2022-10-13-third-reality-partner.markdown
+++ b/source/_posts/2022-10-13-third-reality-partner.markdown
@@ -7,8 +7,7 @@ date_formatted: "October 13, 2022"
author: Paulus Schoutsen
author_twitter: balloob
comments: true
-categories:
-- Announcements
+categories: Works-with-Home-Assistant
og_image: /images/blog/2022-10-13-third-reality-partner/social.png
---
diff --git a/source/_posts/2022-10-25-ultraloq-partner.markdown b/source/_posts/2022-10-25-ultraloq-partner.markdown
index 13774b28d93..aeea2467862 100644
--- a/source/_posts/2022-10-25-ultraloq-partner.markdown
+++ b/source/_posts/2022-10-25-ultraloq-partner.markdown
@@ -7,8 +7,7 @@ date_formatted: "October 25, 2022"
author: Paulus Schoutsen
author_twitter: balloob
comments: true
-categories:
-- Announcements
+categories: Works-with-Home-Assistant
og_image: /images/blog/2022-10-25-ultraloq-partner/social.png
---
diff --git a/source/_posts/2022-10-27-jasco-partner.markdown b/source/_posts/2022-10-27-jasco-partner.markdown
index c5ded333ffe..28569755525 100644
--- a/source/_posts/2022-10-27-jasco-partner.markdown
+++ b/source/_posts/2022-10-27-jasco-partner.markdown
@@ -7,8 +7,7 @@ date_formatted: "October 26, 2022"
author: Paulus Schoutsen
author_twitter: balloob
comments: true
-categories:
-- Announcements
+categories: Works-with-Home-Assistant
og_image: /images/blog/2022-10-27-jasco-partner/social.png
---
diff --git a/source/_posts/2023-03-03-heltun-partner.markdown b/source/_posts/2023-03-03-heltun-partner.markdown
index 8f32e48d872..8c07accde5f 100644
--- a/source/_posts/2023-03-03-heltun-partner.markdown
+++ b/source/_posts/2023-03-03-heltun-partner.markdown
@@ -6,8 +6,7 @@ date: 2023-03-03 00:00:00
date_formatted: "March 3rd, 2023"
author: Uwe Bernitt
comments: true
-categories:
-- Announcements
+categories: Works-with-Home-Assistant
og_image: /images/blog/2023-03-03-heltun-partner/social.png
---
diff --git a/source/_posts/2023-04-11-homeseer-partner.markdown b/source/_posts/2023-04-11-homeseer-partner.markdown
index c1e99db7426..d2ace7c73f8 100644
--- a/source/_posts/2023-04-11-homeseer-partner.markdown
+++ b/source/_posts/2023-04-11-homeseer-partner.markdown
@@ -6,8 +6,7 @@ date: 2023-04-11 00:00:00
date_formatted: "April 11, 2023"
author: Uwe Bernitt
comments: true
-categories:
- - Announcements
+categories: Works-with-Home-Assistant
og_image: /images/blog/2023-04-11-homeseer-partner/social.png
---
diff --git a/source/_posts/2023-12-07-homewizard-joins-works-with-home-assistant-program.markdown b/source/_posts/2023-12-07-homewizard-joins-works-with-home-assistant-program.markdown
index 42deaa5f44c..0b0808ae35a 100644
--- a/source/_posts/2023-12-07-homewizard-joins-works-with-home-assistant-program.markdown
+++ b/source/_posts/2023-12-07-homewizard-joins-works-with-home-assistant-program.markdown
@@ -6,7 +6,7 @@ date: 2023-12-07 00:00:02
date_formatted: "December 7, 2023"
author: Guy Sie
comments: true
-categories: Announcements
+categories: Works-with-Home-Assistant
og_image: /images/blog/2023-12-homewizard/homewizard-wwha-og.png
---
diff --git a/source/_posts/2024-08-08-works-with-home-assistant-becomes-part-ohf.markdown b/source/_posts/2024-08-08-works-with-home-assistant-becomes-part-ohf.markdown
index 6ad0cc237bc..cbeee424718 100644
--- a/source/_posts/2024-08-08-works-with-home-assistant-becomes-part-ohf.markdown
+++ b/source/_posts/2024-08-08-works-with-home-assistant-becomes-part-ohf.markdown
@@ -6,7 +6,9 @@ date: 2024-08-08 00:00:01
date_formatted: "August 8, 2024"
author: Guy Sie
comments: true
-categories: Announcements
+categories:
+ - Announcements
+ - Works-with-Home-Assistant
og_image: /images/blog/2024-08-wwha-update/art.jpg
---
Art by Clelia Rella
diff --git a/source/_posts/2024-09-03-aqara-joins-works-with-home-assistant.markdown b/source/_posts/2024-09-03-aqara-joins-works-with-home-assistant.markdown
index 34002793393..196685cc486 100644
--- a/source/_posts/2024-09-03-aqara-joins-works-with-home-assistant.markdown
+++ b/source/_posts/2024-09-03-aqara-joins-works-with-home-assistant.markdown
@@ -6,7 +6,7 @@ date: 2024-09-03 00:00:01
date_formatted: "September 3, 2024"
author: Guy Sie
comments: true
-categories: Announcements
+categories: Works-with-Home-Assistant
og_image: /images/blog/2024-09-aqara-wwha/art.jpg
---
diff --git a/source/_posts/2025-02-27-apollo-joins-wwha.markdown b/source/_posts/2025-02-27-apollo-joins-wwha.markdown
index 17e9c60d45d..d5e9c5174f6 100644
--- a/source/_posts/2025-02-27-apollo-joins-wwha.markdown
+++ b/source/_posts/2025-02-27-apollo-joins-wwha.markdown
@@ -6,7 +6,7 @@ date: 2025-02-27 00:00:01
date_formatted: "February 27, 2025"
author: Miranda Bishop
comments: true
-categories: Announcements
+categories: Works-with-Home-Assistant
og_image: /images/blog/2025-02-apollo/art.jpg
---
diff --git a/source/_posts/2025-03-26-state-of-the-open-home-2025-announcement.markdown b/source/_posts/2025-03-26-state-of-the-open-home-2025-announcement.markdown
index f752bc553b2..100b67cb2db 100644
--- a/source/_posts/2025-03-26-state-of-the-open-home-2025-announcement.markdown
+++ b/source/_posts/2025-03-26-state-of-the-open-home-2025-announcement.markdown
@@ -11,10 +11,12 @@ og_image: /images/blog/2025-03-SOTOH-announce/art.png
---
+**Update: It happened and was great! [Read the biggest highlights here](/blog/2025/04/16/state-of-the-open-home-recap/) or [watch the full recording](https://www.youtube.com/watch?v=o4Vctz1_KYE).**
+
🚨On April 12th, we're going live with this year's State of the Open Home - our annual recap of the previous year and look ahead to the next. Just like past years, this live stream will be packed with awesome announcements, updates, and cool community highlights. (*Got 11 hours to spare? Check out our last 5 [State of live streams](https://www.youtube.com/playlist?list=PLKsVm4cWHDQBtg2CwzJVoCvx4Mc2yTy7C)!*)
This marks a full year since the founding of the [Open Home Foundation](https://www.openhomefoundation.org/) and Home Assistant becoming part of the foundation. We'll be taking a look back at what has been a very big year, and using this time to give you some big updates. These will include new projects becoming a part of the foundation 🚀, new supporters 🎉, and what's in store for our Works with Home Assistant program 🤝.
We'll also be highlighting some of the big findings of our [2024 Home Assistant survey](/blog/2024/12/16/community-survey-2024/), where over 8,500 of you told us about yourself, your homes, and how you use Home Assistant. We'll also announce Home Assistant's 2025 [roadmap](/blog/categories/roadmap/), and how your feedback is shaping the future of the Open Home.
-**🔔 Be sure to [click to get notified](https://www.youtube.com/watch?v=o4Vctz1_KYE) when it starts (Saturday, April 12 - 18:00 GMT / 20:00 CEST / 14:00 EDT / 11:00 PDT), and we can't wait to see you in the comments!**
+🔔 Be sure to [click to get notified](https://www.youtube.com/watch?v=o4Vctz1_KYE) when it starts (Saturday, April 12 - 18:00 GMT / 20:00 CEST / 14:00 EDT / 11:00 PDT), and we can't wait to see you in the comments!
diff --git a/source/_posts/2025-03-27-motionblinds-joins-wwha.markdown b/source/_posts/2025-03-27-motionblinds-joins-wwha.markdown
index 03d0378b3d1..598a69647e4 100644
--- a/source/_posts/2025-03-27-motionblinds-joins-wwha.markdown
+++ b/source/_posts/2025-03-27-motionblinds-joins-wwha.markdown
@@ -6,7 +6,7 @@ date: 2025-03-27 00:00:01
date_formatted: "March 27, 2025"
author: Miranda Bishop
comments: true
-categories: Announcements
+categories: Works-with-Home-Assistant
og_image: /images/blog/2025-03-motionblinds/art.jpg
---
diff --git a/source/_posts/2025-04-02-release-20254.markdown b/source/_posts/2025-04-02-release-20254.markdown
new file mode 100644
index 00000000000..32e27f6954a
--- /dev/null
+++ b/source/_posts/2025-04-02-release-20254.markdown
@@ -0,0 +1,939 @@
+---
+layout: post
+title: "2025.4 Time to continue the dashboards!"
+description: "Enjoy ready-to-use Area dashboards, have continuous conversations with an LLM, or let your voice assistant start a conversation! Energy device hierarchies, new template functions, and many more exciting improvements!"
+date: 2025-04-02 00:00:00
+date_formatted: "April 2, 2025"
+author: Franck Nijhof
+author_twitter: frenck
+comments: true
+categories:
+ - Release-Notes
+ - Core
+og_image: /images/blog/2025-04/social.jpg
+---
+
+
+
+Home Assistant 2025.4! 🎉
+
+It's April 2nd, so this is definitely not an April Fool's joke! 😃
+
+But before diving into this month’s release, I want to quickly highlight
+something you might have missed—something I’m extremely excited about:
+
+**[The State of the Open Home 2025](/blog/2025/03/26/state-of-the-open-home-2025-announcement/)**!
+
+Yes, you read that right! On **Saturday, April 12th, 2025**, we'll be
+[streaming a big live event on YouTube](https://www.youtube.com/watch?v=o4Vctz1_KYE),
+sharing our vision for the [Open Home Foundation](https://www.openhomefoundation.org),
+including the future of Home Assistant. Don't miss it!
+
+Alright, back to the release! As I was saying, it’s April already, and we have
+another fantastic release lined up for you.
+
+The big news is the introduction of our **new experimental Areas dashboard**,
+which might evolve to become the default dashboard in the future. If you’re like
+me—not really a UI-oriented person—you’re going to love this one! 🤩
+
+My personal absolute favorite feature this month is something I’ve dreamed of
+ever since we started working on voice assistants: **the ability for your
+assistant to start a conversation proactively!** This is a game
+changer—**no other** voice assistant on the market can do this!
+I’m going to have so much fun with this. 😃
+
+If you’re a power user who loves templates, don’t worry—we’ve got you covered
+too! This release ships with **a bunch of new template functions**, making your
+life a lot easier.
+
+Enjoy the release!
+
+../Frenck
+
+
+
+- [Dashboards](#dashboards)
+ - [A new experimental Areas dashboard](#a-new-experimental-areas-dashboard)
+ - [Time for a new card!](#time-for-a-new-card)
+- [Voice](#voice)
+ - [Improved Voice Wizard](#improved-voice-wizard)
+ - [Continued conversation with LLMs](#continued-conversation-with-llms)
+ - [Starting conversations](#starting-conversations)
+- [Onboarding with a Home Assistant Cloud backup](#onboarding-with-a-home-assistant-cloud-backup)
+- [Integrations](#integrations)
+ - [New integrations](#new-integrations)
+ - [Noteworthy improvements to existing integrations](#noteworthy-improvements-to-existing-integrations)
+ - [Integration quality scale achievements](#integration-quality-scale-achievements)
+- [Other noteworthy changes](#other-noteworthy-changes)
+- [Templates](#templates)
+- [Device hierarchy for energy management](#device-hierarchy-for-energy-management)
+- [Patch releases](#patch-releases)
+ - [2025.4.1 - April 4](#202541---april-4)
+ - [2025.4.2 - April 12](#202542---april-12)
+ - [2025.4.3 - April 19](#202543---april-19)
+ - [2025.4.4 - April 25](#202544---april-25)
+- [Need help? Join the community!](#need-help-join-the-community)
+- [Backward-incompatible changes](#backward-incompatible-changes)
+- [All changes](#all-changes)
+
+## Dashboards
+
+We’re making dashboards smarter—automagically!
+
+Dashboards allow you to monitor and control different aspects of your home.
+They are one of the main interfaces for interacting with Home Assistant,
+and a key contributor to what we call the Home Approval Factor—how useful
+and welcoming your smart home feels to everyone who lives in it.
+
+Over the past year, we have focused on making dashboards easier to create and
+customize. We introduced the powerful drag-and-drop sections view and plenty
+of new tile card features.
+
+We’re going a step further by delivering a dashboard that’s immediately
+relevant, saving you time and effort while still leaving room for personal
+touches.
+
+### A new experimental Areas dashboard
+
+Until now, our default dashboard has served as a simple starting point—a list
+of {% term entities %} grouped by {% term area %} or {% term device %}
+{% term domains %}. While helpful for beginners, it quickly becomes limited as
+a smart home grows. We’ve learned that while some users enjoy building their
+own dashboards, many simply want something that works for their household.
+
+
+
+The new experimental Areas Dashboard automatically generates a ready-to-use
+dashboard based on the areas you’ve set up in your home. It uses sections and
+tile cards for a modern, clean, and intuitive look—instantly. No more starting
+from a blank slate!
+
+Each area now has its own dedicated page, giving you a clear and organized view
+of the devices in that space. Entities, such as lights, covers, cameras,
+and more, are automatically grouped by domain so you can easily locate the ones
+you need.
+
+Want to tweak it? _Yes, you can_! You can rearrange, show, or hide entities to
+suit your preferences. At the top of each area page, temperature and humidity
+badges quickly indicate room comfort levels, which are configurable in the
+area’s settings.
+
+On top of all that, the Overview page brings it all together, showing all your
+areas in one place. Each section corresponds to a room in your home, and just
+like with the area pages, you can rearrange, show, or hide areas here as well,
+based on your preferences.
+
+
+
+If you haven’t organized your devices into areas yet, now’s the perfect time to
+start—it’s key to unlocking this new dashboard experience. To get
+started with the Areas dashboard, go to
+**{% my lovelace_dashboards title="Settings > Dashboards" %}**, and select
+**Add Dashboard** in the bottom right, next select the **Areas (experimental)**
+option from the dialog:
+
+
+
+The new experimental Areas Dashboard previews what’s to come. We’ve learned from
+our users that they organize their homes in different ways—by rooms,
+by function, by device, and more. They often combine all of the above,
+and therefore, our upcoming default dashboard will accommodate
+all these methods of organization.
+
+Over time, this foundation will grow into a flexible system that adapts to
+your priorities, whether that’s keeping an eye on security, managing energy use,
+going through your family calendar and chores, learning about the weather,
+or simply watching your pets.
+
+Please note that this is experimental, meaning it is subject to change and may
+not always work as intended. We would love your feedback if you notice some
+aspects we can improve. The community’s dashboards, shared over the years,
+have helped shape this design, and we would love to see how it works
+with a wide variety of your homes. Even if you already have the perfect
+dashboard built for your home, try it!
+
+**Update:** We had a feedback form in the release notes in this spot, but that's closed now. Thanks for your input!
+
+### Time for a new card!
+
+It has been a while since we introduced a new card, but this release, we
+thought it might be _**time**_ to add a new one! Thanks to [@mrdarrengriffin],
+Home Assistant now features a Clock card!
+
+
+
+Yeah, the card is "just" showing the current time, but it is a really nice
+addition to our card collection. It might be a great card for dashboards
+you are showing on things like a wall-mounted tablet!
+
+The Clock card offers several customization options, including the ability to
+adjust the clock size, timezone, display the seconds alongside the hours
+and minutes, and the ability to choose between a 12-hour or 24-hour format.
+
+For more details, check out the [Clock card documentation].
+
+[@mrdarrengriffin]: https://github.com/mrdarrengriffin
+[Clock card documentation]: /dashboards/clock/
+
+## Voice
+
+The _**["year of the voice"](/blog/2022/12/20/year-of-voice/)**_ might be behind
+us, but we keep improving the voice experience in Home Assistant! This release
+brings several enhancements to make interacting with your smart home even better.
+
+### Improved Voice Wizard
+
+If you set up a Home Assistant voice assistant compatible device,
+like the [Home Assistant Voice Preview Edition][pve],
+you will be guided through setting up your voice assistant, and this experience
+has been greatly improved in this release.
+
+As our voice experience is offering more choices, including local options
+like Speech-to-Phrase, we wanted to make sure you are able to make the right
+choices for your use case.
+
+
+
+The wizard will now help you make a more informed decision based on your
+language, desired functionality, and device capabilities, ensuring you get the
+best experience with your voice assistant.
+
+[pve]: /voice-pe/
+
+### Continued conversation with LLMs
+
+Ever tried to have a conversation with your voice assistant that is hooked up to
+an LLM like ChatGPT? It’s good fun. However, having to say _"Ok Nabu"_, whenever
+you answer one of Assist’s questions can really slow things down.
+
+This release introduces the ability to have a continued conversation with LLMs.
+If the LLM returns with a question, we will detect that and keep the
+conversation going, without the need for you to say _"Ok Nabu"_ again.
+
+
+
+This is a great way to have a more natural conversation with your voice
+assistants, and it works with all LLMs supported by Home Assistant.
+
+### Starting conversations
+
+During [Voice chapter 9](https://www.youtube.com/watch?v=k6VvzDSI8RU&t=4750s),
+we added the ability for Home Assistant [to call analog phones to start a
+conversation](/blog/2025/02/13/voice-chapter-9-speech-to-phrase/#home-assistant-phones-home-analog-phones-are-back). As of this release, this
+feature is now available for ESPHome-based voice assistants,
+like the [Home Assistant Voice Preview Edition][pve]!
+
+This is a fantastic feature, as it allows you to build your own automations that
+can send out voice prompts from your voice assistant and listen for a response,
+instead of you having to trigger the conversation by saying the wake word.
+
+Imagine, for example, you have left the garage door open, and a few minutes
+later, your assistant says:
+
+> Hey, I noticed you left the garage door open, do you want me to close it for you?
+
+You simply reply “yes” or “no,” and it handles the rest… 🤯 Or perhaps after a
+long day at work, you return home, and your assistant greets you warmly:
+
+> Welcome home, Frenck! Hope you had a great day. Want to hear the news or maybe enjoy some music?
+
+JLo made a great demo video of this one, involving his oven and the assistant
+asking if he wants to set a timer:
+
+
+
+This opens up a whole new world of possibilities for voice-driven automations.
+Currently, this capability is only available when using LLM integrations,
+but we’re exploring more use cases where it would be helpful.
+
+If you listen closely to the demo above, you’ll notice a brief pre-announce
+sound just before the conversation starts. This little notification prevents
+your assistant from startling anyone by suddenly speaking out of nowhere and
+preventing a jump scare! 🫣
+
+You could even use custom sounds based on the scenario—like a doorbell chime
+for visitors or a train station-style jingle when your morning commute gets
+delayed, giving you extra time to grab that coffee before heading out. ☕
+
+[pve]: /voice-pe/
+
+## Onboarding with a Home Assistant Cloud backup
+
+If you are a user of [Home Assistant Cloud by Nabu Casa][cloud], it means
+you can safely store a backup of your Home Assistant installation in the cloud
+as part of your subscription. A really convenient service that ensures you always
+have a secure and worry-free backup of your Home Assistant installation, no
+matter what happens.
+
+Now, let’s say something did happen, maybe a hardware failure, or maybe you
+are migrating to a new [Home Assistant Green](/green/), as of this release, you can
+directly restore your backup from the Home Assistant Cloud during the
+onboarding process of your new Home Assistant installation.
+
+This means you can get up and running with your new Home Assistant installation
+in no time, with all your settings, automations, and integrations restored from
+your backup.
+
+
+
+[cloud]: https://www.nabucasa.com/
+
+## Integrations
+
+Thanks to our community for keeping pace with the new {% term integrations %}
+and improvements to existing ones! You’re all awesome 🥰
+
+### New integrations
+
+We welcome the following new integrations in this release:
+
+- **[Bosch Alarm]**, added by [@sanjay900]
+ Control and monitor your Bosch intrusion alarm systems / control panels.
+- **[Remote calendar]**, added by [@Thomas55555]
+ Add remote calendar URLs as a calendar to Home Assistant.
+- **[Pterodactyl]**, added by [@elmurato]
+ Control and monitor your [Pterodactyl game server management panel].
+
+[@elmurato]: https://github.com/elmurato
+[@sanjay900]: https://github.com/sanjay900
+[@Thomas55555]: https://github.com/Thomas55555
+[Bosch Alarm]: /integrations/bosch_alarm
+[pterodactyl game server management panel]: https://pterodactyl.io/
+[Pterodactyl]: /integrations/pterodactyl
+[Remote calendar]: /integrations/remote_calendar
+
+This release also has new virtual integrations. Virtual integrations
+are stubs that are handled by other (existing) integrations to help with
+findability. These ones are new:
+
+- **[FrankEver]**, provided by [Shelly], added by [@bieniu]
+- **[LinkedGo]**, provided by [Shelly], added by [@bieniu]
+- **[Ogemray]**, provided by [Shelly], added by [@bieniu]
+
+[@bieniu]: https://github.com/bieniu
+[FrankEver]: /integrations/frankever
+[LinkedGo]: /integrations/linkedgo
+[Ogemray]: /integrations/ogemray
+[Shelly]: /integrations/shelly
+
+### Noteworthy improvements to existing integrations
+
+It is not just new {% term integrations %} that have been added; existing
+integrations are also being constantly improved. Here are some of the noteworthy
+changes to existing integrations:
+
+- The [OpenAI conversation integration] has a new action to generate content,
+ thanks to [@timlaing], **and** it can now search the web! Nice [@Shulyaka]!
+- The [Google AI conversation integration] also gained the ability to search the
+ web, just like the above OpenAI one. Thanks [@tronikos]!
+- [@joostlek] has absolutely been rocking the [SmartThings integration]! The list
+ of improvements is extremely long, but it includes support for firmware
+ updates through Home Assistant, support for event entities, PM0.1 sensors,
+ washer rinse cycle settings, TV and media player support, and improved device
+ handling. Awesome work there!
+- Not only SmartThings is receiving love, [@Diegorro98] has been constantly at
+ work improving and tuning the [Home Connect] integration. Thank you so much!
+- The [Roborock integration] has been extended to support dryer controls and button
+ entities to start routines. Thanks [@Lash-L] and [@regevbr]!
+- [Reolink] cannot be left out of this list. This release adds support for their
+ smart AI sensors, and adds a day/night state sensor. Nice work [@starkillerOG]!
+- [@tr4nt0r] extended the actions [Habitica integration] with lots of new
+ and improved actions to manage your habits, rewards, and dailies. Thanks!
+- The [Microsoft OneDrive integration] has a new action that allows you to
+ upload files to OneDrive. Nice [@zweckj]!
+- [@andrewsayre] extended [HEOS] with support for browsing media, allowing
+ you to browse things like TuneIn and play them on your HEOS devices.
+
+[@andrewsayre]: https://github.com/andrewsayre
+[@Diegorro98]: https://github.com/Diegorro98
+[@joostlek]: https://github.com/joostlek
+[@Lash-L]: https://github.com/Lash-L
+[@regevbr]: https://github.com/regevbr
+[@Shulyaka]: https://github.com/Shulyaka
+[@starkillerOG]: https://github.com/starkillerOG
+[@timlaing]: https://github.com/timlaing
+[@tr4nt0r]: https://github.com/tr4nt0r
+[@tronikos]: https://github.com/tronikos
+[@zweckj]: https://github.com/zweckj
+[Google AI conversation integration]: /integrations/google_ai_conversation
+[Habitica integration]: /integrations/habitica
+[HEOS]: /integrations/heos
+[Home Connect]: /integrations/home_connect
+[Microsoft OneDrive integration]: /integrations/onedrive
+[OpenAI conversation integration]: /integrations/openai_conversation
+[Reolink]: /integrations/reolink
+[Roborock integration]: /integrations/roborock
+[SmartThings integration]: /integrations/smartthings
+
+### Integration quality scale achievements
+
+One thing we are incredibly proud of in Home Assistant is our
+[integration quality scale]. This scale helps us and our contributors to ensure
+integrations are of high quality, maintainable, and provide the best possible
+user experience.
+
+This release, we celebrate several {% term integrations %} that have improved
+their quality scale:
+
+- **4 integrations reached platinum** 🏆
+ - [Azure Storage], thanks to [@zweckj]
+ - [Fronius], thanks to [@farmio]
+ - [IronOS], thanks to [@tr4nt0r]
+ - [inComfort], thanks to [@jbouwh]
+
+- **2 integrations reached silver** 🥈
+ - [Roborock], thanks to [@Lash-L]
+ - [Vodafone Station], thanks to [@chemelli74]
+
+This is a huge achievement for these integrations and their maintainers. The
+effort and dedication required to reach these quality levels is significant,
+as it involves extensive testing, documentation, error handling, and often
+complete rewrites of parts of the integration.
+
+A big thank you to all the contributors involved! 👏
+
+[integration quality scale]: https://www.home-assistant.io/docs/quality_scale/
+[@chemelli74]: https://github.com/chemelli74
+[@farmio]: https://github.com/farmio
+[@farmio]: https://github.com/farmio
+[@jbouwh]: https://github.com/jbouwh
+[@Lash-L]: https://github.com/Lash-L
+[@tr4nt0r]: https://github.com/tr4nt0r
+[@zweckj]: https://github.com/zweckj
+[Azure Storage]: /integrations/azure_storage
+[Fronius]: /integrations/fronius
+[inComfort]: /integrations/incomfort
+[IronOS]: /integrations/iron_os
+[Roborock]: /integrations/roborock
+[Vodafone Station]: /integrations/vodafone_station
+
+## Other noteworthy changes
+
+There are many more improvements in this release; here are some of the other
+noteworthy changes this release:
+
+- The [Home Assistant Yellow Zigbee/Thread chip](/yellow) and [Home Assistant ZBT-1](/connectzbt1)
+ can now be updated directly through Home Assistant update entities.
+ Nice [@puddly]!
+- When viewing the details of an entity in the entity dialog, we now provide
+ more context about where the entity originates. Like its device and the area
+ it is in. This is a first step in sprinkling more context throughout our UI.
+ Thanks, [@piitaya]!
+- We now provide sensors about your [backups]! Providing you information
+ on things like when your last backup ran. Thanks [@mib1185]!
+- This one is interesting if you make Blueprints. The [device selector] now
+ supports filtering by model ID. Thanks for this one [@karwosts]!
+- We now support turning on/off TVs in [HomeKit], nice one [@bdraco]!
+- Thanks to [@piitaya], we now support lawn mower devices in [Google Assistant]
+ and [HomeKit]!
+- Variables in automations & scripts have been greatly simplified and fixed by
+ [@arturpragacz]. All variables are now accessible anywhere in the script or
+ automation, greatly simplifying the use of variables. Amazing!
+- We now support adding additional interactions to cards! The hold and
+ double tap actions are now available through the UI. Thanks [@piitaya]!
+
+[@arturpragacz]: https://github.com/arturpragacz
+[@bdraco]: https://github.com/bdraco
+[@karwosts]: https://github.com/karwosts
+[@mib1185]: https://github.com/mib1185
+[@piitaya]: https://github.com/piitaya
+[@puddly]: https://github.com/puddly
+[backups]: /integrations/backup
+[device selector]: /docs/blueprint/selectors/#device-selector
+[Google Assistant]: /integrations/google_assistant
+[HomeKit]: /integrations/homekit
+
+## Templates
+
+If you are a power user, you probably use {% term templates %} in your
+automations, scripts, or maybe even your dashboard. This release has a few
+additions to our template engine that you might find useful.
+
+To start with, in the [template integration] the light and switch templates have
+been migrated to support the new and modern YAML style. Thanks [@Petro31] for
+this one!
+
+More noteworthy is the addition of a series of new template functions to make
+working with data a lot easier:
+
+- [`combine`](/docs/configuration/templating/#combining-dictionaries) – Combine multiple dictionaries.
+- [`difference`](/docs/configuration/templating/#find-elements-in-first-list-not-in-second-list) – Find elements present in one list but not another.
+- [`flatten`](/docs/configuration/templating/#flatten-a-list-of-lists) – Flatten a list of lists into a single list.
+- [`floor_entities`](/docs/configuration/templating/#floors) – Retrieve entities associated with a specific floor.
+- [`intersect`](/docs/configuration/templating/#find-common-elements-between-lists) – Identify common elements between lists.
+- [`md5`, `sha1`, `sha256`, `sha512`](/docs/configuration/templating/#hashing) – Perform common hashing operations.
+- [`shuffle`](/docs/configuration/templating/#shuffling) – Randomly shuffle items in a list.
+- [`symmetric_difference`](/docs/configuration/templating/#find-elements-that-are-in-either-list-but-not-in-both) – Find items in either list but not in both.
+- [`typeof`](/docs/configuration/templating/#determining-types) – Determine the type of a variable or object for debugging.
+- [`union`](/docs/configuration/templating/#combine-all-unique-elements-from-two-lists) – Merge unique elements from two lists.
+
+[@Petro31]: https://github.com/Petro31
+[template integration]: /integrations/template
+
+## Device hierarchy for energy management
+
+This release, [@karwosts] has introduced an improvement to Home Assistant’s
+energy management system—one that’s been highly requested by the community.
+
+This means you can now create a **device hierarchy** within your energy
+configuration, establishing parent-child relationships between devices.
+
+For example, imagine having a breaker monitoring the total energy consumption
+of a circuit, but also separately tracking individual devices connected to that
+circuit. Previously, Home Assistant might double-count this usage. Now, it
+understands these relationships and accurately shows the individual device
+usage without duplication.
+
+
+
+In this screenshot, the water heater is a child of the heat pump. Both report
+energy usage separately, but the water heater’s consumption is also included in
+the total reported by the heat pump. With device hierarchy enabled,
+Home Assistant correctly shows the usage of each device.
+
+Awesome addition there [@karwosts]!
+
+[@karwosts]: https://github.com/karwosts
+
+## Patch releases
+
+We will also release patch releases for Home Assistant 2025.4 in April.
+These patch releases only contain bug fixes. Our goal is to release a patch
+release every Friday.
+
+### 2025.4.1 - April 4
+
+- Fix blocking event loop - daikin ([@fredrike] - [#141442])
+- Made Google Search enable dependent on Assist availability ([@IvanLH] - [#141712])
+- Fix humidifier platform for Comelit ([@chemelli74] - [#141854])
+- Bump evohome-async to 1.0.5 ([@zxdavb] - [#141871])
+- Replace "to log into" with "to log in to" in `incomfort` ([@NoRi2909] - [#142060])
+- Avoid unnecessary reload in apple_tv reauth flow ([@emontnemery] - [#142079])
+- Add translation for hassio update entity name ([@piitaya] - [#142090])
+- Bump pyenphase to 1.25.5 ([@catsmanac] - [#142107])
+- Hide broken ZBT-1 config entries on the hardware page ([@puddly] - [#142110])
+- Bump pysmhi to 1.0.1 ([@gjohansson-ST] - [#142111])
+- Avoid logging a warning when replacing an ignored config entry ([@bdraco] - [#142114])
+- Slow down polling in Tesla Fleet ([@Bre77] - [#142130])
+- Bump tesla-fleet-api to v1.0.17 ([@Bre77] - [#142131])
+- Tado bump to 0.18.11 ([@erwindouna] - [#142175])
+- Add preset mode to SmartThings climate ([@joostlek] - [#142180])
+- Do not create a HA mediaplayer for the builtin Music Assistant player ([@marcelveldt] - [#142192])
+- Do not fetch disconnected Home Connect appliances ([@Diegorro98] - [#142200])
+- Fix fibaro setup ([@rappenze] - [#142201])
+- Fix circular mean by always storing and using the weighted one ([@edenhaus] - [#142208])
+- Bump pySmartThings to 3.0.2 ([@joostlek] - [#142257])
+- Update frontend to 20250404.0 ([@bramkragten] - [#142274])
+- Bump forecast-solar lib to v4.1.0 ([@klaasnicolaas] - [#142280])
+- Fix skyconnect tests ([@zweckj] - [#142262])
+- Fix empty actions ([@Petro31] - [#142292])
+
+[#141442]: https://github.com/home-assistant/core/pull/141442
+[#141505]: https://github.com/home-assistant/core/pull/141505
+[#141712]: https://github.com/home-assistant/core/pull/141712
+[#141854]: https://github.com/home-assistant/core/pull/141854
+[#141871]: https://github.com/home-assistant/core/pull/141871
+[#142060]: https://github.com/home-assistant/core/pull/142060
+[#142079]: https://github.com/home-assistant/core/pull/142079
+[#142090]: https://github.com/home-assistant/core/pull/142090
+[#142107]: https://github.com/home-assistant/core/pull/142107
+[#142110]: https://github.com/home-assistant/core/pull/142110
+[#142111]: https://github.com/home-assistant/core/pull/142111
+[#142114]: https://github.com/home-assistant/core/pull/142114
+[#142130]: https://github.com/home-assistant/core/pull/142130
+[#142131]: https://github.com/home-assistant/core/pull/142131
+[#142175]: https://github.com/home-assistant/core/pull/142175
+[#142180]: https://github.com/home-assistant/core/pull/142180
+[#142192]: https://github.com/home-assistant/core/pull/142192
+[#142200]: https://github.com/home-assistant/core/pull/142200
+[#142201]: https://github.com/home-assistant/core/pull/142201
+[#142208]: https://github.com/home-assistant/core/pull/142208
+[#142257]: https://github.com/home-assistant/core/pull/142257
+[#142262]: https://github.com/home-assistant/core/pull/142262
+[#142274]: https://github.com/home-assistant/core/pull/142274
+[#142280]: https://github.com/home-assistant/core/pull/142280
+[#142292]: https://github.com/home-assistant/core/pull/142292
+[@Bre77]: https://github.com/Bre77
+[@Diegorro98]: https://github.com/Diegorro98
+[@IvanLH]: https://github.com/IvanLH
+[@NoRi2909]: https://github.com/NoRi2909
+[@Petro31]: https://github.com/Petro31
+[@bdraco]: https://github.com/bdraco
+[@bramkragten]: https://github.com/bramkragten
+[@catsmanac]: https://github.com/catsmanac
+[@chemelli74]: https://github.com/chemelli74
+[@edenhaus]: https://github.com/edenhaus
+[@emontnemery]: https://github.com/emontnemery
+[@erwindouna]: https://github.com/erwindouna
+[@fredrike]: https://github.com/fredrike
+[@frenck]: https://github.com/frenck
+[@gjohansson-ST]: https://github.com/gjohansson-ST
+[@joostlek]: https://github.com/joostlek
+[@klaasnicolaas]: https://github.com/klaasnicolaas
+[@marcelveldt]: https://github.com/marcelveldt
+[@piitaya]: https://github.com/piitaya
+[@puddly]: https://github.com/puddly
+[@rappenze]: https://github.com/rappenze
+[@zweckj]: https://github.com/zweckj
+[@zxdavb]: https://github.com/zxdavb
+
+### 2025.4.2 - April 12
+
+- Add error details in remote calendar flow ([@Thomas55555] - [#141753])
+- Update Roborock map more consistently on state change ([@Lash-L] - [#142228])
+- Add SensorDeviceClass and unit for LCN CO2 sensor. ([@alengwenus] - [#142320])
+- Bump opower to 0.10.0 ([@tronikos] - [#142321])
+- Add a description for the enable_google_search_tool option in Google AI ([@tronikos] - [#142322])
+- Check that the current roboorck map exists before updating it. ([@Lash-L] - [#142341])
+- Limit mqtt info logging for discovery of new components ([@jbouwh] - [#142344])
+- Bump flux_led to 1.2.0 ([@bdraco] - [#142362])
+- Update aioairzone to v1.0.0 ([@Noltari] - [#142385])
+- Only load files ending `.metadata.json` in WebDAV ([@jpbede] - [#142388])
+- Bump aioesphomeapi to 29.9.0 ([@bdraco] - [#142393])
+- Bump opower to 0.11.1 ([@tronikos] - [#142395])
+- Add exceptions translation to SamsungTV ([@chemelli74] - [#142406])
+- Add missing strings to Fritz ([@chemelli74] - [#142413])
+- Fix reload of AVM FRITZ!Tools when new connected device is detected ([@mib1185] - [#142430])
+- Fix HKC showing hvac_action as idle when fan is active and heat cool target is off ([@bdraco] - [#142443])
+- Fix Reolink smart AI sensors ([@starkillerOG] - [#142454])
+- Fix kelvin parameter in light action specifications ([@epenet] - [#142456])
+- Bump aioshelly to version 13.4.1 ([@bieniu] - [#142477])
+- Fixed Renault charge state icon ([@wilfredktlr] - [#142478])
+- Fix Shelly initialization if device runs large script ([@bieniu] - [#142487])
+- Handle None on the response candidates in Google Generative AI ([@IvanLH] - [#142497])
+- Fix range of Google Generative AI temperature ([@tronikos] - [#142513])
+- Allow max to be equal with min for mqtt number config validation ([@jbouwh] - [#142522])
+- Fix small typo in Music Assistant integration causing unavailable players ([@marcelveldt] - [#142535])
+- Fix adding devices in Husqvarna Automower ([@Thomas55555] - [#142549])
+- Bump pyheos to v1.0.5 ([@andrewsayre] - [#142554])
+- Fix Quickmode handling in ViCare integration ([@CFenner] - [#142561])
+- Fix Core deadlock by ensuring only one ZHA log queue handler thread is running at a time ([@puddly] - [#142568])
+- Fix ssl_cert load from config_flow ([@fredrike] - [#142570])
+- Update growatt server dependency to 1.6.0 ([@thimo-seitz] - [#142606])
+- Pin multidict to >= 6.4.2 to resolve memory leaks ([@bdraco] - [#142614])
+- Bump led_ble to 1.1.7 ([@henryptung] - [#142629])
+- Bump livisi to 0.0.25 ([@Thomas55555] - [#142638])
+- Comelit config flow timeout error ([@chemelli74] - [#142667])
+- Fix EC certificate key not allowed in MQTT client setup ([@jbouwh] - [#142698])
+- Bump PyViCare to 2.44.0 ([@CFenner] - [#142701])
+- Bump reolink-aio 0.13.1 ([@starkillerOG] - [#142719])
+- Reolink migrate unique ID debugging ([@starkillerOG] - [#142723])
+- Update frontend to 20250411.0 ([@bramkragten] - [#142736])
+- Bump pySmartThings to 3.0.4 ([@joostlek] - [#142739])
+- Fix SmartThings gas meter ([@joostlek] - [#142741])
+- Fix Anthropic bug parsing a streaming response with no json ([@allenporter] - [#142745])
+- Upgrade sharkiq depedency to 1.1.0 ([@JeffResc] - [#142746])
+- Bump ical to 9.1.0 ([@Thomas55555] - [#142197])
+- Add jaraco.itertools license exception as the classifier was removed but no SPDX expression was added ([@sanjay900] - [#142439])
+
+[#141505]: https://github.com/home-assistant/core/pull/141505
+[#141753]: https://github.com/home-assistant/core/pull/141753
+[#142197]: https://github.com/home-assistant/core/pull/142197
+[#142228]: https://github.com/home-assistant/core/pull/142228
+[#142299]: https://github.com/home-assistant/core/pull/142299
+[#142320]: https://github.com/home-assistant/core/pull/142320
+[#142321]: https://github.com/home-assistant/core/pull/142321
+[#142322]: https://github.com/home-assistant/core/pull/142322
+[#142341]: https://github.com/home-assistant/core/pull/142341
+[#142344]: https://github.com/home-assistant/core/pull/142344
+[#142362]: https://github.com/home-assistant/core/pull/142362
+[#142385]: https://github.com/home-assistant/core/pull/142385
+[#142388]: https://github.com/home-assistant/core/pull/142388
+[#142393]: https://github.com/home-assistant/core/pull/142393
+[#142395]: https://github.com/home-assistant/core/pull/142395
+[#142406]: https://github.com/home-assistant/core/pull/142406
+[#142413]: https://github.com/home-assistant/core/pull/142413
+[#142430]: https://github.com/home-assistant/core/pull/142430
+[#142439]: https://github.com/home-assistant/core/pull/142439
+[#142443]: https://github.com/home-assistant/core/pull/142443
+[#142454]: https://github.com/home-assistant/core/pull/142454
+[#142456]: https://github.com/home-assistant/core/pull/142456
+[#142477]: https://github.com/home-assistant/core/pull/142477
+[#142478]: https://github.com/home-assistant/core/pull/142478
+[#142487]: https://github.com/home-assistant/core/pull/142487
+[#142497]: https://github.com/home-assistant/core/pull/142497
+[#142513]: https://github.com/home-assistant/core/pull/142513
+[#142522]: https://github.com/home-assistant/core/pull/142522
+[#142535]: https://github.com/home-assistant/core/pull/142535
+[#142549]: https://github.com/home-assistant/core/pull/142549
+[#142554]: https://github.com/home-assistant/core/pull/142554
+[#142561]: https://github.com/home-assistant/core/pull/142561
+[#142568]: https://github.com/home-assistant/core/pull/142568
+[#142570]: https://github.com/home-assistant/core/pull/142570
+[#142606]: https://github.com/home-assistant/core/pull/142606
+[#142614]: https://github.com/home-assistant/core/pull/142614
+[#142629]: https://github.com/home-assistant/core/pull/142629
+[#142638]: https://github.com/home-assistant/core/pull/142638
+[#142667]: https://github.com/home-assistant/core/pull/142667
+[#142698]: https://github.com/home-assistant/core/pull/142698
+[#142701]: https://github.com/home-assistant/core/pull/142701
+[#142719]: https://github.com/home-assistant/core/pull/142719
+[#142723]: https://github.com/home-assistant/core/pull/142723
+[#142736]: https://github.com/home-assistant/core/pull/142736
+[#142739]: https://github.com/home-assistant/core/pull/142739
+[#142741]: https://github.com/home-assistant/core/pull/142741
+[#142745]: https://github.com/home-assistant/core/pull/142745
+[#142746]: https://github.com/home-assistant/core/pull/142746
+[@CFenner]: https://github.com/CFenner
+[@IvanLH]: https://github.com/IvanLH
+[@JeffResc]: https://github.com/JeffResc
+[@Lash-L]: https://github.com/Lash-L
+[@Noltari]: https://github.com/Noltari
+[@Thomas55555]: https://github.com/Thomas55555
+[@alengwenus]: https://github.com/alengwenus
+[@allenporter]: https://github.com/allenporter
+[@andrewsayre]: https://github.com/andrewsayre
+[@bdraco]: https://github.com/bdraco
+[@bieniu]: https://github.com/bieniu
+[@bramkragten]: https://github.com/bramkragten
+[@chemelli74]: https://github.com/chemelli74
+[@epenet]: https://github.com/epenet
+[@fredrike]: https://github.com/fredrike
+[@frenck]: https://github.com/frenck
+[@henryptung]: https://github.com/henryptung
+[@jbouwh]: https://github.com/jbouwh
+[@joostlek]: https://github.com/joostlek
+[@jpbede]: https://github.com/jpbede
+[@marcelveldt]: https://github.com/marcelveldt
+[@mib1185]: https://github.com/mib1185
+[@puddly]: https://github.com/puddly
+[@sanjay900]: https://github.com/sanjay900
+[@starkillerOG]: https://github.com/starkillerOG
+[@thimo-seitz]: https://github.com/thimo-seitz
+[@tronikos]: https://github.com/tronikos
+[@wilfredktlr]: https://github.com/wilfredktlr
+
+### 2025.4.3 - April 19
+
+- Fix duke_energy data retrieval to adhere to service start date ([@cmamatey] - [#136054])
+- Check Energy Live API works before creating the coordinator in Tessie ([@Bre77] - [#142510])
+- Correct enum member check in home_connect ([@emontnemery] - [#142666])
+- Fix error in recurrence calculation of Habitica integration ([@tr4nt0r] - [#142759])
+- Fix MQTT device discovery when using node_id ([@dionisis2014] - [#142784])
+- Force Squeezebox item id to string ([@peteS-UK] - [#142793])
+- Keep track of last play status update time in Apple TV ([@ericswpark] - [#142838])
+- Select correct Reolink device uid ([@starkillerOG] - [#142864])
+- Fix Reolink Home Hub Pro playback ([@starkillerOG] - [#142871])
+- Fix quality loss for LLM conversation agent question answering ([@allenporter] - [#142873])
+- Only get tracked pairs for kraken ([@eifinger] - [#142877])
+- Bump Environment Canada library to 0.10.1 ([@gwww] - [#142882])
+- Bump devolo_plc_api to 1.5.1 ([@Shutgun] - [#142908])
+- Don't do I/O while getting Jewish calendar data schema ([@tsvi] - [#142919])
+- Update UK Transport Integration URL ([@AlexLamond] - [#142949])
+- Bump holidays to 0.70 ([@gjohansson-ST] - [#142954])
+- Fix switch state for Comelit ([@chemelli74] - [#142978])
+- Bump reolink-aio to 0.13.2 ([@starkillerOG] - [#142985])
+- Increase uptime deviation for Shelly ([@chemelli74] - [#142996])
+- Bump pysmhi to 1.0.2 ([@gjohansson-ST] - [#143007])
+- Add Python-2.0 to list of approved licenses ([@cdce8p] - [#143052])
+- Reduce jumping Starlink uptime sensor ([@frenck] - [#143076])
+- Bump ZHA to 0.0.56 ([@puddly] - [#143165])
+- Fix SmartThings soundbar without media playback ([@joostlek] - [#143170])
+- Fix missing binary sensor for CoolSelect+ in SmartThings ([@joostlek] - [#143216])
+
+[#136054]: https://github.com/home-assistant/core/pull/136054
+[#141505]: https://github.com/home-assistant/core/pull/141505
+[#142299]: https://github.com/home-assistant/core/pull/142299
+[#142510]: https://github.com/home-assistant/core/pull/142510
+[#142666]: https://github.com/home-assistant/core/pull/142666
+[#142755]: https://github.com/home-assistant/core/pull/142755
+[#142759]: https://github.com/home-assistant/core/pull/142759
+[#142784]: https://github.com/home-assistant/core/pull/142784
+[#142793]: https://github.com/home-assistant/core/pull/142793
+[#142838]: https://github.com/home-assistant/core/pull/142838
+[#142864]: https://github.com/home-assistant/core/pull/142864
+[#142871]: https://github.com/home-assistant/core/pull/142871
+[#142873]: https://github.com/home-assistant/core/pull/142873
+[#142877]: https://github.com/home-assistant/core/pull/142877
+[#142882]: https://github.com/home-assistant/core/pull/142882
+[#142908]: https://github.com/home-assistant/core/pull/142908
+[#142919]: https://github.com/home-assistant/core/pull/142919
+[#142949]: https://github.com/home-assistant/core/pull/142949
+[#142954]: https://github.com/home-assistant/core/pull/142954
+[#142978]: https://github.com/home-assistant/core/pull/142978
+[#142985]: https://github.com/home-assistant/core/pull/142985
+[#142996]: https://github.com/home-assistant/core/pull/142996
+[#143007]: https://github.com/home-assistant/core/pull/143007
+[#143052]: https://github.com/home-assistant/core/pull/143052
+[#143076]: https://github.com/home-assistant/core/pull/143076
+[#143165]: https://github.com/home-assistant/core/pull/143165
+[#143170]: https://github.com/home-assistant/core/pull/143170
+[#143216]: https://github.com/home-assistant/core/pull/143216
+[@AlexLamond]: https://github.com/AlexLamond
+[@Bre77]: https://github.com/Bre77
+[@Shutgun]: https://github.com/Shutgun
+[@allenporter]: https://github.com/allenporter
+[@cdce8p]: https://github.com/cdce8p
+[@chemelli74]: https://github.com/chemelli74
+[@cmamatey]: https://github.com/cmamatey
+[@dionisis2014]: https://github.com/dionisis2014
+[@eifinger]: https://github.com/eifinger
+[@emontnemery]: https://github.com/emontnemery
+[@ericswpark]: https://github.com/ericswpark
+[@frenck]: https://github.com/frenck
+[@gjohansson-ST]: https://github.com/gjohansson-ST
+[@gwww]: https://github.com/gwww
+[@joostlek]: https://github.com/joostlek
+[@peteS-UK]: https://github.com/peteS-UK
+[@puddly]: https://github.com/puddly
+[@starkillerOG]: https://github.com/starkillerOG
+[@tr4nt0r]: https://github.com/tr4nt0r
+[@tsvi]: https://github.com/tsvi
+
+### 2025.4.4 - April 25
+
+- Meteofrance: adding new states provided by MF API since mid April ([@vingerha] - [#143137])
+- Create Home Connect active and selected program entities only when there are programs ([@Diegorro98] - [#143185])
+- Météo-France: Additional states and change weather condition for "Ciel clair" ([@vingerha] - [#143198])
+- Update setuptools to 78.1.1 ([@cdce8p] - [#143275])
+- Fix licenses check for setuptools ([@cdce8p] - [#143292])
+- Add scan interval and parallel updates to LinkPlay media player ([@silamon] - [#143324])
+- Sync random sensor device classes ([@silamon] - [#143368])
+- Fix Vodafone Station config entry unload ([@chemelli74] - [#143371])
+- Bump aiohomekit to 3.2.14 ([@bdraco] - [#143440])
+- Bump dio-chacon-api to v1.2.2 ([@cnico] - [#143489])
+- Bump pysmartthings to 3.0.5 ([@joostlek] - [#143586])
+
+[#141505]: https://github.com/home-assistant/core/pull/141505
+[#142299]: https://github.com/home-assistant/core/pull/142299
+[#142755]: https://github.com/home-assistant/core/pull/142755
+[#143137]: https://github.com/home-assistant/core/pull/143137
+[#143185]: https://github.com/home-assistant/core/pull/143185
+[#143198]: https://github.com/home-assistant/core/pull/143198
+[#143253]: https://github.com/home-assistant/core/pull/143253
+[#143275]: https://github.com/home-assistant/core/pull/143275
+[#143292]: https://github.com/home-assistant/core/pull/143292
+[#143324]: https://github.com/home-assistant/core/pull/143324
+[#143368]: https://github.com/home-assistant/core/pull/143368
+[#143371]: https://github.com/home-assistant/core/pull/143371
+[#143440]: https://github.com/home-assistant/core/pull/143440
+[#143489]: https://github.com/home-assistant/core/pull/143489
+[#143586]: https://github.com/home-assistant/core/pull/143586
+[@Diegorro98]: https://github.com/Diegorro98
+[@bdraco]: https://github.com/bdraco
+[@cdce8p]: https://github.com/cdce8p
+[@chemelli74]: https://github.com/chemelli74
+[@cnico]: https://github.com/cnico
+[@frenck]: https://github.com/frenck
+[@joostlek]: https://github.com/joostlek
+[@silamon]: https://github.com/silamon
+[@vingerha]: https://github.com/vingerha
+
+## Need help? Join the community!
+
+Home Assistant has a great community of users who are all more than willing
+to help each other out. So, join us!
+
+Our very active [Discord chat server](/join-chat) is an excellent place to be
+at, and don’t forget to join our amazing [forums](https://community.home-assistant.io/).
+
+Found a bug or issue? Please report it in our [issue tracker](https://github.com/home-assistant/core/issues),
+to get it fixed! Or, check [our help page](/help) for guidance for more
+places you can go.
+
+Are you more into email? [Sign-up for our Building the Open Home Newsletter](/newsletter)
+to get the latest news about features, things happening in our community and
+other news about building an Open Home; straight into your inbox.
+
+## Backward-incompatible changes
+
+We do our best to avoid making changes to existing functionality that might
+unexpectedly impact your Home Assistant installation. Unfortunately, sometimes,
+it is inevitable.
+
+We always make sure to document these changes to make the transition as easy as
+possible for you. This release has the following backward-incompatible changes:
+
+{% details "Automation & script variable scopes" %}
+
+The `variables` action is no longer restricted to local scopes; it can now
+update the value of a variable also in outer scopes. If the variable was not
+previously defined, it will be created in the top-level (script run) scope.
+
+```yaml
+actions:
+ - variables:
+ x: 1
+ y: 1
+ - sequence:
+ - variables:
+ y: 2 # Updates y, which exists in the outer scope
+ z: 2 # Since z is not defined yet, it is assigned in the top-level scope
+ - action: persistent_notification.create
+ data:
+ message: "{{ x }}, {{ y }}, {{ z }}" # x=1, y=2, z=2
+ # Note: previously, it would be: x=1, y=1, z undefined
+```
+
+If you have automations or scripts that use the same variable name in
+different (previously isolated) scopes, you will need to update them: simply use
+distinct variable names to prevent any conflicts.
+
+([@arturpragacz] - [#141114])
+
+[@arturpragacz]: https://github.com/arturpragacz
+[#141114]: https://github.com/home-assistant/core/pull/141114
+
+{% enddetails %}
+
+{% details "Jewish Calendar" %}
+
+Holiday sensor changes:
+
+- In Israel, "Simchat Torah" is now "Shmini Atzeret, Simchat Torah"
+- In Israel, the 30th of Shvat returns "Family Day, Rosh Chodesh"
+
+Additionally, the `type_id` has been removed from the state attributes, use
+the `type` if needed instead.
+
+([@tsvi] - [#137247]) ([documentation](/integrations/jewish_calendar))
+
+[@tsvi]: https://github.com/tsvi
+[#137247]: https://github.com/home-assistant/core/pull/137247
+
+{% enddetails %}
+
+{% details "Persistent notifications" %}
+
+Persistent notifications with `notification_id` `config_entry_reconfigure` are
+no longer created when an integration fails to authenticate.
+Automations [triggering on such persistent notifications](/integrations/persistent_notification/#automation)
+will thus no longer work.
+
+([@emontnemery] - [#140932]) ([documentation](/integrations/gpsd))
+
+[@emontnemery]: https://github.com/emontnemery
+[#140932]: https://github.com/home-assistant/core/pull/140932
+
+{% enddetails %}
+
+{% details "Reolink" %}
+
+The Reolink password is now limited to 31 characters. The latest versions of the
+Reolink app and desktop client also have this 31-character limit. If you
+configured your Reolink password years ago, it is possible it is longer than
+31 characters. In that case you will get a reauthentication flow asking you to
+change the password. Passwords longer than 31 characters can cause issues in the
+latest Reolink API.
+
+([@starkillerOG] - [#140789]) ([documentation](/integrations/reolink))
+
+[@starkillerOG]: https://github.com/starkillerOG
+[#140789]: https://github.com/home-assistant/core/pull/140789
+
+{% enddetails %}
+
+If you are a custom integration developer and want to learn about changes and
+new features available for your integration: Be sure to follow our
+[developer blog][devblog]. The following changes are the most notable for this release:
+
+- [Changes to ConfigSubentryFlow](https://developers.home-assistant.io/blog/2025/03/24/config-subentry-flow-changes)
+- [Media player toggle action changed](https://developers.home-assistant.io/blog/2025/03/14/media-player-toggle-adjusted/)
+- [UnitSystem dataclass is now frozen](https://developers.home-assistant.io/blog/2025/03/25/frozen-unit-system)
+
+[devblog]: https://developers.home-assistant.io/blog/
+
+## All changes
+
+Of course there is a lot more in this release. You can find a list of
+all changes made here: [Full changelog for Home Assistant Core 2025.4](/changelogs/core-2025.4)
diff --git a/source/_posts/2025-04-16-state-of-the-open-home-recap.markdown b/source/_posts/2025-04-16-state-of-the-open-home-recap.markdown
new file mode 100644
index 00000000000..2e040dd2e46
--- /dev/null
+++ b/source/_posts/2025-04-16-state-of-the-open-home-recap.markdown
@@ -0,0 +1,152 @@
+---
+layout: post
+title: "2 million homes strong - State of the Open Home 2025"
+description: "We celebrate the biggest moments of 2025, the community, and look forward to what’s next."
+date: 2025-04-16 00:00:01
+date_formatted: "April 16, 2025"
+author: Paulus Schoutsen
+comments: true
+categories: Announcements
+og_image: /images/blog/2025-04-SOTOH/art.jpg
+---
+
+
+The State of the Open Home 2025 has wrapped, and a big thanks to everyone who tuned in to the live stream! If you missed it, please [check out the recording](https://www.youtube.com/live/o4Vctz1_KYE?si=U7oCoNE0TLsWoUX8&t=601), it's a slick production and definitely the best way to take it all in. For those who would rather read about all the updates and announcements, we've also got you covered with this blog.
+
+It was an over 2-hour event, and if you need a shorter summary than this blog, here's my best attempt 😅:
+
+
+
Summary:
+
+ - Home Assistant doubled its user base to 2M households
+ - Open Home Foundation is now tax-exempt
+ - The Foundation has taken on 39 full-time project staff
+ - Espressif has donated to the Foundation
+ - Announced upcoming Works with Home Assistant partners
+ - 24 May will be Home Assistant Community Day with many meetups
+ - Music Assistant and HACS are now Foundation projects
+ - The Community Survey had 8k respondents and interesting results
+ - Roadmap 2025 sets out plans for a new device database
+
+
+
+For all the juicy details, keep reading!
+
+## Open Home Foundation year one
+(00:10:10)
+
+State of the Open Home is our annual opportunity to share the latest developments, celebrate community achievements, and outline our vision for the future of the Open Home.
+
+It was at last year's State of the Open Home that [we announced the Open Home Foundation](https://www.openhomefoundation.org/blog/announcing-the-open-home-foundation/). I donated Home Assistant to the Foundation, and others in the community followed suit by contributing vital projects that form the core of the Open Home ecosystem. That's also where we set out our mission: to fight for privacy (your data is yours), choice (no vendor lock-in), and sustainability (devices built to last).
+
+The Foundation wasn't just paperwork---it took us from being "just" a bunch of (very big) open-source GitHub projects to being seen as serious industry players. We're now recognized as a peer, invited to speak at events like the [Connections summit at CES](https://www.youtube.com/watch?v=VMif_tYODNU), joining the [Z-Wave Alliance board](/blog/2024/09/24/we-are-joining-the-z-wave-alliance-board/), and even being named by [Fast Company as a top innovator](https://www.fastcompany.com/91269253/consumer-electronics-most-innovative-companies-2025)---all because we respect user data! People always knew that we were building cool things, but now they understand why we were doing it.
+Vergecast talking about realizing that Home Assistant is the real deal!
+
+## Powering the Open Home
+(00:23:13)
+
+There are now 56 people working full-time to support Open Home projects and the community that surrounds them. These are some of the biggest open source projects in the world, including Home Assistant, ESPHome, Z-Wave JS, Zigpy, Open Home Matter Server, our voice technology, apps, and more. Many of the founders of these Open Home projects now work for the Open Home Foundation, turning their part-time passions into full-time careers - our in-house expertise is truly industry-leading. Supporting all this work requires a steady stream of income.
+
+
+
+Nabu Casa existed before the Open Home Foundation, and during State of the Open Home 2025, [Ben Bangert](https://github.com/bbangert), Nabu Casa's co-founder and CTO, explained why and how it was set up,
+
+Our approach at Nabu Casa has always been about sustainable growth. By avoiding the startup model, we can ensure we are under no pressure to compromise on our mission and values. It has driven our ability to hire and expand the company without taking on outside interests that would have goals that don't align with ours.
+
+Nabu Casa builds and maintains the products that make Home Assistant easier to use, like [Home Assistant Cloud](/cloud/) and [hardware](https://www.nabucasa.com/). A big chunk of its profit continues to go to projects like Home Assistant, but now it does so via the Open Home Foundation. The Open Home Foundation builds on Nabu Casa's original intent of removing outside pressures from the projects it funds, allowing them never to be bought or ruined by commercial meddling.
+
+## Foundation upgrades
+
+In the year since launching the Foundation, more steps have been taken to protect the Open Home. We chose Switzerland to base the Foundation as it provided the best protection for these projects. We recently transitioned from a Swiss Verein to [a more protective Stiftung](https://newsletter.openhomefoundation.org/we-are-number-one/#:~:text=Important%20changes%20to%20the%20Open%20Home%20Foundation). We also achieved tax-exempt status, meaning your support can go even further. Where previously, all 56 employees worked for Nabu Casa, now all employees who work directly on Foundation projects work for the Foundation, further enhancing the independence of Foundation projects.
+
+
The Open Home Foundation is growing
+
+A big shout-out to [Pascal](https://github.com/pvizeli)! He was instrumental in starting the Foundation and has spent the last year fine-tuning its operation.
+
+## Donations and Partnerships
+(00:26:38)
+
+This year, we received several high-profile donations, and at the State of the Open Home, we announced another considerable donation: [Espressif](https://www.espressif.com/) has donated $25,000 to the Foundation! Espressif designs many of the chips that power ESPHome. They are supporting Open Home software development to help drive the DIY sensor and controller revolution forward.
+
+
More than donations, we have projects that provide amazing in-kind support
+
+Late last year, we received [$25,000 from DuckDuckGo](https://newsletter.openhomefoundation.org/the-era-of-open-voice/#:~:text=DuckDuckGo%20donates%20to%20the%20Open%20Home%20Foundation) for being part of a better Internet ecosystem. These two sizeable donations make a meaningful impact on our work, and we are incredibly grateful for the support of these two organizations that believe in our mission. We also always try to support the projects that we believe are vital to our work and the broader Open Home ecosystem. That is why this year we started recurring donations to [Buildroot](https://buildroot.org/sponsors.html), [Alpine](https://opencollective.com/alpinelinux), and [aiohttp](https://opencollective.com/aio-libs).
+
+As we said previously, we want sustainable funding, and small intermittent donations don't allow us to effectively financially plan. [Home Assistant Cloud subscriptions](https://www.nabucasa.com/) remain the best way for individuals to support us financially.
+
+## New Open Home Foundation projects
+(00:31:34)
+
+
+
+The Open Home Foundation owns and governs over 240 open standards, drivers, and libraries that support the realization of the Open Home, and it's time to add a couple more.
+
+[Marcel van der Veldt](https://github.com/marcelveldt) joined the live stream to announce that he has donated [Music Assistant](https://www.music-assistant.io/) to the Open Home Foundation! Music Assistant has always been deeply entwined with multiple Open Home projects, and we're excited to see how this extra support will allow more people to take back control of their music, on their players. If you want some interesting insight into Music Assistant, my [interview with Marcel](https://www.youtube.com/live/o4Vctz1_KYE?si=6LVwbMVNkipqRcma&t=1903) during the event is a must-watch.
+
+And there was more! The [Home Assistant Community Store (HACS)](https://www.hacs.xyz/), created by [Joakim Sørensen](https://github.com/ludeeus), has also been donated to the Open Home Foundation! HACS is an amazing tool for the community, giving more choice to Home Assistant users and serving as a great starting point for your development journey. These projects are such a fantastic fit for the Foundation---I wouldn't be surprised if you already thought they were part of it.
+
+## Community
+(00:49:00)
+
+When asked at a recent event "What is my North Star?", my answer came quickly, it is the "Community". Nothing we do would be possible without our contributions, and supporters. Meeting community members during my travels is one of the best parts of this job.
+
+[Franck Nijhof](https://github.com/frenck), Home Assistant Lead at the Open Home Foundation, took the stage to celebrate the incredible community. He shared some of the biggest community highlights of the year, including becoming the most active open source project on GitHub (21,000+ unique contributors in 2024!) and winning the most welcoming open-source project award. He emphasized that this success belongs to the entire community, which extends far beyond developers, as there are so many ways to contribute including being a translator, designer, tester, forum helper, or content creator.
+
+Our community is doing amazing things with Home Assistant,
+
+
Check out how Rúnar Björn Herrera is making his home more accessible and sharing his expertise with the community. (01:03:08)
+
+One big announcement Franck made was that this year we went from 1 million to over 2 million active installations in 2024! The key to harnessing this community power, Franck explained, is actively listening and building with users, not just for them, but with them. Initiatives like the ["Month of What The Heck?!"](/blog/2024/11/30/the-month-of-what-the-heck/) and adapting plans based on feedback (like with backups) demonstrate this commitment to iterating together, even when initial ideas need adjustment.
+
+
+
+Looking ahead, the goal is to deepen this collaboration by developing "fully in the open" across all disciplines, fostering a collective intelligence. To further strengthen these connections, Franck announced the first official **Home Assistant Community Day on May 24th, 2025** 🎉, encouraging users worldwide to organize and attend local meetups.
+
+## Research
+(01:08:03)
+
+We want the Foundation projects to serve our community, and that's why we've put a bigger focus on research. [Annika Schulz](https://github.com/anakinsbrna) is our UX Researcher, and at this year's State of the Open Home, she gave us a fantastic overview of the privacy-respecting research we're conducting and the invaluable insights it is bringing.
+
+
You love choice! but we're still learning what privacy and sustainability mean to you.
+
+Our 2024 Community Survey was a huge success, with over 8,600 responses! We learned so much about who uses Home Assistant. For instance, a big majority of the people who answered the survey are tech-curious, have been using HA for 3+ years, live in households of 2.8 people on average, and have somewhere between 11-100 devices 😎 ([watch the whole segment](https://www.youtube.com/live/o4Vctz1_KYE?si=W-QRbgOtwuIwddlX&t=4083), there are so many interesting results!). We also delved into their motivations and how deeply our values of Choice and Privacy resonate, even if the practical implementation of privacy remains a challenge for many. Annika's key message -- "User research helps remind us... We are not the users." -- we need to challenge our assumptions and personal biases.
+
+## Works with Home Assistant
+(01:24:13)
+
+
+
+With choice playing such a big part in why our community uses Open Home projects, it's crucial to ensure users can find great devices that align with our values. [Miranda Bishop](https://github.com/miranda-gb), our Partnership Manager, joined me to discuss the "Works with Home Assistant" program. Explaining it isn't about exclusion but about *highlighting* manufacturers committed to local control. They also sign an agreement to provide long-term support and be a positive force in the community.
+
+We had a couple of our existing partners send us messages about joining the program, and thanks for the warm words. Also teased during the live stream were new partners close to formally joining the program, including [Reolink](https://reolink.com/), [Eve](https://www.evehome.com/en), and [Shelly](https://www.shelly.com/) (but more details on those soon). Miranda stressed that the program isn't "pay us money and you can have the badge"; it's about shared ethics of privacy, choice, and sustainability. The goal remains: within 3 years, to offer certified choices for every device type, everywhere, at all budgets. Your feedback helps drive this -- keep telling manufacturers you want local control and point them to the [Works with Home Assistant program](https://works-with.home-assistant.io/), as we're here to help.
+
+
Shelly with Home Assistant helps automate Las Vegas' Mob Museum, including its moonshine production! (01:54:00)
+
+## Voice & AI
+(01:36:05)
+
+[Mike Hansen](https://github.com/synesthesiam/), our "Voice Guy," was the next to take the stage. In case you missed it, this year we launched our first voice hardware device, Home Assistant Voice Preview Edition, which pairs incredibly with all the voice software we've been developing. To put it mildly, it's been a pretty big hit! Mike explained how we built it to help push forward open source voice development, and it's very much succeeding. Before Voice Preview Edition there wasn't an Icelandic-speaking voice assistant, this is now being developed---all without a single person at the Foundation speaking this language.
+
+
+@Jlo's AI-powered home in action (01:42:37)
+
+Mike touched on future plans for more conversational interactions and enhanced integration with Music Assistant. He also addressed AI, explaining how we see Home Assistant as the perfect private playground for users to experiment with AI technologies locally, focusing on utility, not monetization, unlike the big players. A landline phone on set even rang during the segment with an AI-powered notification from *my own* Home Assistant---apologies, it predates silent mode ☎️.
+
+## Living Our Values
+(01:57:05)
+
+
+
+We wrapped up with a discussion focused on our values with Annika Schulz, Franck Nijhof, and Madelena Mak. We touched on user privacy concerns Annika uncovered, the diverse ways Franck sees 'choice' manifesting (beyond just protocols, including local APIs), and how sustainability, as Madelena explained, connects to durability, energy management, and the right to repair.
+
+Finally, together with [Madelena Mak](https://github.com/madelena), we looked back at our 2024 [roadmap](/blog/2024/06/12/roadmap-introduction/) -- I'm proud we delivered on nearly everything we set out to do, including top community requests. This builds trust. We gave a [glimpse into our 2025 Roadmap](https://www.youtube.com/live/o4Vctz1_KYE?si=zc_AKoWOKtx4zIB1&t=7855) ([02:16:51](https://www.youtube.com/live/o4Vctz1_KYE?si=H1jmjDisJ4tckLak&t=8211)), including a new focus on harnessing our collective intelligence. This will be driven by a new information architecture that gives context to devices via a device database (expect a detailed post on Roadmap 2025 soon!).
+
+## Wrapping Up
+
+
+
+The live Q&A session at the end was, as always, a highlight, [tackling great questions from the audience](https://www.youtube.com/live/o4Vctz1_KYE?si=WeI5OUe9lLdcZcii&t=9258).
+
+It was an energizing day, reaffirming my belief in our mission and the incredible power of this community. We're building something unique and important together. Thank you to everyone who watched, participated, and continuously supports the Open Home. Your belief in this project makes it all possible.
+
+And, of course, a huge thank you to all our [Home Assistant Cloud subscribers](/cloud/). Your financial support is the bedrock that allows the Open Home Foundation to thrive and continue driving innovation in the private, open smart home.
diff --git a/source/_posts/2025-04-17-reolink-joins-works-with-home-assistant.markdown b/source/_posts/2025-04-17-reolink-joins-works-with-home-assistant.markdown
new file mode 100644
index 00000000000..ff725b53e0b
--- /dev/null
+++ b/source/_posts/2025-04-17-reolink-joins-works-with-home-assistant.markdown
@@ -0,0 +1,65 @@
+---
+layout: post
+title: "Reolink joins Works with Home Assistant"
+description: "Offering the program’s first certified cameras and doorbells."
+date: 2025-04-17 00:00:01
+date_formatted: "April 17, 2025"
+author: Miranda Bishop
+comments: true
+categories: Works-with-Home-Assistant
+og_image: /images/blog/2025-04-reolink/art.jpg
+---
+
+
+
+We're excited to announce that [Reolink](https://reolink.com/) is the latest partner to join the [Works with Home Assistant](https://works-with.home-assistant.io/) program.
+
+Just recently, we had [blinds join the program](/blog/2025/03/27/motionblinds-joins-wwha/), and now we have Reolink bringing the first certified cameras and doorbells. Reolink has certified a wide range of their devices including battery-powered and wired options, as well as devices with Power-over-Ethernet (PoE) and Wi-Fi connectivity.
+
+When someone in the Home Assistant community asks for camera recommendations, Reolink often tops the list. This strong reputation is well-earned, as they prioritize local control, don't require cloud connectivity for their advanced features, and support open protocols whenever possible.
+
+## Seeing eye-to-eye
+
+Founded in 2009, Reolink has been building video security solutions for nearly any setup---whether you need a monster 10-camera PoE system or just a few Wi-Fi-connected cameras. They've done this while closely aligning with the Open Home values of privacy, choice, and sustainability.
+
+First and foremost, they've put in great options for maintaining privacy, specifically prioritizing storing video locally, with cloud storage as an optional extra. Files aren't locked down---wired cameras support multiple streaming protocols, while battery models can send clips to an FTP server---giving users better choice and control.
+
+While other brands lock features like motion detection behind subscriptions, Reolink devices work fully locally---even without internet access, all advertised features will work now and into the future. With support for streaming protocols and fully local use, these cameras are set to work for years, which is a win for the planet 💚.
+
+It's amazing that there is a security camera brand that respects the Open Home values while supporting all the latest features---like resolutions greater than 4K, long battery life, PoE, solar power, color night vision, advanced motion and object detection.
+
+## Picture perfect integration
+
+Another reason these cameras get recommended so often is the platinum-quality [Reolink integration](/integrations/reolink/). This ensures user-friendly features like automatic device discovery, smooth setup, firmware updates, and detailed documentation. Critically, [platinum integrations](/docs/quality_scale/#-platinum) include exceptionally efficient and well-written code, improving overall system stability and reliability.
+
+All Works with Home Assistant-certified devices feature top-quality integrations, but what makes this one special is that it was built by the Home Assistant community. Huge thanks to the Reolink team and [@StarkillerOG](https://github.com/starKillerOG) for the effort that brought it to the Platinum level late last year.
+
+Reolink is a big fan of our active and engaged community and joined Works with Home Assistant to continue this close connection to them.
+
+
+
"Reolink is thrilled to join Home Assistant's ecosystem to empower users with smarter, more integrated security solutions. Partnering with Home Assistant allows us to align with a community-driven platform that shares our commitment to innovation and accessibility."
+
-Fabrice Klohoun, Marketing Communications Director at Reolink
+
+
+## Devices
+🤖 Security has never looked so friendly... and private.
+
+In case you didn't know, Works with Home Assistant differs from other certification programs as products are rigorously tested in-house to ensure they work seamlessly out of the box. Any company joining also commits to providing long-term support and firmware updates while being a positive force in the Home Assistant community. Works with Home Assistant is operated by the [Open Home Foundation](https://www.openhomefoundation.org/), and the support of [Home Assistant Cloud](/cloud/) subscribers funds this work. Reolink has certified the following devices:
+
+**Video Doorbells**
+- [Reolink Video Doorbell (WiFi)](https://reolink.com/product/reolink-video-doorbell-wifi/)
+- [Reolink Video Doorbell (Battery)](https://reolink.com/product/reolink-doorbell-battery/)
+
+**Cameras**
+- [Reolink Argus Track](https://reolink.com/product/argus-track/)
+- [Reolink Duo 3 PoE](https://reolink.com/product/reolink-duo-3-poe/)
+- [Reolink TrackMix PoE](https://reolink.com/product/reolink-trackmix-poe/)
+- [Reolink RLC-823S2](https://reolink.com/product/rlc-823s2/)
+- [Reolink RLC-1224A](https://reolink.com/gb/product/rlc-1224a/)
+
+**Other**
+- [Reolink Home Hub](https://reolink.com/product/reolink-home-hub/)
+
+## Closed circuit
+
+In case you haven't noticed, Works with Home Assistant has already had a big start to the year (Reolink, [Apollo Automations](/blog/2025/02/27/apollo-joins-wwha/), and [Motionblinds](/blog/2025/03/27/motionblinds-joins-wwha/)), and this is thanks to your support. This momentum is only just building, and we have many more announcements coming! In case you missed it, our State of the Open Home last weekend had many other updates on Works with Home Assistant. Check [it out here](/blog/2025/04/16/state-of-the-open-home-recap/#works-with-home-assistant)!
diff --git a/source/_posts/2025-04-24-community-day.markdown b/source/_posts/2025-04-24-community-day.markdown
new file mode 100644
index 00000000000..a9295b5d6af
--- /dev/null
+++ b/source/_posts/2025-04-24-community-day.markdown
@@ -0,0 +1,83 @@
+---
+layout: post
+title: "Register today for Community Day 2025"
+description: "On May 24th join in on meetups happening around the world."
+date: 2025-04-24 00:00:01
+date_formatted: "April 24, 2025"
+author: Missy Quarry
+comments: true
+categories: Announcements
+og_image: /images/blog/2025-04-community-day/art.png
+---
+
+
+Our first **Home Assistant Community Day** will be on **May 24th** this year 🎉, and with a month to go, here is all the information you need to take part.
+
+The community will be leading meetups across the globe, so find your nearest event and **[register now](https://lu.ma/haday2025)**! They're all free and will be full of smart people with smart homes. If you don't see your city on this list, we're encouraging the community to host their own meetups, so keep reading to learn more.
+
+## Our biggest party yet
+
+I'm sure you're all wondering, "*Missy, what is a Community Day?*". In its simplest form, it's a single day in which community members around the world set up local meetups with each other. That leaves a lot open, though. *Where do you sign up? How do you host your own meetup? How many people should show up? Where's the best place to hold a meetup?* ...that's a lot of questions! 😳 Luckily, I have all the answers 😉.
+
+
+
+### Locations and registering to attend
+
+We already have **13 events** hosted by several of us who work on Home Assistant 😎! To coordinate these, we are using Luma, a site focused on tech meetups. All the current events can be found on our [Home Assistant Community Day](https://lu.ma/haday2025) calendar, including:
+
+**Europe**
+- [Aveiro, Portugal](https://lu.ma/p9eo4v3t)
+- [Bordeaux, France](https://lu.ma/shxhyi6u)
+- [London, United Kingdom](https://lu.ma/fa5ez3t7)
+- [Madrid, Spain](https://lu.ma/o6pqbjv8)
+- [Porto, Portugal](https://lu.ma/uozbfr6n)
+- [Prague, Czech Republic](https://lu.ma/dhudha0z)
+- [Utrecht, Netherlands](https://lu.ma/e2wyv8k0)
+- [Vienna, Austria](https://lu.ma/2vjs7dab)
+
+**North America**
+- [Brooklyn, New York](https://lu.ma/efkt35on)
+- [Charlotte, North Carolina](https://lu.ma/3kbb2dte)
+- [Houston, Texas](https://lu.ma/g5o66to2)
+- [Redmond, Washington](https://lu.ma/qb0hhhkm)
+- [Twin Cities, Minnesota](https://lu.ma/ljwdnjmc)
+
+All Community Day events are free, so **[register before spaces run out!](https://lu.ma/haday2025)** (No worries, there are waitlists!)
+
+### Host your own
+
+***Is your city, country, or continent not on the list*** ⁉️ Time to take matters into your own hands, and create your own meetup.
+
+
Example event page for our London meetup 💂♂️🇬🇧
+
+Using Luma, [create an account](https://lu.ma/signin), and navigate to our [Home Assistant Community Day](https://lu.ma/haday2025) event page, select **Submit Event > Create New Event** (the button is above the calendar on the right). Don't stress if you don't have a venue yet---you can add it later! So people know you're part of the worldwide party, we've created an [invite graphic](https://drive.google.com/drive/u/0/folders/1xnAIVvsekX1tmfE60f0qrHOoIFK9Cw_R) you can set as the event image. Make sure you follow this checklist when you create your event:
+
+✅ **Event Name** = "(city name) meetup"\
+✅ **Time zone** = your local time\
+✅ **Date** = Saturday, May 24\
+✅ **Time** = your choosing! (4 hours max)\
+✅ **Add Event Location** = your city (or venue once you have one)\
+✅ **Capacity** = 50 max (less if the venue is smaller), and toggle the Waitlist on\
+✅ **Hosts** = Add me (Missy Quarry - missy.quarry@openhomefoundation.org) as a host of the event so I can make sure it appears in the main event calendar
+
+Click **Create Event** once you've followed that checklist, then come let everyone know in the Home Assistant Community Day [meetup thread on Discord](https://discord.com/channels/330944238910963714/1364989531069091920) or the [Social section of the Community forum](https://community.home-assistant.io/c/social/)! 🎉
+
+***Capacity:*** If you're wondering why we capped the capacity at 50, this is mostly to ensure that hosts don't feel overwhelmed with finding a venue big enough. Also, that's the average number of attendees who have registered for the last couple of events. You may have more people who want to attend your event - that's where the waitlist comes in handy. 👏🏻
+
+***Location:*** This will depend on the host, but we highly encourage hosts to check out local venues like cafes, community spaces, or bars. Please make sure the venue agrees to you hosting the event there and that it's an accommodating and welcoming place for everyone in our community. Consider accessibility and the facilities required for large groups (access to transport, food, drink, and washrooms)---this is also why we ask that people not host at their homes. Feel free to consider other public spaces, for instance, I pulled some strings at Microsoft for a cool space on campus to host the [Redmond meetup](https://lu.ma/qb0hhhkm). Just remember, the venue fees are up to the host to pay.
+
+***What to provide/organize:*** These are free events, and hosts are not obligated to provide anything but good conversation. Keep it simple---this is just a chance for people to meet and chat.
+
+***Keep attendees informed:*** You can always talk it out with your registered attendees via Luma---hosts will have the ability to "*Send a Blast*" out to their attendees. Also, the Community Day thread on Discord will be a great way to hook up with attendees on that platform. We'll promote these events on the Home Assistant socials, to ensure we reach the whole community.
+
+***Clashes:*** If two or more events are requested in the same city, we'll link up hosts so they can organize things together.
+
+***Have more questions for me?*** Send me a message on Discord ([@adorablecyborg](https://discord.com/users/303933403303247872)) or [email](mailto:missy@openhomefoundation.org?subject=Community%20Day%202025)--- I'm absolutely happy to help you out where I can! 😌
+
+## See you soon
+
+Our team has been meeting the community all over the world, and y'all never cease to amaze me. People are doing really cool stuff with Home Assistant, and you'll leave meetups with new automation ideas, cool DIY plans, and maybe even some new friends. Honestly, if you're like me, every one of my family members are sick of hearing about my smart home, it's time to meet some people who only want to talk about that! 🤝
+
+If you can't make it on May 24th, don't fret---there'll be a Community Day next year! Although Community Day will be special, you can always get on the Home Assistant community [meetup channel](https://discord.com/channels/330944238910963714/1325926382575816725) in Discord or the [Social section of the forum](https://community.home-assistant.io/c/social/) to set up group meetups throughout the year. 😊
+
+I can't wait to see all the events added and how many people register for these meetups! 🤩 I'll share more information as the day approaches, including how you can share your meetup photo 📸, which we'll feature on our channels. See you on the socials!
diff --git a/source/changelogs/core-2025.4.markdown b/source/changelogs/core-2025.4.markdown
new file mode 100644
index 00000000000..dce640641f6
--- /dev/null
+++ b/source/changelogs/core-2025.4.markdown
@@ -0,0 +1,2335 @@
+---
+title: Full changelog for Home Assistant Core 2025.4
+description: Detailed changelog for the Home Assistant Core 2025.4 release
+replace_regex: \s\(\[?[a-z0-9\-\s_]+\]?\)$
+---
+
+These are all the changes included in the Home Assistant Core 2025.4 release.
+
+For a summary in a more readable format:
+[Release notes blog for this release](/blog/2025/04/02/release-20254/).
+
+## All changes
+
+- Bump version to 2025.4.0 ([@bramkragten] - [#139381])
+- Bump hatasmota to 0.10.0 ([@emontnemery] - [#139382])
+- Small improvements to Home Connect strings and icons ([@Diegorro98] - [#139386])
+- Add reauthentication to azure_storage ([@zweckj] - [#139411])
+- Bump codecov/codecov-action from 5.3.1 to 5.4.0 (@dependabot - [#139408])
+- Bump docker/build-push-action from 6.14.0 to 6.15.0 (@dependabot - [#139407])
+- Bump actions/attest-build-provenance from 2.2.0 to 2.2.1 (@dependabot - [#139406])
+- Add reconfiguration to azure_storage ([@zweckj] - [#139414])
+- Add water heater entity to LG ThinQ ([@LG-ThinQ-Integration] - [#138257])
+- Add lawn mower entity id format ([@mikey0000] - [#139402])
+- Bump ruff to 0.9.8 ([@joostlek] - [#139434])
+- Bump aioesphomeapi to 29.3.0 ([@bdraco] - [#139441])
+- Add more diagnostic info to Reolink ([@starkillerOG] - [#139436])
+- Full test coverage for Vodafone Station init ([@chemelli74] - [#139451])
+- Improve descriptions of `lyric.set_hold_time` action and field ([@NoRi2909] - [#139385])
+- Add coverage to ensure we do not load base platforms before recorder ([@bdraco] - [#139464])
+- Bump aioesphomeapi to 29.3.1 ([@bdraco] - [#139465])
+- Bump pyfibaro to 0.8.2 ([@rappenze] - [#139471])
+- Adjust recorder backup platform tests ([@emontnemery] - [#139492])
+- Add Sensor to PG LAB Integration ([@pglab-electronics] - [#138802])
+- Add floor_entities function and filter ([@Petro31] - [#136509])
+- Enable ASYNC ruff rules ([@joostlek] - [#139507])
+- Bump actions/cache from 4.2.1 to 4.2.2 (@dependabot - [#139490])
+- Bump dawidd6/action-download-artifact from 8 to 9 (@dependabot - [#139488])
+- Bump actions/attest-build-provenance from 2.2.1 to 2.2.2 (@dependabot - [#139489])
+- Log a warning when replacing existing config entry with same unique id ([@epenet] - [#130567])
+- Improve description of `mode` field in `geniushub.set_zone_mode` action ([@NoRi2909] - [#139513])
+- Bump wheels to 2025.02.0 ([@edenhaus] - [#139525])
+- Bump pyoverkiz to 1.16.1 ([@ALERTua] - [#139532])
+- Set device class for wind direction weatherflow entities ([@natekspencer] - [#139397])
+- Check area temperature sensors in get temperature intent ([@synesthesiam] - [#139221])
+- Text-to-Speech refactor ([@balloob] - [#139482])
+- Clarify description of `icloud.update` action ([@NoRi2909] - [#139535])
+- Add support for continue conversation in Assist Pipeline ([@balloob] - [#139480])
+- Move TTS entity to own file ([@balloob] - [#139538])
+- Rework Comelit tests ([@chemelli74] - [#139475])
+- Use new pyfibaro library features ([@rappenze] - [#139476])
+- Update Bluetooth remote config entries if the MAC is corrected ([@bdraco] - [#139457])
+- Add OptionsFlowHandler test for Lutron ([@cameronr] - [#139463])
+- Create device for the hub in SmartThings ([@joostlek] - [#139545])
+- Stream the TTS result from webview ([@balloob] - [#139543])
+- Bump bleak-esphome to 2.9.0 ([@bdraco] - [#139467])
+- Add SmartThings hub connections ([@joostlek] - [#139549])
+- Tuya tyd fix ([@andylittle] - [#135558])
+- Fix caldav todo list not updating after adding items with Assist ([@daniele-athome] - [#135980])
+- Bump orjson to 3.10.15 ([@bdraco] - [#135223])
+- Improve description of `door` field in `subaru.unlock_specific_door` action ([@NoRi2909] - [#139558])
+- Improve description of `media_content_type` in `media_extractor.play_media` action ([@NoRi2909] - [#139559])
+- Add suggested area to SmartThings ([@joostlek] - [#139570])
+- Fix blog post link in comment ([@epenet] - [#139568])
+- Bump azure_storage quality to platinum ([@zweckj] - [#139452])
+- Add strict typing to Vodafone Station ([@chemelli74] - [#139573])
+- Remove deprecated import from configuration.yaml from opentherm_gw ([@mvn23] - [#139581])
+- Update wallbox to 0.8.0 ([@jorisdrenth] - [#139553])
+- Bump aiocomelit to 0.11.1 ([@chemelli74] - [#139589])
+- Bump motionblinds to 0.6.26 ([@starkillerOG] - [#139591])
+- Add simplisafe OUTDOOR_ALARM_SECURITY_BELL_BOX device type ([@clever-trevor] - [#134386])
+- Improve certificate handling in MQTT config flow ([@jbouwh] - [#137234])
+- Clean up squeezebox build_item_response part 1 ([@peteS-UK] - [#139321])
+- Migrate Assist Pipeline to use TTS stream ([@balloob] - [#139542])
+- Add create_reward action to Habitica integration ([@tr4nt0r] - [#139304])
+- Use model list to check anthropic API key ([@Shulyaka] - [#139307])
+- Update quality scale to platinum 🏆️ for pyLoad integration ([@tr4nt0r] - [#138891])
+- Switch cleanup for Shelly (part 2) ([@chemelli74] - [#138922])
+- Introduce demo valve ([@tathamoddie] - [#138187])
+- Update quality scale to platinum 🏆️ for IronOS integration ([@tr4nt0r] - [#138217])
+- Fix demo valve platform to use AddConfigEntryEntitiesCallback ([@thecode] - [#139602])
+- Bump pyopenweathermap to 0.2.2 and remove deprecated API version v2.5 ([@wittypluck] - [#139599])
+- Fix type for ESPHome assist satellite events ([@balloob] - [#139618])
+- Treat "Core" as name, fix grammar in `reload_core_config` action ([@NoRi2909] - [#139622])
+- Add `update_habit` action to Habitica integration ([@tr4nt0r] - [#139311])
+- Bump pyoverkiz to 1.16.2 ([@ALERTua] - [#139623])
+- Add FrankEver virtual integration ([@bieniu] - [#139629])
+- Add LinkedGo virtual integration ([@bieniu] - [#139625])
+- Fix Tuya unsupported Temperature & Humidity Sensors (with or without external probe) ([@maghiel] - [#138542])
+- Fibaro integration refactorings ([@rappenze] - [#139624])
+- Motion blind type list ([@starkillerOG] - [#139590])
+- Add prefix path support to pyLoad integration ([@tr4nt0r] - [#139139])
+- Add last updated attribute to UK transport train sensor ([@MarioZG] - [#139352])
+- Remove deprecated device migration from opentherm_gw ([@mvn23] - [#139612])
+- Remove deprecated entity migration from opentherm_gw ([@mvn23] - [#139641])
+- Add typing/async to NMBS ([@silamon] - [#139002])
+- Finish removing import from configuration.yaml support from opentherm_gw ([@mvn23] - [#139643])
+- Add nut commands to turn off/on outlet 1 & 2 ([@martin12as] - [#139044])
+- Make spelling of "All-Link" consistent in Insteon integration ([@NoRi2909] - [#139651])
+- Add fault event to balboa ([@natekspencer] - [#138623])
+- Fix typo in `outlet_2_load_off` of NUT integration ([@NoRi2909] - [#139656])
+- Bump aioesphomeapi to 29.3.2 ([@bdraco] - [#139653])
+- Add model_id filter to device selector ([@karwosts] - [#135646])
+- Fetch integration list from next branch for analytics insights ([@joostlek] - [#137250])
+- Improve Linkplay device unavailability detection ([@trevorwarwick] - [#138457])
+- Improve outlet constant naming for NUT ([@martin12as] - [#139660])
+- Keep entered values in form when connecting to Epson projector fails ([@mvdwetering] - [#135402])
+- Add Night mode and `HVACAction` to Advantage Air ([@hydazz] - [#137475])
+- Increase test coverage for todo intent ([@Lesekater] - [#135960])
+- Do not force logfile to roll over when using TimedRotatingFileHandler ([@andresb5555] - [#128301])
+- Adjust type hints in update entity ([@emontnemery] - [#129387])
+- Fix missing camel-case in one "ElevenLabs" string ([@NoRi2909] - [#139686])
+- Add additional garage door code to Advantage Air ([@Bre77] - [#139687])
+- Fix stale docstrings in onboarding tests ([@emontnemery] - [#139696])
+- Bump hass-nabucasa from 0.92.0 to 0.94.0 ([@ludeeus] - [#139697])
+- Add strict typing to Comelit ([@chemelli74] - [#139455])
+- Fix missing sentence-casing in three Fully Kiosk Browser strings ([@NoRi2909] - [#139705])
+- Add complete item intent function for todo component ([@Lesekater] - [#127806])
+- Grammar fixes in user-facing strings of the LinkPlay integration ([@NoRi2909] - [#139709])
+- Bump mastodon.py to 2.0.1 ([@andrew-codechimp] - [#139701])
+- Bump aiocomelit to 0.11.2 ([@chemelli74] - [#139707])
+- Add charging binary_sensor so front end can render battery icon properly ([@StaleLoafOfBread] - [#139684])
+- Add translations for switch state by device class ([@piitaya] - [#139693])
+- Support up to 8 AUX outputs in Ness Alarm ([@Poshy163] - [#139718])
+- Add a base class for template entities to inherit from ([@Petro31] - [#139645])
+- Improve strings in `openai_conversation.generate_image` action ([@NoRi2909] - [#139736])
+- Fix regression in template flag introduced by #139645 ([@emontnemery] - [#139742])
+- Remove unused constant from recorder ([@emontnemery] - [#139741])
+- Upload test results to codecov ([@edenhaus] - [#138512])
+- Bump bleak-esphome to 2.10.2 ([@bdraco] - [#139731])
+- Disable test results upload on forks ([@edenhaus] - [#139749])
+- VoIP block non-TTS announcements ([@balloob] - [#139658])
+- Simplify lint-only job config [ci] ([@cdce8p] - [#139748])
+- Add timer support to VoIP ([@balloob] - [#139763])
+- Simplify error handling in BackupAgent when a backup is not found ([@emontnemery] - [#139754])
+- Align azure_storage with changes in BackupAgent ([@emontnemery] - [#139765])
+- Align onedrive with changes in BackupAgent ([@emontnemery] - [#139769])
+- Align kitchen_sink with changes in BackupAgent ([@emontnemery] - [#139768])
+- Align webdav with changes in BackupAgent ([@emontnemery] - [#139771])
+- Align cloud with changes in BackupAgent ([@emontnemery] - [#139766])
+- Minor improvement of hassio backup tests ([@emontnemery] - [#139775])
+- Upload test result artifacts always ([@edenhaus] - [#139776])
+- Align synology_dsm with changes in BackupAgent ([@emontnemery] - [#139770])
+- Align hassio with changes in BackupAgent ([@emontnemery] - [#139780])
+- Move ForkedDaapdUpdater setup to __init__ module ([@epenet] - [#139733])
+- Align google_drive with changes in BackupAgent ([@emontnemery] - [#139767])
+- Capitalize "Suez Water" and "ID" in user-facing strings ([@NoRi2909] - [#139782])
+- Add create_habit action to Habitica integration ([@tr4nt0r] - [#139673])
+- Clean up squeezebox build_item_response part 2 ([@peteS-UK] - [#139595])
+- Improve unique_id tests for Shelly block devices ([@chemelli74] - [#139778])
+- Bump bluetooth-data-tools to 1.25.0 ([@bdraco] - [#139802])
+- Bump fnv-hash-fast to 1.4.0 ([@bdraco] - [#139801])
+- Remove redundant is not None checks in Template integration ([@Petro31] - [#139790])
+- Bump zeroconf to 0.146.0 ([@bdraco] - [#139804])
+- Bump bleak-esphome to 2.11.0 ([@bdraco] - [#139803])
+- Bump ulid-transform to 1.3.0 ([@bdraco] - [#139808])
+- Bump aioesphomeapi to 29.4.0 ([@bdraco] - [#139806])
+- Add common PDU sensors to NUT ([@tdfountain] - [#139669])
+- Bump dbus-fast to 2.35.1 ([@bdraco] - [#139809])
+- Bump cached-ipaddress to 0.10.0 ([@bdraco] - [#139807])
+- Bump habluetooth to 3.25.0 ([@bdraco] - [#139811])
+- Bump actions/upload-artifact from 4.6.0 to 4.6.1 (@dependabot - [#139813])
+- Bump actions/download-artifact from 4.1.8 to 4.1.9 (@dependabot - [#139814])
+- Clean Home Connect error handling ([@MartinHjelmare] - [#139817])
+- Bump ohmepy to 1.4.0 ([@dan-r] - [#139791])
+- Improve frame helper tests ([@emontnemery] - [#139821])
+- Add vehicle select to Ohme ([@dan-r] - [#139795])
+- Add conditional support for ambient sensors in NUT ([@tdfountain] - [#139675])
+- Fix disable test results uploads properly ([@edenhaus] - [#139827])
+- Convert Shelly block switches to EntityDescription ([@chemelli74] - [#106985])
+- Bump `gios` to version 6.0.0 ([@bieniu] - [#139832])
+- Improve frame helper tests ([@emontnemery] - [#139843])
+- Fix stale test name in vacuum ([@emontnemery] - [#139853])
+- Improve the mock_integration_frame test fixture ([@emontnemery] - [#139850])
+- Make helpers.frame.report_usage work when called from any thread ([@emontnemery] - [#139836])
+- Reimplement PGLab sensor to use a coordinator ([@pglab-electronics] - [#139789])
+- Improve descriptions in overseerr.get_requests action ([@NoRi2909] - [#139781])
+- Bump dbus-fast to 2.37.0 ([@bdraco] - [#139877])
+- Bump pynecil to v4.1.0 ([@tr4nt0r] - [#139881])
+- Add abstract class to trigger based template entities ([@Petro31] - [#139650])
+- Small cleanups for HomeKit ([@bdraco] - [#139889])
+- Bump actions/attest-build-provenance from 2.2.2 to 2.2.3 (@dependabot - [#139896])
+- Bump aiolifx to 1.1.4 to enable new LIFX product support ([@Djelibeybi] - [#139897])
+- Fix sentence-casing in `music_assistant.get_library` action ([@NoRi2909] - [#139901])
+- Add support for IronOS v2.23 ([@tr4nt0r] - [#139903])
+- Drop report method from frame helper ([@epenet] - [#139920])
+- Homee parallel updates ([@Taraman17] - [#139926])
+- Improve description of `tibber.get_prices` action ([@NoRi2909] - [#139863])
+- Set Ondilo ICO diagnostic sensors ([@MartinHjelmare] - [#139934])
+- Simplify lint-only config (2) [ci] ([@cdce8p] - [#139933])
+- Prioritize integration_domain passed to helper.frame.report_usage ([@emontnemery] - [#139819])
+- Update geocachingapi to v0.3.0 ([@marc7s] - [#139878])
+- Use runtime_data in forked_daapd ([@epenet] - [#138284])
+- Reset helpers.frame._REPORTED_INTEGRATIONS in between tests ([@epenet] - [#139924])
+- Improve loader dependency tests ([@arturpragacz] - [#139916])
+- Update typing of `BackupAgent.async_get_backup` ([@emontnemery] - [#139923])
+- Add Roborock buttons for starting routines ([@regevbr] - [#139845])
+- Use mysensors config entry async_on_unload ([@MartinHjelmare] - [#139978])
+- Add Homee select platform ([@Taraman17] - [#139534])
+- Add a roborock quality_scale.yaml ([@allenporter] - [#139849])
+- Track when an LLM expects to continue a conversation ([@balloob] - [#139810])
+- Bump dbus-fast to 2.39.3 ([@bdraco] - [#140015])
+- Bump ulid-transform to 1.4.0 ([@bdraco] - [#140037])
+- Update whirlpool-sixth-sense to 0.19.1 ([@abmantis] - [#139987])
+- Make descriptions of `keymitt_ble.calibrate` action UI-friendly ([@NoRi2909] - [#139866])
+- Improve strings of `swiss_public_transport.fetch_connections` action ([@NoRi2909] - [#139911])
+- Clean up ondilo ico oauth2 ([@MartinHjelmare] - [#139927])
+- Improve user-facing strings of Bang & Olufsen integration ([@NoRi2909] - [#140062])
+- Add `update_todo` action to Habitica ([@tr4nt0r] - [#139799])
+- Add file upload service to OneDrive ([@zweckj] - [#139092])
+- Update debugpy to 1.8.13 ([@frenck] - [#140067])
+- Cleanup add_to_hass method in Shelly tests (part 1) ([@chemelli74] - [#140075])
+- Add check for invalid options with specific platforms ([@Petro31] - [#140082])
+- Add template function: shuffle ([@frenck] - [#140077])
+- Set media type correctly in the roon integration- so the media card correctly displays the artist. ([@pavoni] - [#139871])
+- Cache sensor precision calculation ([@bdraco] - [#140019])
+- Update pyfronius to 0.7.7 and adjust quality scale to platinum ([@farmio] - [#140084])
+- Update pytest to 8.3.5 ([@frenck] - [#140102])
+- Update ruff to 0.9.10 ([@frenck] - [#140105])
+- Update coverage to 7.6.12 ([@frenck] - [#140104])
+- Bump `accuweather` to version 4.2.0 ([@bieniu] - [#140106])
+- Add Dependency Review action ([@frenck] - [#140108])
+- Send Roborock commands via cloud api when needed ([@Lash-L] - [#138496])
+- Use the set language for condition sensors in Accuweather integration ([@bieniu] - [#140107])
+- Add template function: typeof ([@frenck] - [#140081])
+- Fix typo "an problem" in `nmbs` integration ([@NoRi2909] - [#140151])
+- Make spelling of "MELCloud" consistent, fix typo "an connection" ([@NoRi2909] - [#140150])
+- Fix typo "an connection" in `aftership` integration ([@NoRi2909] - [#140148])
+- Fix typo "an comma" in `doorbird` integration ([@NoRi2909] - [#140146])
+- Replace typo "an code" with "alarm code" in `elkm1` integration ([@NoRi2909] - [#140143])
+- Fix typos in `homeassistant_hardware` strings ([@NoRi2909] - [#140154])
+- Use HAs configured timezone for KNX expose time ([@farmio] - [#140158])
+- Add template function: flatten ([@frenck] - [#140157])
+- Bump aioesphomeapi to 29.4.1 ([@bdraco] - [#140165])
+- Fix conversation trigger with variables ([@arturpragacz] - [#140066])
+- Improve LLM tool descriptions for brightness and volume percentage ([@allenporter] - [#138685])
+- Fix not available source in Onkyo ([@arturpragacz] - [#140175])
+- Bump aioshelly to 13.2.0 ([@bdraco] - [#140178])
+- Add Ogemray virtual integration ([@bieniu] - [#140185])
+- Migrate shelly Bluetooth scanner to use correct MAC address ([@bdraco] - [#140180])
+- Use CONF_* const in Shelly tests ([@chemelli74] - [#140189])
+- Update mypy-dev to 1.16.0a5 ([@cdce8p] - [#140188])
+- Add create_todo action to Habitica integration ([@tr4nt0r] - [#140090])
+- Deprecate use of invalid unit of measurement for mqtt sensor ([@jbouwh] - [#140164])
+- Add template functions: md5, sha1, sha256, sha512 ([@frenck] - [#140192])
+- Improve category map for air quality and pollen sensors in AccuWeather ([@bieniu] - [#140193])
+- Update govee-local-api to 2.1.0 ([@Galorhallen] - [#140201])
+- Align CONF_ in Shelly integration ([@chemelli74] - [#140202])
+- Fix mysensors climate target temps ([@MartinHjelmare] - [#140220])
+- Remove mysensors assumed state dead code ([@MartinHjelmare] - [#140227])
+- Add locking and unlocking feature to igloohome integration ([@keithle888] - [#136002])
+- Bump aioesphomeapi to 29.5.1 ([@bdraco] - [#140231])
+- Bump `nettigo_air_monitor` to version 4.1.0 ([@bieniu] - [#140241])
+- Fix ONVIF camera entities ids getting shuffled on reload ([@felipecrs] - [#139676])
+- Bump github/codeql-action from 3.28.10 to 3.28.11 (@dependabot - [#140254])
+- Bump inkbird-ble to 0.8.0 ([@bdraco] - [#140244])
+- Add support for BH1750 illuminance sensor in Nettigo Air Monitor integration ([@bieniu] - [#140242])
+- Use short-hand attributes in remote-rpi-gpio ([@epenet] - [#140263])
+- Improve description of `schedule.get_schedule` action ([@NoRi2909] - [#140284])
+- Bump zwave-js-server-python to 0.61.0 ([@MindFreeze] - [#140282])
+- Improve action descriptions in `energyzero` integration ([@NoRi2909] - [#140283])
+- Bump bluetooth-data-tools to 1.26.0 ([@bdraco] - [#140262])
+- Add streaming to Teslemetry update platform ([@Bre77] - [#140021])
+- TotalConnect add partition arming_state in diagnostic ([@austinmroczek] - [#140140])
+- Add strict typing of account & instance to Mastodon ([@andrew-codechimp] - [#139739])
+- Bump go2rtc to 1.9.9 ([@edenhaus] - [#140302])
+- Enable TTS streaming implementations ([@balloob] - [#140176])
+- Standardize conversation.async_process method ([@balloob] - [#140125])
+- Set anthemav volume_step to 0.01 ([@glenrobertson] - [#140130])
+- Capitalize abbreviations in `lektrico` integration ([@NoRi2909] - [#140311])
+- Do not add outside temperature sensor for FGLair if reading is None ([@crevetor] - [#140298])
+- Fix hass stop in bootstrap ([@arturpragacz] - [#132795])
+- Improve user-facing strings of `nordpool` integration ([@NoRi2909] - [#140286])
+- Fix sentence-casing and spelling of "LED" in `baf` integration ([@NoRi2909] - [#140343])
+- Add strict typing of post to Mastodon ([@andrew-codechimp] - [#140299])
+- Correct sentence-casing and spelling of "LED" in `zha` integration ([@NoRi2909] - [#140342])
+- Bump pylutron-caseta 0.24.0 ([@bdraco] - [#140338])
+- Bump inkbird-ble to 0.9.0 ([@bdraco] - [#140339])
+- Update hdate dependency to 1.0.3 ([@tsvi] - [#137247])
+- Improve dependencies resolution ([@arturpragacz] - [#138502])
+- Capitalize "HVAC" abbreviation in `fritzbox` integration ([@NoRi2909] - [#140344])
+- Improve name and description of `nexia.set_hvac_run_mode` action ([@NoRi2909] - [#140348])
+- Use trademark "Time-of-Use Price Plan" in `srp_energy` integration ([@NoRi2909] - [#140350])
+- Improve config flow for GIOS ([@bieniu] - [#139935])
+- Migrate google_assistant tests to use unit system ([@epenet] - [#140357])
+- Migrate gree tests to use unit system ([@epenet] - [#140358])
+- Migrate google_assistant tests to use unit system ([@epenet] - [#140366])
+- Migrate lg_thinq tests to use unit system ([@epenet] - [#140365])
+- Migrate balboa tests to use unit system ([@epenet] - [#140371])
+- Remove redundant after dependencies in search ([@arturpragacz] - [#140353])
+- Migrate homekit tests to use unit system ([@epenet] - [#140372])
+- Improve user-facing strings of `hassio` component ([@NoRi2909] - [#140355])
+- Remove redundant after dependencies in person ([@arturpragacz] - [#140354])
+- Bump reolink-aio to 0.12.2 ([@starkillerOG] - [#140369])
+- Improve roborock map image ([@allenporter] - [#140379])
+- Add microseconds as unit for device class duration ([@victorclaessen] - [#140307])
+- Fix sentence-casing in `hive` integration ([@NoRi2909] - [#140382])
+- Add modbus climate hvac action ([@Kirchoff] - [#139864])
+- Fix wrong punctuation in `hive` integration ([@NoRi2909] - [#140390])
+- Add platinum quality scale to incomfort integration ([@jbouwh] - [#136387])
+- Add TTS token to TTS-END event ([@balloob] - [#140333])
+- Rename test helpers module in mqtt ([@epenet] - [#140375])
+- Fix typo in Google Generative AI conversation: intead -> instead ([@frenck] - [#140398])
+- Enable HEOS automatic failover ([@andrewsayre] - [#140394])
+- Add dock dryer control to Roborock ([@Lash-L] - [#138495])
+- Improve descriptions of `lifx.effect_sky` action ([@NoRi2909] - [#140400])
+- Only store strings in cloud TTS default options ([@balloob] - [#140332])
+- Add Roborock data_description for config flow and options flow ([@allenporter] - [#140384])
+- Add lutron caseta model Caseta Shade SerenaEssentialsRollerShade ([@TiddlyWiddly] - [#139800])
+- Add Bluetooth discovery support for InkBird ITH-11-B ([@bdraco] - [#140423])
+- Fix typo in description of `lifx.effect_morph` action ([@NoRi2909] - [#140416])
+- Set Roborock current map to config instead of select ([@Lash-L] - [#140429])
+- bump pydaikin to 2.14.1 ([@tofuSCHNITZEL] - [#140424])
+- Migrate mqtt tests to use unit system ([@epenet] - [#140376])
+- TotalConnect refactor tests ([@austinmroczek] - [#140240])
+- Split timeout in lutron_caseta to increase configure timeout ([@bdraco] - [#138875])
+- Bump fyta_cli to 0.7.1 ([@dontinelli] - [#140452])
+- Add exceptions translation for Vodafone Station ([@chemelli74] - [#140410])
+- Prevent ipv6 discovery messages for Sonos ([@PeteRager] - [#139648])
+- Bump SQLAlchemy to 2.0.39 ([@bdraco] - [#140473])
+- Add rain state binary sensor to ecowitt ([@jpbede] - [#140463])
+- Bump aioesphomeapi to 29.6.0 ([@bdraco] - [#140481])
+- Change the local to-do list creation button to 'Create' ([@allenporter] - [#140484])
+- Update roborock quality scale for docs items ([@allenporter] - [#140483])
+- Use `runtime_data` to store coordinator state ([@ptr727] - [#140486])
+- Correct fallback to state in state machine when processing statistics ([@emontnemery] - [#140396])
+- Update pipdeptree to 2.25.1 ([@cdce8p] - [#140507])
+- Improve frontend typing ([@cdce8p] - [#140503])
+- Assist satellite to use TTS tokens for announcements ([@balloob] - [#140336])
+- Fix spelling of "ID" and excessive colon in `bang_olufsen` integration ([@NoRi2909] - [#140518])
+- Fix sentence-casing and spelling of "ID" in `system_bridge` integration ([@NoRi2909] - [#140516])
+- Use runtime data in Vodafone Station ([@chemelli74] - [#140464])
+- Make actions in `flo` integration UI-friendly ([@NoRi2909] - [#140522])
+- Improve tado typing ([@cdce8p] - [#140505])
+- Switch more TTS core to async generators ([@balloob] - [#140432])
+- Add parallel updates to Vodafone Station ([@chemelli74] - [#140532])
+- Bump ohmepy to 1.4.1 ([@dan-r] - [#140535])
+- Fix ollama history trimming test ([@thecode] - [#140538])
+- Bump bleak-esphome to 2.12.0 ([@bdraco] - [#140543])
+- Add lawn mower support to HomeKit ([@piitaya] - [#140438])
+- Fix call on root logger (LOG015) ([@cdce8p] - [#140556])
+- Fix unnecessary-dict-comprehension-for-iterable (C420) ([@cdce8p] - [#140555])
+- Update to version 1.6.0 of gardena library ([@elupus] - [#140559])
+- Fix missing RGBW field description reference in Lokalise - step 1 ([@NoRi2909] - [#140526])
+- Bump habluetooth to 3.25.1 and bluetooth-auto-recovery to 1.4.5 ([@bdraco] - [#140561])
+- Bump dbus-fast to 2.39.5 ([@bdraco] - [#140565])
+- Add missing typing to Vodafone Station ([@chemelli74] - [#140562])
+- Fix missing RGBW field description reference in Lokalise - step 2 ([@NoRi2909] - [#140576])
+- Migrate template light to new style ([@Petro31] - [#140326])
+- Bump aioshelly to 13.3.0 ([@bdraco] - [#140571])
+- Bump habluetooth to 3.27.0 ([@bdraco] - [#140569])
+- Add parallel updates to Comelit ([@chemelli74] - [#140527])
+- Use TypeVar default for Generator ([@cdce8p] - [#140506])
+- Add exceptions translation for Comelit ([@chemelli74] - [#140404])
+- Remove WebDAV properties and rely on metadata file ([@jpbede] - [#140539])
+- Use correct unit symbol "min" for minutes in `webmin` integration ([@NoRi2909] - [#140448])
+- Use test snapshots for Shelly climate ([@bieniu] - [#140582])
+- Expose ZWaveJS`supports_long_range` to the frontend ([@MindFreeze] - [#140489])
+- Bump ruff to 0.10.0 ([@joostlek] - [#140541])
+- Add initial MQTT subentry support for notify entities ([@jbouwh] - [#138461])
+- Add streaming switches to Teslemetry ([@Bre77] - [#137145])
+- Fix time to full charge in Teslemetry ([@Bre77] - [#137996])
+- Add dynamic update interval to Roborock ([@Lash-L] - [#140563])
+- Add availability support for MQTT subentries ([@jbouwh] - [#138673])
+- Improve Snoo testing ([@Lash-L] - [#139302])
+- Allow configuring ignored devices from dormakaba_dkey user flow ([@emontnemery] - [#140596])
+- Allow configuring ignored devices from improve_ble user flow ([@emontnemery] - [#140595])
+- Bump aioharmony to 0.5.2 ([@bdraco] - [#140589])
+- Add Z-Wave JS NVM backup and restore API ([@MindFreeze] - [#139233])
+- Add streaming media platform to Teslemetry ([@Bre77] - [#140482])
+- Bump ruff to 0.11.0 ([@joostlek] - [#140598])
+- Add lawn mower support to Google Assistant ([@piitaya] - [#140530])
+- Add update_daily action to Habitica integration ([@tr4nt0r] - [#140328])
+- Add setup function to improv_ble ([@emontnemery] - [#140594])
+- Fix len-test (PLC1802) ([@cdce8p] - [#140600])
+- Fix media_player Toggle when in idle ([@mvdwetering] - [#78192])
+- Add missing translations for `options` attribute in AccuWeather integration ([@bieniu] - [#140610])
+- Bump pyOverkiz to 1.16.3 ([@iMicknl] - [#140621])
+- ZBT-1 and Yellow firmware update entities for Zigbee/Thread ([@puddly] - [#138505])
+- Move redundant attribute and key error handling to event parser caller ([@jterrace] - [#140630])
+- Bump bluetooth-data-tools to 1.26.1 ([@bdraco] - [#140635])
+- Bump nexia to 2.4.0 ([@bdraco] - [#140634])
+- Separate Roborock entities to a new dock device ([@Lash-L] - [#140612])
+- Anthropic conversation extended thinking support ([@Shulyaka] - [#139662])
+- Rework cover reproduce_state to consider supported features ([@bdraco] - [#140558])
+- Add generate content service for OpenAI to match Google AI ([@timlaing] - [#122818])
+- Bump aioesphomeapi to 29.7.0 ([@bdraco] - [#140641])
+- Bump habluetooth to 3.32.0 ([@bdraco] - [#140640])
+- Add missing translations for `options` attribute in Nettigo Air Monitor integration ([@bieniu] - [#140662])
+- Bump `aioshelly` to version 13.4.0 ([@bieniu] - [#140671])
+- Remove unknown from Shelly sensor state ([@chemelli74] - [#140597])
+- Fix sensor values for Power and Energy for Wolf Heatpumps ([@mtielen] - [#139007])
+- Add onvif parser support for reolink package and hikvision alarm ([@jterrace] - [#140669])
+- Add EHS test fixture to SmartThings ([@joostlek] - [#140199])
+- Add valve platform to SmartThings ([@joostlek] - [#140195])
+- Bump aioautomower to 2025.3.1 ([@Thomas55555] - [#140682])
+- Pass scanner mode to shelly Bluetooth scanner ([@bdraco] - [#140689])
+- Add voip_utils to voip loggers ([@IceBotYT] - [#140695])
+- Add Remote calendar integration ([@Thomas55555] - [#138862])
+- Bump openai to 1.66.3 ([@Shulyaka] - [#140690])
+- Split out yaml loading into own package ([@jpbede] - [#140683])
+- Update knx-frontend and increase BinarySensor reset_after limit ([@Foxi352] - [#140196])
+- Fix audiobooks always start from beginning on Sonos ([@PeteRager] - [#140663])
+- Fix auto seat heater in Teslemetry ([@Bre77] - [#140703])
+- Add Select entity to Snoo ([@Lash-L] - [#140638])
+- Add price cap support to Ohme ([@dan-r] - [#140537])
+- Bump annotatedyaml to 0.2.0 ([@jpbede] - [#140715])
+- Stronger type annotations for conversation content ([@Shulyaka] - [#140725])
+- Add binary sensor to Snoo ([@Lash-L] - [#140729])
+- OpenAI Responses API ([@Shulyaka] - [#140713])
+- bump Python-Roborock to 2.14.0 ([@Lash-L] - [#140727])
+- Add strict typing to remote_calendar ([@Thomas55555] - [#140734])
+- Adjusts strings in create actions in Habitica integration ([@tr4nt0r] - [#140742])
+- Add option to specify Reolink Basic Service Port ([@starkillerOG] - [#137603])
+- Set Home Connect button unique id to shorthand attribute ([@joostlek] - [#140745])
+- Redact emails and names in Bring! diagnostics ([@tr4nt0r] - [#140746])
+- Address post merge comments for remote calendar ([@Thomas55555] - [#140735])
+- Bump TP-Link Omada API to 1.4.4 ([@MarkGodwin] - [#140738])
+- Bump ical to 9.0.1 ([@allenporter] - [#140726])
+- Add Homee binary sensor platform ([@Taraman17] - [#140088])
+- Deprecate SmartThings cover battery state attribute ([@joostlek] - [#140752])
+- Move Roborock MapParser to coordinator ([@Lash-L] - [#140750])
+- Add specific sensor device_class, state_class and unit_of_measurement ([@mbraem] - [#137038])
+- Deprecate Valve binary sensor in SmartThings ([@joostlek] - [#140751])
+- Bump nibe_heatpump component version to add S332/S330 model ([@iiliev-nemetschek] - [#140741])
+- Move Roborock map refresh to coordinator ([@Lash-L] - [#140758])
+- Add snoo switches ([@Lash-L] - [#140748])
+- Fix typo in Homee ([@jwillemsen] - [#140759])
+- Update description of `evaluate_payload` to use friendly name ([@NoRi2909] - [#140736])
+- Bump ci cache version ([@cdce8p] - [#140767])
+- Bump dbus-fast to 2.39.6 ([@bdraco] - [#140775])
+- Bump aiohttp to 3.11.14 ([@bdraco] - [#140773])
+- Call only required listeners on CONNECT/PAIRED in Home Connect ([@Diegorro98] - [#140765])
+- Bump docker/login-action from 3.3.0 to 3.4.0 (@dependabot - [#140780])
+- Add @IvanLH to owners of google_generative_ai_conversation ([@IvanLH] - [#140764])
+- Add support for fan night light in VeSync ([@iprak] - [#140637])
+- Bump zwave-js-server-python to 0.62.0 ([@MindFreeze] - [#140796])
+- Bump pychromecast to 14.0.6 ([@emontnemery] - [#140794])
+- Add PKCE implementation in oauth2 helper ([@svrooij] - [#139509])
+- Add Reolink smart ai binary sensors ([@starkillerOG] - [#140408])
+- Fix Shelly Air lamp life sensor ([@thecode] - [#140799])
+- Use MowerDictionary in Husqvarna Automower ([@Thomas55555] - [#140805])
+- Remove Shelly extra_attributes for RPC & REST devices ([@chemelli74] - [#140792])
+- Improve test coverage and add comment for loading in executor for remote calendar ([@Thomas55555] - [#140807])
+- Fix inconsistent capitalization in `growatt_server` entities ([@NoRi2909] - [#140803])
+- Clarify action descriptions of `smarttub.snooze_reminder` / `reset_reminder` ([@NoRi2909] - [#140810])
+- Don't raise in ConfigFlow.async_set_unique_id if the other flow is a reauth flow ([@emontnemery] - [#140723])
+- Bump reolink-aio to 0.12.3b1 ([@starkillerOG] - [#140811])
+- Add ability to browse (and play) HEOS media ([@andrewsayre] - [#140433])
+- Make all action descriptions in `rachio` consistent ([@NoRi2909] - [#140816])
+- Improve action description in `mealie` integration ([@NoRi2909] - [#140817])
+- Bump thinqconnect to 1.0.5 ([@LG-ThinQ-Integration] - [#140577])
+- Update MCP server to make the stateless API implicit ([@allenporter] - [#140753])
+- Set Parallel updates to 0 in Roborock ([@Lash-L] - [#140837])
+- Move MapData to Coordinator for Roborock ([@Lash-L] - [#140766])
+- Sentence-case "Zip code" in `iqvia` integration strings ([@NoRi2909] - [#140853])
+- Capitalize "ZIP" as abbreviation in `rova` integration strings ([@NoRi2909] - [#140852])
+- Add diagnostics for Ohme ([@dan-r] - [#140833])
+- Update moehlenhoff-alpha2 to 1.4.0 ([@j-a-n] - [#140829])
+- Add event to Snoo ([@Lash-L] - [#140827])
+- Fix capitalization in `nextcloud` entity names ([@NoRi2909] - [#140856])
+- Improve description of `vicare.set_vicare_mode` action ([@NoRi2909] - [#140826])
+- Add Reolink day night state sensor ([@starkillerOG] - [#140825])
+- Bump wolf-comm to 0.0.23 ([@mtielen] - [#140840])
+- Add reconfigure flow to Ohme ([@dan-r] - [#140835])
+- Add dedicated sensors for extra_state_attributes in Shelly integration ([@chemelli74] - [#140793])
+- Add Z-Wave JS lookup_device API ([@MindFreeze] - [#140802])
+- Add exception translations for AccuWeather integration ([@bieniu] - [#140863])
+- Replace unsupported markup of examples in `humidifier.set_mode` action ([@NoRi2909] - [#140824])
+- Update Roborock Map on status change ([@Lash-L] - [#140873])
+- Deprecate Shelly state attributes ([@chemelli74] - [#140791])
+- bump pyHomee to 1.2.8 ([@Taraman17] - [#140870])
+- Fix flakey reolink test ([@starkillerOG] - [#140877])
+- Add exception translations for Brother integration ([@bieniu] - [#140868])
+- Fix warnings in Reolink tests ([@starkillerOG] - [#140878])
+- Make description of `homeassistant.reload_all` action consistent ([@NoRi2909] - [#140887])
+- Fix duplicate descriptions of `homematicip_cloud.activate_eco_mode_with_…` actions ([@NoRi2909] - [#140885])
+- Add exception translations for Airly integration ([@bieniu] - [#140864])
+- Fix cast.show_lovelace_view service description ([@emontnemery] - [#140859])
+- Add Roborock entity with the name of the current room ([@Lash-L] - [#140895])
+- Bump bring-api to v1.1.0 ([@tr4nt0r] - [#140906])
+- Bump actions/download-artifact from 4.1.9 to 4.2.0 (@dependabot - [#140907])
+- Bump annotatedyaml to 0.4.4 ([@bdraco] - [#140861])
+- Clarify description of `speed` field in `omnilogic.set_pump_speed` action ([@NoRi2909] - [#140912])
+- Improve google cast known hosts configuration ([@emontnemery] - [#140913])
+- Fix sentence-casing in `nibe_heatpump` strings ([@NoRi2909] - [#140915])
+- Fix typos in `nibe_heatpump` strings ([@NoRi2909] - [#140917])
+- Update strings for Vodafone Station ([@chemelli74] - [#140919])
+- Minor typing tweak in cast ([@emontnemery] - [#140911])
+- Add Reolink home hub scene select entity ([@starkillerOG] - [#140823])
+- Bump fyta_cli to 0.7.2 ([@dontinelli] - [#140930])
+- Fix misleading airthings_ble test ([@emontnemery] - [#140933])
+- Add quality scale to Vodafone Station ([@chemelli74] - [#139444])
+- Fix flaky cast tests ([@emontnemery] - [#140928])
+- Add exception translations for IMGW-PIB integration ([@bieniu] - [#140936])
+- Fix docstring in selector helper ([@emontnemery] - [#140929])
+- Add capability to display updated firmware versions in Home Assistant ([@MaestroOnICe] - [#140524])
+- Rename BackupManager last_non_idle_event to last_action_event ([@emontnemery] - [#140291])
+- Use official spelling "FFmpeg" in user-facing strings ([@NoRi2909] - [#140937])
+- Use official spelling "FFmpeg" in `ezviz` / `canary` / `onvif` ([@NoRi2909] - [#140938])
+- Add remote control status to SmartThings ([@joostlek] - [#140197])
+- Add turn on/off support to HomeKit TVs ([@bdraco] - [#140957])
+- Bump actions/upload-artifact from 4.6.1 to 4.6.2 (@dependabot - [#140976])
+- Clarify descriptions of `lcn.address_to_device_id` action ([@NoRi2909] - [#140979])
+- Bump github/codeql-action from 3.28.11 to 3.28.12 (@dependabot - [#140975])
+- Bump actions/download-artifact from 4.2.0 to 4.2.1 (@dependabot - [#140974])
+- Add missing exception translation in Vodafone Station ([@chemelli74] - [#140951])
+- Refactor zwave_js config entry setup ([@MartinHjelmare] - [#107635])
+- Remove unused params in "zwave_js/provision_smart_start_node" API ([@MindFreeze] - [#140982])
+- Add template function: combine ([@frenck] - [#140948])
+- Update project metadata for PEP 639 ([@cdce8p] - [#140960])
+- Reorder template extensions ([@frenck] - [#140985])
+- Bump reolink-aio to 0.12.3 ([@starkillerOG] - [#140789])
+- Allow patching Z-Wave platforms specifically in tests ([@MartinHjelmare] - [#140987])
+- Patch Z-Wave platforms in api tests ([@MartinHjelmare] - [#140988])
+- Detect early base platforms in bootstrap ([@arturpragacz] - [#140359])
+- Patch Z-Wave platforms in binary sensor tests ([@MartinHjelmare] - [#140992])
+- Migrate template switch to new style ([@Petro31] - [#140324])
+- Add translations for Roborock Exceptions ([@Lash-L] - [#140964])
+- Patch Z-Wave platforms in button tests ([@MartinHjelmare] - [#141001])
+- Add exception translations for GIOS integration ([@bieniu] - [#141006])
+- Add button platform for Squeezebox integration ([@peteS-UK] - [#140697])
+- Capitalize "PIN to Drive" feature name in `teslemetry` ([@NoRi2909] - [#141011])
+- Bump uv to 0.6.8 ([@edenhaus] - [#141007])
+- Improve Withings sleep and weight default units ([@abmantis] - [#140665])
+- Wolf Smartset: Adding Heatpump Parameters: Frequency, RPM and Flow rate ([@mtielen] - [#140844])
+- Add MQTT cover stop tilt ([@poucz] - [#139912])
+- Fix sentence-casing of "round-trip time" sensors in `ping` ([@NoRi2909] - [#141012])
+- Improve error handling and add exception translations for NextDNS integration ([@bieniu] - [#141005])
+- Fix name of `energenie_power_sockets` integration ([@NoRi2909] - [#141014])
+- Apply sentence-casing to all status codes in `litterrobot` ([@NoRi2909] - [#141020])
+- Update pylint to 3.3.6 ([@cdce8p] - [#141028])
+- Bump actions/cache from 4.2.2 to 4.2.3 (@dependabot - [#140977])
+- Allow USB polling monitor on macOS for development ([@puddly] - [#141029])
+- Log a warning for modules that log too often ([@abmantis] - [#139708])
+- Remove stale devices automatically for Roborock ([@Lash-L] - [#140991])
+- Add a GetHomeState tool to return the current state of the home ([@allenporter] - [#140971])
+- Bump habluetooth to 3.36.0 ([@bdraco] - [#141037])
+- Capitalize "DIP" abbreviation in `apcupsd` ([@NoRi2909] - [#141048])
+- Add `calibrate` button for Shelly BLU TRV ([@bieniu] - [#140578])
+- Fix spelling of "mDNS" in `esphome` ([@NoRi2909] - [#141052])
+- Update Stookwijzer diagnostics and description ([@fwestenberg] - [#141041])
+- Handle wrong WebDAV URL more gracefully in config flow ([@jpbede] - [#141040])
+- Fixed issue where the device was already disconnected when setting up the event platform ([@wjtje] - [#140722])
+- Fix failing Roborock test ([@Lash-L] - [#141059])
+- Add child lock to SmartThings ([@joostlek] - [#140200])
+- Add event platform to SmartThings ([@joostlek] - [#141066])
+- Handle button presses exceptions for Vodafone Station ([@chemelli74] - [#140953])
+- Add support for PM1.0 in SmartThings ([@joostlek] - [#141061])
+- Update quality scale for Sensibo ([@gjohansson-ST] - [#135924])
+- Add update platform to SmartThings ([@joostlek] - [#141070])
+- Deprecate SmartThings events ([@joostlek] - [#141073])
+- Move device creation in SmartThings ([@joostlek] - [#141074])
+- Grade SmartThings on the integration quality scale ([@joostlek] - [#141078])
+- Bump home-assistant/builder from 2025.02.0 to 2025.03.0 (@dependabot - [#141039])
+- Add metered PDU dynamic outlet sensors to NUT ([@tdfountain] - [#140179])
+- Add SSLContext.set_default_verify_paths to asyncio blocking detection ([@bdraco] - [#140648])
+- Bump pyheos to 1.0.4 ([@andrewsayre] - [#141091])
+- Remove Home Connect service error string constants ([@Diegorro98] - [#141102])
+- Use ShellyConfigEntry type in Shelly config flow ([@bieniu] - [#141103])
+- Move Home Connect service actions to a services.py ([@Diegorro98] - [#141100])
+- Add coordinator context override to Home Connect entity constructor ([@Diegorro98] - [#141104])
+- Bump habluetooth to 3.37.0 ([@bdraco] - [#141088])
+- Start reauth for SmartThings if token expired ([@joostlek] - [#141082])
+- Delete deleted devices on runtime in SmartThings ([@joostlek] - [#141080])
+- Add missing Home Connect chiller doors ([@Diegorro98] - [#141105])
+- Improve descriptions of `fan_min_on_time` in `ecobee` actions ([@NoRi2909] - [#141086])
+- Move Vodafone Station to silver quality scale ([@chemelli74] - [#141106])
+- Update pyaprilaire to 0.8.1 ([@chamberlain2007] - [#141094])
+- Refresh coordinator after map sleep for Roborock ([@Lash-L] - [#141093])
+- Add power binary sensor for SmartThings ([@joostlek] - [#141126])
+- Add select platform to SmartThings ([@joostlek] - [#141115])
+- Always allow browsing TuneIn for HEOS ([@andrewsayre] - [#141131])
+- Remove uncalled function in HEOS ([@andrewsayre] - [#141134])
+- Create new entity base class for NUT ([@tdfountain] - [#141122])
+- Use category to define SmartThings binary sensor device class ([@joostlek] - [#141075])
+- Add number platform to SmartThings ([@joostlek] - [#141063])
+- Add Dryer Wrinkle Prevent switch to SmartThings ([@joostlek] - [#141085])
+- Bump python Roborock to 2.16.1 ([@Lash-L] - [#141033])
+- Bump pyOverkiz to 1.16.4 in Overkiz ([@iMicknl] - [#141132])
+- Add oven stop button to SmartThings ([@joostlek] - [#141142])
+- Add door state binary sensor to SmartThings ([@joostlek] - [#141143])
+- Use Debouncer helper in HEOS Coordinator ([@andrewsayre] - [#141133])
+- Inject websession for Roborock api client ([@Lash-L] - [#141141])
+- Add diagnostics to remote calendar ([@Thomas55555] - [#141111])
+- Omit state from the Assist LLM prompts ([@allenporter] - [#141034])
+- Optimize entity creation by storing device name as data in NUT ([@tdfountain] - [#141147])
+- Add PDU dynamic outlet buttons to NUT ([@tdfountain] - [#140317])
+- Add dhcp discovery to Roborock ([@Lash-L] - [#141148])
+- Add Switch platform and PDU dynamic outlet switches to NUT ([@tdfountain] - [#141159])
+- Bump dbus-fast to 2.41.1 ([@bdraco] - [#141162])
+- Bump anyio to 4.9.0 ([@bdraco] - [#141161])
+- Finish strict typing for Roborock ([@Lash-L] - [#141165])
+- Bump openai to 1.68.2 ([@allenporter] - [#141154])
+- Fix icon for "Coffee and Milk counter" in HomeConnect ([@N3rdix] - [#141170])
+- Home Connect test improvements ([@Diegorro98] - [#141135])
+- Rework Synology DSM to use config entry runtime_data ([@mib1185] - [#141084])
+- Fix spelling of user-facing strings in `adax` integration ([@NoRi2909] - [#141190])
+- Fix climate and humidifier platform for Comelit ([@chemelli74] - [#140611])
+- Update strings for Comelit ([@chemelli74] - [#140925])
+- Make variables action not restricted to local scopes ([@arturpragacz] - [#141114])
+- Patch Z-Wave platforms in climate tests ([@MartinHjelmare] - [#141204])
+- Fix sentence-casing in part of `airq` sensor names ([@NoRi2909] - [#141203])
+- Fix sentence-casing of "Station radius" in `airnow` ([@NoRi2909] - [#141200])
+- Fix spelling of "Do you want to set up?" in `airgradient` ([@NoRi2909] - [#141199])
+- Patch Z-Wave platforms in cover tests ([@MartinHjelmare] - [#141205])
+- Use correct unit symbol "min" for minutes in `asuswrt` integration ([@NoRi2909] - [#141206])
+- Cleanup Vodafone Station strings ([@chemelli74] - [#141202])
+- Remove orphan fuel type settings from Tankerkoening ([@mib1185] - [#141207])
+- Add Switcher missing data descriptions ([@thecode] - [#141077])
+- Capitalize "URL" in `feedreader` error message ([@NoRi2909] - [#141210])
+- Patch Z-Wave platforms in event tests ([@MartinHjelmare] - [#141209])
+- Fixes to user-facing strings of `azure_devops` integration ([@NoRi2909] - [#141208])
+- Bump google-cloud-pubsub to 2.29.0 ([@bdraco] - [#141178])
+- Clarify meaning of "level" in `dynalite.request_channel_level` action ([@NoRi2909] - [#141184])
+- Bump linkplay to v0.2.0 ([@silamon] - [#141098])
+- Fix typo "to setup" and sentence-casing in `twilio` ([@NoRi2909] - [#141218])
+- Fix typo "to setup" in `homeassistant_hardware` ([@NoRi2909] - [#141212])
+- Fix Python path for vscode run core task ([@arturpragacz] - [#141090])
+- Add Gemini/OpenAI token stats to the conversation trace ([@allenporter] - [#141118])
+- Fix google calendar working location event filtering ([@allenporter] - [#141222])
+- Update MCP to reconnect to the server on demand ([@allenporter] - [#141215])
+- Fix typo "to setup" in `reolink` ([@NoRi2909] - [#141214])
+- Capitalize "ID" and "URL" abbreviations in `trafikverket_camera` ([@NoRi2909] - [#141238])
+- Use correct unit symbol "min" for minutes in `systemmonitor` integration ([@NoRi2909] - [#141236])
+- Capitalize "Recorder" as the component name in Home Assistant ([@NoRi2909] - [#141226])
+- Clarify the meaning of "recorder" in `energy` issue description ([@NoRi2909] - [#141228])
+- Improve error handling and add exception translations for Nettigo Air Monitor integration ([@bieniu] - [#141183])
+- Fix spelling of "breadcrumbs" in `sentry` integration ([@NoRi2909] - [#141189])
+- Set parallel updates in NUT ([@tdfountain] - [#141225])
+- Bump pydeconz to v120 ([@Kane610] - [#141239])
+- Fix typo "to setup" in `slide_local` ([@NoRi2909] - [#141216])
+- Bump dbus-fast to 2.43.0 ([@bdraco] - [#141240])
+- Switchbot: revert name set to none for temperature sensor ([@Nardol] - [#141149])
+- Bump intents to 2025.3.23 ([@synesthesiam] - [#141241])
+- Bump mcp to 1.5.0 ([@allenporter] - [#141219])
+- Ensure suggested values are added to section schema in data entry fow ([@jbouwh] - [#141227])
+- Bump aioautomower to 2025.3.2 ([@Thomas55555] - [#141211])
+- Fix descriptions of `virtualkey` and `set_variable_value` actions ([@NoRi2909] - [#141175])
+- Use common translation string in SmartThings ([@joostlek] - [#141250])
+- Alphabetize key lists for strings, icons and sensors in NUT ([@tdfountain] - [#141254])
+- Add Google Search tool in Google Generative AI ([@IvanLH] - [#140772])
+- Google gen ai fix for empty chat log messages (#136019) ([@Mirkbot] - [#140315])
+- Add cloud onboarding views ([@emontnemery] - [#139422])
+- Bump gassist-text to 0.0.12 ([@tronikos] - [#141244])
+- Remove manufacturer data for linkplay ([@silamon] - [#141261])
+- ConfigSubEntryFlow _get_reconfigure_entry() -> _get_entry() ([@ptr727] - [#141017])
+- Fix sentence-casing and change to "1-Wire" in `onewire` strings ([@NoRi2909] - [#141265])
+- Add binary sensors for fridge doors in SmartThings ([@joostlek] - [#141252])
+- Remove reauth persistent notification ([@emontnemery] - [#140932])
+- Bump linkplay to v0.2.1 ([@silamon] - [#141260])
+- Test data entry flow form showing suggested values ([@jbouwh] - [#141249])
+- Retry Google Cloud exceptions ([@tronikos] - [#141266])
+- Bump androidtvremote2 to 0.2.1 ([@tronikos] - [#141259])
+- Patch Z-Wave platforms in custom event tests ([@MartinHjelmare] - [#141268])
+- Fix backup tests typing warnings ([@MartinHjelmare] - [#141274])
+- Support for hierarchy of individual energy devices ([@karwosts] - [#132616])
+- Add Bubble soak switch to SmartThings ([@joostlek] - [#141139])
+- Add sensor platform to backup integration ([@mib1185] - [#138663])
+- Update Vodafone Station quality scale ([@chemelli74] - [#141196])
+- Tado migrate to OAuth Device Flow ([@erwindouna] - [#140761])
+- Do not deepcopy section schema when applying suggested values ([@jbouwh] - [#141280])
+- Fix spelling of "Power factor" and capitalization in `enphase_envoy` ([@NoRi2909] - [#141285])
+- Add command to SmartThings button unique id ([@joostlek] - [#141281])
+- Add wrinkle prevent binary sensor active to SmartThings ([@joostlek] - [#141289])
+- Deprecate fridge door sensor in SmartThings ([@joostlek] - [#141275])
+- Raise error when max tokens reached for openai_conversation ([@Shulyaka] - [#140214])
+- Fix typos in `smartthings` binary sensor deprecation messages ([@NoRi2909] - [#141299])
+- Add downtime and uptime sensors for Husqvarna Automower ([@Thomas55555] - [#140804])
+- Include hardware integrations in the cached `integrations.json` ([@puddly] - [#139001])
+- Add exceptions translations for Shelly integration ([@bieniu] - [#141071])
+- Do not return `router` as `source_type` for Tractive `device_tracker` entity ([@bieniu] - [#141188])
+- Improve code quality of condition validation ([@arturpragacz] - [#141292])
+- Remove the zengge integration ([@emontnemery] - [#141283])
+- Don't filter nevermind for fallback ([@synesthesiam] - [#141294])
+- Remove unused util module in conversation ([@arturpragacz] - [#141293])
+- Add device reconfigure to Vodafone Station config flow ([@chemelli74] - [#141221])
+- Improve tests of backup exclusion ([@emontnemery] - [#141303])
+- Bump google-genai to 1.7.0 ([@SLaks] - [#140770])
+- Let device response determine state in Qbus ([@thomasddn] - [#141302])
+- Jellyfin: display album primary art instead of artist backdrop ([@ascott18] - [#141246])
+- Add preannounce_media_id to Assist Satellite ([@synesthesiam] - [#141317])
+- Bump annotatedyaml to 0.4.5 ([@bdraco] - [#141316])
+- Bump pyOverkiz to version 1.16.5 ([@iMicknl] - [#141326])
+- Add a Google Calendar birthdays calendar ([@allenporter] - [#141300])
+- Remove nest event media files that are no longer referenced ([@allenporter] - [#141295])
+- Add sensor native unit of measure in NUT ([@tdfountain] - [#141338])
+- Improve default icons for sensors in NUT ([@tdfountain] - [#141255])
+- Bump pysmartthings to 3.0.0 ([@joostlek] - [#141058])
+- Bump github/codeql-action from 3.28.12 to 3.28.13 (@dependabot - [#141344])
+- Bump actions/setup-python from 5.4.0 to 5.5.0 (@dependabot - [#141342])
+- Bump YoLink API to 0.4.9 fix fob event ([@matrixd2] - [#141343])
+- Add Motionblinds Matter virtual integration ([@abmantis] - [#140812])
+- Fix for whois - quota exceeded and private registry ([@tedvdb] - [#141060])
+- Move MQTT light constants to const module ([@jbouwh] - [#140945])
+- Improve backup exclude filters ([@emontnemery] - [#141311])
+- Add cover support to PG LAB integration ([@pglab-electronics] - [#140290])
+- Add missing events to Home Connect ([@Diegorro98] - [#141323])
+- Adds `create_daily` action to Habitica integration ([@tr4nt0r] - [#140684])
+- Log bare exceptions in the config flow ([@joostlek] - [#135584])
+- Add Reolink smart ai number entities ([@starkillerOG] - [#140417])
+- Add EventEntity for Auto Shut Off events in Watergate integration ([@adam-the-hero] - [#135675])
+- Promote after dependencies in bootstrap ([@arturpragacz] - [#140352])
+- Make `UnitSystem` a frozen dataclass ([@thecode] - [#140954])
+- Fix missing capitalization of two strings in `mysensors` ([@NoRi2909] - [#141356])
+- Velbus add missing translations ([@cereal2nd] - [#141358])
+- Add attachment and connection status for IOmeter ([@MaestroOnICe] - [#140998])
+- Add media_player support to SmartThings integration ([@PiotrMachowski] - [#141296])
+- Bump home-assistant/wheels from 2025.02.0 to 2025.03.0 (@dependabot - [#141359])
+- Bump python-picnic-api2 from 1.2.2 to 1.2.4 ([@codesalatdev] - [#141353])
+- Align Matter eve thermo offset max range with eve app ([@DavidBadura] - [#140579])
+- Create separate httpx client for Discovergy ([@joostlek] - [#141374])
+- Fix Velbus translations ([@cereal2nd] - [#141372])
+- Initialize Shelly runtime_data in async_setup_entry ([@thecode] - [#141315])
+- Bump aiocomelit to 0.11.3 ([@chemelli74] - [#141375])
+- Add data description for IMGW-PIB config flow ([@bieniu] - [#141381])
+- Update pytest-asyncio to 0.26.0 ([@cdce8p] - [#141365])
+- Support TVs in SmartThings ([@joostlek] - [#141366])
+- Bump reolink-aio to 0.13.0 ([@starkillerOG] - [#141379])
+- Bump PySwitchBot to 0.58.0 ([@huyuwei1996] - [#141378])
+- Sentence-case "TOTP secret" in `opower` config flow ([@NoRi2909] - [#141384])
+- Add battery discrete level sensor to Overkiz ([@iMicknl] - [#141328])
+- Add translations to Hue effects ([@joostlek] - [#138990])
+- Set PARALLEL_UPDATES in IMGW-PIB sensor platform ([@bieniu] - [#141386])
+- Add illuminance sensor to SwitchBot integration ([@huyuwei1996] - [#141382])
+- Add data description for Shelly config flow ([@bieniu] - [#141383])
+- Bump psutil to 7.0.0 ([@gjohansson-ST] - [#141390])
+- Bump orjson to 3.10.16 ([@bdraco] - [#141339])
+- Add sensor for brightness intensity to SmartThings ([@joostlek] - [#141368])
+- Bump holidays to 0.69 ([@gjohansson-ST] - [#141391])
+- Add full test coverage for Vodafone Station button platform ([@chemelli74] - [#141298])
+- Set responding state in assist satellite start_conversation ([@synesthesiam] - [#141388])
+- Add start conversation support to ESPHome ([@synesthesiam] - [#141387])
+- Update setuptools for build-system to 77.0.3 ([@cdce8p] - [#141394])
+- Remove invalid watts sensor from NUT ([@tdfountain] - [#141401])
+- Fix missing capitalization in two strings of `nobo_hub` ([@NoRi2909] - [#141404])
+- Add data description for Shelly Bluetooth scanner mode ([@thecode] - [#141409])
+- Add missing "r" in "Convector air flow" sensor of `ecoforest` ([@NoRi2909] - [#141410])
+- Add Pterodactyl integration ([@elmurato] - [#141197])
+- Fix spelling / grammar in `sensibo` strings ([@NoRi2909] - [#141130])
+- Add streaming to Climate platform in Teslemetry ([@Bre77] - [#138689])
+- Add power binary sensor for microwave in SmartThings ([@joostlek] - [#141415])
+- Fix Ecoforest spelling of "convector" air flow sensor ([@thecode] - [#141414])
+- Add power binary sensor for dishwasher in SmartThings ([@joostlek] - [#141417])
+- Capitalize "Bluetooth" in `motionblinds_ble` user strings ([@NoRi2909] - [#141419])
+- Capitalize "Bluetooth proxy" in `private_ble_device` integration ([@NoRi2909] - [#141418])
+- Tiny Home Connect tweaks ([@Diegorro98] - [#141403])
+- Add Get Queue HEOS entity service ([@andrewsayre] - [#141150])
+- Add AtlanticDomesticHotWaterProductionV2IOComponent to Overkiz ([@ALERTua] - [#139524])
+- Capitalize one occurrence of "bluetooth" in `idasen_desk` ([@NoRi2909] - [#141423])
+- Reolink translate key ([@starkillerOG] - [#140821])
+- Add mac to Reolink IPC cam device info ([@starkillerOG] - [#140822])
+- Jewish calendar migration bugfix ([@tsvi] - [#141425])
+- Add climate platform to qbus ([@thomasddn] - [#139327])
+- Fix a type error when using google-genai==1.7.0 ([@IvanLH] - [#141431])
+- Add template list functions: intersect, difference, symmetric_difference, union ([@frenck] - [#141420])
+- Fix log level of cast print informing users to contribute model number ([@emontnemery] - [#141438])
+- Add diagnostics for Home Assistant Backup integration ([@mib1185] - [#141407])
+- Bump roborock to silver ([@Lash-L] - [#141433])
+- Simplify Reolink exception handling ([@edenhaus] - [#141427])
+- Fix sentence-case and naming of "Security code" in `tradfri` ([@NoRi2909] - [#141440])
+- Use a constant for sensor statistics issues ([@edenhaus] - [#141441])
+- Remove helpers and align coding style in Shelly tests ([@chemelli74] - [#140080])
+- Small grammar fixes in `hue` user strings ([@NoRi2909] - [#141446])
+- Proper handling of unavailable Synology DSM nas during backup ([@mib1185] - [#140721])
+- Migrate unique ids in SmartThings ([@joostlek] - [#141308])
+- Fix spelling of "serial number" in `smappee` ([@NoRi2909] - [#141449])
+- Fixes to user-facing strings of `cloudflare` integration ([@NoRi2909] - [#141452])
+- Fix grammar in `spotify` reauthentication error ([@NoRi2909] - [#141451])
+- Bump ZHA to 0.0.54 ([@TheJulianJES] - [#141447])
+- Deprecate SmartThings switch entity ([@joostlek] - [#141360])
+- Make BT support detection dynamic for Shelly RPC devices ([@chemelli74] - [#137323])
+- Bump pysmlight to v0.2.4 ([@tl-sl] - [#141450])
+- Add SMLIGHT sensor entities for second radio ([@tl-sl] - [#137403])
+- Cleanups related to improved typing on radios objects ([@tl-sl] - [#141455])
+- Deprecate SmartThings machine state sensors ([@joostlek] - [#141363])
+- Add switch for icemaker in SmartThings ([@joostlek] - [#141313])
+- Do not show the firmware changelog for Shelly Wall Display X2 update entities ([@bieniu] - [#141457])
+- Fix online docs URL in `motionblinds` plus gateway naming ([@NoRi2909] - [#141453])
+- Add full test coverage for Comelit coordinator ([@chemelli74] - [#141321])
+- Bump tesla-fleet-api to v1.0.16 ([@Bre77] - [#140869])
+- Add circular mean statistics and sensor state class MEASUREMENT_ANGLE ([@edenhaus] - [#138453])
+- Simplify roborock map storage test fixture ([@allenporter] - [#141430])
+- Update typing-extensions to 4.13.0 ([@cdce8p] - [#141465])
+- Bump uv to 0.6.10 ([@edenhaus] - [#141464])
+- Add sensor as entity platform on MQTT subentries ([@jbouwh] - [#139899])
+- Add service for counting the omer ([@tsvi] - [#141008])
+- Add select entity for dishwasher operating state in SmartThings ([@joostlek] - [#141468])
+- Correct device class and state class for wind direction sensors ([@edenhaus] - [#141393])
+- Add check that sensor state classes are used only with valid unit of measurements ([@edenhaus] - [#141444])
+- Add bosch_alarm integration ([@sanjay900] - [#138497])
+- Add state class MEASUREMENT_ANGLE to wind direction sensor ([@edenhaus] - [#141392])
+- Add info websocket command to wyoming integration ([@synesthesiam] - [#139982])
+- Add language scores websocket command ([@synesthesiam] - [#140480])
+- Add Web search to OpenAI Conversation integration ([@Shulyaka] - [#141426])
+- Move Home Connect alarm clock entity from time platform to number platform ([@Diegorro98] - [#141400])
+- Deprecate switch entity for airdresser ([@joostlek] - [#141470])
+- Move QoS setting to shared device properties in MQTT device subentries configuration ([@jbouwh] - [#141369])
+- Update mypy-dev to 1.16.0a7 ([@cdce8p] - [#141472])
+- Add Homee lock platform ([@Taraman17] - [#140893])
+- Update frontend to 20250326.0 ([@bramkragten] - [#141481])
+- Add power binary sensor for Cooktop in SmartThings ([@joostlek] - [#141482])
+- Bump pychromecast to 14.0.7 ([@emontnemery] - [#141479])
+- Use SPDX identifier for container license ([@cdce8p] - [#141477])
+- Add switch as entity platform on MQTT subentries ([@jbouwh] - [#140658])
+- Add preannounce media id support for ESPHome ([@synesthesiam] - [#141474])
+- Cleanup missed QoS translation string for MQTT subentries ([@jbouwh] - [#141485])
+- Add button to reset the water filter in SmartThings ([@joostlek] - [#141493])
+- Bump yt-dlp to 2025.03.26 ([@joostlek] - [#141484])
+- Update meteofrance-api to 1.4.0 ([@cdce8p] - [#141490])
+- Update aioairzone-cloud to v0.6.11 ([@Noltari] - [#141488])
+- Bump IMGW-PIB library to 1.0.10 ([@bieniu] - [#141491])
+- Deprecate media player sensors for SmartThings ([@joostlek] - [#141469])
+- Deprecate SmartThings media player switch ([@joostlek] - [#141467])
+- Fix refresh state for Comelit alarm ([@chemelli74] - [#141370])
+- Bump deebot-client to 12.4.0 ([@edenhaus] - [#141501])
+- Sort SmartThings devices to be created by parent device id ([@joostlek] - [#141515])
+- Show box for Smartthings rise number entity ([@edenhaus] - [#141526])
+- Fix work area sensor for Husqvarna Automower ([@Thomas55555] - [#141527])
+- Fix MQTT options flow QoS selector can not serialize ([@jbouwh] - [#141528])
+- Fix QoS schema issue in MQTT subentries ([@jbouwh] - [#141531])
+- Fix wrong friendly name for `storage_power` in `solaredge` ([@NoRi2909] - [#141269])
+- Support for upcoming pyLoad-ng release in pyLoad integration ([@tr4nt0r] - [#141297])
+- Initialize google.genai.Client in the executor ([@IvanLH] - [#141432])
+- Improve some Home Connect deprecations ([@Diegorro98] - [#141508])
+- Add default preannounce sound to Assist satellites ([@synesthesiam] - [#141522])
+- Handle webcal prefix in remote calendar ([@Thomas55555] - [#141541])
+- Bump linkplay to v0.2.2 ([@silamon] - [#141542])
+- Fix sentence-casing in `konnected` strings, replace "override" with "custom" ([@NoRi2909] - [#141553])
+- Tado fix HomeKit flow ([@erwindouna] - [#141525])
+- Add icons to hue effects ([@joostlek] - [#141559])
+- Handle cloud subscription expired for backup upload ([@MartinHjelmare] - [#141564])
+- Also migrate completion time entities in SmartThings ([@joostlek] - [#141572])
+- Better handle Roborock discovery ([@Lash-L] - [#141575])
+- Revert "Promote after dependencies in bootstrap" ([@emontnemery] - [#141584])
+- Update frontend to 20250327.0 ([@bramkragten] - [#141585])
+- Add brand for Bosch ([@joostlek] - [#141561])
+- Bump aiowebdav2 to 0.4.3 ([@jpbede] - [#141586])
+- Fix typing error in NMBS ([@silamon] - [#141589])
+- Update frontend to 20250327.1 ([@piitaya] - [#141596])
+- Fix misleading friendly names of `pvoutput` sensors ([@NoRi2909] - [#141312])
+- Fix missing response for queued mode scripts ([@Passific] - [#141460])
+- Add default string and icon for light effect off ([@joostlek] - [#141567])
+- Reverts #141363 "Deprecate SmartThings machine state sensors" ([@edenhaus] - [#141573])
+- Make names of switch entities in `gree` consistent with docs ([@NoRi2909] - [#141580])
+- Bump Python-Snoo to 0.6.5 ([@Lash-L] - [#141599])
+- Fix zeroconf logging level not being respected ([@bdraco] - [#141601])
+- Bump aiowebdav2 to 0.4.4 ([@jpbede] - [#141615])
+- Fix an issue with the switch preview in beta ([@Petro31] - [#141617])
+- Fix ` volatile_organic_compounds_parts` translation string to be referenced for MQTT subentries device class selector ([@jbouwh] - [#141618])
+- Jewish calendar match omer service variables requirement to documentation ([@tsvi] - [#141620])
+- Use correct default value for multi press buttons in the Matter integration ([@nickpesce] - [#141630])
+- Fix sentence-casing in `airvisual` user strings ([@NoRi2909] - [#141632])
+- Fix duplicate 'device' term in MQTT translation strings ([@jbouwh] - [#141646])
+- Ensure connection test sound has no preannouncement ([@balloob] - [#141647])
+- Fix ESPHome event entity staying unavailable ([@frenck] - [#141650])
+- Enable the message box on default for satelitte announcement actions ([@balloob] - [#141654])
+- Update frontend to 20250328.0 ([@bramkragten] - [#141659])
+- Tado add proper off state ([@erwindouna] - [#135480])
+- Include ZBT-1 and Yellow in device registry ([@puddly] - [#141623])
+- Bump intents and always prefer more literal text ([@synesthesiam] - [#141663])
+- Update Duke Energy package to fix integration ([@hunterjm] - [#141669])
+- Handle all firmware types for ZBT-1 and Yellow update entities ([@puddly] - [#141674])
+- Fix camera proxy with sole image quality settings ([@frenck] - [#141676])
+- Increase websocket_api allowed peak time to 10s ([@bdraco] - [#141680])
+- Fix grammar / sentence-casing in `workday` ([@NoRi2909] - [#141682])
+- Add unkown to uncalibrated state for tedee ([@zweckj] - [#141262])
+- Add a common string for "country" ([@NoRi2909] - [#141653])
+- Bump music assistant client to 1.2.0 ([@marcelveldt] - [#141668])
+- Always set pause feature on Music Assistant mediaplayers ([@marcelveldt] - [#141686])
+- Replace "country" with common string in `holiday` ([@NoRi2909] - [#141687])
+- Improve MQTT translation strings ([@jbouwh] - [#141691])
+- Handle invalid JSON errors in AirNow ([@frenck] - [#141695])
+- Fix Tuya tdq category to pick up temp & humid ([@frenck] - [#141698])
+- Fix ESPHome update entities being loaded before device_info is available ([@bdraco] - [#141704])
+- Fix ESPHome entities not being removed when the ESPHome config removes an entire platform ([@bdraco] - [#141708])
+- Sentence-case "Medium type" in `mopeka` ([@NoRi2909] - [#141718])
+- Only link the parent device if known in SmartThings ([@joostlek] - [#141719])
+- Only trigger events on button updates in SmartThings ([@joostlek] - [#141720])
+- Set Home Connect program action field as not required ([@Diegorro98] - [#141729])
+- Fix immediate state update for Comelit ([@chemelli74] - [#141735])
+- Remove sunweg integration ([@rokam] - [#124230])
+- Fix order of palettes, presets and playlists in WLED integration ([@misch2] - [#132207])
+- Ensure EcoNet operation modes are unique ([@frenck] - [#141689])
+- Bump iaqualink to 0.5.3 ([@flz] - [#141709])
+- Bump pySmartThings to 3.0.1 ([@joostlek] - [#141722])
+- Add helper methods to simplify USB integration testing ([@puddly] - [#141733])
+- Bump aiohomekit to 3.2.13 ([@bdraco] - [#141764])
+- Fix blocking late import of httpcore from httpx ([@bdraco] - [#141771])
+- Bump PyISY to 3.1.15 ([@bdraco] - [#141778])
+- Add boost preset to AVM Fritz!SmartHome climate entities ([@mib1185] - [#141802])
+- Bump ical to 9.0.3 ([@Thomas55555] - [#141805])
+- Fix System Bridge wait timeout wait condition ([@timmo001] - [#141811])
+- Correct spelling for 'availability` in MQTT translation strings ([@jbouwh] - [#141818])
+- Fix hardcoded UoM for total power sensor for Tuya zndb devices ([@frenck] - [#141822])
+- Move setup messages from info to debug level ([@mib1185] - [#141834])
+- Fix the entity category for max throughput sensors in AVM Fritz!Box Tools ([@mib1185] - [#141838])
+- Update pvo to v2.2.1 ([@frenck] - [#141847])
+- Handle encryption being disabled on an ESPHome device ([@bdraco] - [#141887])
+- Bump aioesphomeapi to 29.8.0 ([@bdraco] - [#141888])
+- Fix duplicate call to async_write_ha_state when adding elkm1 entities ([@bdraco] - [#141890])
+- Ensure user always has first turn for Google Gen AI ([@balloob] - [#141893])
+- Add switchbot cover unit tests ([@zerzhang] - [#140265])
+- Fix SmartThings climate entity missing off HAVC mode ([@frenck] - [#141700])
+- Handle 403 error in remote calendar ([@Thomas55555] - [#141839])
+- Bump ohmepy to 1.5.1 ([@dan-r] - [#141879])
+- Fix SmartThings being able to understand incomplete DRLC ([@joostlek] - [#141907])
+- Don't create SmartThings entities for disabled components ([@joostlek] - [#141909])
+- Correct further sensor categorizations in AVM Fritz!Box tools ([@mib1185] - [#141911])
+- Add None check to azure_storage ([@zweckj] - [#141922])
+- Revert PR 136314 (Cleanup map references in lovelace) ([@emontnemery] - [#141928])
+- Add preannounce boolean for announce/start conversation ([@synesthesiam] - [#141930])
+- Bump aiowebdav2 to 0.4.5 ([@jpbede] - [#141934])
+- Update frontend to 20250331.0 ([@bramkragten] - [#141943])
+- Bump async-upnp-client to 0.44.0 ([@StevenLooman] - [#141946])
+- Correct unit conversion for OneDrive quota display ([@aaronburt] - [#140337])
+- Fix nordpool Not to return Unknown if price is exactly 0 ([@98ultimate] - [#140647])
+- Use saved volume when selecting preset in bluesound integration ([@LouisChrist] - [#141079])
+- Handle empty or missing state values for MQTT light entities using 'template' schema ([@sumnerboy12] - [#141177])
+- Fix import issues related to onboarding views ([@emontnemery] - [#141919])
+- Improve SmartThings deprecation ([@joostlek] - [#141939])
+- Reload the ZBT-1 integration on USB state changes ([@puddly] - [#141287])
+- Fix data in old SkyConnect integration config entries or delete them ([@puddly] - [#141959])
+- Improve error handling and logging on MQTT update entity state updates when template rederings fails ([@jbouwh] - [#141960])
+- Bump aiohttp to 3.11.15 ([@bdraco] - [#141967])
+- Add LG ThinQ event bus listener to lifecycle hooks ([@joostlek] - [#142006])
+- Update frontend to 20250401.0 ([@bramkragten] - [#142010])
+- Fix train to for multiple stations in Trafikverket Train ([@gjohansson-ST] - [#142016])
+- Remove unused mypy ignore from google_generative_ai_conversation ([@emontnemery] - [#141549])
+- Fix warning about unfinished oauth tasks on shutdown ([@twasilczyk] - [#141969])
+- Skip firmware config flow confirmation if the hardware is in use ([@puddly] - [#142017])
+- Fix entity names for HA hardware firmware update entities ([@puddly] - [#142029])
+- Bump ZHA to 0.0.55 ([@TheJulianJES] - [#142031])
+- Bump aiohttp to 3.11.16 ([@bdraco] - [#142034])
+- Bump bluetooth-data-tools to 1.26.5 ([@bdraco] - [#142045])
+- Fix weather templates using new style configuration ([@Petro31] - [#136677])
+- Allow excluding modules from noisy logs check ([@abmantis] - [#142020])
+- Bump deebot-client to 12.5.0 ([@edenhaus] - [#142046])
+- Add Eve brand ([@joostlek] - [#142067])
+- Improve SmartThings sensor deprecation ([@joostlek] - [#142070])
+- Improve SmartThings switch deprecation ([@joostlek] - [#142072])
+- Deprecate None effect instead of breaking it for Hue ([@marcelveldt] - [#142073])
+- Translation key for ZBT-1 integration failing due to disconnection ([@puddly] - [#142077])
+- Fix state class for battery sensors in AVM Fritz!SmartHome ([@mib1185] - [#142078])
+
+## Release 2025.4.1 - April 4
+
+- Fix blocking event loop - daikin ([@fredrike] - [#141442])
+- Made Google Search enable dependent on Assist availability ([@IvanLH] - [#141712])
+- Fix humidifier platform for Comelit ([@chemelli74] - [#141854])
+- Bump evohome-async to 1.0.5 ([@zxdavb] - [#141871])
+- Replace "to log into" with "to log in to" in `incomfort` ([@NoRi2909] - [#142060])
+- Avoid unnecessary reload in apple_tv reauth flow ([@emontnemery] - [#142079])
+- Add translation for hassio update entity name ([@piitaya] - [#142090])
+- Bump pyenphase to 1.25.5 ([@catsmanac] - [#142107])
+- Hide broken ZBT-1 config entries on the hardware page ([@puddly] - [#142110])
+- Bump pysmhi to 1.0.1 ([@gjohansson-ST] - [#142111])
+- Avoid logging a warning when replacing an ignored config entry ([@bdraco] - [#142114])
+- Slow down polling in Tesla Fleet ([@Bre77] - [#142130])
+- Bump tesla-fleet-api to v1.0.17 ([@Bre77] - [#142131])
+- Tado bump to 0.18.11 ([@erwindouna] - [#142175])
+- Add preset mode to SmartThings climate ([@joostlek] - [#142180])
+- Do not create a HA mediaplayer for the builtin Music Assistant player ([@marcelveldt] - [#142192])
+- Do not fetch disconnected Home Connect appliances ([@Diegorro98] - [#142200])
+- Fix fibaro setup ([@rappenze] - [#142201])
+- Fix circular mean by always storing and using the weighted one ([@edenhaus] - [#142208])
+- Bump pySmartThings to 3.0.2 ([@joostlek] - [#142257])
+- Update frontend to 20250404.0 ([@bramkragten] - [#142274])
+- Bump forecast-solar lib to v4.1.0 ([@klaasnicolaas] - [#142280])
+- Fix skyconnect tests ([@zweckj] - [#142262])
+- Fix empty actions ([@Petro31] - [#142292])
+
+[#141442]: https://github.com/home-assistant/core/pull/141442
+[#141505]: https://github.com/home-assistant/core/pull/141505
+[#141712]: https://github.com/home-assistant/core/pull/141712
+[#141854]: https://github.com/home-assistant/core/pull/141854
+[#141871]: https://github.com/home-assistant/core/pull/141871
+[#142060]: https://github.com/home-assistant/core/pull/142060
+[#142079]: https://github.com/home-assistant/core/pull/142079
+[#142090]: https://github.com/home-assistant/core/pull/142090
+[#142107]: https://github.com/home-assistant/core/pull/142107
+[#142110]: https://github.com/home-assistant/core/pull/142110
+[#142111]: https://github.com/home-assistant/core/pull/142111
+[#142114]: https://github.com/home-assistant/core/pull/142114
+[#142130]: https://github.com/home-assistant/core/pull/142130
+[#142131]: https://github.com/home-assistant/core/pull/142131
+[#142175]: https://github.com/home-assistant/core/pull/142175
+[#142180]: https://github.com/home-assistant/core/pull/142180
+[#142192]: https://github.com/home-assistant/core/pull/142192
+[#142200]: https://github.com/home-assistant/core/pull/142200
+[#142201]: https://github.com/home-assistant/core/pull/142201
+[#142208]: https://github.com/home-assistant/core/pull/142208
+[#142257]: https://github.com/home-assistant/core/pull/142257
+[#142262]: https://github.com/home-assistant/core/pull/142262
+[#142274]: https://github.com/home-assistant/core/pull/142274
+[#142280]: https://github.com/home-assistant/core/pull/142280
+[#142292]: https://github.com/home-assistant/core/pull/142292
+[@Bre77]: https://github.com/Bre77
+[@Diegorro98]: https://github.com/Diegorro98
+[@IvanLH]: https://github.com/IvanLH
+[@NoRi2909]: https://github.com/NoRi2909
+[@Petro31]: https://github.com/Petro31
+[@bdraco]: https://github.com/bdraco
+[@bramkragten]: https://github.com/bramkragten
+[@catsmanac]: https://github.com/catsmanac
+[@chemelli74]: https://github.com/chemelli74
+[@edenhaus]: https://github.com/edenhaus
+[@emontnemery]: https://github.com/emontnemery
+[@erwindouna]: https://github.com/erwindouna
+[@fredrike]: https://github.com/fredrike
+[@frenck]: https://github.com/frenck
+[@gjohansson-ST]: https://github.com/gjohansson-ST
+[@joostlek]: https://github.com/joostlek
+[@klaasnicolaas]: https://github.com/klaasnicolaas
+[@marcelveldt]: https://github.com/marcelveldt
+[@piitaya]: https://github.com/piitaya
+[@puddly]: https://github.com/puddly
+[@rappenze]: https://github.com/rappenze
+[@zweckj]: https://github.com/zweckj
+[@zxdavb]: https://github.com/zxdavb
+
+## Release 2025.4.2 - April 12
+
+- Add error details in remote calendar flow ([@Thomas55555] - [#141753])
+- Update Roborock map more consistently on state change ([@Lash-L] - [#142228])
+- Add SensorDeviceClass and unit for LCN CO2 sensor. ([@alengwenus] - [#142320])
+- Bump opower to 0.10.0 ([@tronikos] - [#142321])
+- Add a description for the enable_google_search_tool option in Google AI ([@tronikos] - [#142322])
+- Check that the current roboorck map exists before updating it. ([@Lash-L] - [#142341])
+- Limit mqtt info logging for discovery of new components ([@jbouwh] - [#142344])
+- Bump flux_led to 1.2.0 ([@bdraco] - [#142362])
+- Update aioairzone to v1.0.0 ([@Noltari] - [#142385])
+- Only load files ending `.metadata.json` in WebDAV ([@jpbede] - [#142388])
+- Bump aioesphomeapi to 29.9.0 ([@bdraco] - [#142393])
+- Bump opower to 0.11.1 ([@tronikos] - [#142395])
+- Add exceptions translation to SamsungTV ([@chemelli74] - [#142406])
+- Add missing strings to Fritz ([@chemelli74] - [#142413])
+- Fix reload of AVM FRITZ!Tools when new connected device is detected ([@mib1185] - [#142430])
+- Fix HKC showing hvac_action as idle when fan is active and heat cool target is off ([@bdraco] - [#142443])
+- Fix Reolink smart AI sensors ([@starkillerOG] - [#142454])
+- Fix kelvin parameter in light action specifications ([@epenet] - [#142456])
+- Bump aioshelly to version 13.4.1 ([@bieniu] - [#142477])
+- Fixed Renault charge state icon ([@wilfredktlr] - [#142478])
+- Fix Shelly initialization if device runs large script ([@bieniu] - [#142487])
+- Handle None on the response candidates in Google Generative AI ([@IvanLH] - [#142497])
+- Fix range of Google Generative AI temperature ([@tronikos] - [#142513])
+- Allow max to be equal with min for mqtt number config validation ([@jbouwh] - [#142522])
+- Fix small typo in Music Assistant integration causing unavailable players ([@marcelveldt] - [#142535])
+- Fix adding devices in Husqvarna Automower ([@Thomas55555] - [#142549])
+- Bump pyheos to v1.0.5 ([@andrewsayre] - [#142554])
+- Fix Quickmode handling in ViCare integration ([@CFenner] - [#142561])
+- Fix Core deadlock by ensuring only one ZHA log queue handler thread is running at a time ([@puddly] - [#142568])
+- Fix ssl_cert load from config_flow ([@fredrike] - [#142570])
+- Update growatt server dependency to 1.6.0 ([@thimo-seitz] - [#142606])
+- Pin multidict to >= 6.4.2 to resolve memory leaks ([@bdraco] - [#142614])
+- Bump led_ble to 1.1.7 ([@henryptung] - [#142629])
+- Bump livisi to 0.0.25 ([@Thomas55555] - [#142638])
+- Comelit config flow timeout error ([@chemelli74] - [#142667])
+- Fix EC certificate key not allowed in MQTT client setup ([@jbouwh] - [#142698])
+- Bump PyViCare to 2.44.0 ([@CFenner] - [#142701])
+- Bump reolink-aio 0.13.1 ([@starkillerOG] - [#142719])
+- Reolink migrate unique ID debugging ([@starkillerOG] - [#142723])
+- Update frontend to 20250411.0 ([@bramkragten] - [#142736])
+- Bump pySmartThings to 3.0.4 ([@joostlek] - [#142739])
+- Fix SmartThings gas meter ([@joostlek] - [#142741])
+- Fix Anthropic bug parsing a streaming response with no json ([@allenporter] - [#142745])
+- Upgrade sharkiq depedency to 1.1.0 ([@JeffResc] - [#142746])
+- Bump ical to 9.1.0 ([@Thomas55555] - [#142197])
+- Add jaraco.itertools license exception as the classifier was removed but no SPDX expression was added ([@sanjay900] - [#142439])
+
+[#141505]: https://github.com/home-assistant/core/pull/141505
+[#141753]: https://github.com/home-assistant/core/pull/141753
+[#142197]: https://github.com/home-assistant/core/pull/142197
+[#142228]: https://github.com/home-assistant/core/pull/142228
+[#142299]: https://github.com/home-assistant/core/pull/142299
+[#142320]: https://github.com/home-assistant/core/pull/142320
+[#142321]: https://github.com/home-assistant/core/pull/142321
+[#142322]: https://github.com/home-assistant/core/pull/142322
+[#142341]: https://github.com/home-assistant/core/pull/142341
+[#142344]: https://github.com/home-assistant/core/pull/142344
+[#142362]: https://github.com/home-assistant/core/pull/142362
+[#142385]: https://github.com/home-assistant/core/pull/142385
+[#142388]: https://github.com/home-assistant/core/pull/142388
+[#142393]: https://github.com/home-assistant/core/pull/142393
+[#142395]: https://github.com/home-assistant/core/pull/142395
+[#142406]: https://github.com/home-assistant/core/pull/142406
+[#142413]: https://github.com/home-assistant/core/pull/142413
+[#142430]: https://github.com/home-assistant/core/pull/142430
+[#142439]: https://github.com/home-assistant/core/pull/142439
+[#142443]: https://github.com/home-assistant/core/pull/142443
+[#142454]: https://github.com/home-assistant/core/pull/142454
+[#142456]: https://github.com/home-assistant/core/pull/142456
+[#142477]: https://github.com/home-assistant/core/pull/142477
+[#142478]: https://github.com/home-assistant/core/pull/142478
+[#142487]: https://github.com/home-assistant/core/pull/142487
+[#142497]: https://github.com/home-assistant/core/pull/142497
+[#142513]: https://github.com/home-assistant/core/pull/142513
+[#142522]: https://github.com/home-assistant/core/pull/142522
+[#142535]: https://github.com/home-assistant/core/pull/142535
+[#142549]: https://github.com/home-assistant/core/pull/142549
+[#142554]: https://github.com/home-assistant/core/pull/142554
+[#142561]: https://github.com/home-assistant/core/pull/142561
+[#142568]: https://github.com/home-assistant/core/pull/142568
+[#142570]: https://github.com/home-assistant/core/pull/142570
+[#142606]: https://github.com/home-assistant/core/pull/142606
+[#142614]: https://github.com/home-assistant/core/pull/142614
+[#142629]: https://github.com/home-assistant/core/pull/142629
+[#142638]: https://github.com/home-assistant/core/pull/142638
+[#142667]: https://github.com/home-assistant/core/pull/142667
+[#142698]: https://github.com/home-assistant/core/pull/142698
+[#142701]: https://github.com/home-assistant/core/pull/142701
+[#142719]: https://github.com/home-assistant/core/pull/142719
+[#142723]: https://github.com/home-assistant/core/pull/142723
+[#142736]: https://github.com/home-assistant/core/pull/142736
+[#142739]: https://github.com/home-assistant/core/pull/142739
+[#142741]: https://github.com/home-assistant/core/pull/142741
+[#142745]: https://github.com/home-assistant/core/pull/142745
+[#142746]: https://github.com/home-assistant/core/pull/142746
+[@CFenner]: https://github.com/CFenner
+[@IvanLH]: https://github.com/IvanLH
+[@JeffResc]: https://github.com/JeffResc
+[@Lash-L]: https://github.com/Lash-L
+[@Noltari]: https://github.com/Noltari
+[@Thomas55555]: https://github.com/Thomas55555
+[@alengwenus]: https://github.com/alengwenus
+[@allenporter]: https://github.com/allenporter
+[@andrewsayre]: https://github.com/andrewsayre
+[@bdraco]: https://github.com/bdraco
+[@bieniu]: https://github.com/bieniu
+[@bramkragten]: https://github.com/bramkragten
+[@chemelli74]: https://github.com/chemelli74
+[@epenet]: https://github.com/epenet
+[@fredrike]: https://github.com/fredrike
+[@frenck]: https://github.com/frenck
+[@henryptung]: https://github.com/henryptung
+[@jbouwh]: https://github.com/jbouwh
+[@joostlek]: https://github.com/joostlek
+[@jpbede]: https://github.com/jpbede
+[@marcelveldt]: https://github.com/marcelveldt
+[@mib1185]: https://github.com/mib1185
+[@puddly]: https://github.com/puddly
+[@sanjay900]: https://github.com/sanjay900
+[@starkillerOG]: https://github.com/starkillerOG
+[@thimo-seitz]: https://github.com/thimo-seitz
+[@tronikos]: https://github.com/tronikos
+[@wilfredktlr]: https://github.com/wilfredktlr
+
+## Release 2025.4.3 - April 19
+
+- Fix duke_energy data retrieval to adhere to service start date ([@cmamatey] - [#136054])
+- Check Energy Live API works before creating the coordinator in Tessie ([@Bre77] - [#142510])
+- Correct enum member check in home_connect ([@emontnemery] - [#142666])
+- Fix error in recurrence calculation of Habitica integration ([@tr4nt0r] - [#142759])
+- Fix MQTT device discovery when using node_id ([@dionisis2014] - [#142784])
+- Force Squeezebox item id to string ([@peteS-UK] - [#142793])
+- Keep track of last play status update time in Apple TV ([@ericswpark] - [#142838])
+- Select correct Reolink device uid ([@starkillerOG] - [#142864])
+- Fix Reolink Home Hub Pro playback ([@starkillerOG] - [#142871])
+- Fix quality loss for LLM conversation agent question answering ([@allenporter] - [#142873])
+- Only get tracked pairs for kraken ([@eifinger] - [#142877])
+- Bump Environment Canada library to 0.10.1 ([@gwww] - [#142882])
+- Bump devolo_plc_api to 1.5.1 ([@Shutgun] - [#142908])
+- Don't do I/O while getting Jewish calendar data schema ([@tsvi] - [#142919])
+- Update UK Transport Integration URL ([@AlexLamond] - [#142949])
+- Bump holidays to 0.70 ([@gjohansson-ST] - [#142954])
+- Fix switch state for Comelit ([@chemelli74] - [#142978])
+- Bump reolink-aio to 0.13.2 ([@starkillerOG] - [#142985])
+- Increase uptime deviation for Shelly ([@chemelli74] - [#142996])
+- Bump pysmhi to 1.0.2 ([@gjohansson-ST] - [#143007])
+- Add Python-2.0 to list of approved licenses ([@cdce8p] - [#143052])
+- Reduce jumping Starlink uptime sensor ([@frenck] - [#143076])
+- Bump ZHA to 0.0.56 ([@puddly] - [#143165])
+- Fix SmartThings soundbar without media playback ([@joostlek] - [#143170])
+- Fix missing binary sensor for CoolSelect+ in SmartThings ([@joostlek] - [#143216])
+
+[#136054]: https://github.com/home-assistant/core/pull/136054
+[#141505]: https://github.com/home-assistant/core/pull/141505
+[#142299]: https://github.com/home-assistant/core/pull/142299
+[#142510]: https://github.com/home-assistant/core/pull/142510
+[#142666]: https://github.com/home-assistant/core/pull/142666
+[#142755]: https://github.com/home-assistant/core/pull/142755
+[#142759]: https://github.com/home-assistant/core/pull/142759
+[#142784]: https://github.com/home-assistant/core/pull/142784
+[#142793]: https://github.com/home-assistant/core/pull/142793
+[#142838]: https://github.com/home-assistant/core/pull/142838
+[#142864]: https://github.com/home-assistant/core/pull/142864
+[#142871]: https://github.com/home-assistant/core/pull/142871
+[#142873]: https://github.com/home-assistant/core/pull/142873
+[#142877]: https://github.com/home-assistant/core/pull/142877
+[#142882]: https://github.com/home-assistant/core/pull/142882
+[#142908]: https://github.com/home-assistant/core/pull/142908
+[#142919]: https://github.com/home-assistant/core/pull/142919
+[#142949]: https://github.com/home-assistant/core/pull/142949
+[#142954]: https://github.com/home-assistant/core/pull/142954
+[#142978]: https://github.com/home-assistant/core/pull/142978
+[#142985]: https://github.com/home-assistant/core/pull/142985
+[#142996]: https://github.com/home-assistant/core/pull/142996
+[#143007]: https://github.com/home-assistant/core/pull/143007
+[#143052]: https://github.com/home-assistant/core/pull/143052
+[#143076]: https://github.com/home-assistant/core/pull/143076
+[#143165]: https://github.com/home-assistant/core/pull/143165
+[#143170]: https://github.com/home-assistant/core/pull/143170
+[#143216]: https://github.com/home-assistant/core/pull/143216
+[@AlexLamond]: https://github.com/AlexLamond
+[@Bre77]: https://github.com/Bre77
+[@Shutgun]: https://github.com/Shutgun
+[@allenporter]: https://github.com/allenporter
+[@cdce8p]: https://github.com/cdce8p
+[@chemelli74]: https://github.com/chemelli74
+[@cmamatey]: https://github.com/cmamatey
+[@dionisis2014]: https://github.com/dionisis2014
+[@eifinger]: https://github.com/eifinger
+[@emontnemery]: https://github.com/emontnemery
+[@ericswpark]: https://github.com/ericswpark
+[@frenck]: https://github.com/frenck
+[@gjohansson-ST]: https://github.com/gjohansson-ST
+[@gwww]: https://github.com/gwww
+[@joostlek]: https://github.com/joostlek
+[@peteS-UK]: https://github.com/peteS-UK
+[@puddly]: https://github.com/puddly
+[@starkillerOG]: https://github.com/starkillerOG
+[@tr4nt0r]: https://github.com/tr4nt0r
+[@tsvi]: https://github.com/tsvi
+
+## Release 2025.4.4 - April 25
+
+- Meteofrance: adding new states provided by MF API since mid April ([@vingerha] - [#143137])
+- Create Home Connect active and selected program entities only when there are programs ([@Diegorro98] - [#143185])
+- Météo-France: Additional states and change weather condition for "Ciel clair" ([@vingerha] - [#143198])
+- Update setuptools to 78.1.1 ([@cdce8p] - [#143275])
+- Fix licenses check for setuptools ([@cdce8p] - [#143292])
+- Add scan interval and parallel updates to LinkPlay media player ([@silamon] - [#143324])
+- Sync random sensor device classes ([@silamon] - [#143368])
+- Fix Vodafone Station config entry unload ([@chemelli74] - [#143371])
+- Bump aiohomekit to 3.2.14 ([@bdraco] - [#143440])
+- Bump dio-chacon-api to v1.2.2 ([@cnico] - [#143489])
+- Bump pysmartthings to 3.0.5 ([@joostlek] - [#143586])
+
+[#141505]: https://github.com/home-assistant/core/pull/141505
+[#142299]: https://github.com/home-assistant/core/pull/142299
+[#142755]: https://github.com/home-assistant/core/pull/142755
+[#143137]: https://github.com/home-assistant/core/pull/143137
+[#143185]: https://github.com/home-assistant/core/pull/143185
+[#143198]: https://github.com/home-assistant/core/pull/143198
+[#143253]: https://github.com/home-assistant/core/pull/143253
+[#143275]: https://github.com/home-assistant/core/pull/143275
+[#143292]: https://github.com/home-assistant/core/pull/143292
+[#143324]: https://github.com/home-assistant/core/pull/143324
+[#143368]: https://github.com/home-assistant/core/pull/143368
+[#143371]: https://github.com/home-assistant/core/pull/143371
+[#143440]: https://github.com/home-assistant/core/pull/143440
+[#143489]: https://github.com/home-assistant/core/pull/143489
+[#143586]: https://github.com/home-assistant/core/pull/143586
+[@Diegorro98]: https://github.com/Diegorro98
+[@bdraco]: https://github.com/bdraco
+[@cdce8p]: https://github.com/cdce8p
+[@chemelli74]: https://github.com/chemelli74
+[@cnico]: https://github.com/cnico
+[@frenck]: https://github.com/frenck
+[@joostlek]: https://github.com/joostlek
+[@silamon]: https://github.com/silamon
+[@vingerha]: https://github.com/vingerha
+
+[#106985]: https://github.com/home-assistant/core/pull/106985
+[#107635]: https://github.com/home-assistant/core/pull/107635
+[#122818]: https://github.com/home-assistant/core/pull/122818
+[#124230]: https://github.com/home-assistant/core/pull/124230
+[#127806]: https://github.com/home-assistant/core/pull/127806
+[#128301]: https://github.com/home-assistant/core/pull/128301
+[#129387]: https://github.com/home-assistant/core/pull/129387
+[#130567]: https://github.com/home-assistant/core/pull/130567
+[#132207]: https://github.com/home-assistant/core/pull/132207
+[#132616]: https://github.com/home-assistant/core/pull/132616
+[#132795]: https://github.com/home-assistant/core/pull/132795
+[#134386]: https://github.com/home-assistant/core/pull/134386
+[#135223]: https://github.com/home-assistant/core/pull/135223
+[#135402]: https://github.com/home-assistant/core/pull/135402
+[#135480]: https://github.com/home-assistant/core/pull/135480
+[#135558]: https://github.com/home-assistant/core/pull/135558
+[#135584]: https://github.com/home-assistant/core/pull/135584
+[#135646]: https://github.com/home-assistant/core/pull/135646
+[#135675]: https://github.com/home-assistant/core/pull/135675
+[#135924]: https://github.com/home-assistant/core/pull/135924
+[#135960]: https://github.com/home-assistant/core/pull/135960
+[#135980]: https://github.com/home-assistant/core/pull/135980
+[#136002]: https://github.com/home-assistant/core/pull/136002
+[#136387]: https://github.com/home-assistant/core/pull/136387
+[#136509]: https://github.com/home-assistant/core/pull/136509
+[#136677]: https://github.com/home-assistant/core/pull/136677
+[#137038]: https://github.com/home-assistant/core/pull/137038
+[#137145]: https://github.com/home-assistant/core/pull/137145
+[#137234]: https://github.com/home-assistant/core/pull/137234
+[#137247]: https://github.com/home-assistant/core/pull/137247
+[#137250]: https://github.com/home-assistant/core/pull/137250
+[#137323]: https://github.com/home-assistant/core/pull/137323
+[#137403]: https://github.com/home-assistant/core/pull/137403
+[#137475]: https://github.com/home-assistant/core/pull/137475
+[#137603]: https://github.com/home-assistant/core/pull/137603
+[#137996]: https://github.com/home-assistant/core/pull/137996
+[#138187]: https://github.com/home-assistant/core/pull/138187
+[#138217]: https://github.com/home-assistant/core/pull/138217
+[#138257]: https://github.com/home-assistant/core/pull/138257
+[#138284]: https://github.com/home-assistant/core/pull/138284
+[#138453]: https://github.com/home-assistant/core/pull/138453
+[#138457]: https://github.com/home-assistant/core/pull/138457
+[#138461]: https://github.com/home-assistant/core/pull/138461
+[#138495]: https://github.com/home-assistant/core/pull/138495
+[#138496]: https://github.com/home-assistant/core/pull/138496
+[#138497]: https://github.com/home-assistant/core/pull/138497
+[#138502]: https://github.com/home-assistant/core/pull/138502
+[#138505]: https://github.com/home-assistant/core/pull/138505
+[#138512]: https://github.com/home-assistant/core/pull/138512
+[#138542]: https://github.com/home-assistant/core/pull/138542
+[#138623]: https://github.com/home-assistant/core/pull/138623
+[#138663]: https://github.com/home-assistant/core/pull/138663
+[#138673]: https://github.com/home-assistant/core/pull/138673
+[#138685]: https://github.com/home-assistant/core/pull/138685
+[#138689]: https://github.com/home-assistant/core/pull/138689
+[#138802]: https://github.com/home-assistant/core/pull/138802
+[#138862]: https://github.com/home-assistant/core/pull/138862
+[#138875]: https://github.com/home-assistant/core/pull/138875
+[#138891]: https://github.com/home-assistant/core/pull/138891
+[#138922]: https://github.com/home-assistant/core/pull/138922
+[#138990]: https://github.com/home-assistant/core/pull/138990
+[#139001]: https://github.com/home-assistant/core/pull/139001
+[#139002]: https://github.com/home-assistant/core/pull/139002
+[#139007]: https://github.com/home-assistant/core/pull/139007
+[#139044]: https://github.com/home-assistant/core/pull/139044
+[#139092]: https://github.com/home-assistant/core/pull/139092
+[#139139]: https://github.com/home-assistant/core/pull/139139
+[#139221]: https://github.com/home-assistant/core/pull/139221
+[#139233]: https://github.com/home-assistant/core/pull/139233
+[#139302]: https://github.com/home-assistant/core/pull/139302
+[#139304]: https://github.com/home-assistant/core/pull/139304
+[#139307]: https://github.com/home-assistant/core/pull/139307
+[#139311]: https://github.com/home-assistant/core/pull/139311
+[#139321]: https://github.com/home-assistant/core/pull/139321
+[#139327]: https://github.com/home-assistant/core/pull/139327
+[#139352]: https://github.com/home-assistant/core/pull/139352
+[#139381]: https://github.com/home-assistant/core/pull/139381
+[#139382]: https://github.com/home-assistant/core/pull/139382
+[#139385]: https://github.com/home-assistant/core/pull/139385
+[#139386]: https://github.com/home-assistant/core/pull/139386
+[#139397]: https://github.com/home-assistant/core/pull/139397
+[#139402]: https://github.com/home-assistant/core/pull/139402
+[#139406]: https://github.com/home-assistant/core/pull/139406
+[#139407]: https://github.com/home-assistant/core/pull/139407
+[#139408]: https://github.com/home-assistant/core/pull/139408
+[#139411]: https://github.com/home-assistant/core/pull/139411
+[#139414]: https://github.com/home-assistant/core/pull/139414
+[#139422]: https://github.com/home-assistant/core/pull/139422
+[#139434]: https://github.com/home-assistant/core/pull/139434
+[#139436]: https://github.com/home-assistant/core/pull/139436
+[#139441]: https://github.com/home-assistant/core/pull/139441
+[#139444]: https://github.com/home-assistant/core/pull/139444
+[#139451]: https://github.com/home-assistant/core/pull/139451
+[#139452]: https://github.com/home-assistant/core/pull/139452
+[#139455]: https://github.com/home-assistant/core/pull/139455
+[#139457]: https://github.com/home-assistant/core/pull/139457
+[#139463]: https://github.com/home-assistant/core/pull/139463
+[#139464]: https://github.com/home-assistant/core/pull/139464
+[#139465]: https://github.com/home-assistant/core/pull/139465
+[#139467]: https://github.com/home-assistant/core/pull/139467
+[#139471]: https://github.com/home-assistant/core/pull/139471
+[#139475]: https://github.com/home-assistant/core/pull/139475
+[#139476]: https://github.com/home-assistant/core/pull/139476
+[#139480]: https://github.com/home-assistant/core/pull/139480
+[#139482]: https://github.com/home-assistant/core/pull/139482
+[#139488]: https://github.com/home-assistant/core/pull/139488
+[#139489]: https://github.com/home-assistant/core/pull/139489
+[#139490]: https://github.com/home-assistant/core/pull/139490
+[#139492]: https://github.com/home-assistant/core/pull/139492
+[#139507]: https://github.com/home-assistant/core/pull/139507
+[#139509]: https://github.com/home-assistant/core/pull/139509
+[#139513]: https://github.com/home-assistant/core/pull/139513
+[#139524]: https://github.com/home-assistant/core/pull/139524
+[#139525]: https://github.com/home-assistant/core/pull/139525
+[#139532]: https://github.com/home-assistant/core/pull/139532
+[#139534]: https://github.com/home-assistant/core/pull/139534
+[#139535]: https://github.com/home-assistant/core/pull/139535
+[#139538]: https://github.com/home-assistant/core/pull/139538
+[#139542]: https://github.com/home-assistant/core/pull/139542
+[#139543]: https://github.com/home-assistant/core/pull/139543
+[#139545]: https://github.com/home-assistant/core/pull/139545
+[#139549]: https://github.com/home-assistant/core/pull/139549
+[#139553]: https://github.com/home-assistant/core/pull/139553
+[#139558]: https://github.com/home-assistant/core/pull/139558
+[#139559]: https://github.com/home-assistant/core/pull/139559
+[#139568]: https://github.com/home-assistant/core/pull/139568
+[#139570]: https://github.com/home-assistant/core/pull/139570
+[#139573]: https://github.com/home-assistant/core/pull/139573
+[#139581]: https://github.com/home-assistant/core/pull/139581
+[#139589]: https://github.com/home-assistant/core/pull/139589
+[#139590]: https://github.com/home-assistant/core/pull/139590
+[#139591]: https://github.com/home-assistant/core/pull/139591
+[#139595]: https://github.com/home-assistant/core/pull/139595
+[#139599]: https://github.com/home-assistant/core/pull/139599
+[#139602]: https://github.com/home-assistant/core/pull/139602
+[#139612]: https://github.com/home-assistant/core/pull/139612
+[#139618]: https://github.com/home-assistant/core/pull/139618
+[#139622]: https://github.com/home-assistant/core/pull/139622
+[#139623]: https://github.com/home-assistant/core/pull/139623
+[#139624]: https://github.com/home-assistant/core/pull/139624
+[#139625]: https://github.com/home-assistant/core/pull/139625
+[#139629]: https://github.com/home-assistant/core/pull/139629
+[#139641]: https://github.com/home-assistant/core/pull/139641
+[#139643]: https://github.com/home-assistant/core/pull/139643
+[#139645]: https://github.com/home-assistant/core/pull/139645
+[#139648]: https://github.com/home-assistant/core/pull/139648
+[#139650]: https://github.com/home-assistant/core/pull/139650
+[#139651]: https://github.com/home-assistant/core/pull/139651
+[#139653]: https://github.com/home-assistant/core/pull/139653
+[#139656]: https://github.com/home-assistant/core/pull/139656
+[#139658]: https://github.com/home-assistant/core/pull/139658
+[#139660]: https://github.com/home-assistant/core/pull/139660
+[#139662]: https://github.com/home-assistant/core/pull/139662
+[#139669]: https://github.com/home-assistant/core/pull/139669
+[#139673]: https://github.com/home-assistant/core/pull/139673
+[#139675]: https://github.com/home-assistant/core/pull/139675
+[#139676]: https://github.com/home-assistant/core/pull/139676
+[#139684]: https://github.com/home-assistant/core/pull/139684
+[#139686]: https://github.com/home-assistant/core/pull/139686
+[#139687]: https://github.com/home-assistant/core/pull/139687
+[#139693]: https://github.com/home-assistant/core/pull/139693
+[#139696]: https://github.com/home-assistant/core/pull/139696
+[#139697]: https://github.com/home-assistant/core/pull/139697
+[#139701]: https://github.com/home-assistant/core/pull/139701
+[#139705]: https://github.com/home-assistant/core/pull/139705
+[#139707]: https://github.com/home-assistant/core/pull/139707
+[#139708]: https://github.com/home-assistant/core/pull/139708
+[#139709]: https://github.com/home-assistant/core/pull/139709
+[#139718]: https://github.com/home-assistant/core/pull/139718
+[#139731]: https://github.com/home-assistant/core/pull/139731
+[#139733]: https://github.com/home-assistant/core/pull/139733
+[#139736]: https://github.com/home-assistant/core/pull/139736
+[#139739]: https://github.com/home-assistant/core/pull/139739
+[#139741]: https://github.com/home-assistant/core/pull/139741
+[#139742]: https://github.com/home-assistant/core/pull/139742
+[#139748]: https://github.com/home-assistant/core/pull/139748
+[#139749]: https://github.com/home-assistant/core/pull/139749
+[#139754]: https://github.com/home-assistant/core/pull/139754
+[#139763]: https://github.com/home-assistant/core/pull/139763
+[#139765]: https://github.com/home-assistant/core/pull/139765
+[#139766]: https://github.com/home-assistant/core/pull/139766
+[#139767]: https://github.com/home-assistant/core/pull/139767
+[#139768]: https://github.com/home-assistant/core/pull/139768
+[#139769]: https://github.com/home-assistant/core/pull/139769
+[#139770]: https://github.com/home-assistant/core/pull/139770
+[#139771]: https://github.com/home-assistant/core/pull/139771
+[#139775]: https://github.com/home-assistant/core/pull/139775
+[#139776]: https://github.com/home-assistant/core/pull/139776
+[#139778]: https://github.com/home-assistant/core/pull/139778
+[#139780]: https://github.com/home-assistant/core/pull/139780
+[#139781]: https://github.com/home-assistant/core/pull/139781
+[#139782]: https://github.com/home-assistant/core/pull/139782
+[#139789]: https://github.com/home-assistant/core/pull/139789
+[#139790]: https://github.com/home-assistant/core/pull/139790
+[#139791]: https://github.com/home-assistant/core/pull/139791
+[#139795]: https://github.com/home-assistant/core/pull/139795
+[#139799]: https://github.com/home-assistant/core/pull/139799
+[#139800]: https://github.com/home-assistant/core/pull/139800
+[#139801]: https://github.com/home-assistant/core/pull/139801
+[#139802]: https://github.com/home-assistant/core/pull/139802
+[#139803]: https://github.com/home-assistant/core/pull/139803
+[#139804]: https://github.com/home-assistant/core/pull/139804
+[#139806]: https://github.com/home-assistant/core/pull/139806
+[#139807]: https://github.com/home-assistant/core/pull/139807
+[#139808]: https://github.com/home-assistant/core/pull/139808
+[#139809]: https://github.com/home-assistant/core/pull/139809
+[#139810]: https://github.com/home-assistant/core/pull/139810
+[#139811]: https://github.com/home-assistant/core/pull/139811
+[#139813]: https://github.com/home-assistant/core/pull/139813
+[#139814]: https://github.com/home-assistant/core/pull/139814
+[#139817]: https://github.com/home-assistant/core/pull/139817
+[#139819]: https://github.com/home-assistant/core/pull/139819
+[#139821]: https://github.com/home-assistant/core/pull/139821
+[#139827]: https://github.com/home-assistant/core/pull/139827
+[#139832]: https://github.com/home-assistant/core/pull/139832
+[#139836]: https://github.com/home-assistant/core/pull/139836
+[#139843]: https://github.com/home-assistant/core/pull/139843
+[#139845]: https://github.com/home-assistant/core/pull/139845
+[#139849]: https://github.com/home-assistant/core/pull/139849
+[#139850]: https://github.com/home-assistant/core/pull/139850
+[#139853]: https://github.com/home-assistant/core/pull/139853
+[#139863]: https://github.com/home-assistant/core/pull/139863
+[#139864]: https://github.com/home-assistant/core/pull/139864
+[#139866]: https://github.com/home-assistant/core/pull/139866
+[#139871]: https://github.com/home-assistant/core/pull/139871
+[#139877]: https://github.com/home-assistant/core/pull/139877
+[#139878]: https://github.com/home-assistant/core/pull/139878
+[#139881]: https://github.com/home-assistant/core/pull/139881
+[#139889]: https://github.com/home-assistant/core/pull/139889
+[#139896]: https://github.com/home-assistant/core/pull/139896
+[#139897]: https://github.com/home-assistant/core/pull/139897
+[#139899]: https://github.com/home-assistant/core/pull/139899
+[#139901]: https://github.com/home-assistant/core/pull/139901
+[#139903]: https://github.com/home-assistant/core/pull/139903
+[#139911]: https://github.com/home-assistant/core/pull/139911
+[#139912]: https://github.com/home-assistant/core/pull/139912
+[#139916]: https://github.com/home-assistant/core/pull/139916
+[#139920]: https://github.com/home-assistant/core/pull/139920
+[#139923]: https://github.com/home-assistant/core/pull/139923
+[#139924]: https://github.com/home-assistant/core/pull/139924
+[#139926]: https://github.com/home-assistant/core/pull/139926
+[#139927]: https://github.com/home-assistant/core/pull/139927
+[#139933]: https://github.com/home-assistant/core/pull/139933
+[#139934]: https://github.com/home-assistant/core/pull/139934
+[#139935]: https://github.com/home-assistant/core/pull/139935
+[#139978]: https://github.com/home-assistant/core/pull/139978
+[#139982]: https://github.com/home-assistant/core/pull/139982
+[#139987]: https://github.com/home-assistant/core/pull/139987
+[#140015]: https://github.com/home-assistant/core/pull/140015
+[#140019]: https://github.com/home-assistant/core/pull/140019
+[#140021]: https://github.com/home-assistant/core/pull/140021
+[#140037]: https://github.com/home-assistant/core/pull/140037
+[#140062]: https://github.com/home-assistant/core/pull/140062
+[#140066]: https://github.com/home-assistant/core/pull/140066
+[#140067]: https://github.com/home-assistant/core/pull/140067
+[#140075]: https://github.com/home-assistant/core/pull/140075
+[#140077]: https://github.com/home-assistant/core/pull/140077
+[#140080]: https://github.com/home-assistant/core/pull/140080
+[#140081]: https://github.com/home-assistant/core/pull/140081
+[#140082]: https://github.com/home-assistant/core/pull/140082
+[#140084]: https://github.com/home-assistant/core/pull/140084
+[#140088]: https://github.com/home-assistant/core/pull/140088
+[#140090]: https://github.com/home-assistant/core/pull/140090
+[#140102]: https://github.com/home-assistant/core/pull/140102
+[#140104]: https://github.com/home-assistant/core/pull/140104
+[#140105]: https://github.com/home-assistant/core/pull/140105
+[#140106]: https://github.com/home-assistant/core/pull/140106
+[#140107]: https://github.com/home-assistant/core/pull/140107
+[#140108]: https://github.com/home-assistant/core/pull/140108
+[#140125]: https://github.com/home-assistant/core/pull/140125
+[#140130]: https://github.com/home-assistant/core/pull/140130
+[#140140]: https://github.com/home-assistant/core/pull/140140
+[#140143]: https://github.com/home-assistant/core/pull/140143
+[#140146]: https://github.com/home-assistant/core/pull/140146
+[#140148]: https://github.com/home-assistant/core/pull/140148
+[#140150]: https://github.com/home-assistant/core/pull/140150
+[#140151]: https://github.com/home-assistant/core/pull/140151
+[#140154]: https://github.com/home-assistant/core/pull/140154
+[#140157]: https://github.com/home-assistant/core/pull/140157
+[#140158]: https://github.com/home-assistant/core/pull/140158
+[#140164]: https://github.com/home-assistant/core/pull/140164
+[#140165]: https://github.com/home-assistant/core/pull/140165
+[#140175]: https://github.com/home-assistant/core/pull/140175
+[#140176]: https://github.com/home-assistant/core/pull/140176
+[#140178]: https://github.com/home-assistant/core/pull/140178
+[#140179]: https://github.com/home-assistant/core/pull/140179
+[#140180]: https://github.com/home-assistant/core/pull/140180
+[#140185]: https://github.com/home-assistant/core/pull/140185
+[#140188]: https://github.com/home-assistant/core/pull/140188
+[#140189]: https://github.com/home-assistant/core/pull/140189
+[#140192]: https://github.com/home-assistant/core/pull/140192
+[#140193]: https://github.com/home-assistant/core/pull/140193
+[#140195]: https://github.com/home-assistant/core/pull/140195
+[#140196]: https://github.com/home-assistant/core/pull/140196
+[#140197]: https://github.com/home-assistant/core/pull/140197
+[#140199]: https://github.com/home-assistant/core/pull/140199
+[#140200]: https://github.com/home-assistant/core/pull/140200
+[#140201]: https://github.com/home-assistant/core/pull/140201
+[#140202]: https://github.com/home-assistant/core/pull/140202
+[#140214]: https://github.com/home-assistant/core/pull/140214
+[#140220]: https://github.com/home-assistant/core/pull/140220
+[#140227]: https://github.com/home-assistant/core/pull/140227
+[#140231]: https://github.com/home-assistant/core/pull/140231
+[#140240]: https://github.com/home-assistant/core/pull/140240
+[#140241]: https://github.com/home-assistant/core/pull/140241
+[#140242]: https://github.com/home-assistant/core/pull/140242
+[#140244]: https://github.com/home-assistant/core/pull/140244
+[#140254]: https://github.com/home-assistant/core/pull/140254
+[#140262]: https://github.com/home-assistant/core/pull/140262
+[#140263]: https://github.com/home-assistant/core/pull/140263
+[#140265]: https://github.com/home-assistant/core/pull/140265
+[#140282]: https://github.com/home-assistant/core/pull/140282
+[#140283]: https://github.com/home-assistant/core/pull/140283
+[#140284]: https://github.com/home-assistant/core/pull/140284
+[#140286]: https://github.com/home-assistant/core/pull/140286
+[#140290]: https://github.com/home-assistant/core/pull/140290
+[#140291]: https://github.com/home-assistant/core/pull/140291
+[#140298]: https://github.com/home-assistant/core/pull/140298
+[#140299]: https://github.com/home-assistant/core/pull/140299
+[#140302]: https://github.com/home-assistant/core/pull/140302
+[#140307]: https://github.com/home-assistant/core/pull/140307
+[#140311]: https://github.com/home-assistant/core/pull/140311
+[#140315]: https://github.com/home-assistant/core/pull/140315
+[#140317]: https://github.com/home-assistant/core/pull/140317
+[#140324]: https://github.com/home-assistant/core/pull/140324
+[#140326]: https://github.com/home-assistant/core/pull/140326
+[#140328]: https://github.com/home-assistant/core/pull/140328
+[#140332]: https://github.com/home-assistant/core/pull/140332
+[#140333]: https://github.com/home-assistant/core/pull/140333
+[#140336]: https://github.com/home-assistant/core/pull/140336
+[#140337]: https://github.com/home-assistant/core/pull/140337
+[#140338]: https://github.com/home-assistant/core/pull/140338
+[#140339]: https://github.com/home-assistant/core/pull/140339
+[#140342]: https://github.com/home-assistant/core/pull/140342
+[#140343]: https://github.com/home-assistant/core/pull/140343
+[#140344]: https://github.com/home-assistant/core/pull/140344
+[#140348]: https://github.com/home-assistant/core/pull/140348
+[#140350]: https://github.com/home-assistant/core/pull/140350
+[#140352]: https://github.com/home-assistant/core/pull/140352
+[#140353]: https://github.com/home-assistant/core/pull/140353
+[#140354]: https://github.com/home-assistant/core/pull/140354
+[#140355]: https://github.com/home-assistant/core/pull/140355
+[#140357]: https://github.com/home-assistant/core/pull/140357
+[#140358]: https://github.com/home-assistant/core/pull/140358
+[#140359]: https://github.com/home-assistant/core/pull/140359
+[#140365]: https://github.com/home-assistant/core/pull/140365
+[#140366]: https://github.com/home-assistant/core/pull/140366
+[#140369]: https://github.com/home-assistant/core/pull/140369
+[#140371]: https://github.com/home-assistant/core/pull/140371
+[#140372]: https://github.com/home-assistant/core/pull/140372
+[#140375]: https://github.com/home-assistant/core/pull/140375
+[#140376]: https://github.com/home-assistant/core/pull/140376
+[#140379]: https://github.com/home-assistant/core/pull/140379
+[#140382]: https://github.com/home-assistant/core/pull/140382
+[#140384]: https://github.com/home-assistant/core/pull/140384
+[#140390]: https://github.com/home-assistant/core/pull/140390
+[#140394]: https://github.com/home-assistant/core/pull/140394
+[#140396]: https://github.com/home-assistant/core/pull/140396
+[#140398]: https://github.com/home-assistant/core/pull/140398
+[#140400]: https://github.com/home-assistant/core/pull/140400
+[#140404]: https://github.com/home-assistant/core/pull/140404
+[#140408]: https://github.com/home-assistant/core/pull/140408
+[#140410]: https://github.com/home-assistant/core/pull/140410
+[#140416]: https://github.com/home-assistant/core/pull/140416
+[#140417]: https://github.com/home-assistant/core/pull/140417
+[#140423]: https://github.com/home-assistant/core/pull/140423
+[#140424]: https://github.com/home-assistant/core/pull/140424
+[#140429]: https://github.com/home-assistant/core/pull/140429
+[#140432]: https://github.com/home-assistant/core/pull/140432
+[#140433]: https://github.com/home-assistant/core/pull/140433
+[#140438]: https://github.com/home-assistant/core/pull/140438
+[#140448]: https://github.com/home-assistant/core/pull/140448
+[#140452]: https://github.com/home-assistant/core/pull/140452
+[#140463]: https://github.com/home-assistant/core/pull/140463
+[#140464]: https://github.com/home-assistant/core/pull/140464
+[#140473]: https://github.com/home-assistant/core/pull/140473
+[#140480]: https://github.com/home-assistant/core/pull/140480
+[#140481]: https://github.com/home-assistant/core/pull/140481
+[#140482]: https://github.com/home-assistant/core/pull/140482
+[#140483]: https://github.com/home-assistant/core/pull/140483
+[#140484]: https://github.com/home-assistant/core/pull/140484
+[#140486]: https://github.com/home-assistant/core/pull/140486
+[#140489]: https://github.com/home-assistant/core/pull/140489
+[#140503]: https://github.com/home-assistant/core/pull/140503
+[#140505]: https://github.com/home-assistant/core/pull/140505
+[#140506]: https://github.com/home-assistant/core/pull/140506
+[#140507]: https://github.com/home-assistant/core/pull/140507
+[#140516]: https://github.com/home-assistant/core/pull/140516
+[#140518]: https://github.com/home-assistant/core/pull/140518
+[#140522]: https://github.com/home-assistant/core/pull/140522
+[#140524]: https://github.com/home-assistant/core/pull/140524
+[#140526]: https://github.com/home-assistant/core/pull/140526
+[#140527]: https://github.com/home-assistant/core/pull/140527
+[#140530]: https://github.com/home-assistant/core/pull/140530
+[#140532]: https://github.com/home-assistant/core/pull/140532
+[#140535]: https://github.com/home-assistant/core/pull/140535
+[#140537]: https://github.com/home-assistant/core/pull/140537
+[#140538]: https://github.com/home-assistant/core/pull/140538
+[#140539]: https://github.com/home-assistant/core/pull/140539
+[#140541]: https://github.com/home-assistant/core/pull/140541
+[#140543]: https://github.com/home-assistant/core/pull/140543
+[#140555]: https://github.com/home-assistant/core/pull/140555
+[#140556]: https://github.com/home-assistant/core/pull/140556
+[#140558]: https://github.com/home-assistant/core/pull/140558
+[#140559]: https://github.com/home-assistant/core/pull/140559
+[#140561]: https://github.com/home-assistant/core/pull/140561
+[#140562]: https://github.com/home-assistant/core/pull/140562
+[#140563]: https://github.com/home-assistant/core/pull/140563
+[#140565]: https://github.com/home-assistant/core/pull/140565
+[#140569]: https://github.com/home-assistant/core/pull/140569
+[#140571]: https://github.com/home-assistant/core/pull/140571
+[#140576]: https://github.com/home-assistant/core/pull/140576
+[#140577]: https://github.com/home-assistant/core/pull/140577
+[#140578]: https://github.com/home-assistant/core/pull/140578
+[#140579]: https://github.com/home-assistant/core/pull/140579
+[#140582]: https://github.com/home-assistant/core/pull/140582
+[#140589]: https://github.com/home-assistant/core/pull/140589
+[#140594]: https://github.com/home-assistant/core/pull/140594
+[#140595]: https://github.com/home-assistant/core/pull/140595
+[#140596]: https://github.com/home-assistant/core/pull/140596
+[#140597]: https://github.com/home-assistant/core/pull/140597
+[#140598]: https://github.com/home-assistant/core/pull/140598
+[#140600]: https://github.com/home-assistant/core/pull/140600
+[#140610]: https://github.com/home-assistant/core/pull/140610
+[#140611]: https://github.com/home-assistant/core/pull/140611
+[#140612]: https://github.com/home-assistant/core/pull/140612
+[#140621]: https://github.com/home-assistant/core/pull/140621
+[#140630]: https://github.com/home-assistant/core/pull/140630
+[#140634]: https://github.com/home-assistant/core/pull/140634
+[#140635]: https://github.com/home-assistant/core/pull/140635
+[#140637]: https://github.com/home-assistant/core/pull/140637
+[#140638]: https://github.com/home-assistant/core/pull/140638
+[#140640]: https://github.com/home-assistant/core/pull/140640
+[#140641]: https://github.com/home-assistant/core/pull/140641
+[#140647]: https://github.com/home-assistant/core/pull/140647
+[#140648]: https://github.com/home-assistant/core/pull/140648
+[#140658]: https://github.com/home-assistant/core/pull/140658
+[#140662]: https://github.com/home-assistant/core/pull/140662
+[#140663]: https://github.com/home-assistant/core/pull/140663
+[#140665]: https://github.com/home-assistant/core/pull/140665
+[#140669]: https://github.com/home-assistant/core/pull/140669
+[#140671]: https://github.com/home-assistant/core/pull/140671
+[#140682]: https://github.com/home-assistant/core/pull/140682
+[#140683]: https://github.com/home-assistant/core/pull/140683
+[#140684]: https://github.com/home-assistant/core/pull/140684
+[#140689]: https://github.com/home-assistant/core/pull/140689
+[#140690]: https://github.com/home-assistant/core/pull/140690
+[#140695]: https://github.com/home-assistant/core/pull/140695
+[#140697]: https://github.com/home-assistant/core/pull/140697
+[#140703]: https://github.com/home-assistant/core/pull/140703
+[#140713]: https://github.com/home-assistant/core/pull/140713
+[#140715]: https://github.com/home-assistant/core/pull/140715
+[#140721]: https://github.com/home-assistant/core/pull/140721
+[#140722]: https://github.com/home-assistant/core/pull/140722
+[#140723]: https://github.com/home-assistant/core/pull/140723
+[#140725]: https://github.com/home-assistant/core/pull/140725
+[#140726]: https://github.com/home-assistant/core/pull/140726
+[#140727]: https://github.com/home-assistant/core/pull/140727
+[#140729]: https://github.com/home-assistant/core/pull/140729
+[#140734]: https://github.com/home-assistant/core/pull/140734
+[#140735]: https://github.com/home-assistant/core/pull/140735
+[#140736]: https://github.com/home-assistant/core/pull/140736
+[#140738]: https://github.com/home-assistant/core/pull/140738
+[#140741]: https://github.com/home-assistant/core/pull/140741
+[#140742]: https://github.com/home-assistant/core/pull/140742
+[#140745]: https://github.com/home-assistant/core/pull/140745
+[#140746]: https://github.com/home-assistant/core/pull/140746
+[#140748]: https://github.com/home-assistant/core/pull/140748
+[#140750]: https://github.com/home-assistant/core/pull/140750
+[#140751]: https://github.com/home-assistant/core/pull/140751
+[#140752]: https://github.com/home-assistant/core/pull/140752
+[#140753]: https://github.com/home-assistant/core/pull/140753
+[#140758]: https://github.com/home-assistant/core/pull/140758
+[#140759]: https://github.com/home-assistant/core/pull/140759
+[#140761]: https://github.com/home-assistant/core/pull/140761
+[#140764]: https://github.com/home-assistant/core/pull/140764
+[#140765]: https://github.com/home-assistant/core/pull/140765
+[#140766]: https://github.com/home-assistant/core/pull/140766
+[#140767]: https://github.com/home-assistant/core/pull/140767
+[#140770]: https://github.com/home-assistant/core/pull/140770
+[#140772]: https://github.com/home-assistant/core/pull/140772
+[#140773]: https://github.com/home-assistant/core/pull/140773
+[#140775]: https://github.com/home-assistant/core/pull/140775
+[#140780]: https://github.com/home-assistant/core/pull/140780
+[#140789]: https://github.com/home-assistant/core/pull/140789
+[#140791]: https://github.com/home-assistant/core/pull/140791
+[#140792]: https://github.com/home-assistant/core/pull/140792
+[#140793]: https://github.com/home-assistant/core/pull/140793
+[#140794]: https://github.com/home-assistant/core/pull/140794
+[#140796]: https://github.com/home-assistant/core/pull/140796
+[#140799]: https://github.com/home-assistant/core/pull/140799
+[#140802]: https://github.com/home-assistant/core/pull/140802
+[#140803]: https://github.com/home-assistant/core/pull/140803
+[#140804]: https://github.com/home-assistant/core/pull/140804
+[#140805]: https://github.com/home-assistant/core/pull/140805
+[#140807]: https://github.com/home-assistant/core/pull/140807
+[#140810]: https://github.com/home-assistant/core/pull/140810
+[#140811]: https://github.com/home-assistant/core/pull/140811
+[#140812]: https://github.com/home-assistant/core/pull/140812
+[#140816]: https://github.com/home-assistant/core/pull/140816
+[#140817]: https://github.com/home-assistant/core/pull/140817
+[#140821]: https://github.com/home-assistant/core/pull/140821
+[#140822]: https://github.com/home-assistant/core/pull/140822
+[#140823]: https://github.com/home-assistant/core/pull/140823
+[#140824]: https://github.com/home-assistant/core/pull/140824
+[#140825]: https://github.com/home-assistant/core/pull/140825
+[#140826]: https://github.com/home-assistant/core/pull/140826
+[#140827]: https://github.com/home-assistant/core/pull/140827
+[#140829]: https://github.com/home-assistant/core/pull/140829
+[#140833]: https://github.com/home-assistant/core/pull/140833
+[#140835]: https://github.com/home-assistant/core/pull/140835
+[#140837]: https://github.com/home-assistant/core/pull/140837
+[#140840]: https://github.com/home-assistant/core/pull/140840
+[#140844]: https://github.com/home-assistant/core/pull/140844
+[#140852]: https://github.com/home-assistant/core/pull/140852
+[#140853]: https://github.com/home-assistant/core/pull/140853
+[#140856]: https://github.com/home-assistant/core/pull/140856
+[#140859]: https://github.com/home-assistant/core/pull/140859
+[#140861]: https://github.com/home-assistant/core/pull/140861
+[#140863]: https://github.com/home-assistant/core/pull/140863
+[#140864]: https://github.com/home-assistant/core/pull/140864
+[#140868]: https://github.com/home-assistant/core/pull/140868
+[#140869]: https://github.com/home-assistant/core/pull/140869
+[#140870]: https://github.com/home-assistant/core/pull/140870
+[#140873]: https://github.com/home-assistant/core/pull/140873
+[#140877]: https://github.com/home-assistant/core/pull/140877
+[#140878]: https://github.com/home-assistant/core/pull/140878
+[#140885]: https://github.com/home-assistant/core/pull/140885
+[#140887]: https://github.com/home-assistant/core/pull/140887
+[#140893]: https://github.com/home-assistant/core/pull/140893
+[#140895]: https://github.com/home-assistant/core/pull/140895
+[#140906]: https://github.com/home-assistant/core/pull/140906
+[#140907]: https://github.com/home-assistant/core/pull/140907
+[#140911]: https://github.com/home-assistant/core/pull/140911
+[#140912]: https://github.com/home-assistant/core/pull/140912
+[#140913]: https://github.com/home-assistant/core/pull/140913
+[#140915]: https://github.com/home-assistant/core/pull/140915
+[#140917]: https://github.com/home-assistant/core/pull/140917
+[#140919]: https://github.com/home-assistant/core/pull/140919
+[#140925]: https://github.com/home-assistant/core/pull/140925
+[#140928]: https://github.com/home-assistant/core/pull/140928
+[#140929]: https://github.com/home-assistant/core/pull/140929
+[#140930]: https://github.com/home-assistant/core/pull/140930
+[#140932]: https://github.com/home-assistant/core/pull/140932
+[#140933]: https://github.com/home-assistant/core/pull/140933
+[#140936]: https://github.com/home-assistant/core/pull/140936
+[#140937]: https://github.com/home-assistant/core/pull/140937
+[#140938]: https://github.com/home-assistant/core/pull/140938
+[#140945]: https://github.com/home-assistant/core/pull/140945
+[#140948]: https://github.com/home-assistant/core/pull/140948
+[#140951]: https://github.com/home-assistant/core/pull/140951
+[#140953]: https://github.com/home-assistant/core/pull/140953
+[#140954]: https://github.com/home-assistant/core/pull/140954
+[#140957]: https://github.com/home-assistant/core/pull/140957
+[#140960]: https://github.com/home-assistant/core/pull/140960
+[#140964]: https://github.com/home-assistant/core/pull/140964
+[#140971]: https://github.com/home-assistant/core/pull/140971
+[#140974]: https://github.com/home-assistant/core/pull/140974
+[#140975]: https://github.com/home-assistant/core/pull/140975
+[#140976]: https://github.com/home-assistant/core/pull/140976
+[#140977]: https://github.com/home-assistant/core/pull/140977
+[#140979]: https://github.com/home-assistant/core/pull/140979
+[#140982]: https://github.com/home-assistant/core/pull/140982
+[#140985]: https://github.com/home-assistant/core/pull/140985
+[#140987]: https://github.com/home-assistant/core/pull/140987
+[#140988]: https://github.com/home-assistant/core/pull/140988
+[#140991]: https://github.com/home-assistant/core/pull/140991
+[#140992]: https://github.com/home-assistant/core/pull/140992
+[#140998]: https://github.com/home-assistant/core/pull/140998
+[#141001]: https://github.com/home-assistant/core/pull/141001
+[#141005]: https://github.com/home-assistant/core/pull/141005
+[#141006]: https://github.com/home-assistant/core/pull/141006
+[#141007]: https://github.com/home-assistant/core/pull/141007
+[#141008]: https://github.com/home-assistant/core/pull/141008
+[#141011]: https://github.com/home-assistant/core/pull/141011
+[#141012]: https://github.com/home-assistant/core/pull/141012
+[#141014]: https://github.com/home-assistant/core/pull/141014
+[#141017]: https://github.com/home-assistant/core/pull/141017
+[#141020]: https://github.com/home-assistant/core/pull/141020
+[#141028]: https://github.com/home-assistant/core/pull/141028
+[#141029]: https://github.com/home-assistant/core/pull/141029
+[#141033]: https://github.com/home-assistant/core/pull/141033
+[#141034]: https://github.com/home-assistant/core/pull/141034
+[#141037]: https://github.com/home-assistant/core/pull/141037
+[#141039]: https://github.com/home-assistant/core/pull/141039
+[#141040]: https://github.com/home-assistant/core/pull/141040
+[#141041]: https://github.com/home-assistant/core/pull/141041
+[#141048]: https://github.com/home-assistant/core/pull/141048
+[#141052]: https://github.com/home-assistant/core/pull/141052
+[#141058]: https://github.com/home-assistant/core/pull/141058
+[#141059]: https://github.com/home-assistant/core/pull/141059
+[#141060]: https://github.com/home-assistant/core/pull/141060
+[#141061]: https://github.com/home-assistant/core/pull/141061
+[#141063]: https://github.com/home-assistant/core/pull/141063
+[#141066]: https://github.com/home-assistant/core/pull/141066
+[#141070]: https://github.com/home-assistant/core/pull/141070
+[#141071]: https://github.com/home-assistant/core/pull/141071
+[#141073]: https://github.com/home-assistant/core/pull/141073
+[#141074]: https://github.com/home-assistant/core/pull/141074
+[#141075]: https://github.com/home-assistant/core/pull/141075
+[#141077]: https://github.com/home-assistant/core/pull/141077
+[#141078]: https://github.com/home-assistant/core/pull/141078
+[#141079]: https://github.com/home-assistant/core/pull/141079
+[#141080]: https://github.com/home-assistant/core/pull/141080
+[#141082]: https://github.com/home-assistant/core/pull/141082
+[#141084]: https://github.com/home-assistant/core/pull/141084
+[#141085]: https://github.com/home-assistant/core/pull/141085
+[#141086]: https://github.com/home-assistant/core/pull/141086
+[#141088]: https://github.com/home-assistant/core/pull/141088
+[#141090]: https://github.com/home-assistant/core/pull/141090
+[#141091]: https://github.com/home-assistant/core/pull/141091
+[#141093]: https://github.com/home-assistant/core/pull/141093
+[#141094]: https://github.com/home-assistant/core/pull/141094
+[#141098]: https://github.com/home-assistant/core/pull/141098
+[#141100]: https://github.com/home-assistant/core/pull/141100
+[#141102]: https://github.com/home-assistant/core/pull/141102
+[#141103]: https://github.com/home-assistant/core/pull/141103
+[#141104]: https://github.com/home-assistant/core/pull/141104
+[#141105]: https://github.com/home-assistant/core/pull/141105
+[#141106]: https://github.com/home-assistant/core/pull/141106
+[#141111]: https://github.com/home-assistant/core/pull/141111
+[#141114]: https://github.com/home-assistant/core/pull/141114
+[#141115]: https://github.com/home-assistant/core/pull/141115
+[#141118]: https://github.com/home-assistant/core/pull/141118
+[#141122]: https://github.com/home-assistant/core/pull/141122
+[#141126]: https://github.com/home-assistant/core/pull/141126
+[#141130]: https://github.com/home-assistant/core/pull/141130
+[#141131]: https://github.com/home-assistant/core/pull/141131
+[#141132]: https://github.com/home-assistant/core/pull/141132
+[#141133]: https://github.com/home-assistant/core/pull/141133
+[#141134]: https://github.com/home-assistant/core/pull/141134
+[#141135]: https://github.com/home-assistant/core/pull/141135
+[#141139]: https://github.com/home-assistant/core/pull/141139
+[#141141]: https://github.com/home-assistant/core/pull/141141
+[#141142]: https://github.com/home-assistant/core/pull/141142
+[#141143]: https://github.com/home-assistant/core/pull/141143
+[#141147]: https://github.com/home-assistant/core/pull/141147
+[#141148]: https://github.com/home-assistant/core/pull/141148
+[#141149]: https://github.com/home-assistant/core/pull/141149
+[#141150]: https://github.com/home-assistant/core/pull/141150
+[#141154]: https://github.com/home-assistant/core/pull/141154
+[#141159]: https://github.com/home-assistant/core/pull/141159
+[#141161]: https://github.com/home-assistant/core/pull/141161
+[#141162]: https://github.com/home-assistant/core/pull/141162
+[#141165]: https://github.com/home-assistant/core/pull/141165
+[#141170]: https://github.com/home-assistant/core/pull/141170
+[#141175]: https://github.com/home-assistant/core/pull/141175
+[#141177]: https://github.com/home-assistant/core/pull/141177
+[#141178]: https://github.com/home-assistant/core/pull/141178
+[#141183]: https://github.com/home-assistant/core/pull/141183
+[#141184]: https://github.com/home-assistant/core/pull/141184
+[#141188]: https://github.com/home-assistant/core/pull/141188
+[#141189]: https://github.com/home-assistant/core/pull/141189
+[#141190]: https://github.com/home-assistant/core/pull/141190
+[#141196]: https://github.com/home-assistant/core/pull/141196
+[#141197]: https://github.com/home-assistant/core/pull/141197
+[#141199]: https://github.com/home-assistant/core/pull/141199
+[#141200]: https://github.com/home-assistant/core/pull/141200
+[#141202]: https://github.com/home-assistant/core/pull/141202
+[#141203]: https://github.com/home-assistant/core/pull/141203
+[#141204]: https://github.com/home-assistant/core/pull/141204
+[#141205]: https://github.com/home-assistant/core/pull/141205
+[#141206]: https://github.com/home-assistant/core/pull/141206
+[#141207]: https://github.com/home-assistant/core/pull/141207
+[#141208]: https://github.com/home-assistant/core/pull/141208
+[#141209]: https://github.com/home-assistant/core/pull/141209
+[#141210]: https://github.com/home-assistant/core/pull/141210
+[#141211]: https://github.com/home-assistant/core/pull/141211
+[#141212]: https://github.com/home-assistant/core/pull/141212
+[#141214]: https://github.com/home-assistant/core/pull/141214
+[#141215]: https://github.com/home-assistant/core/pull/141215
+[#141216]: https://github.com/home-assistant/core/pull/141216
+[#141218]: https://github.com/home-assistant/core/pull/141218
+[#141219]: https://github.com/home-assistant/core/pull/141219
+[#141221]: https://github.com/home-assistant/core/pull/141221
+[#141222]: https://github.com/home-assistant/core/pull/141222
+[#141225]: https://github.com/home-assistant/core/pull/141225
+[#141226]: https://github.com/home-assistant/core/pull/141226
+[#141227]: https://github.com/home-assistant/core/pull/141227
+[#141228]: https://github.com/home-assistant/core/pull/141228
+[#141236]: https://github.com/home-assistant/core/pull/141236
+[#141238]: https://github.com/home-assistant/core/pull/141238
+[#141239]: https://github.com/home-assistant/core/pull/141239
+[#141240]: https://github.com/home-assistant/core/pull/141240
+[#141241]: https://github.com/home-assistant/core/pull/141241
+[#141244]: https://github.com/home-assistant/core/pull/141244
+[#141246]: https://github.com/home-assistant/core/pull/141246
+[#141249]: https://github.com/home-assistant/core/pull/141249
+[#141250]: https://github.com/home-assistant/core/pull/141250
+[#141252]: https://github.com/home-assistant/core/pull/141252
+[#141254]: https://github.com/home-assistant/core/pull/141254
+[#141255]: https://github.com/home-assistant/core/pull/141255
+[#141259]: https://github.com/home-assistant/core/pull/141259
+[#141260]: https://github.com/home-assistant/core/pull/141260
+[#141261]: https://github.com/home-assistant/core/pull/141261
+[#141262]: https://github.com/home-assistant/core/pull/141262
+[#141265]: https://github.com/home-assistant/core/pull/141265
+[#141266]: https://github.com/home-assistant/core/pull/141266
+[#141268]: https://github.com/home-assistant/core/pull/141268
+[#141269]: https://github.com/home-assistant/core/pull/141269
+[#141274]: https://github.com/home-assistant/core/pull/141274
+[#141275]: https://github.com/home-assistant/core/pull/141275
+[#141280]: https://github.com/home-assistant/core/pull/141280
+[#141281]: https://github.com/home-assistant/core/pull/141281
+[#141283]: https://github.com/home-assistant/core/pull/141283
+[#141285]: https://github.com/home-assistant/core/pull/141285
+[#141287]: https://github.com/home-assistant/core/pull/141287
+[#141289]: https://github.com/home-assistant/core/pull/141289
+[#141292]: https://github.com/home-assistant/core/pull/141292
+[#141293]: https://github.com/home-assistant/core/pull/141293
+[#141294]: https://github.com/home-assistant/core/pull/141294
+[#141295]: https://github.com/home-assistant/core/pull/141295
+[#141296]: https://github.com/home-assistant/core/pull/141296
+[#141297]: https://github.com/home-assistant/core/pull/141297
+[#141298]: https://github.com/home-assistant/core/pull/141298
+[#141299]: https://github.com/home-assistant/core/pull/141299
+[#141300]: https://github.com/home-assistant/core/pull/141300
+[#141302]: https://github.com/home-assistant/core/pull/141302
+[#141303]: https://github.com/home-assistant/core/pull/141303
+[#141308]: https://github.com/home-assistant/core/pull/141308
+[#141311]: https://github.com/home-assistant/core/pull/141311
+[#141312]: https://github.com/home-assistant/core/pull/141312
+[#141313]: https://github.com/home-assistant/core/pull/141313
+[#141315]: https://github.com/home-assistant/core/pull/141315
+[#141316]: https://github.com/home-assistant/core/pull/141316
+[#141317]: https://github.com/home-assistant/core/pull/141317
+[#141321]: https://github.com/home-assistant/core/pull/141321
+[#141323]: https://github.com/home-assistant/core/pull/141323
+[#141326]: https://github.com/home-assistant/core/pull/141326
+[#141328]: https://github.com/home-assistant/core/pull/141328
+[#141338]: https://github.com/home-assistant/core/pull/141338
+[#141339]: https://github.com/home-assistant/core/pull/141339
+[#141342]: https://github.com/home-assistant/core/pull/141342
+[#141343]: https://github.com/home-assistant/core/pull/141343
+[#141344]: https://github.com/home-assistant/core/pull/141344
+[#141353]: https://github.com/home-assistant/core/pull/141353
+[#141356]: https://github.com/home-assistant/core/pull/141356
+[#141358]: https://github.com/home-assistant/core/pull/141358
+[#141359]: https://github.com/home-assistant/core/pull/141359
+[#141360]: https://github.com/home-assistant/core/pull/141360
+[#141363]: https://github.com/home-assistant/core/pull/141363
+[#141365]: https://github.com/home-assistant/core/pull/141365
+[#141366]: https://github.com/home-assistant/core/pull/141366
+[#141368]: https://github.com/home-assistant/core/pull/141368
+[#141369]: https://github.com/home-assistant/core/pull/141369
+[#141370]: https://github.com/home-assistant/core/pull/141370
+[#141372]: https://github.com/home-assistant/core/pull/141372
+[#141374]: https://github.com/home-assistant/core/pull/141374
+[#141375]: https://github.com/home-assistant/core/pull/141375
+[#141378]: https://github.com/home-assistant/core/pull/141378
+[#141379]: https://github.com/home-assistant/core/pull/141379
+[#141381]: https://github.com/home-assistant/core/pull/141381
+[#141382]: https://github.com/home-assistant/core/pull/141382
+[#141383]: https://github.com/home-assistant/core/pull/141383
+[#141384]: https://github.com/home-assistant/core/pull/141384
+[#141386]: https://github.com/home-assistant/core/pull/141386
+[#141387]: https://github.com/home-assistant/core/pull/141387
+[#141388]: https://github.com/home-assistant/core/pull/141388
+[#141390]: https://github.com/home-assistant/core/pull/141390
+[#141391]: https://github.com/home-assistant/core/pull/141391
+[#141392]: https://github.com/home-assistant/core/pull/141392
+[#141393]: https://github.com/home-assistant/core/pull/141393
+[#141394]: https://github.com/home-assistant/core/pull/141394
+[#141400]: https://github.com/home-assistant/core/pull/141400
+[#141401]: https://github.com/home-assistant/core/pull/141401
+[#141403]: https://github.com/home-assistant/core/pull/141403
+[#141404]: https://github.com/home-assistant/core/pull/141404
+[#141407]: https://github.com/home-assistant/core/pull/141407
+[#141409]: https://github.com/home-assistant/core/pull/141409
+[#141410]: https://github.com/home-assistant/core/pull/141410
+[#141414]: https://github.com/home-assistant/core/pull/141414
+[#141415]: https://github.com/home-assistant/core/pull/141415
+[#141417]: https://github.com/home-assistant/core/pull/141417
+[#141418]: https://github.com/home-assistant/core/pull/141418
+[#141419]: https://github.com/home-assistant/core/pull/141419
+[#141420]: https://github.com/home-assistant/core/pull/141420
+[#141423]: https://github.com/home-assistant/core/pull/141423
+[#141425]: https://github.com/home-assistant/core/pull/141425
+[#141426]: https://github.com/home-assistant/core/pull/141426
+[#141427]: https://github.com/home-assistant/core/pull/141427
+[#141430]: https://github.com/home-assistant/core/pull/141430
+[#141431]: https://github.com/home-assistant/core/pull/141431
+[#141432]: https://github.com/home-assistant/core/pull/141432
+[#141433]: https://github.com/home-assistant/core/pull/141433
+[#141438]: https://github.com/home-assistant/core/pull/141438
+[#141440]: https://github.com/home-assistant/core/pull/141440
+[#141441]: https://github.com/home-assistant/core/pull/141441
+[#141444]: https://github.com/home-assistant/core/pull/141444
+[#141446]: https://github.com/home-assistant/core/pull/141446
+[#141447]: https://github.com/home-assistant/core/pull/141447
+[#141449]: https://github.com/home-assistant/core/pull/141449
+[#141450]: https://github.com/home-assistant/core/pull/141450
+[#141451]: https://github.com/home-assistant/core/pull/141451
+[#141452]: https://github.com/home-assistant/core/pull/141452
+[#141453]: https://github.com/home-assistant/core/pull/141453
+[#141455]: https://github.com/home-assistant/core/pull/141455
+[#141457]: https://github.com/home-assistant/core/pull/141457
+[#141460]: https://github.com/home-assistant/core/pull/141460
+[#141464]: https://github.com/home-assistant/core/pull/141464
+[#141465]: https://github.com/home-assistant/core/pull/141465
+[#141467]: https://github.com/home-assistant/core/pull/141467
+[#141468]: https://github.com/home-assistant/core/pull/141468
+[#141469]: https://github.com/home-assistant/core/pull/141469
+[#141470]: https://github.com/home-assistant/core/pull/141470
+[#141472]: https://github.com/home-assistant/core/pull/141472
+[#141474]: https://github.com/home-assistant/core/pull/141474
+[#141477]: https://github.com/home-assistant/core/pull/141477
+[#141479]: https://github.com/home-assistant/core/pull/141479
+[#141481]: https://github.com/home-assistant/core/pull/141481
+[#141482]: https://github.com/home-assistant/core/pull/141482
+[#141484]: https://github.com/home-assistant/core/pull/141484
+[#141485]: https://github.com/home-assistant/core/pull/141485
+[#141488]: https://github.com/home-assistant/core/pull/141488
+[#141490]: https://github.com/home-assistant/core/pull/141490
+[#141491]: https://github.com/home-assistant/core/pull/141491
+[#141493]: https://github.com/home-assistant/core/pull/141493
+[#141501]: https://github.com/home-assistant/core/pull/141501
+[#141508]: https://github.com/home-assistant/core/pull/141508
+[#141515]: https://github.com/home-assistant/core/pull/141515
+[#141522]: https://github.com/home-assistant/core/pull/141522
+[#141525]: https://github.com/home-assistant/core/pull/141525
+[#141526]: https://github.com/home-assistant/core/pull/141526
+[#141527]: https://github.com/home-assistant/core/pull/141527
+[#141528]: https://github.com/home-assistant/core/pull/141528
+[#141531]: https://github.com/home-assistant/core/pull/141531
+[#141541]: https://github.com/home-assistant/core/pull/141541
+[#141542]: https://github.com/home-assistant/core/pull/141542
+[#141549]: https://github.com/home-assistant/core/pull/141549
+[#141553]: https://github.com/home-assistant/core/pull/141553
+[#141559]: https://github.com/home-assistant/core/pull/141559
+[#141561]: https://github.com/home-assistant/core/pull/141561
+[#141564]: https://github.com/home-assistant/core/pull/141564
+[#141567]: https://github.com/home-assistant/core/pull/141567
+[#141572]: https://github.com/home-assistant/core/pull/141572
+[#141573]: https://github.com/home-assistant/core/pull/141573
+[#141575]: https://github.com/home-assistant/core/pull/141575
+[#141580]: https://github.com/home-assistant/core/pull/141580
+[#141584]: https://github.com/home-assistant/core/pull/141584
+[#141585]: https://github.com/home-assistant/core/pull/141585
+[#141586]: https://github.com/home-assistant/core/pull/141586
+[#141589]: https://github.com/home-assistant/core/pull/141589
+[#141596]: https://github.com/home-assistant/core/pull/141596
+[#141599]: https://github.com/home-assistant/core/pull/141599
+[#141601]: https://github.com/home-assistant/core/pull/141601
+[#141615]: https://github.com/home-assistant/core/pull/141615
+[#141617]: https://github.com/home-assistant/core/pull/141617
+[#141618]: https://github.com/home-assistant/core/pull/141618
+[#141620]: https://github.com/home-assistant/core/pull/141620
+[#141623]: https://github.com/home-assistant/core/pull/141623
+[#141630]: https://github.com/home-assistant/core/pull/141630
+[#141632]: https://github.com/home-assistant/core/pull/141632
+[#141646]: https://github.com/home-assistant/core/pull/141646
+[#141647]: https://github.com/home-assistant/core/pull/141647
+[#141650]: https://github.com/home-assistant/core/pull/141650
+[#141653]: https://github.com/home-assistant/core/pull/141653
+[#141654]: https://github.com/home-assistant/core/pull/141654
+[#141659]: https://github.com/home-assistant/core/pull/141659
+[#141663]: https://github.com/home-assistant/core/pull/141663
+[#141668]: https://github.com/home-assistant/core/pull/141668
+[#141669]: https://github.com/home-assistant/core/pull/141669
+[#141674]: https://github.com/home-assistant/core/pull/141674
+[#141676]: https://github.com/home-assistant/core/pull/141676
+[#141680]: https://github.com/home-assistant/core/pull/141680
+[#141682]: https://github.com/home-assistant/core/pull/141682
+[#141686]: https://github.com/home-assistant/core/pull/141686
+[#141687]: https://github.com/home-assistant/core/pull/141687
+[#141689]: https://github.com/home-assistant/core/pull/141689
+[#141691]: https://github.com/home-assistant/core/pull/141691
+[#141695]: https://github.com/home-assistant/core/pull/141695
+[#141698]: https://github.com/home-assistant/core/pull/141698
+[#141700]: https://github.com/home-assistant/core/pull/141700
+[#141704]: https://github.com/home-assistant/core/pull/141704
+[#141708]: https://github.com/home-assistant/core/pull/141708
+[#141709]: https://github.com/home-assistant/core/pull/141709
+[#141718]: https://github.com/home-assistant/core/pull/141718
+[#141719]: https://github.com/home-assistant/core/pull/141719
+[#141720]: https://github.com/home-assistant/core/pull/141720
+[#141722]: https://github.com/home-assistant/core/pull/141722
+[#141729]: https://github.com/home-assistant/core/pull/141729
+[#141733]: https://github.com/home-assistant/core/pull/141733
+[#141735]: https://github.com/home-assistant/core/pull/141735
+[#141764]: https://github.com/home-assistant/core/pull/141764
+[#141771]: https://github.com/home-assistant/core/pull/141771
+[#141778]: https://github.com/home-assistant/core/pull/141778
+[#141802]: https://github.com/home-assistant/core/pull/141802
+[#141805]: https://github.com/home-assistant/core/pull/141805
+[#141811]: https://github.com/home-assistant/core/pull/141811
+[#141818]: https://github.com/home-assistant/core/pull/141818
+[#141822]: https://github.com/home-assistant/core/pull/141822
+[#141834]: https://github.com/home-assistant/core/pull/141834
+[#141838]: https://github.com/home-assistant/core/pull/141838
+[#141839]: https://github.com/home-assistant/core/pull/141839
+[#141847]: https://github.com/home-assistant/core/pull/141847
+[#141879]: https://github.com/home-assistant/core/pull/141879
+[#141887]: https://github.com/home-assistant/core/pull/141887
+[#141888]: https://github.com/home-assistant/core/pull/141888
+[#141890]: https://github.com/home-assistant/core/pull/141890
+[#141893]: https://github.com/home-assistant/core/pull/141893
+[#141907]: https://github.com/home-assistant/core/pull/141907
+[#141909]: https://github.com/home-assistant/core/pull/141909
+[#141911]: https://github.com/home-assistant/core/pull/141911
+[#141919]: https://github.com/home-assistant/core/pull/141919
+[#141922]: https://github.com/home-assistant/core/pull/141922
+[#141928]: https://github.com/home-assistant/core/pull/141928
+[#141930]: https://github.com/home-assistant/core/pull/141930
+[#141934]: https://github.com/home-assistant/core/pull/141934
+[#141939]: https://github.com/home-assistant/core/pull/141939
+[#141943]: https://github.com/home-assistant/core/pull/141943
+[#141946]: https://github.com/home-assistant/core/pull/141946
+[#141959]: https://github.com/home-assistant/core/pull/141959
+[#141960]: https://github.com/home-assistant/core/pull/141960
+[#141967]: https://github.com/home-assistant/core/pull/141967
+[#141969]: https://github.com/home-assistant/core/pull/141969
+[#142006]: https://github.com/home-assistant/core/pull/142006
+[#142010]: https://github.com/home-assistant/core/pull/142010
+[#142016]: https://github.com/home-assistant/core/pull/142016
+[#142017]: https://github.com/home-assistant/core/pull/142017
+[#142020]: https://github.com/home-assistant/core/pull/142020
+[#142029]: https://github.com/home-assistant/core/pull/142029
+[#142031]: https://github.com/home-assistant/core/pull/142031
+[#142034]: https://github.com/home-assistant/core/pull/142034
+[#142045]: https://github.com/home-assistant/core/pull/142045
+[#142046]: https://github.com/home-assistant/core/pull/142046
+[#142067]: https://github.com/home-assistant/core/pull/142067
+[#142070]: https://github.com/home-assistant/core/pull/142070
+[#142072]: https://github.com/home-assistant/core/pull/142072
+[#142073]: https://github.com/home-assistant/core/pull/142073
+[#142077]: https://github.com/home-assistant/core/pull/142077
+[#142078]: https://github.com/home-assistant/core/pull/142078
+[#78192]: https://github.com/home-assistant/core/pull/78192
+[@98ultimate]: https://github.com/98ultimate
+[@ALERTua]: https://github.com/ALERTua
+[@Bre77]: https://github.com/Bre77
+[@DavidBadura]: https://github.com/DavidBadura
+[@Diegorro98]: https://github.com/Diegorro98
+[@Djelibeybi]: https://github.com/Djelibeybi
+[@Foxi352]: https://github.com/Foxi352
+[@Galorhallen]: https://github.com/Galorhallen
+[@IceBotYT]: https://github.com/IceBotYT
+[@IvanLH]: https://github.com/IvanLH
+[@Kane610]: https://github.com/Kane610
+[@Kirchoff]: https://github.com/Kirchoff
+[@LG-ThinQ-Integration]: https://github.com/LG-ThinQ-Integration
+[@Lash-L]: https://github.com/Lash-L
+[@Lesekater]: https://github.com/Lesekater
+[@LouisChrist]: https://github.com/LouisChrist
+[@MaestroOnICe]: https://github.com/MaestroOnICe
+[@MarioZG]: https://github.com/MarioZG
+[@MarkGodwin]: https://github.com/MarkGodwin
+[@MartinHjelmare]: https://github.com/MartinHjelmare
+[@MindFreeze]: https://github.com/MindFreeze
+[@Mirkbot]: https://github.com/Mirkbot
+[@N3rdix]: https://github.com/N3rdix
+[@Nardol]: https://github.com/Nardol
+[@NoRi2909]: https://github.com/NoRi2909
+[@Noltari]: https://github.com/Noltari
+[@Passific]: https://github.com/Passific
+[@PeteRager]: https://github.com/PeteRager
+[@Petro31]: https://github.com/Petro31
+[@PiotrMachowski]: https://github.com/PiotrMachowski
+[@Poshy163]: https://github.com/Poshy163
+[@SLaks]: https://github.com/SLaks
+[@Shulyaka]: https://github.com/Shulyaka
+[@StaleLoafOfBread]: https://github.com/StaleLoafOfBread
+[@StevenLooman]: https://github.com/StevenLooman
+[@Taraman17]: https://github.com/Taraman17
+[@TheJulianJES]: https://github.com/TheJulianJES
+[@Thomas55555]: https://github.com/Thomas55555
+[@TiddlyWiddly]: https://github.com/TiddlyWiddly
+[@aaronburt]: https://github.com/aaronburt
+[@abmantis]: https://github.com/abmantis
+[@adam-the-hero]: https://github.com/adam-the-hero
+[@allenporter]: https://github.com/allenporter
+[@andresb5555]: https://github.com/andresb5555
+[@andrew-codechimp]: https://github.com/andrew-codechimp
+[@andrewsayre]: https://github.com/andrewsayre
+[@andylittle]: https://github.com/andylittle
+[@arturpragacz]: https://github.com/arturpragacz
+[@ascott18]: https://github.com/ascott18
+[@austinmroczek]: https://github.com/austinmroczek
+[@balloob]: https://github.com/balloob
+[@bdraco]: https://github.com/bdraco
+[@bieniu]: https://github.com/bieniu
+[@bramkragten]: https://github.com/bramkragten
+[@cameronr]: https://github.com/cameronr
+[@cdce8p]: https://github.com/cdce8p
+[@cereal2nd]: https://github.com/cereal2nd
+[@chamberlain2007]: https://github.com/chamberlain2007
+[@chemelli74]: https://github.com/chemelli74
+[@clever-trevor]: https://github.com/clever-trevor
+[@codesalatdev]: https://github.com/codesalatdev
+[@crevetor]: https://github.com/crevetor
+[@dan-r]: https://github.com/dan-r
+[@daniele-athome]: https://github.com/daniele-athome
+[@dontinelli]: https://github.com/dontinelli
+[@edenhaus]: https://github.com/edenhaus
+[@elmurato]: https://github.com/elmurato
+[@elupus]: https://github.com/elupus
+[@emontnemery]: https://github.com/emontnemery
+[@epenet]: https://github.com/epenet
+[@erwindouna]: https://github.com/erwindouna
+[@farmio]: https://github.com/farmio
+[@felipecrs]: https://github.com/felipecrs
+[@flz]: https://github.com/flz
+[@frenck]: https://github.com/frenck
+[@fwestenberg]: https://github.com/fwestenberg
+[@gjohansson-ST]: https://github.com/gjohansson-ST
+[@glenrobertson]: https://github.com/glenrobertson
+[@hunterjm]: https://github.com/hunterjm
+[@huyuwei1996]: https://github.com/huyuwei1996
+[@hydazz]: https://github.com/hydazz
+[@iMicknl]: https://github.com/iMicknl
+[@iiliev-nemetschek]: https://github.com/iiliev-nemetschek
+[@iprak]: https://github.com/iprak
+[@j-a-n]: https://github.com/j-a-n
+[@jbouwh]: https://github.com/jbouwh
+[@joostlek]: https://github.com/joostlek
+[@jorisdrenth]: https://github.com/jorisdrenth
+[@jpbede]: https://github.com/jpbede
+[@jterrace]: https://github.com/jterrace
+[@jwillemsen]: https://github.com/jwillemsen
+[@karwosts]: https://github.com/karwosts
+[@keithle888]: https://github.com/keithle888
+[@ludeeus]: https://github.com/ludeeus
+[@maghiel]: https://github.com/maghiel
+[@marc7s]: https://github.com/marc7s
+[@marcelveldt]: https://github.com/marcelveldt
+[@martin12as]: https://github.com/martin12as
+[@matrixd2]: https://github.com/matrixd2
+[@mbraem]: https://github.com/mbraem
+[@mib1185]: https://github.com/mib1185
+[@mikey0000]: https://github.com/mikey0000
+[@misch2]: https://github.com/misch2
+[@mtielen]: https://github.com/mtielen
+[@mvdwetering]: https://github.com/mvdwetering
+[@mvn23]: https://github.com/mvn23
+[@natekspencer]: https://github.com/natekspencer
+[@nickpesce]: https://github.com/nickpesce
+[@pavoni]: https://github.com/pavoni
+[@peteS-UK]: https://github.com/peteS-UK
+[@pglab-electronics]: https://github.com/pglab-electronics
+[@piitaya]: https://github.com/piitaya
+[@poucz]: https://github.com/poucz
+[@ptr727]: https://github.com/ptr727
+[@puddly]: https://github.com/puddly
+[@rappenze]: https://github.com/rappenze
+[@regevbr]: https://github.com/regevbr
+[@rokam]: https://github.com/rokam
+[@sanjay900]: https://github.com/sanjay900
+[@silamon]: https://github.com/silamon
+[@starkillerOG]: https://github.com/starkillerOG
+[@sumnerboy12]: https://github.com/sumnerboy12
+[@svrooij]: https://github.com/svrooij
+[@synesthesiam]: https://github.com/synesthesiam
+[@tathamoddie]: https://github.com/tathamoddie
+[@tdfountain]: https://github.com/tdfountain
+[@tedvdb]: https://github.com/tedvdb
+[@thecode]: https://github.com/thecode
+[@thomasddn]: https://github.com/thomasddn
+[@timlaing]: https://github.com/timlaing
+[@timmo001]: https://github.com/timmo001
+[@tl-sl]: https://github.com/tl-sl
+[@tofuSCHNITZEL]: https://github.com/tofuSCHNITZEL
+[@tr4nt0r]: https://github.com/tr4nt0r
+[@trevorwarwick]: https://github.com/trevorwarwick
+[@tronikos]: https://github.com/tronikos
+[@tsvi]: https://github.com/tsvi
+[@twasilczyk]: https://github.com/twasilczyk
+[@victorclaessen]: https://github.com/victorclaessen
+[@wittypluck]: https://github.com/wittypluck
+[@wjtje]: https://github.com/wjtje
+[@zerzhang]: https://github.com/zerzhang
+[@zweckj]: https://github.com/zweckj
\ No newline at end of file
diff --git a/source/dashboards/dashboards.markdown b/source/dashboards/dashboards.markdown
index f97f38794e6..518b7c665d8 100644
--- a/source/dashboards/dashboards.markdown
+++ b/source/dashboards/dashboards.markdown
@@ -12,6 +12,10 @@ related:
title: Views
- docs: /dashboards/iframe/
title: Webpage card
+ - docs: /docs/organizing/
+ title: Grouping your assets
+ - docs: /docs/organizing/areas/
+ title: Grouping by areas
---
You can define multiple dashboards in Home Assistant. Each dashboard can be added to the sidebar. This makes it possible to create separate control dashboards for each individual part of your house.
@@ -27,15 +31,63 @@ Screenshot of the Dashboard list.
Home Assistant ships with some dashboards out of the box:
-- Overview
-- Energy
-- [Map](#map-dashboard)
-- Logbook
-- History
-- To-do lists
+- [Areas dashboard (experimental)](#areas-dashboard)
+- Energy dashboard
+- [History dashboard](#history-dashboard)
+- [Logbook dashboard](#logbook-dashboard)
+- [Map dashboard](#map-dashboard)
+- [Overview dashboard](#creating-a-new-dashboard)
+- [To-do lists dashboard](#to-do-lists-dashboard)
Not all of the predefined dashboards are listed under {% my lovelace_dashboards title="**Settings** > **Dashboards**" %}. The **Logbook** and **History** dashboards are powered by their respective integrations.
+### Areas dashboard
+
+{% note %}
+The **Areas** dashboard is still experimental. It is subject to change and may not always work as intended.
+{% endnote %}
+
+The **Areas** dashboard is prepopulated by default and shows your {% term entities %} [grouped](/docs/organizing/) by [areas](/docs/organizing/areas/).
+
+- It uses the [sections view](/dashboards/sections/) type and [tile cards](/dashboards/tile/).
+- The first view shows all your areas and the {% term entities %} that are [assigned to those areas](/docs/organizing/areas/).
+- In addition, the dashboard provides a separate view for each area.
+- {% term entities Entities%}, such as lights, covers, and cameras are automatically grouped by {% term domain %}.
+
+
+
+Screenshot of the Areas default dashboard.
+
+
+#### Limitations of the Areas dashboard
+
+1. Not all devices are added to the **Areas** dashboard. Only a few sensors are displayed automatically. Such as temperature and humidity of the area, and door, window, and gate binary sensors.
+2. Certain entity domains and helpers are omitted from the **Areas** dashboard. For example, configuration and diagnostic {% term entities %} do not appear, even if they have been assigned to an area.
+
+#### Adding an Areas dashboard
+
+- To add the **Areas** dashboard, follow the steps on [adding a dashboard](#creating-a-new-dashboard).
+
+#### Editing the Areas dashboard
+
+1. Make sure all the {% term entities %} are [assigned to an area](/docs/organizing/areas/#assigning-an-area-to-multiple-items).
+2. After you [added the dashboard](#creating-a-new-dashboard), you can edit the **Areas** dashboard.
+3. In the top-right corner, select the {% icon "mdi:pencil" %} icon.
+4. You can show or hide sections, rearrange the content, or [add badges](/dashboards/badges/).
+
+#### Troubleshooting: entity is not showing
+
+1. Not all devices or entity types are automatically added to the **Areas** dashboard. Refer to the [Limitations](#limitations-of-the-areas-dashboard) section.
+2. Make sure the entity is [assigned to an area](/docs/organizing/areas/#assigning-an-area-to-multiple-items) and check the dashboard again.
+
+### History dashboard
+
+The predefined **History** dashboard is powered by the [History integration](/integrations/history/). To learn about the data sources used and how to export data, refer to the documentation of the History integration.
+
+### Logbook dashboard
+
+The predefined **Logbook** dashboard is powered by the [Logbook integration](/integrations/logbook/). To control which events to show or filter out, refer to the documentation of the Logbook integration.
+
### Map dashboard
The predefined **Map** dashboard is populated by the [Map card](/dashboards/map/). You can edit this dashboard like any other dashboard. For example, you can edit the [view](/dashboards/views/) to use the **Sidebar** instead of the default **Panel** view type if you like.
@@ -44,14 +96,6 @@ The predefined **Map** dashboard is populated by the [Map card](/dashboards/map/
If you see a [person](/integrations/person/) on the map, it means you have connected a device that allows [presence detection](/integrations/#presence-detection). This is the case for example if you have the [Home Assistant Companion App](https://companion.home-assistant.io/) on your phone and allowed location tracking.
-### Logbook dashboard
-
-The predefined **Logbook** dashboard is powered by the [Logbook integration](/integrations/logbook/). To control which events to show or filter out, refer to the documentation of the Logbook integration.
-
-### History dashboard
-
-The predefined **History** dashboard is powered by the [History integration](/integrations/history/). To learn about the data sources used and how to export data, refer to the documentation of the History integration.
-
### To-do lists dashboard
The predefined **To-do lists** dashboard is powered by the [To-do integration](/integrations/todo/). To learn how to use to-do and shopping lists, refer to the documentation of the to-do list integration.
@@ -84,21 +128,26 @@ This will leave the default dashboard intact.
2. Select **Add dashboard**.

3. In the dialog, choose one of the options:
- - If you want to start with a pre-populated dashboard, choose **Default dashboard**.
+ - If you want to start with a pre-populated dashboard, choose **Default dashboard** or one of the suggested ones, such as the **Areas** dashboard.
- If you want to start with a completely empty dashboard, choose **New dashboard from scratch**.
+ 
+
4. In the **Add new dashboard** dialog, enter a name and select an icon.
- Define if this dashboard should be visible only to the admin user.
- Define if you want the dashboard to be listed in the sidebar.
- Select **Create**.
- **Result**: The dashboard is added.
-5. Open your new dashboard and in the top right of the screen, select the
button.
-6. If you chose **Default dashboard**, you need to take control before you can edit it:
+
+## Editing a new dashboard
+
+1. Open your new dashboard and in the top right of the screen, select the {% icon "mdi:pencil" %} button.
+2. If you are editing a **Default dashboard** for the first time, you need to take control before you can edit it:
- The **Edit dashboard** dialog appears.
- By editing the dashboard, you are taking over control of this dashboard.
- This means that it is no longer automatically updated when new dashboard elements become available.
- Once you've taken control, you can't get this specific dashboard back to update automatically. However, you can create a new default dashboard.
- To continue, in the dialog, select the three dots {% icon "mdi:dots-vertical" %} menu, then select **Take control**.
-7. You can now [add a card](/dashboards/cards/#adding-cards-to-your-dashboard) or [add a view](/dashboards/views/#adding-a-view-to-a-dashboard).
+3. You can now [add a card](/dashboards/cards/#adding-cards-to-your-dashboard) or [add a view](/dashboards/views/#adding-a-view-to-a-dashboard).
## Deleting a dashboard
diff --git a/source/getting-started/onboarding.markdown b/source/getting-started/onboarding.markdown
index 15fba1c3dad..117af524f52 100644
--- a/source/getting-started/onboarding.markdown
+++ b/source/getting-started/onboarding.markdown
@@ -17,8 +17,6 @@ After Home Assistant has been [installed](/installation/) on your device, there
- **Option 1: new installation**: If this is your initial installation, we will now create the owner's account of Home Assistant.
- {% icon "mdi:information-outline" %} This account is an administrator account. It will always be able to change everything.
- Select **Create my smart home**.
-
- 
- Enter a name, username, and password.
- Make sure the username is lowercase and contains no whitespace.
- {% icon "mdi:info" %} **Info**: The **Name** is the name of the person that is shown in the UI. The username is used for login.
@@ -27,10 +25,9 @@ After Home Assistant has been [installed](/installation/) on your device, there
- Store the name, username, and password somewhere safe. There is no way to recover the owner credentials.
- Select **Create account**.
- - **Option 2: restore from backup**: If you want to restore a backup of a previous installation, select **Restore from backup**.
- - Ignore the rest of this procedure and continue with the procedure on [restoring from backup](/common-tasks/general/#restoring-a-backup).
- - If you have a Home Assistant Yellow, start with the [Yellow documentation on restoring from backup](https://yellow.home-assistant.io/guides/restore-backup/).
- - If you have a Home Assistant Green, start with the [Green documentation on restoring from backup](https://green.home-assistant.io/guides/restore-backup/).
+ - **Option 2: restore from backup**: If you want to restore a backup of a previous installation, follow the steps on [restoring from backup](/common-tasks/general/#restoring-a-backup).
+ - If you have a Home Assistant Yellow, follow the [Yellow documentation on restoring from backup](https://yellow.home-assistant.io/guides/restore-backup/).
+ - If you have a Home Assistant Green, follow the [Green documentation on restoring from backup](https://green.home-assistant.io/guides/restore-backup/).
3. Enter the location of your home.
- The home location is used to configure the time zone, unit system, and currency.
diff --git a/source/images/blog/2025-04-SOTOH/HA-community-day.jpg b/source/images/blog/2025-04-SOTOH/HA-community-day.jpg
new file mode 100644
index 00000000000..bce73ee4738
Binary files /dev/null and b/source/images/blog/2025-04-SOTOH/HA-community-day.jpg differ
diff --git a/source/images/blog/2025-04-SOTOH/art.jpg b/source/images/blog/2025-04-SOTOH/art.jpg
new file mode 100644
index 00000000000..ce05599f969
Binary files /dev/null and b/source/images/blog/2025-04-SOTOH/art.jpg differ
diff --git a/source/images/blog/2025-04-SOTOH/closing.jpg b/source/images/blog/2025-04-SOTOH/closing.jpg
new file mode 100644
index 00000000000..fc08a225780
Binary files /dev/null and b/source/images/blog/2025-04-SOTOH/closing.jpg differ
diff --git a/source/images/blog/2025-04-SOTOH/hacs-ma.jpg b/source/images/blog/2025-04-SOTOH/hacs-ma.jpg
new file mode 100644
index 00000000000..31574ccf726
Binary files /dev/null and b/source/images/blog/2025-04-SOTOH/hacs-ma.jpg differ
diff --git a/source/images/blog/2025-04-SOTOH/mob-museum.jpg b/source/images/blog/2025-04-SOTOH/mob-museum.jpg
new file mode 100644
index 00000000000..9c5f0ad7440
Binary files /dev/null and b/source/images/blog/2025-04-SOTOH/mob-museum.jpg differ
diff --git a/source/images/blog/2025-04-SOTOH/ohf-growth.jpg b/source/images/blog/2025-04-SOTOH/ohf-growth.jpg
new file mode 100644
index 00000000000..5eaf480ee07
Binary files /dev/null and b/source/images/blog/2025-04-SOTOH/ohf-growth.jpg differ
diff --git a/source/images/blog/2025-04-SOTOH/ohf-structure.jpg b/source/images/blog/2025-04-SOTOH/ohf-structure.jpg
new file mode 100644
index 00000000000..82d8b266d40
Binary files /dev/null and b/source/images/blog/2025-04-SOTOH/ohf-structure.jpg differ
diff --git a/source/images/blog/2025-04-SOTOH/ohf-supporters.jpg b/source/images/blog/2025-04-SOTOH/ohf-supporters.jpg
new file mode 100644
index 00000000000..3de7aeba44d
Binary files /dev/null and b/source/images/blog/2025-04-SOTOH/ohf-supporters.jpg differ
diff --git a/source/images/blog/2025-04-SOTOH/ohf-survey.jpg b/source/images/blog/2025-04-SOTOH/ohf-survey.jpg
new file mode 100644
index 00000000000..79e0d32b998
Binary files /dev/null and b/source/images/blog/2025-04-SOTOH/ohf-survey.jpg differ
diff --git a/source/images/blog/2025-04-SOTOH/runar.jpg b/source/images/blog/2025-04-SOTOH/runar.jpg
new file mode 100644
index 00000000000..f8091b69c16
Binary files /dev/null and b/source/images/blog/2025-04-SOTOH/runar.jpg differ
diff --git a/source/images/blog/2025-04-SOTOH/values.jpg b/source/images/blog/2025-04-SOTOH/values.jpg
new file mode 100644
index 00000000000..5bd74c359b4
Binary files /dev/null and b/source/images/blog/2025-04-SOTOH/values.jpg differ
diff --git a/source/images/blog/2025-04-SOTOH/voice-ai.jpg b/source/images/blog/2025-04-SOTOH/voice-ai.jpg
new file mode 100644
index 00000000000..e03adb310ca
Binary files /dev/null and b/source/images/blog/2025-04-SOTOH/voice-ai.jpg differ
diff --git a/source/images/blog/2025-04-SOTOH/wwha.jpg b/source/images/blog/2025-04-SOTOH/wwha.jpg
new file mode 100644
index 00000000000..758bf405ee5
Binary files /dev/null and b/source/images/blog/2025-04-SOTOH/wwha.jpg differ
diff --git a/source/images/blog/2025-04-community-day/art.png b/source/images/blog/2025-04-community-day/art.png
new file mode 100644
index 00000000000..cb9efc4392f
Binary files /dev/null and b/source/images/blog/2025-04-community-day/art.png differ
diff --git a/source/images/blog/2025-04-community-day/event.png b/source/images/blog/2025-04-community-day/event.png
new file mode 100644
index 00000000000..029a815bdb3
Binary files /dev/null and b/source/images/blog/2025-04-community-day/event.png differ
diff --git a/source/images/blog/2025-04-reolink/argus-track.webm b/source/images/blog/2025-04-reolink/argus-track.webm
new file mode 100644
index 00000000000..c99af06eebf
Binary files /dev/null and b/source/images/blog/2025-04-reolink/argus-track.webm differ
diff --git a/source/images/blog/2025-04-reolink/art.jpg b/source/images/blog/2025-04-reolink/art.jpg
new file mode 100644
index 00000000000..a8a064e2f13
Binary files /dev/null and b/source/images/blog/2025-04-reolink/art.jpg differ
diff --git a/source/images/blog/2025-04/areas-dashboard-detail.png b/source/images/blog/2025-04/areas-dashboard-detail.png
new file mode 100644
index 00000000000..c863ed36938
Binary files /dev/null and b/source/images/blog/2025-04/areas-dashboard-detail.png differ
diff --git a/source/images/blog/2025-04/areas-dashboard-overview.png b/source/images/blog/2025-04/areas-dashboard-overview.png
new file mode 100644
index 00000000000..aa71244df1a
Binary files /dev/null and b/source/images/blog/2025-04/areas-dashboard-overview.png differ
diff --git a/source/images/blog/2025-04/areas-experimental-dialog.png b/source/images/blog/2025-04/areas-experimental-dialog.png
new file mode 100644
index 00000000000..8fd43623f04
Binary files /dev/null and b/source/images/blog/2025-04/areas-experimental-dialog.png differ
diff --git a/source/images/blog/2025-04/card-clock.png b/source/images/blog/2025-04/card-clock.png
new file mode 100644
index 00000000000..702dcbdd14a
Binary files /dev/null and b/source/images/blog/2025-04/card-clock.png differ
diff --git a/source/images/blog/2025-04/energy-management-device-hierarchy.png b/source/images/blog/2025-04/energy-management-device-hierarchy.png
new file mode 100644
index 00000000000..bf9075232ac
Binary files /dev/null and b/source/images/blog/2025-04/energy-management-device-hierarchy.png differ
diff --git a/source/images/blog/2025-04/restore-from-cloud.png b/source/images/blog/2025-04/restore-from-cloud.png
new file mode 100644
index 00000000000..5c9d2ca0531
Binary files /dev/null and b/source/images/blog/2025-04/restore-from-cloud.png differ
diff --git a/source/images/blog/2025-04/social.jpg b/source/images/blog/2025-04/social.jpg
new file mode 100644
index 00000000000..e7b15a94b6d
Binary files /dev/null and b/source/images/blog/2025-04/social.jpg differ
diff --git a/source/images/blog/2025-04/voice-wizard.png b/source/images/blog/2025-04/voice-wizard.png
new file mode 100644
index 00000000000..37adaa1614f
Binary files /dev/null and b/source/images/blog/2025-04/voice-wizard.png differ
diff --git a/source/images/dashboards/areas-dashboard-overview.png b/source/images/dashboards/areas-dashboard-overview.png
new file mode 100644
index 00000000000..aa71244df1a
Binary files /dev/null and b/source/images/dashboards/areas-dashboard-overview.png differ
diff --git a/source/images/dashboards/areas-experimental-dialog.png b/source/images/dashboards/areas-experimental-dialog.png
new file mode 100644
index 00000000000..8fd43623f04
Binary files /dev/null and b/source/images/dashboards/areas-experimental-dialog.png differ
diff --git a/source/images/dashboards/clock_card_london.png b/source/images/dashboards/clock_card_london.png
new file mode 100644
index 00000000000..d5cc698580a
Binary files /dev/null and b/source/images/dashboards/clock_card_london.png differ
diff --git a/source/images/dashboards/clock_card_new_york.png b/source/images/dashboards/clock_card_new_york.png
new file mode 100644
index 00000000000..743b9ac9399
Binary files /dev/null and b/source/images/dashboards/clock_card_new_york.png differ
diff --git a/source/images/frontpage/community-day-2025.webp b/source/images/frontpage/community-day-2025.webp
new file mode 100644
index 00000000000..9b70ed29e4e
Binary files /dev/null and b/source/images/frontpage/community-day-2025.webp differ
diff --git a/source/images/frontpage/feature-sotoh2025.jpg b/source/images/frontpage/feature-sotoh2025.jpg
new file mode 100644
index 00000000000..fe0f8491a6f
Binary files /dev/null and b/source/images/frontpage/feature-sotoh2025.jpg differ
diff --git a/source/images/getting-started/onboarding_preparing_01.png b/source/images/getting-started/onboarding_preparing_01.png
deleted file mode 100644
index f42b6b2d505..00000000000
Binary files a/source/images/getting-started/onboarding_preparing_01.png and /dev/null differ
diff --git a/source/images/getting-started/onboarding_preparing_01_.png b/source/images/getting-started/onboarding_preparing_01_.png
index fd135246745..4d018a3cc78 100644
Binary files a/source/images/getting-started/onboarding_preparing_01_.png and b/source/images/getting-started/onboarding_preparing_01_.png differ
diff --git a/source/installation/index.html b/source/installation/index.html
index 5881fd977ca..95769e0c943 100644
--- a/source/installation/index.html
+++ b/source/installation/index.html
@@ -95,7 +95,7 @@ toc: true
TOOLS REQUIRED
- - Raspberry Pi 3, 4 or 5 with power supply
+ - Raspberry Pi 4 or 5 with power supply
- MicroSD card
- Ethernet connection
diff --git a/source/installation/raspberrypi.markdown b/source/installation/raspberrypi.markdown
index 51408e31c81..232e7292bb8 100644
--- a/source/installation/raspberrypi.markdown
+++ b/source/installation/raspberrypi.markdown
@@ -14,7 +14,7 @@ Included section for this page is located under source/_includes/installation
We will need a few things to get started with installing Home Assistant.
-- [Raspberry Pi 5](https://amzn.to/3UH6TcD) or [Raspberry Pi 4](https://amzn.to/2S0Gcl1) with [power supply](https://amzn.to/2ReZ2Vq) (Raspberry Pi 3 Model B is ok to get started, but the Model A does not have enough RAM).
+- [Raspberry Pi 5](https://amzn.to/3UH6TcD) or [Raspberry Pi 4](https://amzn.to/2S0Gcl1) with [power supply](https://amzn.to/2ReZ2Vq) (neither the Raspberry Pi 3 Model A nor Model B have enough RAM to be stable).
- [Micro SD Card](https://amzn.to/2X0Z2di).
- Ideally get one that is [Application Class 2](https://www.sdcard.org/developers/overview/application/index.html). Check for the label **A2** on the card. Application Class 2 cards perform better especially on small read and write operations and are better suited to host applications.
- Make sure to use a card that provides at least 32 GB.
@@ -78,7 +78,7 @@ Congratulations! You finished the Raspberry Pi setup!
If Raspberry Pi Imager is not supported by your platform, you can download the Home Assistant image and use another imaging tool, such as Balena Etcher.
-To download the image to your computer, copy the correct URL for the Raspberry Pi 3, 4 or 5 (Note: there are 3 different links below!):
+To download the image to your computer, copy the correct URL for the Raspberry Pi 4 or 5 (Note: there are two different links below!):
{% tabbed_block %}
{% for variant in site.installation.types[page.installation_type].variants %}
diff --git a/source/more-info/backup-emergency-kit.markdown b/source/more-info/backup-emergency-kit.markdown
index cfabdacecb4..24fe4b8003c 100644
--- a/source/more-info/backup-emergency-kit.markdown
+++ b/source/more-info/backup-emergency-kit.markdown
@@ -40,7 +40,14 @@ When you set up your [backups](/common-tasks/general/#backups), an encryption ke
## I lost my backup encryption key - how can I retrieve it?
-If you still have access to your Home Assistant instance you can download the encryption key again from the backup settings.
+If you still have access to your Home Assistant instance, you can download the encryption key again from the backup settings. There are 2 options:
-- **If you have not changed the encryption key**: Home Assistant still has it. If you download the backup from the Home Assistant Backup page, it decrypts the backup on the fly.
-- **If you have changed the encryption key**: Home Assistant can not decrypt it on the fly. You need the encryption key that is related to that backup. If you have lost the encryption key, and have no access to your Home Assistant instance, there is no way to restore the backup.
+- **Option 1: you haven't changed the encryption key**: Home Assistant still has it.
+ 1. In Home Assistant, go to {% my backup title="**Settings** > **System** > **Backups**" %}
+ 2. Under **Backup settings**, in the **Encryption key** section, either download your emergency kit or copy the key.
+ 3. If you download the backup from the Home Assistant Backup page, it decrypts the backup on the fly.
+
+- **Option 2: you have changed the encryption key**: Home Assistant cannot decrypt it on the fly.
+ - You need the encryption key that is related to that backup.
+ - If you have lost the encryption key, and have no access to your Home Assistant instance, there is no way to restore the backup.
+ - Nabu Casa does not store your encryption key and cannot provide support in decrypting backups if the key goes missing.