Looking for your configuration file?
diff --git a/plugins/output_modder.rb b/plugins/output_modder.rb
index a4ca095d796..b1b9fedb341 100644
--- a/plugins/output_modder.rb
+++ b/plugins/output_modder.rb
@@ -41,15 +41,28 @@ module Jekyll
link.set_attribute('rel', rel.join(' ').strip)
end
- # Find all headers, make them linkable
+ # Find all headers, make them linkable with unique slug names
+ used_slugs = {}
+
dom.css('h2,h3,h4,h5,h6,h7,h8').each do |header|
+ # Skip linked headers
+ next if header.at_css('a')
- # Skip linked headers
- next if header.at_css('a')
-
- title = header.content
- slug = title.downcase.strip.gsub(' ', '-').gsub(/[^\w-]/, '')
- header.children = "#{title} "
+ title = header.content
+
+ # Clean the title to create a slug
+ base_slug = title.downcase.strip.gsub(' ', '-').gsub(/[^\w-]/, '')
+
+ # Make slug unique by adding counter if needed
+ if used_slugs[base_slug]
+ used_slugs[base_slug] += 1
+ slug = "#{base_slug}-#{used_slugs[base_slug] - 1}"
+ else
+ used_slugs[base_slug] = 1
+ slug = base_slug
+ end
+
+ header.children = "#{title} "
end
dom.to_s
diff --git a/sass/homeassistant/base/_post.scss b/sass/homeassistant/base/_post.scss
index 2735acac292..598f7788aef 100644
--- a/sass/homeassistant/base/_post.scss
+++ b/sass/homeassistant/base/_post.scss
@@ -119,5 +119,9 @@ article {
.meta {
margin-bottom: 3em;
}
+
+ > header + img + p{
+ margin-top: 24px;
+ }
}
}
diff --git a/source/_dashboards/history-graph.markdown b/source/_dashboards/history-graph.markdown
index 3a0e1e8b3b7..8b1e3629abe 100644
--- a/source/_dashboards/history-graph.markdown
+++ b/source/_dashboards/history-graph.markdown
@@ -95,9 +95,9 @@ name:
### Long term statistics
-Home Assistant saves long-term statistics for a sensor if the entity has a state_class of measurement, total, or total_increasing. For short-term statistics, a snapshot is taken every 5 minutes. For long-term statistics, an hourly aggregate is stored of the short-term statistics. Short-term statistics are automatically purged after a predefined period (default is 10 days). Long-term statistics are never purged.
+Home Assistant saves long-term statistics for a sensor if the entity has a state_class of measurement, total, or total_increasing. For long-term statistics, an hourly aggregate is stored from the sensor history. Long-term statistics are never purged.
-In the history graph card, if the hours to show variable is set to a figure higher than the purge_keep period, long-term statistics will be used, with short term statistics shown in bold.
+In the history graph card, if the hours to show variable is set to a figure higher than the recorder retention period, long-term statistics will backfill the older parts of the history graph, with more recent actual sensor values from the recorder shown in bold.
### Examples
diff --git a/source/_dashboards/picture.markdown b/source/_dashboards/picture.markdown
index 25770bf6605..ff8e4906d79 100644
--- a/source/_dashboards/picture.markdown
+++ b/source/_dashboards/picture.markdown
@@ -32,7 +32,7 @@ type:
type: string
image:
required: true
- description: "The URL of an image. When you want to store images in your Home Assistant installation use the [hosting files documentation](/integrations/http/#hosting-files). After storing your files, use the `/local` path, for example, `/local/filename.jpg`."
+ description: "The URL of an image. When you want to store images in your Home Assistant installation use the [hosting files documentation](/integrations/http/#hosting-files). After storing your files, use the `/local` path, for example, `/local/filename.jpg`. To use an image from an existing [media](/integrations/media_source/) directory, provide the full media-source identifier (see examples)."
type: string
image_entity:
required: false
@@ -85,3 +85,10 @@ tap_action:
data:
entity_id: light.ceiling_lights
```
+
+Show an image from a [media](/integrations/media_source/) directory:
+
+```yaml
+type: picture
+image: media-source://media_source/local/test.jpg
+```
diff --git a/source/_data/glossary.yml b/source/_data/glossary.yml
index ae0bd776361..f60b457e083 100644
--- a/source/_data/glossary.yml
+++ b/source/_data/glossary.yml
@@ -636,3 +636,7 @@
link: /integrations/zone/
aliases:
- zones
+- term: Long-term statistics
+ definition: >-
+ Home Assistant saves long-term statistics for a sensor if the entity has a state_class of measurement, total, or total_increasing. For short-term statistics, a snapshot is taken every 5 minutes. For long-term statistics, an hourly aggregate is stored of the short-term statistics. Short-term statistics are automatically purged after a predefined period (default is 10 days). Long-term statistics are never purged.
+ link: /blog/2021/08/04/release-20218/#long-term-statistics
diff --git a/source/_data/people.yml b/source/_data/people.yml
index 16043925a3d..67325df442b 100644
--- a/source/_data/people.yml
+++ b/source/_data/people.yml
@@ -96,4 +96,8 @@ Annika Schulz:
Miranda Bishop:
name: Miranda Bishop
- github: miranda-gb
\ No newline at end of file
+ github: miranda-gb
+
+Timothy Nibeaudeau:
+ name: Timothy Nibeaudeau
+ github: timoPtr
diff --git a/source/_docs/automation/trigger.markdown b/source/_docs/automation/trigger.markdown
index 2b0280d64a1..36d86ba8b80 100644
--- a/source/_docs/automation/trigger.markdown
+++ b/source/_docs/automation/trigger.markdown
@@ -825,6 +825,101 @@ blueprint:
{% endraw %}
+### Weekday filtering
+
+Time triggers can be filtered to fire only on specific days of the week using the `weekday` option. This allows you to create automations that only run on certain days, such as weekdays or weekends.
+
+The `weekday` option accepts:
+- A single weekday as a string: `"mon"`, `"tue"`, `"wed"`, `"thu"`, `"fri"`, `"sat"`, `"sun"`
+- A list of weekdays using the expanded format
+
+#### Single weekday
+
+This example will turn on the lights only on Mondays at 8:00 AM:
+
+```yaml
+automation:
+ - triggers:
+ - trigger: time
+ at: "08:00:00"
+ weekday: "mon"
+ actions:
+ - action: light.turn_on
+ target:
+ entity_id: light.bedroom
+```
+
+#### Multiple weekdays
+
+This example will run a morning routine only on weekdays (Monday through Friday) at 6:30 AM:
+
+```yaml
+automation:
+ - triggers:
+ - trigger: time
+ at: "06:30:00"
+ weekday:
+ - "mon"
+ - "tue"
+ - "wed"
+ - "thu"
+ - "fri"
+ actions:
+ - action: script.morning_routine
+```
+
+#### Weekend example
+
+This example demonstrates a different wake-up time for weekends:
+
+```yaml
+automation:
+ - alias: "Weekday alarm"
+ triggers:
+ - trigger: time
+ at: "06:30:00"
+ weekday:
+ - "mon"
+ - "tue"
+ - "wed"
+ - "thu"
+ - "fri"
+ actions:
+ - action: script.weekday_morning
+
+ - alias: "Weekend alarm"
+ triggers:
+ - trigger: time
+ at: "08:00:00"
+ weekday:
+ - "sat"
+ - "sun"
+ actions:
+ - action: script.weekend_morning
+```
+
+#### Combined with input datetime
+
+The `weekday` option works with all time formats, including input datetime entities:
+
+```yaml
+automation:
+ - triggers:
+ - trigger: time
+ at: input_datetime.work_start_time
+ weekday:
+ - "mon"
+ - "tue"
+ - "wed"
+ - "thu"
+ - "fri"
+ actions:
+ - action: notify.mobile_app
+ data:
+ title: "Work Day!"
+ message: "Time to start working"
+```
+
## Time pattern trigger
With the time pattern trigger, you can match if the hour, minute or second of the current time matches a specific value. You can prefix the value with a `/` to match whenever the value is divisible by that number. You can specify `*` to match any value (when using the web interface this is required, the fields cannot be left empty).
diff --git a/source/_docs/automation/using_blueprints.markdown b/source/_docs/automation/using_blueprints.markdown
index ffa50ecdcb4..ce6834b1262 100644
--- a/source/_docs/automation/using_blueprints.markdown
+++ b/source/_docs/automation/using_blueprints.markdown
@@ -75,7 +75,7 @@ The quickest way to get these changes, is by re-importing the blueprint. This wi
### To re-import a blueprint
1. Go to **{% my blueprints title="Settings > Automations & Scenes > Blueprints" %}**.
-2. On the blueprint that you want to re-import, select the three-dot menu, and select **Re-import blueprint**.
+2. On the blueprint that you want to re-import, select the three dots {% icon "mdi:dots-vertical" %} menu, and select **Re-import blueprint**.
## Updating an imported blueprint in YAML
diff --git a/source/_docs/blueprint/selectors.markdown b/source/_docs/blueprint/selectors.markdown
index ad8de8d8884..d914b288ef2 100644
--- a/source/_docs/blueprint/selectors.markdown
+++ b/source/_docs/blueprint/selectors.markdown
@@ -721,6 +721,12 @@ multiple:
type: boolean
default: false
required: false
+reorder:
+ description: >
+ Allows reordering of entities (only applies if `multiple` is set to `true`).
+ type: boolean
+ default: false
+ required: false
{% endconfiguration %}
The output of this selector is the entity ID, or (in case `multiple` is set to
@@ -1121,11 +1127,11 @@ number:
min:
description: The minimum user-settable number value.
type: [integer, float]
- required: true
+ required: false
max:
description: The maximum user-settable number value.
type: [integer, float]
- required: true
+ required: false
step:
description: The step size of the number value. Set to `"any"` to allow any number.
type: [integer, float, "any"]
@@ -1139,7 +1145,16 @@ mode:
description: This can be either `box` or `slider` mode.
type: string
required: false
- default: slider
+ default: slider if min and max are set, otherwise box
+translation_key:
+ description: >
+ Allows translations provided by an integration where `translation_key`
+ is the translation key that is providing the unit_of_measurement string
+ translation. See the documentation on
+ [Backend Localization](https://developers.home-assistant.io/docs/internationalization/core/#selectors)
+ for more information.
+ type: string
+ required: false
{% endconfiguration %}
The output of this selector is a number, for example: `42`
@@ -1188,8 +1203,8 @@ When used with a `schema`, the selector will force the object to be in this form
```yaml
object:
- label_key: name
- description_key: percentage
+ label_field: name
+ description_field: percentage
multiple: true
fields:
name:
@@ -1407,7 +1422,11 @@ one can be selected.
entity_id:
description: The entity ID of which an state can be selected from.
type: string
- required: true
+ required: false
+hide_states:
+ description: The states to exclude from the list of options
+ type: list
+ required: false
{% endconfiguration %}
The output of this selector is the select state (not the translated or
@@ -1418,7 +1437,7 @@ For example: `heat_cool`.
## Statistic selector
The statistic selector selects the statistic ID of an entity that records
-long-term statistics. It may resemble an entity ID (like `sensor.temperature`),
+{% term "Long-term statistics" %}. It may resemble an entity ID (like `sensor.temperature`),
or an external statistic ID (like `external:temperature`).

diff --git a/source/_docs/configuration/troubleshooting.markdown b/source/_docs/configuration/troubleshooting.markdown
index 41107da42e7..9ca1d9be1ee 100644
--- a/source/_docs/configuration/troubleshooting.markdown
+++ b/source/_docs/configuration/troubleshooting.markdown
@@ -127,7 +127,7 @@ Once you enable debug logging, you ideally need to make the error happen. Run yo
### Download diagnostics
-After you download logs, you will also want to download the diagnostics for the integration giving you trouble. If the integration provides diagnostics, it will appear in the three dot menu next to the integration configuration.
+After you download logs, you will also want to download the diagnostics for the integration giving you trouble. If the integration provides diagnostics, it will appear in the three dots {% icon "mdi:dots-vertical" %} menu next to the integration configuration.
diff --git a/source/_docs/organizing/areas.markdown b/source/_docs/organizing/areas.markdown
index e91254d5892..16e9ad03842 100644
--- a/source/_docs/organizing/areas.markdown
+++ b/source/_docs/organizing/areas.markdown
@@ -93,7 +93,7 @@ Follow these steps to delete an area. It will be removed from all the floors it
If you used this area in automations or script as targets, or with voice assistant, these will no longer work.
1. Go to {% my areas title="**Settings** > **Areas, labels & zones**" %} and select the area card.
-2. In the top right corner, select the three dot menu. Then, select **Delete**.
+2. In the top right corner, select the three dots {% icon "mdi:dots-vertical" %} menu. Then, select **Delete**.

diff --git a/source/_docs/organizing/categories.markdown b/source/_docs/organizing/categories.markdown
index 3fd569de1ab..305adc8b6fa 100644
--- a/source/_docs/organizing/categories.markdown
+++ b/source/_docs/organizing/categories.markdown
@@ -52,7 +52,7 @@ To rename or delete a category, follow these steps:
2. In the top left, select the **Filters** button.

-3. In the list, find the category you want to edit and select the three dot menu next to it.
+3. In the list, find the category you want to edit and select the three dots {% icon "mdi:dots-vertical" %} menu next to it.
4. Select **Edit category** or **Delete category**.

diff --git a/source/_docs/tools/dev-tools.markdown b/source/_docs/tools/dev-tools.markdown
index bc2000d9149..9eb0807d349 100644
--- a/source/_docs/tools/dev-tools.markdown
+++ b/source/_docs/tools/dev-tools.markdown
@@ -28,7 +28,7 @@ The Developer Tools is meant for **all** (not just for the developers) to quickl
The YAML tab provides buttons to trigger a check of configuration files and to reload the configuration. Reloading is needed to apply changes that you've made to the configuration.
-It is almost the same as the option under **Settings** > three dot menu (top right) > **Restart Home Assistant** > **Quick reload**. The only difference is that **Quick reload** reloads all the configuration, whereas this YAML tab allows you to only reload one specific configuration at a time.
+It is almost the same as the option under **Settings** > three dots {% icon "mdi:dots-vertical" %} menu (top right) > **Restart Home Assistant** > **Quick reload**. The only difference is that **Quick reload** reloads all the configuration, whereas this YAML tab allows you to only reload one specific configuration at a time.
### Reloading the YAML configuration
diff --git a/source/_docs/z-wave/controllers.markdown b/source/_docs/z-wave/controllers.markdown
index 7fc945521ff..97117102ff0 100644
--- a/source/_docs/z-wave/controllers.markdown
+++ b/source/_docs/z-wave/controllers.markdown
@@ -1,18 +1,18 @@
---
-title: "Z-Wave Controllers"
-description: "Extended instructions how to setup Z-Wave."
+title: "Z-Wave adapters"
+description: "Extended instructions how to set up Z-Wave."
related:
- docs: /integrations/zwave_js/
title: Z-Wave integration
---
-## Supported Z-Wave USB Sticks & Hardware Modules
+## Supported Z-Wave adapters
-You need to have a compatible Z-Wave stick or module installed. The following devices have been confirmed to work with Z-Wave JS:
+You need to have a compatible Z-Wave adapter installed. The following devices have been confirmed to work with Z-Wave JS:
{% warning %}
-The firmwares of 700 and 800 series Z-Wave controllers have several bugs which impact the stability of the mesh and can cause the controller to become unresponsive. Because there is no known firmware version that is completely fixed, it is recommended to choose a firmware based on the following criteria:
+The firmwares of 700 and 800 series Z-Wave adapters have several bugs which impact the stability of the mesh and can cause the adapter to become unresponsive. Because there is no known firmware version that is completely fixed, it is recommended to choose a firmware based on the following criteria:
- 700 series:
- prefer SDK versions 7.17.2 to 7.18.x or 7.21.6 and newer
@@ -32,7 +32,7 @@ The SDK version does not have to match the firmware version. If you are unsure w
{% endnote %}
{% important %}
-You should upgrade the firmware on all 700 and 800 series controllers to a recommended version.
+You should upgrade the firmware on all 700 and 800 series adapters to a recommended version.
{% endimportant %}
Firmware can be upgraded using the below directions:
@@ -44,11 +44,11 @@ Firmware can be upgraded using the below directions:
{% endwarning %}
-- 800 series controllers (with some caveats, see notes)
+- 800 series USB adapters (with some caveats, see notes)
- HomeSeer SmartStick G8
- Zooz 800 Series Z-Wave Long Range S2 Stick (ZST39 LR)
-- 700 series controllers
+- 700 series USB adapters
- Aeotec Z-Stick 7 USB stick (ZWA010) (the EU version is not recommended due to RF performance issues)
- HomeSeer SmartStick+ G3
- HomeSeer Z-NET G3
@@ -56,7 +56,7 @@ Firmware can be upgraded using the below directions:
- Zooz S2 Stick 700 (ZST10 700)
- Z-Wave.Me Z-Station
-- 500 series controllers
+- 500 series USB adapters
- Aeotec Z-Stick Gen5 (see note below)
- Everspring USB stick - Gen 5
- GoControl HUSBZB-1 stick
@@ -66,39 +66,34 @@ Firmware can be upgraded using the below directions:
- HomeSeer SmartStick+ G2
- HomeSeer Z-NET G2
-- Raspberry Pi modules
+- Raspberry Pi HAT adapters
- Aeotec Z-Pi 7 Raspberry Pi HAT/Shield (ZWA025, 700 series)
- Z-Wave.Me RaZberry 7 (ZME_RAZBERRY7, 700 series)
- Z-Wave.Me RaZberry 7 Pro (ZMEERAZBERRY7_PRO or ZMEURAZBERRY7_PRO, 700 series)
- Z-Wave.Me Razberry 2 (500 series)
- Z-Wave.Me Razberry 1 (300 series)
-If you are just starting out, we recommend that you purchase a 700 series controller or a Raspberry Pi module. The 700 series controllers are the more recent version (when compared to the 500 series). The 700 series controllers support SmartStart, which allows you to add a device by scanning a QR code.
-
+If you are just starting out, we recommend that you purchase an 800 series adapter (with firmware updated to ≥ 7.23.2). The 800 series adapters are the most future-proof and offer the best RF performance.
{% tip %}
It's recommended to use a USB stick, not a module. Passing a module through Docker is more complicated than passing a USB stick through.
{% endtip %}
-## Stick alternatives
+## Third-party hubs
-The alternative to a stick is a hub that supports Z-Wave. Home Assistant supports the following hubs with Z-Wave support:
+For the best experience, it is recommended to use an adapter directly with Home Assistant. If this doesn't work for you, you can use a hub that supports Z-Wave. Home Assistant supports the following third-party hubs with Z-Wave support:
- [Vera](/integrations/vera/)
- [Fibaro](/integrations/fibaro/)
- [SmartThings](/integrations/smartthings/)
- [Z-Wave.Me Z-Way](/integrations/zwave_me)
-## Controller notes
-
-### 800 Series Controllers
-
-Z-Wave JS does not support Z-Wave Long Range yet.
+## Adapter notes
### Aeotec Z-Stick
{% note %}
-The Aeotec Z-Stick and some of its variants (e.g. Z-Wave.Me UZB1) are known to have compatibility issues with the Linux kernel because of their [non-compliant behavior](https://forums.raspberrypi.com/viewtopic.php?f=28&t=245031#p1502030). Plugging these controllers through a USB hub can serve as a workaround that sometimes mitigates the issue.
+The Aeotec Z-Stick and some of its variants (e.g. Z-Wave.Me UZB1) are known to have compatibility issues with the Linux kernel because of their [non-compliant behavior](https://forums.raspberrypi.com/viewtopic.php?f=28&t=245031#p1502030). Plugging these adapters through a USB hub can serve as a workaround that sometimes mitigates the issue.
{% endnote %}
diff --git a/source/_includes/asides/about.html b/source/_includes/asides/about.html
index 094a972b38a..f850359baef 100644
--- a/source/_includes/asides/about.html
+++ b/source/_includes/asides/about.html
@@ -6,7 +6,7 @@
diff --git a/source/_includes/common-tasks/beta_version.md b/source/_includes/common-tasks/beta_version.md
index c354235b6ae..20800feada9 100644
--- a/source/_includes/common-tasks/beta_version.md
+++ b/source/_includes/common-tasks/beta_version.md
@@ -10,7 +10,7 @@ If you would like to test next release before anyone else, you can install the b
content: |
1. In Home Assistant, go to {% my updates title="**System** > **Updates**" %}.
- 2. In the top-right corner, select the three-dots menu.
+ 2. In the top-right corner, select the three dots {% icon "mdi:dots-vertical" %} menu.
3. Select **Join beta**.
4. Go to the {% my configuration title="**Configuration**" %} panel.
5. Install the update that is presented to you.
diff --git a/source/_includes/common-tasks/define_custom_polling.md b/source/_includes/common-tasks/define_custom_polling.md
index 4ebe15c5301..4db9e3fbeb1 100644
--- a/source/_includes/common-tasks/define_custom_polling.md
+++ b/source/_includes/common-tasks/define_custom_polling.md
@@ -13,5 +13,6 @@ To add the automation:
- Define any trigger and condition you like.
- Select **Add action**, then, select **Other actions**.
- Select **Perform action**, and from the list, select the [`homeassistant.update_entity` action](/integrations/homeassistant/#action-homeassistantupdate_entity).
+ - Choose your targets by selecting the **Choose area**, **Choose device**, **Choose entity**, or **Choose label** buttons.

4. Save your new automation to poll for data.
diff --git a/source/_includes/common-tasks/specific_version.md b/source/_includes/common-tasks/specific_version.md
index 7ab67ae0af6..038c031e9a4 100644
--- a/source/_includes/common-tasks/specific_version.md
+++ b/source/_includes/common-tasks/specific_version.md
@@ -12,7 +12,7 @@ In the event that a Home Assistant Core version doesn't play well with your hard
{% if page.installation == "os"%}
-To upgrade to a specific version, you can use the CLI. The example below shows how to upgrade to `{{current_version}}`.
+To upgrade to a specific version, you can use the command line (CLI). The example below shows how to upgrade to `{{current_version}}`. To learn how to get started with the command line in Home Assistant, refer to the [SSH add-on setup instructions](/common-tasks/os/#installing-and-using-the-ssh-add-on).
```bash
ha core update --version {{current_version}} --backup
diff --git a/source/_includes/energy/ct_clamp.md b/source/_includes/energy/ct_clamp.md
index 953ead1269b..d6178bd3001 100644
--- a/source/_includes/energy/ct_clamp.md
+++ b/source/_includes/energy/ct_clamp.md
@@ -1,6 +1,6 @@
Current transformer (CT) clamp sensors measure your energy usage by looking at the current passing through an electrical wire. This makes it possible to calculate the energy usage. In Home Assistant we have support for off-the-shelf CT clamp sensors or you can build your own.
-- 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/).
+- The off-the-shelf solution that we advise is the [Shelly EM](https://www.shelly.com/products/shelly-em-50a-clamp-1?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.
diff --git a/source/_includes/installation/operating_system.md b/source/_includes/installation/operating_system.md
index 836b364d596..876c1cd775f 100644
--- a/source/_includes/installation/operating_system.md
+++ b/source/_includes/installation/operating_system.md
@@ -134,6 +134,8 @@ To write the HAOS image to the boot medium on your x86-64 hardware, there are 2
- If you are getting an **Error unmounting filesystem** error message, stating that the **target is busy**:
- Most likely, you are running Ubuntu on your internal disk. Instead, you need to run it on your stick.
- Go back to step 3 and during start up, make sure you select **Try Ubuntu** (and NOT **Install Ubuntu**).
+ - Another issue may be that live Ubuntu is using the Swap partition of an existing Linux installation.
+ - If you see "Swap" listed as a partition on the drive you're going to install HAOS, just select the Swap partition, then press the stop button to unmount it and try the restore operation again.
6. In the partitions overview, you should now see the restore operation in progress.
- The Home Assistant Operating System is now being installed on your system.

diff --git a/source/_includes/integrations/remove_device_service_steps.md b/source/_includes/integrations/remove_device_service_steps.md
index 9096191e1d1..60f1a86fe7a 100644
--- a/source/_includes/integrations/remove_device_service_steps.md
+++ b/source/_includes/integrations/remove_device_service_steps.md
@@ -1,3 +1,3 @@
1. Go to {% my integrations title="**Settings** > **Devices & services**" %} and select the integration card.
2. From the list of devices, select the integration instance you want to remove.
-3. Next to the entry, select the three-dot {% icon "mdi:dots-vertical" %} menu. Then, select **Delete**.
+3. Next to the entry, select the three dots {% icon "mdi:dots-vertical" %} menu. Then, select **Delete**.
diff --git a/source/_includes/site/footer.html b/source/_includes/site/footer.html
index 1eca86214fc..ed9c23e63ad 100644
--- a/source/_includes/site/footer.html
+++ b/source/_includes/site/footer.html
@@ -66,7 +66,7 @@
- Contact us here for media and partnership inquiries. (No technical support!)
+ For partnership inquiries please check out Works With Home Assistant. For media, get in touch here. For other questions, you can contact us here (No technical support!)
Website powered by Jekyll
diff --git a/source/_integrations/ai_task.markdown b/source/_integrations/ai_task.markdown
new file mode 100644
index 00000000000..1617f5d6a13
--- /dev/null
+++ b/source/_integrations/ai_task.markdown
@@ -0,0 +1,149 @@
+---
+title: AI Task
+description: Instructions on how to setup AI task entities with Home Assistant.
+ha_category:
+ - AI
+ha_release: '2025.7'
+ha_quality_scale: internal
+ha_domain: ai_task
+ha_codeowners:
+ - '@home-assistant/core'
+ha_integration_type: entity
+---
+
+The **AI Task** {% term integration %} allows you to use AI to help you configure Home Assistant.
+
+{% include integrations/building_block_integration.md %}
+
+For each task, you can set a preferred AI task entity. This allows you to use different AI models for different purposes, such as generating text, summarizing information, or even controlling devices. When the entity ID is omitted in the action, the preferred AI task entity will be used.
+
+## The state of an AI task entity
+
+The {% term state %} of an AI task {% term entity %} is a timestamp showing the date and time when the AI task was last used.
+
+## Action `ai_task.generate_data`
+
+Generates data using AI.
+
+| Data attribute | Optional | Description |
+| ---------------------- | -------- | --------------------------------------------------------------------------------------------------------------- |
+| `task_name` | no | String that identifies the type of text generation task (for example, "home summary", "alert notification"). |
+| `instructions` | no | String containing the specific instructions for the AI to follow when generating the text. |
+| `entity_id` | yes | String that points at an `entity_id` of an LLM task entity. If not specified, uses the default LLM task. |
+| `structure` | yes | Dictionary defining the structure of the output data. When set, the AI will return structured data with the specified fields. Each field can have a `description`, `selector`, and optional `required` property. |
+| `attachments` | yes | List of attachments to include in the task. Each attachment is the output of the [Media Selector](https://www.home-assistant.io/docs/blueprint/selectors/#media-selector).
+
+The response variable is a dictionary with the following keys:
+
+- `data`: The generated text or structured data (depending on whether `structure` is specified).
+- `conversation_id`: The ID of the conversation used for the task.
+
+## Examples
+
+### Template entity counting items on a camera
+
+{% raw %}
+
+```yaml
+template:
+ - triggers:
+ - trigger: homeassistant
+ event: start
+ - trigger: time_pattern
+ minutes: "/5" # update every 5 minutes
+ actions:
+ - action: ai_task.generate_data
+ data:
+ task_name: "{{ this.entity_id }}"
+ instructions: >-
+ This is the inside of my goose coop. How many birds (chickens, geese, and
+ ducks) are inside the coop?
+ structure:
+ birds:
+ selector:
+ number:
+ attachments:
+ media_content_id: media-source://camera/camera.chicken_coop
+ media_content_type: image/jpeg
+ response_variable: result
+ sensor:
+ - name: "Chickens"
+ state: "{{ result.data.birds }}"
+ state_class: total
+```
+
+{% endraw %}
+
+Alternative ideas: detect number of parking spots available, count people in a room, or detect if a door is open.
+
+### Structured output example
+
+{% raw %}
+
+```yaml
+# Example: Generate weather and indoor comfort report
+script:
+- alias: "Weather and comfort report"
+ sequence:
+ - action: ai_task.generate_data
+ data:
+ task_name: "weather comfort report"
+ instructions: |
+ Based on the current conditions:
+ - Outdoor temperature: {{ states('sensor.outdoor_temperature') }}°C
+ - Weather condition: {{ states('weather.home') }}
+ - Indoor temperature: {{ states('sensor.living_room_temperature') }}°C
+ - Indoor humidity: {{ states('sensor.living_room_humidity') }}%
+
+ Generate a funny weather description and assess indoor comfort level.
+ structure:
+ weather_description:
+ description: "A humorous description of the current weather outside"
+ required: true
+ selector:
+ text:
+ indoor_comfort:
+ description: "Assessment of how comfortable it is inside compared to outside"
+ required: true
+ selector:
+ text:
+ response_variable: comfort_report
+ - action: notify.persistent_notification
+ data:
+ title: "🏠 Home climate report"
+ message: |
+ 🌤️ **Weather outside:**
+ {{ comfort_report.data.weather_description }}
+
+ 🛋️ **Indoor comfort:**
+ {{ comfort_report.data.indoor_comfort }}
+```
+
+{% endraw %}
+
+### Simple text generation example
+
+{% raw %}
+
+```yaml
+# Example: Generate a notification when garage door is left open
+automation:
+- alias: "Garage door notification"
+ triggers:
+ - trigger: state
+ entity_id: cover.garage_door
+ to: 'on'
+ for:
+ minutes: 10
+ actions:
+ - action: ai_task.generate_data
+ data:
+ task_name: "garage door left open comment"
+ instructions: "Generate a funny notification that garage door was left open"
+ response_variable: generated_text
+ - action: notify.persistent_notification
+ data:
+ message: "{{ generated_text.data }}"
+```
+
+{% endraw %}
diff --git a/source/_integrations/airos.markdown b/source/_integrations/airos.markdown
new file mode 100644
index 00000000000..9c885dc2107
--- /dev/null
+++ b/source/_integrations/airos.markdown
@@ -0,0 +1,93 @@
+---
+title: Ubiquiti UISP airOS
+description: Ubiquiti UISP airOS integration.
+ha_category:
+ - Sensor
+ha_iot_class: Local Polling
+ha_release: 2025.8
+ha_codeowners:
+ - '@CoMPaTech'
+ha_config_flow: true
+ha_domain: airos
+ha_platforms:
+ - sensor
+ha_integration_type: device
+ha_quality_scale: bronze
+---
+
+Ubiquiti's [UISP](https://techspecs.ui.com/uisp/wireless) (Ubiquity Internet Service Provider) product line includes various devices designed for interconnecting locations. This integration provides monitoring capabilities for devices running the airOS opearting system.
+
+There is currently support for the following device types within Home Assistant:
+
+- [Sensor](#sensor)
+
+{% note %}
+Ubiquiti UISP products cannot be managed from their popular [UniFi](/integrations/unifi/) software. They are typically configured using a web browser, the UISP Mobile App, or the UISP Cloud/Self-Hosted platform.
+{% endnote %}
+
+## Prerequisites
+
+This integration only supports devices running airOS 8 and already configured using your browser or the UISP app.
+
+{% include integrations/config_flow.md %}
+
+## Supported devices
+
+### airOS 8
+
+While there is no known limitation to which devices running airOS 8 are supported, success has been reported on:
+
+- PowerBeam 5AC gen2
+- Nanostation 5AC (LOCO5AC)
+
+## Sensor
+
+This integration exposes the following sensor entities for your airOS devices:
+
+### Network Role
+
+Indicates the role of the device in your network, either 'bridge' or 'router'.
+
+### Wireless Frequency
+
+The base frequency set for this device.
+
+### Wireless Mode
+
+ndicates the device's role in the wireless link, typically 'ap-ptp' (Access Point Point-to-Point) or 'sta-ptp' (Station Point-to-Point).
+
+### Wireless SSID
+
+The SSID (wireless network name) used by this device.
+
+### Download capacity & Upload capacity
+
+Indicates the estimated maximum link capacity (bandwidth) for download and upload between devices.
+
+### Throughput receive and throughput transmit.
+
+These sensors show the actual data transfer rate (receive and transmit) for this device.
+
+### Antenna gain
+
+Performance in decibels of the devices antenna. See [Gain](https://en.wikipedia.org/wiki/Gain_(antenna)) on Wikipedia.
+
+## Data updates
+
+Data is polled from devices every 60 seconds.
+
+## Troubleshooting
+
+### Accessing the local device
+
+If you need to configure the device directly, you can find the link to your device by:
+
+1. Go to {% my integrations title="**Settings** > **Devices & services**" %}, and select your integration and device.
+2. On the device entry, select the link provided for the configuration URL (usually found next to the {% icon "mdi:dots-vertical" %} icon).
+3. Follow the instructions on your device's web interface or consult the [airOS 8 Manual (PDF)](https://dl.ubnt.com/guides/airOS/airOS_UG_V80.pdf).
+
+### Adjusting the update interval
+
+Please note that the [default intervals](#data-updates) are considered best practice. Updating too frequently may induce considerable load on your bridge(s) resulting in unexpected results or missing data.
+
+{% include common-tasks/define_custom_polling.md %}
diff --git a/source/_integrations/airthings_ble.markdown b/source/_integrations/airthings_ble.markdown
index edff202e71d..917598b78df 100644
--- a/source/_integrations/airthings_ble.markdown
+++ b/source/_integrations/airthings_ble.markdown
@@ -20,7 +20,7 @@ ha_integration_type: integration
Integrates Airthings BLE {% term sensors %} into Home Assistant.
-[Airthings](https://www.airthings.com/) provide different {% term devices %} for measuring the air quality. Initially focusing on radon gas sensors, each device provides a number of different sensors to monitor typical contaminants that's presence contributes to bad air quality in the home.
+[Airthings](https://www.airthings.com/) provide different {% term devices %} for measuring the air quality. Initially focusing on radon gas sensors, each device provides a number of different sensors to monitor typical contaminants whose presence contributes to bad air quality in the home.
Requires Airthings hardware and a compatible Bluetooth dongle.
diff --git a/source/_integrations/alarm_control_panel.mqtt.markdown b/source/_integrations/alarm_control_panel.mqtt.markdown
index 10a55d74967..d08b2c6cd03 100644
--- a/source/_integrations/alarm_control_panel.mqtt.markdown
+++ b/source/_integrations/alarm_control_panel.mqtt.markdown
@@ -30,7 +30,7 @@ The {% term integration %} can control your Alarm Panel by publishing to the `co
## Configuration
-To enable this {% term integration %}, add the following lines to your {% term "`configuration.yaml`" %} file.
+To use an MQTT alarm control panel in your installation, add the following to your {% term "`configuration.yaml`" %} file.
{% include integrations/restart_ha_after_config_inclusion.md %}
```yaml
@@ -41,6 +41,8 @@ mqtt:
command_topic: "home/alarm/set"
```
+Alternatively, a more advanced approach is to set it up via [MQTT discovery](/integrations/mqtt/#mqtt-discovery).
+
{% configuration %}
availability:
description: A list of MQTT topics subscribed to receive availability (online/offline) updates. Must not be used together with `availability_topic`.
@@ -195,7 +197,7 @@ name:
type: string
default: MQTT Alarm
object_id:
- description: Used instead of `name` for automatic generation of `entity_id`
+ description: Used `object_id` instead of `name` for automatic generation of `entity_id`. This only works when the entity is added for the first time. When set, this overrides a user-customized Entity ID in case the entity was deleted and added again.
required: false
type: string
payload_arm_away:
diff --git a/source/_integrations/alexa_devices.markdown b/source/_integrations/alexa_devices.markdown
index c49c7b40a99..147d5861569 100644
--- a/source/_integrations/alexa_devices.markdown
+++ b/source/_integrations/alexa_devices.markdown
@@ -38,11 +38,11 @@ There is support for the following device families within Home Assistant:
- **Amazon Fire TV Stick**
- **Amazon Fire Tablet**
-and all 3rd party that has Alexa capabilities built-in
+- **Third-party devices** with built-in Alexa capabilities.
{% warning %}
-Currently, only MFA-protected Amazon accounts via the authenticator app are supported.
+This integration requires multifactor authentication using an authentication app (such as Microsoft Authenticator, for example). To enable MFA, in your Amazon account settings select **Login & Security** > **2-step verification** > **Backup methods** > **Add new app**. See [Amazon's documentation](https://www.amazon.com/gp/help/customer/display.html?nodeId=G9MX9LXNWXFKMJYU) for more information.
{% endwarning %}
@@ -98,6 +98,36 @@ The **Alexa Devices** {% term integration %} provides the following entities:
- Sensor - temperature and illuminance sensors
- Switch - Do not disturb
+## Known limitations
+
+This integration requires multifactor authentication using an authentication app (such as Microsoft Authenticator). To enable MFA, in your Amazon account settings, select **Login & Security** > **2-step verification** > **Backup methods** > **Add new app**. See [Amazon's documentation](https://www.amazon.com/gp/help/customer/display.html?nodeId=G9MX9LXNWXFKMJYU) for more information.
+
+## Troubleshooting
+
+### Can’t set up the integration
+
+#### Symptom: "Wrong Country"
+
+When trying to set up the integration, the form shows the message "Wrong Country".
+
+##### Description
+
+This means that the settings in your Amazon account are not aligned to the country you specified.
+To fix it, please go to (replace XX with your country domain. For example **co.uk**):
+
+- "Kindle payment": check your default address is in your country
+- "Country/Region": check your country
+
+#### Symptom: "Not found"
+
+When trying to set up the integration, the form shows the message "Not found".
+
+##### Description
+
+This appears to indicate that your Alexa devices aren't owned by you, but are connected through Amazon Family.
+This setup isn't supported by the Alexa Mobile app, so it's not supported by this integration.
+Move the devices to your primary account.
+
## Removing the integration
This integration follows standard integration removal. No extra steps are required.
diff --git a/source/_integrations/androidtv_remote.markdown b/source/_integrations/androidtv_remote.markdown
index a1a0fe40951..a70a91b33b2 100644
--- a/source/_integrations/androidtv_remote.markdown
+++ b/source/_integrations/androidtv_remote.markdown
@@ -31,6 +31,8 @@ For a quick introduction on how to get started with Android TV Remote, check out
{% configuration_basic %}
Configure Applications List:
description: Here you can define applications where the keys are app IDs and the values are app names and icons that will be displayed in the UI.
+Enable IME:
+ description: Enable this option to be able to get the current app name and send text as keyboard input. Disable it for devices that show 'Use keyboard on mobile device screen' instead of the on-screen keyboard.
{% endconfiguration_basic %}
## Media player
@@ -581,3 +583,8 @@ cards:
- If you are not able to connect to the Android TV device, or are asked to pair it again and again, try force-stopping the Android TV Remote Service and clearing its storage. On the Android TV device, go to **Settings** > **Apps** > **Show system apps**. Then, select **Android TV Remote Service** > **Storage** > **Clear storage**. You will have to pair again.
- Some onscreen keyboards enabled by TV manufacturers do not support concurrent virtual and onscreen keyboard use. This presents whenever a text field is selected, such as "search" where a constant **use the keyboard on your mobile device** will show, preventing you from opening the onscreen keyboard to type. This can be overcome by either disabling your 3rd party keyboard and using the default Gboard keyboard or by deselecting **Enable IME** in the **Configure** page of the integration.
- If you can't turn on your Nvidia Shield device, go to **Settings** > **Remotes & accessories** > **Simplified wake buttons** and disable the following options: **SHIELD 2019 Remote: Wake on power and Netflix buttons only** and **Controllers: Wake on NVIDIA or logo buttons only**.
+
+
+## Removing the integration
+
+{% include integrations/remove_device_service.md %}
diff --git a/source/_integrations/anthemav.markdown b/source/_integrations/anthemav.markdown
index 86639e31898..b23156851a0 100644
--- a/source/_integrations/anthemav.markdown
+++ b/source/_integrations/anthemav.markdown
@@ -26,7 +26,7 @@ Both [Anthem]'s current and last generation of A/V
### A/V Processor
-- [AVM 60](https://www.anthemav.com/products-current/model=avm-60/page=overview)
+- [AVM 60](https://www.anthemav.com/products-current/model=avm-60/page=overview), [AVM 70](https://www.anthemav.com/products-current/model=avm-70/page=overview)
### Distribution solution
diff --git a/source/_integrations/application_credentials.markdown b/source/_integrations/application_credentials.markdown
index b92fcf10807..930f99b7a94 100644
--- a/source/_integrations/application_credentials.markdown
+++ b/source/_integrations/application_credentials.markdown
@@ -49,6 +49,6 @@ To delete an application credential, for example because you created a new one,

2. In the top right corner, select the three dots {% icon "mdi:dots-vertical" %} menu and select **Application credentials**.
-3. Select the credential from the list, select the three-dots menu and select **Delete**.
+3. Select the credential from the list, select the three dots {% icon "mdi:dots-vertical" %} menu and select **Delete**.

diff --git a/source/_integrations/bauknecht.markdown b/source/_integrations/bauknecht.markdown
new file mode 100644
index 00000000000..883da38ef3d
--- /dev/null
+++ b/source/_integrations/bauknecht.markdown
@@ -0,0 +1,23 @@
+---
+title: Bauknecht
+description: Connect and control your Bauknecht devices using the Whirlpool Appliances integration
+ha_category:
+ - Hub
+ha_integration_type: virtual
+ha_supporting_domain: whirlpool
+ha_supporting_integration: Whirlpool Appliances
+ha_release: '2025.8'
+ha_domain: bauknecht
+ha_codeowners:
+ - '@abmantis'
+ - '@mkmer'
+ha_config_flow: true
+ha_platforms:
+ - binary_sensor
+ - climate
+ - diagnostics
+ - sensor
+ha_iot_class: Cloud Push
+---
+
+{% include integrations/supported_brand.md %}
diff --git a/source/_integrations/binary_sensor.mqtt.markdown b/source/_integrations/binary_sensor.mqtt.markdown
index 5b7f8a1be0f..7069948bef1 100644
--- a/source/_integrations/binary_sensor.mqtt.markdown
+++ b/source/_integrations/binary_sensor.mqtt.markdown
@@ -20,16 +20,18 @@ Stateless devices such as buttons, remote controls etc are better represented by
The `mqtt` binary sensor platform optionally supports a list of `availability` topics to receive online and offline messages (birth and LWT messages) from the MQTT device. During normal operation, if the MQTT sensor device goes offline (i.e., publishes `payload_not_available` to an `availability` topic), Home Assistant will display the binary sensor as `unavailable`. If these messages are published with the `retain` flag set, the binary sensor will receive an instant update after subscription and Home Assistant will display the correct availability state of the binary sensor when Home Assistant starts up. If the `retain` flag is not set, Home Assistant will display the binary sensor as `unavailable` when Home Assistant starts up. If no `availability` topic is defined, Home Assistant will consider the MQTT device to be `available` and will display its state.
-To use an MQTT binary sensor in your installation,
-add the following to your {% term "`configuration.yaml`" %} file:
+To use an MQTT binary sensor in your installation, [add a MQTT device as a subentry](/integrations/mqtt/#configuration), or add the following to your {% term "`configuration.yaml`" %} file.
+{% include integrations/restart_ha_after_config_inclusion.md %}
```yaml
# Example configuration.yaml entry
mqtt:
- binary_sensor:
- state_topic: "home-assistant/window/contact"
+ state_topic: "basement/window/contact"
```
+Alternatively, a more advanced approach is to set it up via [MQTT discovery](/integrations/mqtt/#mqtt-discovery).
+
{% configuration %}
availability:
description: A list of MQTT topics subscribed to receive availability (online/offline) updates. Must not be used together with `availability_topic`.
@@ -143,7 +145,7 @@ entity_picture:
required: false
type: string
expire_after:
- description: If set, it defines the number of seconds after the sensor's state expires, if it's not updated. After expiry, the sensor's state becomes `unavailable`. Default the sensors state never expires.
+ description: If set, it defines the number of seconds after the sensor's state expires if it's not updated. After expiry, the sensor's state becomes `unavailable`. By default, the sensor's state never expires. Note that when a sensor's value was sent retained to the MQTT broker, the last value sent will be replayed by the MQTT broker when Home Assistant restarts or is reloaded. As this could cause the sensor to become available with an expired state, it is not recommended to retain the sensor's state payload at the MQTT broker. Home Assistant will store and restore the sensor's state for you and calculate the remaining time to retain the sensor's state before it becomes unavailable.
required: false
type: integer
force_update:
@@ -169,7 +171,7 @@ name:
type: string
default: MQTT binary sensor
object_id:
- description: Used instead of `name` for automatic generation of `entity_id`
+ description: Used `object_id` instead of `name` for automatic generation of `entity_id`. This only works when the entity is added for the first time. When set, this overrides a user-customized Entity ID in case the entity was deleted and added again.
required: false
type: string
off_delay:
@@ -245,10 +247,10 @@ The example below shows a full configuration for a binary sensor:
mqtt:
- binary_sensor:
name: "Window Contact Sensor"
- state_topic: "home-assistant/window/contact"
+ state_topic: "bedroom/window/contact"
payload_on: "ON"
availability:
- - topic: "home-assistant/window/availability"
+ - topic: "bedroom/window/availability"
payload_available: "online"
payload_not_available: "offline"
qos: 0
diff --git a/source/_integrations/blue_current.markdown b/source/_integrations/blue_current.markdown
index c88b7270063..9199ad2fea2 100644
--- a/source/_integrations/blue_current.markdown
+++ b/source/_integrations/blue_current.markdown
@@ -4,6 +4,7 @@ description: Instructions on how to integrate Blue Current charge points within
ha_category:
- Car
- Sensor
+ - Switch
ha_release: 2024.1
ha_iot_class: Cloud Push
ha_config_flow: true
@@ -15,6 +16,7 @@ ha_domain: blue_current
ha_platforms:
- button
- sensor
+ - switch
ha_integration_type: integration
---
@@ -77,3 +79,14 @@ The Blue Current integration provides the following buttons:
- Reset
- Reboot
- Stop charge session
+
+## Switch
+
+The Blue Current integration provides the following switches:
+
+- Toggle Plug & Charge
+ - Allows you to start a session without having to scan a card.
+- Toggle linked charging cards only
+ - When enabled, visitors can't make use of the charge point. Only linked charging cards are allowed.
+- Toggle charge point block
+ - Enables or disables a charge point.
\ No newline at end of file
diff --git a/source/_integrations/bluetooth.markdown b/source/_integrations/bluetooth.markdown
index a5b78f6a53d..20de2169e5c 100644
--- a/source/_integrations/bluetooth.markdown
+++ b/source/_integrations/bluetooth.markdown
@@ -373,3 +373,52 @@ For example, unshielded USB 3 port and their cables are especially infamously kn
- While Bluetooth is designed to coexist with Wi-Fi, its stronger signal can interfere.
- To play it safe, try to place your Bluetooth adapter away from Wi-Fi access points.
- Place Bluetooth adapters far away from electrical/power wires/cables, power supplies, and household appliances.
+
+## Discovered integrations
+
+The following integrations are automatically discovered by the Bluetooth integration:
+
+ - [Acaia](/integrations/acaia/)
+ - [Airthings BLE](/integrations/airthings_ble/)
+ - [Aranet](/integrations/aranet/)
+ - [BlueMaestro](/integrations/bluemaestro/)
+ - [BTHome](/integrations/bthome/)
+ - [Dormakaba dKey](/integrations/dormakaba_dkey/)
+ - [eQ-3 Bluetooth Smart Thermostats](/integrations/eq3btsmart/)
+ - [EufyLife](/integrations/eufylife_ble/)
+ - [Fjäråskupan](/integrations/fjaraskupan/)
+ - [Gardena Bluetooth](/integrations/gardena_bluetooth/)
+ - [Govee Bluetooth](/integrations/govee_ble/)
+ - [HomeKit Device](/integrations/homekit_controller/)
+ - [Husqvarna Automower BLE](/integrations/husqvarna_automower_ble/)
+ - [iBeacon Tracker](/integrations/ibeacon/)
+ - [IKEA Idasen Desk](/integrations/idasen_desk/)
+ - [Improv via BLE](/integrations/improv_ble/)
+ - [INKBIRD](/integrations/inkbird/)
+ - [IronOS](/integrations/iron_os/)
+ - [Kegtron](/integrations/kegtron/)
+ - [Keymitt MicroBot Push](/integrations/keymitt_ble/)
+ - [Kuler Sky](/integrations/kulersky/)
+ - [La Marzocco](/integrations/lamarzocco/)
+ - [LD2410 BLE](/integrations/ld2410_ble/)
+ - [LED BLE](/integrations/led_ble/)
+ - [Medcom Bluetooth](/integrations/medcom_ble/)
+ - [Melnor Bluetooth](/integrations/melnor/)
+ - [Moat](/integrations/moat/)
+ - [Mopeka](/integrations/mopeka/)
+ - [Motionblinds Bluetooth](/integrations/motionblinds_ble/)
+ - [Oral-B](/integrations/oralb/)
+ - [Probe Plus](/integrations/probe_plus/)
+ - [Qingping](/integrations/qingping/)
+ - [RAPT Bluetooth](/integrations/rapt_ble/)
+ - [RuuviTag BLE](/integrations/ruuvitag_ble/)
+ - [Sensirion BLE](/integrations/sensirion_ble/)
+ - [SensorPro](/integrations/sensorpro/)
+ - [SensorPush](/integrations/sensorpush/)
+ - [Snooz](/integrations/snooz/)
+ - [SwitchBot Bluetooth](/integrations/switchbot/)
+ - [ThermoBeacon](/integrations/thermobeacon/)
+ - [ThermoPro](/integrations/thermopro/)
+ - [Tilt Hydrometer BLE](/integrations/tilt_ble/)
+ - [Xiaomi BLE](/integrations/xiaomi_ble/)
+ - [Yale Access Bluetooth](/integrations/yalexs_ble/)
diff --git a/source/_integrations/bring.markdown b/source/_integrations/bring.markdown
index d214b7afe73..3608a479f29 100644
--- a/source/_integrations/bring.markdown
+++ b/source/_integrations/bring.markdown
@@ -97,7 +97,7 @@ If you want to receive these notifications, you must use a dedicated account, as
| `message` | no | Type of push notification to send to list members. See [Notification types](#available-notification-types). |
| `item` | yes | Required for `urgent_message`. Item to include in the message. For example: *Attention! Attention! - We still urgently need: Cilantro*. |
-### Available notification types
+#### Available notification types
| Notification type | Name of notification |
| ------------------- | -------------------------------------------------------------- |
@@ -117,7 +117,9 @@ The notification that list members receive differs from the label shown in the B
{% endnote %}
-### Sending a going shopping notification
+{% details "Example YAML configuration" %}
+
+#### Sending a going shopping notification
```yaml
...
@@ -129,7 +131,7 @@ actions:
message: going_shopping
```
-### Sending an urgent message notification
+#### Sending an urgent message notification
Note that for the notification type `urgent_message` the attribute `item` is **required**.
@@ -144,6 +146,40 @@ actions:
item: Cilantro
```
+{% enddetails %}
+
+### Action: Send reaction
+
+Reactions in **Bring!** let users quickly acknowledge shopping list updates with emojis. The action `bring.send_reaction` in Home Assistant allows sending reactions like 👍 or ❤️ to the latest event from the [Activities entity](#events).
+
+| Data attribute | Optional | Description |
+| ---------------------- | -------- | ------------------------------------------------------------------------------------------------------------ |
+| `entity_id` | no | The Bring! Activities entity to react to its latest activity. For example, event.shopping_list_activities. |
+| `reaction` | no | Reaction to send in response to an activity by a list member. |
+
+#### Available reactions
+
+| Reaction | Emoji |
+|------------|-------|
+| `THUMBS_UP`| 👍🏼 |
+| `MONOCLE` | 🧐 |
+| `DROOLING` | 🤤 |
+| `HEART` | ❤️ |
+
+{% details "Example YAML configuration" %}
+
+```yaml
+...
+actions:
+ - action: bring.send_reaction
+ data:
+ reaction: HEART
+ target:
+ entity_id: event.shoppinglist_activities
+```
+
+{% enddetails %}
+
## Automations
Get started with these automation examples for **Bring!**, each featuring ready-to-use blueprints!
diff --git a/source/_integrations/bsblan.markdown b/source/_integrations/bsblan.markdown
index e03f3182304..d844b4b14f9 100644
--- a/source/_integrations/bsblan.markdown
+++ b/source/_integrations/bsblan.markdown
@@ -17,6 +17,7 @@ ha_platforms:
- sensor
- water_heater
ha_integration_type: device
+ha_zeroconf: true
---
The **BSB-Lan** {% term integration %} integrates [BSBLan](https://github.com/fredlcore/BSB-LAN) devices into Home Assistant.
@@ -35,11 +36,21 @@ For more information of which system it supports, take a look at their [document
For authentication HTTP authentication using a username and password,
or using a passkey is supported. Use either one.
+## Available sensors depending on your heating system
+
+- `inside temperature`
+- `outside temperature`
+
+## Available platforms depending on your system
+
+- `climate`
+- `water heater`
+
For more documentation of the BSBLan device, check the [manual](https://docs.bsb-lan.de).
To see a more detailed listing of the reported systems which are successfully used with BSB-LAN, please follow the corresponding link:
[Supported heating systems](https://docs.bsb-lan.de/supported_heating_systems.html)
-The integration is tested with the stable firmware version `3.1.6-20230327101530`. A newer firmware version may not work because the API could have changed.
-Please use this release. [release 3.1](https://github.com/fredlcore/BSB-LAN/releases/tag/v3.1)
+The integration is tested with the stable firmware version `5.0.16-20250525002819`. A newer firmware version may not work because the API could have changed.
+For autodiscovery, use the latest release. [release 5.0](https://github.com/fredlcore/BSB-LAN/releases/tag/v5.0)
diff --git a/source/_integrations/button.mqtt.markdown b/source/_integrations/button.mqtt.markdown
index 8cda3240c31..83edd9591e4 100644
--- a/source/_integrations/button.mqtt.markdown
+++ b/source/_integrations/button.mqtt.markdown
@@ -10,6 +10,9 @@ ha_domain: mqtt
The `mqtt` button platform lets you send an MQTT message when the button is pressed in the frontend or the button press action is called. This can be used to expose some service of a remote device, for example reboot.
+To use an MQTT button in your installation, [add a MQTT device as a subentry](/integrations/mqtt/#configuration), or add the following to your {% term "`configuration.yaml`" %} file.
+{% include integrations/restart_ha_after_config_inclusion.md %}
+
## Configuration
```yaml
@@ -19,6 +22,8 @@ mqtt:
command_topic: "home/bedroom/switch1/reboot"
```
+Alternatively, a more advanced approach is to set it up via [MQTT discovery](/integrations/mqtt/#mqtt-discovery).
+
{% configuration %}
availability:
description: A list of MQTT topics subscribed to receive availability (online/offline) updates. Must not be used together with `availability_topic`.
@@ -157,7 +162,7 @@ name:
type: string
default: MQTT Button
object_id:
- description: Used instead of `name` for automatic generation of `entity_id`
+ description: Used `object_id` instead of `name` for automatic generation of `entity_id`. This only works when the entity is added for the first time. When set, this overrides a user-customized Entity ID in case the entity was deleted and added again.
required: false
type: string
payload_available:
diff --git a/source/_integrations/camera.mqtt.markdown b/source/_integrations/camera.mqtt.markdown
index 32b8827f32a..4faef9642bd 100644
--- a/source/_integrations/camera.mqtt.markdown
+++ b/source/_integrations/camera.mqtt.markdown
@@ -14,7 +14,8 @@ This can be used with an application or a service capable of sending images thro
## Configuration
-To enable this camera in your installation, add the following to your {% term "`configuration.yaml`" %} file:
+To use an MQTT camera in your installation, add the following to your {% term "`configuration.yaml`" %} file.
+{% include integrations/restart_ha_after_config_inclusion.md %}
```yaml
# Example configuration.yaml entry
@@ -23,6 +24,8 @@ mqtt:
topic: zanzito/shared_locations/my-device
```
+Alternatively, a more advanced approach is to set it up via [MQTT discovery](/integrations/mqtt/#mqtt-discovery).
+
The sample configuration above can be tested by publishing an image to the topic from the console:
```shell
@@ -158,7 +161,7 @@ name:
required: false
type: string
object_id:
- description: Used instead of `name` for automatic generation of `entity_id`
+ description: Used `object_id` instead of `name` for automatic generation of `entity_id`. This only works when the entity is added for the first time. When set, this overrides a user-customized Entity ID in case the entity was deleted and added again.
required: false
type: string
topic:
diff --git a/source/_integrations/climate.markdown b/source/_integrations/climate.markdown
index 7457e94aef5..2b59832dbea 100644
--- a/source/_integrations/climate.markdown
+++ b/source/_integrations/climate.markdown
@@ -213,7 +213,7 @@ Set swing operation mode for climate device
| Data attribute | Optional | Description |
| ---------------------- | -------- | ----------- |
| `entity_id` | yes | String or list of strings that define the entity ID(s) of climate device(s) to control. To target all climate devices, use `all`.
-| `swing_mode` | no | New value of swing mode
+| `swing_mode` | no | New value of swing mode: `off`, `horizontal`, `vertical` or `both`.
#### Automation example
@@ -227,7 +227,7 @@ automation:
target:
entity_id: climate.kitchen
data:
- swing_mode: 1
+ swing_mode: both
```
### Action `climate.set_swing_horizontal_mode`
diff --git a/source/_integrations/climate.mqtt.markdown b/source/_integrations/climate.mqtt.markdown
index 6d13385fa05..46ea476bdc6 100644
--- a/source/_integrations/climate.mqtt.markdown
+++ b/source/_integrations/climate.mqtt.markdown
@@ -12,7 +12,7 @@ The `mqtt` climate platform lets you control your MQTT enabled HVAC devices.
## Configuration
-To enable this climate platform in your installation, first add the following to your {% term "`configuration.yaml`" %} file.
+To use an MQTT climate in your installation, add the following to your {% term "`configuration.yaml`" %} file.
{% include integrations/restart_ha_after_config_inclusion.md %}
```yaml
@@ -23,6 +23,8 @@ mqtt:
mode_command_topic: "study/ac/mode/set"
```
+Alternatively, a more advanced approach is to set it up via [MQTT discovery](/integrations/mqtt/#mqtt-discovery).
+
{% configuration %}
action_template:
description: A template to render the value received on the `action_topic` with.
@@ -239,7 +241,7 @@ name:
type: string
default: MQTT HVAC
object_id:
- description: Used instead of `name` for automatic generation of `entity_id`
+ description: Used `object_id` instead of `name` for automatic generation of `entity_id`. This only works when the entity is added for the first time. When set, this overrides a user-customized Entity ID in case the entity was deleted and added again.
required: false
type: string
optimistic:
diff --git a/source/_integrations/co2signal.markdown b/source/_integrations/co2signal.markdown
index 250ddfdf566..697c91911db 100644
--- a/source/_integrations/co2signal.markdown
+++ b/source/_integrations/co2signal.markdown
@@ -18,14 +18,190 @@ ha_codeowners:
- '@VIKTORVAV99'
---
-The `Electricity Maps` sensor platform (formerly known as CO2Signal) queries the [Electricity Maps](https://www.electricitymaps.com/) API for the CO2 intensity of a specific region. Data can be collected for your home by using the latitude/longitude or a country code. This API uses the same data as . Not all countries/regions in the world are supported, so please consult the app to check local availability.
+The **Electricity Maps** {% term integration %} (formerly known as CO2Signal) queries the [Electricity Maps](https://www.electricitymaps.com/) API for the CO2 intensity of a specific region.
+Data can be collected for your home by using the home location, latitude/longitude, or a country code.
+
+This API uses the same data as shown on the [Electricity Maps app](https://app.electricitymaps.com).
+Not all countries/regions in the world are supported, so please check the app to verify local availability before setting up the integration.
+
+## Use case
+
+The Electricity Maps integration helps you understand the carbon intensity of your electricity grid in real-time. This information can be valuable for:
+
+- Timing energy-intensive tasks (like charging electric vehicles or running appliances) during periods of lower carbon intensity.
+- Creating automations that respond to changing grid conditions.
+- Visualizing your region's progress towards cleaner energy.
+- Understanding how weather conditions affect renewable energy availability in your area.
+- Tracking the carbon impact of your home's energy usage in the {% my energy title="**Energy Dashboard**" %}.
## Prerequisites
To configure and use this integration, you need to obtain a free API key from Electricity Maps by signing up to the Free Tier product on the [Electricity Maps API Portal](https://electricitymaps.com/free-tier).
+Please be aware that the Free Tier API is limited to one location (called a zone). You need to specify the zone for your home location when creating your account.
{% include integrations/config_flow.md %}
-## Sensor types
+The integration provides the following configuration options when setting it up:
-When configured, the platform will create two sensors for each configured location: the carbon intensity expressed in `gCO2eq/kWh` and a percentage of how much the grid relies on fossil fuels for production.
+{% configuration_basic %}
+Location:
+ description: Choose between using your Home Assistant's configured home location, a specific country code, or custom latitude/longitude coordinates.
+API key:
+ description: The API key obtained from the Electricity Maps API Portal.
+{% endconfiguration_basic %}
+
+When configuring the location based on latitude/longitude, you will be prompted to enter the following:
+
+{% configuration_basic %}
+Latitude:
+ description: The latitude of your home location.
+Longitude:
+ description: The longitude of your home location.
+{% endconfiguration_basic %}
+
+When configuring the location based on a country code, you will be prompted to enter the following:
+
+{% configuration_basic %}
+Country code:
+ description: The two-letter ISO 3166-1 alpha-2 country code for your home location (e.g., "US" for the United States, "DE" for Germany).
+{% endconfiguration_basic %}
+
+## Supported functionality
+
+### Sensors
+
+The integration creates two sensors for each configured location:
+
+- **Carbon intensity**: Shows the carbon intensity of electricity production in your area, measured in gCO2eq/kWh (grams of CO2 equivalent per kilowatt-hour).
+- **Fossil fuel percentage**: Shows what percentage of the electricity grid currently relies on fossil fuels for production.
+
+## Examples
+
+### Creating a dashboard card
+
+You can create a gauge card to visualize the carbon intensity of your electricity:
+
+{% raw %}
+```yaml
+type: gauge
+entity: sensor.electricity_maps_carbon_intensity
+name: Carbon Intensity
+min: 0
+max: 500
+severity:
+ green: 0
+ yellow: 150
+ red: 300
+```
+{% endraw %}
+
+### Automation example: Run appliances when carbon intensity is low
+
+This automation starts your dishwasher when the carbon intensity drops below a specific threshold:
+
+{% raw %}
+```yaml
+alias: "Run Dishwasher at Low Carbon Intensity"
+description: "Starts the dishwasher when carbon intensity is low"
+trigger:
+ - platform: numeric_state
+ entity_id: sensor.electricity_maps_carbon_intensity
+ below: 100
+ for:
+ minutes: 10
+condition:
+ - condition: time
+ after: "22:00:00"
+ before: "06:00:00"
+ - condition: state
+ entity_id: binary_sensor.dishwasher_ready
+ state: "on"
+action:
+ - service: switch.turn_on
+ target:
+ entity_id: switch.dishwasher
+ - service: notify.mobile_app
+ data:
+ message: "Dishwasher started during low carbon intensity period ({{ states('sensor.electricity_maps_carbon_intensity') }} gCO2eq/kWh)"
+```
+{% endraw %}
+
+### Creating a history graph to track changes
+
+Add this to your dashboard to track how carbon intensity changes throughout the day:
+
+{% raw %}
+```yaml
+type: history-graph
+entities:
+ - entity: sensor.electricity_maps_carbon_intensity
+ name: Carbon Intensity
+hours_to_show: 24
+refresh_interval: 60
+```
+{% endraw %}
+
+### Energy Dashboard integration
+
+The Electricity Maps integration is automatically used on the Energy Dashboard when set up. The carbon intensity data appears in the Energy Dashboard as a real-time gauge showing the carbon footprint of your household electricity usage.
+
+You don't need to manually configure anything - the integration is automatically detected and used by the Energy Dashboard to calculate and display your home's carbon emissions based on your energy consumption and the current grid carbon intensity.
+
+To view this information:
+1. Navigate to the {% my energy title="**Energy Dashboard**" %}.
+2. Look for the carbon intensity gauge in the dashboard.
+
+If you don't see the carbon information in your Energy Dashboard:
+1. Make sure the Electricity Maps integration is properly set up and working.
+2. Verify that you have energy monitoring configured in Home Assistant.
+
+## Data updates
+
+The integration {% term polling polls %} data from the Electricity Maps API every 15 minutes by default. The actual update frequency may be limited by your API tier's rate limits.
+
+## Known limitations
+
+- The Free Tier API is limited to one location. You need to specify the country when creating your account.
+- The Free Tier API has a limit of 50 requests per hour, but the integration is designed to poll at a rate that won't exceed this limit.
+- Not all geographic regions are supported by Electricity Maps. Check their app to see if your region has coverage.
+
+## Troubleshooting
+
+### Integration fails to set up
+
+#### Symptom: "The given token is invalid" during setup
+
+If you see an invalid token error during setup, your API key may be invalid or expired.
+
+##### Resolution
+
+1. Verify that you've correctly copied the API key from the Electricity Maps API portal.
+2. Check if your API key is still active in the Electricity Maps API portal.
+3. Try generating a new API key if the issue persists.
+
+#### Symptom: "No data available for selected location" during setup
+
+If you receive a "No data available for selected location" error, the coordinates or country code you provided might not be supported by Electricity Maps.
+
+##### Resolution
+
+1. Check the [Electricity Maps app](https://app.electricitymaps.com) to verify coverage for your location.
+2. Try using a country code instead of coordinates, or vice versa.
+3. If your exact location isn't supported, try using the nearest supported location.
+
+### Sensors show "unavailable"
+
+If your sensors show as "unavailable" after successful setup, there might be issues with the API connection.
+
+#### Resolution
+
+1. Check your internet connection.
+2. Verify that your API key still has available quota for the day.
+3. Check if the Electricity Maps service is experiencing downtime.
+4. Restart Home Assistant if the issue persists.
+
+## 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
diff --git a/source/_integrations/cover.mqtt.markdown b/source/_integrations/cover.mqtt.markdown
index 61e61ca4313..65c4ed1b744 100644
--- a/source/_integrations/cover.mqtt.markdown
+++ b/source/_integrations/cover.mqtt.markdown
@@ -27,7 +27,8 @@ Optimistic mode can be forced, even if a `state_topic` / `position_topic` is def
The `mqtt` cover platform optionally supports a list of `availability` topics to receive online and offline messages (birth and LWT messages) from the MQTT cover device. During normal operation, if the MQTT cover device goes offline (i.e., publishes a matching `payload_not_available` to any `availability` topic), Home Assistant will display the cover as "unavailable". If these messages are published with the `retain` flag set, the cover will receive an instant update after subscription and Home Assistant will display correct availability state of the cover when Home Assistant starts up. If the `retain` flag is not set, Home Assistant will display the cover as "unavailable" when Home Assistant starts up.
-To use your MQTT cover in your installation, add the following to your {% term "`configuration.yaml`" %} file:
+To use an MQTT cover in your installation, [add a MQTT device as a subentry](/integrations/mqtt/#configuration), or add the following to your {% term "`configuration.yaml`" %} file.
+{% include integrations/restart_ha_after_config_inclusion.md %}
```yaml
# Example configuration.yaml entry
@@ -36,6 +37,8 @@ mqtt:
command_topic: "living-room-cover/set"
```
+Alternatively, a more advanced approach is to set it up via [MQTT discovery](/integrations/mqtt/#mqtt-discovery).
+
{% configuration %}
availability:
description: "A list of MQTT topics subscribed to receive availability (online/offline) updates. Must not be used together with `availability_topic`."
@@ -170,7 +173,7 @@ name:
type: string
default: MQTT Cover
object_id:
- description: Used instead of `name` for automatic generation of `entity_id`
+ description: Used `object_id` instead of `name` for automatic generation of `entity_id`. This only works when the entity is added for the first time. When set, this overrides a user-customized Entity ID in case the entity was deleted and added again.
required: false
type: string
optimistic:
diff --git a/source/_integrations/datadog.markdown b/source/_integrations/datadog.markdown
index bcb770a41fc..85a6a640e11 100644
--- a/source/_integrations/datadog.markdown
+++ b/source/_integrations/datadog.markdown
@@ -35,33 +35,21 @@ In the [Datadog Agent configuration](https://github.com/DataDog/datadog-agent/bl
## Configuration
-To use the `datadog` integration in your installation, add the following to your {% term "`configuration.yaml`" %} file.
-{% include integrations/restart_ha_after_config_inclusion.md %}
+{% include integrations/config_flow.md %}
-```yaml
-# Example configuration.yaml entry
-datadog:
-```
-
-{% configuration %}
+{% configuration_basic %}
host:
description: The IP address or hostname of your Datadog host, e.g., 192.168.1.23.
- required: false
- default: localhost
- type: string
port:
description: Port to use.
- required: false
- default: 8125
- type: integer
prefix:
description: Metric prefix to use.
- required: false
- default: "`hass`"
- type: string
rate:
description: The sample rate of UDP packets sent to Datadog.
- required: false
- default: 1
- type: integer
-{% endconfiguration %}
+{% endconfiguration_basic %}
+
+## 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/device_tracker.mqtt.markdown b/source/_integrations/device_tracker.mqtt.markdown
index 5efd902efbf..cf77d6e830d 100644
--- a/source/_integrations/device_tracker.mqtt.markdown
+++ b/source/_integrations/device_tracker.mqtt.markdown
@@ -16,7 +16,8 @@ The `mqtt` device tracker {% term integration %} allows you to define new device
## Configuration
-To use this device tracker in your installation, add the following to your {% term "`configuration.yaml`" %} file:
+To use an MQTT device tracker in your installation, add the following to your {% term "`configuration.yaml`" %} file.
+{% include integrations/restart_ha_after_config_inclusion.md %}
```yaml
# Example configuration.yaml entry
@@ -29,6 +30,8 @@ mqtt:
state_topic: "location/paulus"
```
+Alternatively, a more advanced approach is to set it up via [MQTT discovery](/integrations/mqtt/#mqtt-discovery).
+
{% configuration %}
availability:
description: A list of MQTT topics subscribed to receive availability (online/offline) updates. Must not be used together with `availability_topic`.
@@ -139,7 +142,7 @@ name:
required: false
type: string
object_id:
- description: Used instead of `name` for automatic generation of `entity_id`
+ description: Used `object_id` instead of `name` for automatic generation of `entity_id`. This only works when the entity is added for the first time. When set, this overrides a user-customized Entity ID in case the entity was deleted and added again.
required: false
type: string
payload_available:
diff --git a/source/_integrations/devolo_home_network.markdown b/source/_integrations/devolo_home_network.markdown
index a94ac4df5c9..181117d1760 100755
--- a/source/_integrations/devolo_home_network.markdown
+++ b/source/_integrations/devolo_home_network.markdown
@@ -27,6 +27,7 @@ ha_platforms:
- update
ha_zeroconf: true
ha_integration_type: device
+ha_quality_scale: silver
---
The **devolo Home Network** {% term integration %} allows you to monitor and control your [devolo](https://www.devolo.global) PLC network. Depending on the device you add to Home Assistant, different use cases are possible. Roughly you can categorize the devices into Wi-Fi and non-Wi-Fi devices. Non-Wi-Fi devices are more or less limited in monitoring your PLC network. The Wi-Fi devices, however, can help with presence detection and remote control of your guest Wi-Fi. For details, please continue reading about the [entities](#entities) and look at the [supported devices](#supported-devolo-devices).
@@ -101,6 +102,7 @@ Currently, the following entities within Home Assistant are supported.
The list of supported devolo devices depends on the device firmware and the device features. The following devices were tested running firmware 5.6.0:
+- Magic 2 WiFi 6 next
- Magic 2 WiFi 6
- Magic 2 WiFi next
- Magic 2 WiFi 2-1
diff --git a/source/_integrations/discovergy.markdown b/source/_integrations/discovergy.markdown
index 98b92390a9b..4cfa838cc12 100644
--- a/source/_integrations/discovergy.markdown
+++ b/source/_integrations/discovergy.markdown
@@ -1,6 +1,6 @@
---
title: inexogy
-description: Instructions on how to integrate inexogy within Home Assistant.
+description: Instructions on how to integrate inexogy smart meters within Home Assistant.
ha_category:
- Energy
- Sensor
@@ -20,7 +20,7 @@ ha_quality_scale: silver
The **inexogy** {% term integration %} allows users to integrate their [inexogy](https://inexogy.com/) smart meters into Home Assistant.
The integration is using the [official REST API](https://api.inexogy.com/docs/#/) by inexogy.
-The integration supports the following meters within Home Assistant:
+The integration supports the following meter types within Home Assistant:
- [Electricity meter](#electricity-meter)
- [Gas meter](#gas-meter)
@@ -40,14 +40,116 @@ Password:
## Electricity meter
Sensor {% term entities %} are being added for current active power usage and the all-time total consumption.
-By default, the sensors for phase-specific current active power usage are disabled.
+By default, the sensors for phase-specific current active power usage are disabled but can be enabled in the entity settings.
-In case you have a combined meter for consumption and production, the all-time total production is added as well.
+In case you have a bidirectional meter for consumption and production, the all-time total production is added as well.
## Gas meter
A Sensor {% term entity %} is being added for total gas consumption.
+## Provided sensors
+
+Depending on your meter type, different sensors are available:
+
+### Electricity - Main sensors
+- `sensor.electricity___total_power`: Current power consumption in watts
+- `sensor.electricity___total_consumption`: Total energy consumption in kWh
+- `sensor.electricity___total_production`: Total energy production in kWh (bidirectional meters only)
+
+### Electricity - Optional sensors (disabled by default)
+- `sensor.electricity___phase_1_power`: Power consumption phase 1 in watts
+- `sensor.electricity___phase_2_power`: Power consumption phase 2 in watts
+- `sensor.electricity___phase_3_power`: Power consumption phase 3 in watts
+- `sensor.electricity___phase_1_voltage`: Voltage phase 1 in volts
+- `sensor.electricity___phase_2_voltage`: Voltage phase 2 in volts
+- `sensor.electricity___phase_3_voltage`: Voltage phase 3 in volts
+
+### Gas
+- `sensor.gas___total_gas_consumption`: Total gas consumption in cubic meters
+
+## Data update
+
+The sensors are updated every 30 seconds. This pulls the latest data available from the inexogy API.
+Note that this doesn't mean the meter data itself is new every 30 seconds. The frequency at which your meter sends new data to inexogy depends on your meter model and measurement concept.
+
+## Use cases and examples
+
+### Energy dashboard
+
+The total consumption and production sensors provided by this integration are fully compatible with the [Home Assistant Energy Dashboard](/docs/energy/).
+
+- `sensor.electricity_example_street_11_total_consumption` (total consumption) can be added to the "Grid consumption" field.
+- `sensor.electricity_example_street_11_total_production` (total production) can be added to the "Return to grid" field.
+
+### Automations
+
+You can use the current power sensor (`sensor.electricity_example_street_11_total_power`) to trigger automations based on your electricity usage.
+
+Example: Send a notification when power consumption exceeds 3000 W for 5 minutes.
+
+{% raw %}
+
+```yaml
+automation:
+ - alias: High Power Consumption Detected
+ trigger:
+ - platform: numeric_state
+ entity_id: sensor.electricity_example_street_11_total_power
+ above: 3000
+ for:
+ minutes: 5
+ action:
+ - service: notify.mobile_app_your_device
+ data:
+ message: "High power consumption detected: {{ states('sensor.electricity_example_street_11_total_power') }} W"
+```
+
+{% endraw %}
+
+Example: Turn off high-power devices when photovoltaic production is insufficient (for bidirectional meters).
+
+{% raw %}
+
+```yaml
+automation:
+ - alias: Consumption Control Based on PV Output
+ trigger:
+ - platform: state
+ entity_id: sensor.electricity_example_street_11_total_power
+ condition:
+ - condition: numeric_state
+ entity_id: sensor.electricity_example_street_11_total_power
+ above: 0 # Positive value means grid consumption
+ action:
+ - service: switch.turn_off
+ target:
+ entity_id: switch.high_power_device
+```
+
+{% endraw %}
+
+## Troubleshooting
+
+### No data or stale sensors
+
+If your sensors are not showing data or values are stale, check the following:
+
+1. **inexogy Portal**: Log in to the [inexogy web portal](https://my.inexogy.com/) and check if it shows current data from your meter. If not, there might be an issue with your meter or connection to inexogy.
+
+2. **Home Assistant Logs**: Check the Home Assistant logs for error messages related to the `inexogy` integration. Authentication errors (`Authentication failed`) mean your email address or password is incorrect.
+
+3. **API Rate Limits**: The inexogy API has rate limits. Although the integration is designed to stay within these limits, frequent Home Assistant restarts or other tools using the API might lead to temporary blocks.
+
+### Missing sensors
+
+- **Production sensors**: The electricity production sensor is only available for bidirectional meters. If you have such a meter but don't see it, check your data in the inexogy portal.
+- **Phase sensors**: Per-phase power and voltage sensors are disabled by default and not available for all meters. You can enable them on the integration page under "Entities".
+
+### Network issues
+
+If you see connection errors, ensure that Home Assistant has a stable internet connection. The integration needs access to `api.inexogy.com` over HTTPS (port 443).
+
## Removing the integration
This integration follows standard integration removal. No extra steps are required.
diff --git a/source/_integrations/dlna_dms.markdown b/source/_integrations/dlna_dms.markdown
index 1a14af9f903..afdeb278cef 100644
--- a/source/_integrations/dlna_dms.markdown
+++ b/source/_integrations/dlna_dms.markdown
@@ -19,7 +19,7 @@ The DLNA Digital Media Server integration allows you to browse and play media fr
## Renaming
-The name/title of the DMS device is the same as the title of the config entry. It can be changed on the Integrations Configuration page from the three-dot menu.
+The name/title of the DMS device is the same as the title of the config entry. It can be changed on the Integrations Configuration page from the three dots {% icon "mdi:dots-vertical" %} menu.
## Media source URIs
diff --git a/source/_integrations/eheimdigital.markdown b/source/_integrations/eheimdigital.markdown
index 0a99de2a4f8..d9216095e03 100644
--- a/source/_integrations/eheimdigital.markdown
+++ b/source/_integrations/eheimdigital.markdown
@@ -40,16 +40,22 @@ Host:
type: string
{% endconfiguration_basic %}
+## Data updates
+
+The integration connects locally via WebSocket to the EHEIM Digital main device and requests data updates for all devices every 15 seconds by default.
+
+## How you can use this integration
+
+You can use this integration to control and monitor your EHEIM Digital aquarium devices directly from Home Assistant. This includes adjusting settings such as temperature, light brightness, and filter speed, as well as monitoring the status of your devices.
+
+- **Receive notifications**: Get notified about important events, such as when the filter needs servicing or if there is an error with the device.
+- **More flexible day/night cycles**: Use Home Assistant's automation and scripting capabilities to create more complex day/night cycles for your aquarium devices than the native EHEIM Digital interface allows.
+- **Integrate with other devices**: While EHEIM Digital devices can interact with each other in a limited sense (for example, the EHEIM autofeeder can pause the filter pump after feeding), this integration allows you to automate and control your EHEIM Digital devices in conjunction with other smart home devices.
+
## Supported devices and entities
Currently, the following devices and entities are supported:
-### All devices
-
-#### Number
-
-- **System LED brightness**: Controlling the brightness of the system LED
-
### [EHEIM classicLEDcontrol+e](https://eheim.com/en_GB/aquatics/technology/lighting-control/classicledcontrol-e/classicledcontrol-e)
#### Lights
@@ -104,7 +110,48 @@ Currently, the following devices and entities are supported:
- **Day start time**: Setting the start time for the day pump speed in Bio mode
- **Night start time**: Setting the start time for the night pump speed in Bio mode
-Support for additional EHEIM Digital devices and entities will be added in future updates.
+### All supported devices
+
+#### Number
+
+- **System LED brightness**: Controlling the brightness of the system LED
+
+## Automations
+
+### Send a notification when the filter has an error
+
+You can set up an automation to notify you when the filter has an error. This example uses the `notify.notify` service to send a notification:
+
+{% details "Example automation to notify about filter errors" %}
+
+{% raw %}
+
+```yaml
+alias: Notify about filter error
+description: "This automation sends a notification when the filter has an error."
+mode: single
+triggers:
+ - trigger: state
+ entity_id:
+ - sensor.aquarienfilter_error_code
+ to:
+ - rotor_stuck
+ - air_in_filter
+conditions: []
+actions:
+ - action: notify.notify
+ metadata: {}
+ data:
+ title: The filter has a problem!
+```
+
+{% endraw %}
+
+{% enddetails %}
+
+## Known limitations
+
+- The integration does not support other EHEIM Digital devices than those listed above. More devices will be added in future updates. It is, however, supported to have an unsupported device as the main device and supported devices as sub-devices, even though the unsupported device will not have any entities shown in Home Assistant.
## Removing the integration
diff --git a/source/_integrations/enphase_envoy.markdown b/source/_integrations/enphase_envoy.markdown
index 579b54d4d99..18ab15d7f4c 100644
--- a/source/_integrations/enphase_envoy.markdown
+++ b/source/_integrations/enphase_envoy.markdown
@@ -144,6 +144,10 @@ Based on the Envoy firmware version, the Envoy may provide inverter device data
- **Inverter SN Lifetime energy**: Total energy produced during inverter lifetime (Wh).
- **Inverter SN Report duration**: Time in seconds covered by the last report data.
+{% note %}
+Due to a limitation in the Envoy firmware, the inverter device data is only available when 49 or fewer inverters are configured. When more than 49 inverters are configured, only the 3 power production entities are available for each inverter.
+{% endnote %}
+
Micro-inverter device with solar production entities.
@@ -700,7 +704,9 @@ When using Envoy Metered with CT
- not all firmware versions report `Energy production today` and/or `Energy consumption today` correctly. Zero data and unexpected spikes have been reported. In this case, best use a utility meter with the `Lifetime energy production` or `Lifetime energy consumption` entity for daily reporting.
- not all firmware versions report `Energy production last seven days` and/or `Energy consumption last seven days` correctly. Zero and unexpected values have been reported.
-- `Energy production today` has been reported not to reset to zero at the start of the day. Instead, it resets to a non-zero value that gradually increases over time. This issue has also been reported as starting suddenly overnight. For daily reporting, it is recommended to use a utility meter with the `Lifetime energy production` entity.
+- `Energy production today` and `Energy consumption today` have been reported not to reset to zero at the start of the day. Instead, it resets to a non-zero value that seems to gradually increase over time, although other values have been reported as well. This issue has also been reported as starting suddenly overnight. For daily reporting, it is recommended to use a utility meter with the `Lifetime energy production` or `Lifetime energy consumption` entity.
+
+- `Energy production today`, `Energy consumption today`, `Energy production last seven days` and `Energy consumption last seven days` have been reported not to reset to zero at the start of the day. Instead, it resets to zero at a later time, often 1 am. This seems to be daylight savings time change related.
{% details "History examples for Today's energy production value not resetting to zero" %}
@@ -730,7 +736,7 @@ Envoy Metered without installed CT, running older firmware versions, reportedly
### Lifetime energy production decreases by 1.2 MWh
-Envoy Standard (not Metered), running firmware 8.2.4264, reportedly decreases the **Lifetime energy production** value by 1.2 MWh at irregular times. The current hypothesis is that the step change occurs when one of the inverters exceeds a lifetime value of 1.2 MWh and resets to zero. This leads to the decrease with 1.2 MWh in the aggregated value for all inverters. It's not clear if this also happens for the metered Envoy.
+Envoy Standard (not Metered), running firmware 8.2.4264, reportedly decreases the **Lifetime energy production** value by 1.2 MWh at irregular times. The current hypothesis is that the step change occurs when one of the inverters exceeds an internal lifetime joules counter of 32 bit, which is 1.19 MWh, and resets to zero. This leads to a decrease of 1.2 MWh in the aggregated value for all inverters. It's not clear if this also happens for the metered Envoy.
{% details "History example for Envoy Lifetime energy production value decrease" %}
@@ -742,6 +748,14 @@ The example below shows decreases when multiple inverters reach a 1.2 MWh lifeti
{% enddetails %}
+### Missing inverter data
+
+If you are not seeing all your installed [inverters](#sensor-entities), and you have more than 49 inverters installed, and you are running HA 2025.7, 2025.7.1, or 2025.7.2, then upgrade HA to 2025.7.3 or newer. Due to a limitation in the Envoy firmware. Only the inverter details for 49 inverters are available. In the mentioned releases, any more inverters got dropped. The 2025.7.3 version fixed this by only using the inverter base data, which does not have this limitation.
+
+### Missing inverter details
+
+If you are not seeing [inverters](#sensor-entities) detail data, verify if you have more than 49 inverters installed. Due to a limitation in the Envoy firmware, the inverter device detail data is only available when 49 or fewer inverters are configured. When more than 49 inverters are configured, only the 3 power production entities are available for each inverter.
+
### Summed Voltage
The Envoy Metered in multiphase setup, sums the voltages of the phases measured on the CT for the aggregated data. This may be valid for split-phase, but for 3-phase systems, use the individual phases rather than the summed value.
diff --git a/source/_integrations/event.mqtt.markdown b/source/_integrations/event.mqtt.markdown
index 07f0ae45700..3045869016f 100644
--- a/source/_integrations/event.mqtt.markdown
+++ b/source/_integrations/event.mqtt.markdown
@@ -12,6 +12,9 @@ The `mqtt` event platform allows you to process event info from an MQTT message.
## Configuration
+To use an MQTT event entity in your installation, add the following to your {% term "`configuration.yaml`" %} file.
+{% include integrations/restart_ha_after_config_inclusion.md %}
+
```yaml
# Example configuration.yaml entry
mqtt:
@@ -21,6 +24,8 @@ mqtt:
- press
```
+Alternatively, a more advanced approach is to set it up via [MQTT discovery](/integrations/mqtt/#mqtt-discovery).
+
{% configuration %}
availability:
description: A list of MQTT topics subscribed to receive availability (online/offline) updates. Must not be used together with `availability_topic`.
@@ -155,7 +160,7 @@ name:
type: string
default: MQTT Event
object_id:
- description: Used instead of `name` for automatic generation of `entity_id`
+ description: Used `object_id` instead of `name` for automatic generation of `entity_id`. This only works when the entity is added for the first time. When set, this overrides a user-customized Entity ID in case the entity was deleted and added again.
required: false
type: string
payload_available:
diff --git a/source/_integrations/fan.mqtt.markdown b/source/_integrations/fan.mqtt.markdown
index 5cb84cbcd0a..f3a594918bc 100644
--- a/source/_integrations/fan.mqtt.markdown
+++ b/source/_integrations/fan.mqtt.markdown
@@ -18,7 +18,7 @@ When a `state_topic` is not available, the fan will work in optimistic mode. In
Optimistic mode can be forced even if a `state_topic` is available. Try to enable it if you are experiencing incorrect fan operation.
-To enable MQTT fans in your installation, add the following to your {% term "`configuration.yaml`" %} file.
+To use an MQTT fan in your installation, [add a MQTT device as a subentry](/integrations/mqtt/#configuration), or add the following to your {% term "`configuration.yaml`" %} file.
{% include integrations/restart_ha_after_config_inclusion.md %}
```yaml
@@ -28,6 +28,8 @@ mqtt:
command_topic: "bedroom_fan/on/set"
```
+Alternatively, a more advanced approach is to set it up via [MQTT discovery](/integrations/mqtt/#mqtt-discovery).
+
{% configuration %}
availability:
description: A list of MQTT topics subscribed to receive availability (online/offline) updates. Must not be used together with `availability_topic`.
@@ -162,7 +164,7 @@ name:
type: string
default: MQTT Fan
object_id:
- description: Used instead of `name` for automatic generation of `entity_id`
+ description: Used `object_id` instead of `name` for automatic generation of `entity_id`. This only works when the entity is added for the first time. When set, this overrides a user-customized Entity ID in case the entity was deleted and added again.
required: false
type: string
optimistic:
diff --git a/source/_integrations/fritzbox.markdown b/source/_integrations/fritzbox.markdown
index 2ffc2224fc2..d4f9bce7fca 100644
--- a/source/_integrations/fritzbox.markdown
+++ b/source/_integrations/fritzbox.markdown
@@ -28,30 +28,38 @@ ha_codeowners:
ha_integration_type: hub
---
-The AVM FRITZ!SmartHome integration for Home Assistant allows you to integrate [AVM Smart Home](https://en.avm.de/products/smart-home/) (_former AVM FRITZ!DECT_) devices like plugs, thermostats or shutter drivers as also trigger so called smart home templates (_contains settings for Smart Home devices of the same type_).
+The AVM FRITZ!SmartHome integration for Home Assistant allows you to integrate [AVM Smart Home](https://en.fritz.com/products/smart-home/) (_former AVM FRITZ!DECT_) devices like plugs, thermostats or shutter drivers as also trigger so called smart home templates (_contains settings for Smart Home devices of the same type_).
#### Tested devices
-- [FRITZ!Box 5590 Fiber][fritzbox_5590_fiber]
-- FRITZ!Box 6490 Cable
-- [FRITZ!Box 6591 Cable][fritzbox_6591_cable]
-- [FRITZ!Box 7590][fritzbox_7590]
-- [FRITZ!Box 7590 AX][fritzbox_7590_ax]
-- [FRITZ!Box 7530 AX][fritzbox_7530_ax]
-- FRITZ!Box 7490
-- FRITZ!Box 7430
-- [FRITZ!DECT 200][fritzdect_200]
-- [FRITZ!DECT 210][fritzdect_210]
-- [FRITZ!DECT 301][fritzdect_301]
-- [FRITZ!DECT 302][fritzdect_302]
-- [FRITZ!DECT 500][fritzdect_500]
-- [Eurotronic Comet DECT][eurotronic_comet_dect]
-- [Magenta SmartHome LED E27 Color][magenta_led_e27_color]
-- Magenta SmartHome LED E27 warmwhite
-- [Rademacher RolloTron DECT 1213][rademacher_rollotron_dect_1213]
+- FRITZ!Box routers
+ - [FRITZ!Box 5590 Fiber][fritzbox_5590_fiber]
+ - FRITZ!Box 6490 Cable
+ - FRITZ!Box 6591 Cable
+ - FRITZ!Box 7590
+ - FRITZ!Box 7490
+ - FRITZ!Box 7430
+ - [FRITZ!Box 7590 AX][fritzbox_7590_ax]
+ - [FRITZ!Box 7530 AX][fritzbox_7530_ax]
+- [FRITZ!Smart Gateway][fritz_smart_gateway]
+- FRITZ!SmartHome devices
+ - [FRITZ!Smart Energy 200][fritzdect_200] (_former FRITZ!DECT 200_)
+ - [FRITZ!Smart Energy 210][fritzdect_210] (_former FRITZ!DECT 210_)
+ - FRITZ!Smart Thermo 301 (_former FRITZ!DECT 301_)
+ - [FRITZ!Smart Thermo 302][fritzdect_302] (_former FRITZ!DECT 302_)
+ - FRITZ!DECT 500
+- Smart home devices from other vendors
+ - Eurotronic Comet DECT
+ - Magenta SmartHome LED E27 Color
+ - Magenta SmartHome LED E27 warmwhite
+ - [Homepilot RolloTron DECT 1213][rademacher_rollotron_dect_1213] (_former Rademacher RolloTron DECT 1213_)
## Prerequisites
+Please note that in a [mesh](https://en.fritz.com/service/knowledge-base/dok/FRITZ-Box-7590/3329_Mesh-with-FRITZ/) setup, only the FRITZ!Box with the mesh master role should be added with the AVM FRITZ!SmartHome integration.
+
+### 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 **Smart Home** permission.
{% note %}
@@ -64,28 +72,28 @@ If you still want to use the predefined user, please note that as of FRITZ!OS 7.
Host:
description: "The hostname or IP address of your FRITZ!Box router."
Username:
- description: "Name of the user to connect Home Assistant to your FRITZ!Box (_see [prerequisites](#prerequisites)_)"
+ 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 [prerequisites](#prerequisites)_)"
+ description: "Password for the user to connect Home Assistant to your FRITZ!Box (_see [Username](#username)_)"
{% endconfiguration_basic %}
## Data fetching and limitations
-Since the API of the FRITZ!Box does not provide a push mechanism, this integration polls the data every 30 seconds from the FRITZ!Box. Because of this, the integration can't support the main features of event-based devices like the [FRITZ!DECT 350][fritzdect_350] door/window contact sensors or the [FRITZ!DECT 440][fritzdect_440] buttons (_see the [other devices](#other-devices) section for details_).
+Since the API of the FRITZ!Box does not provide a push mechanism, this integration polls the data every 30 seconds from the FRITZ!Box. Because of this, the integration can't support the main features of event-based devices like the [FRITZ!Smart Control 350][fritzdect_350] door/window contact sensors or the [FRITZ!Smart Control 440][fritzdect_440] buttons (_see the [other devices](#other-devices) section for details_).
## Devices
### Light bulbs
-Light bulbs like the [FRITZ!DECT 500][fritzdect_500] or [Magenta SmartHome LED E27 Color][magenta_led_e27_color] will be integrated as {% term light %} entities.
+Light bulbs like the FRITZ!DECT 500 or Magenta SmartHome LED E27 Color will be integrated as {% term light %} entities.
{% note %}
-The [FRITZ!DECT 500][fritzdect_500] light bulb supports only 36 colors. When a color is picked in Home Assistant that is not supported by the device, a color that comes close will be activated.
+The FRITZ!DECT 500 light bulb supports only 36 colors. When a color is picked in Home Assistant that is not supported by the device, a color that comes close will be activated.
{% endnote %}
### Plugs
-Plugs like the [FRITZ!DECT 200][fritzdect_200] or [FRITZ!DECT 210][fritzdect_210] will be integrated as {% term switch %} entities.
+Plugs like the [FRITZ!Smart Energy 200][fritzdect_200] or [FRITZ!Smart Energy 210][fritzdect_210] will be integrated as {% term switch %} entities.
Further there are additional {% term sensor %} and {% term binary_sensor "binary sensor" %} entities created for each device, based on its capabilities:
@@ -99,15 +107,15 @@ Further there are additional {% term sensor %} and {% term binary_sensor "binary
### Shutter drivers
-Shutter drivers like the [Rademacher RolloTron DECT 1213][rademacher_rollotron_dect_1213] will be integrated as {% term cover %} entities.
+Shutter drivers like the [Homepilot RolloTron DECT 1213][rademacher_rollotron_dect_1213] will be integrated as {% term cover %} entities.
### Templates
-Self defined [templates](https://en.avm.de/guide/three-smart-home-templates-that-will-make-your-life-easier) within the FRITZ!Box smart home configuration menu, will be integrated as {% term button %} entities and those can be triggered from within Home Assistant.
+Self defined [templates](https://en.fritz.com/guide/three-smart-home-templates-that-will-make-your-life-easier) within the FRITZ!Box smart home configuration menu, will be integrated as {% term button %} entities and those can be triggered from within Home Assistant.
### Thermostats
-Thermostats like the [FRITZ!DECT 301][fritzdect_301], [FRITZ!DECT 302][fritzdect_302] or [Eurotronic Comet DECT][eurotronic_comet_dect] will be integrated as {% term climate %} entities.
+Thermostats like the FRITZ!Smart Thermo series or Eurotronic Comet DECT will be integrated as {% term climate %} entities.
Further there are additional {% term sensor %} and {% term binary_sensor "binary sensor" %} entities created for each device which can be useful for {% term automations %} and {% term templates %}, based on its capabilities:
@@ -127,7 +135,7 @@ Further there are additional {% term sensor %} and {% term binary_sensor "binary
### Other devices
-Some devices like the [FRITZ!DECT 350][fritzdect_350] or the [FRITZ!DECT 440][fritzdect_440] can't be controlled via this integration, but its sensors can still be integrated.
+Event based devices like motion detection sensors or window/door contacts or buttons (_for example, [FRITZ!Smart Control 350][fritzdect_350] or the [FRITZ!Smart Control 440][fritzdect_440]_) cannot be controlled or used via this integration, but their sensors can still be integrated.
The availability of these {% term sensor %} and {% term binary_sensor "binary sensor" %} entities depends on the features and capabilities of the connected device and can be one or multiple of:
@@ -139,20 +147,15 @@ The availability of these {% term sensor %} and {% term binary_sensor "binary se
- Open window detected
- Temperature
-[fritzbox_5590_fiber]: https://en.avm.de/products/fritzbox/fritzbox-5590-fiber
-[fritzbox_6591_cable]: https://en.avm.de/products/fritzbox/fritzbox-6591-cable
-[fritzbox_7590]: https://en.avm.de/products/fritzbox/fritzbox-7590
-[fritzbox_7590_ax]: https://en.avm.de/products/fritzbox/fritzbox-7590-ax
-[fritzbox_7530_ax]: https://en.avm.de/products/fritzbox/fritzbox-7530-ax
-[fritzdect_200]: https://en.avm.de/products/smart-home/fritzdect-200
-[fritzdect_210]: https://en.avm.de/products/smart-home/fritzdect-210
-[fritzdect_301]: https://en.avm.de/products/smart-home/fritzdect-301
-[fritzdect_302]: https://en.avm.de/products/smart-home/fritzdect-302
-[fritzdect_350]: https://en.avm.de/products/smart-home/fritzdect-350
-[fritzdect_440]: https://en.avm.de/products/smart-home/fritzdect-440
-[fritzdect_500]: https://en.avm.de/products/smart-home/fritzdect-500
-[eurotronic_comet_dect]: https://eurotronic.org/produkte/dect-ule-heizkoerperthermostat/comet-dect
-[magenta_led_e27_color]: https://www.smarthome.de/geraete/smarthome-led-lampe-e27-farbig-weiss
+[fritzbox_5590_fiber]: https://en.fritz.com/products/fritzbox/fritzbox-5590-fiber
+[fritzbox_7590_ax]: https://en.fritz.com/products/fritzbox/fritzbox-7590-ax
+[fritzbox_7530_ax]: https://en.fritz.com/products/fritzbox/fritzbox-7530-ax
+[fritzdect_200]: https://en.fritz.com/products/smart-home/fritzsmart-energy-200
+[fritzdect_210]: https://en.fritz.com/products/smart-home/fritzsmart-energy-210
+[fritzdect_302]: https://en.fritz.com/products/smart-home/fritzsmart-thermo-302
+[fritzdect_350]: https://en.fritz.com/products/smart-home/fritzsmart-control-350
+[fritzdect_440]: https://en.fritz.com/products/smart-home/fritzsmart-control-440
+[fritz_smart_gateway]: https://en.fritz.com/products/smart-home/fritzsmart-gateway
[rademacher_rollotron_dect_1213]: https://www.rademacher.de/shop/rollladen-sonnenschutz/elektrischer-gurtwickler/rollotron-dect-1213
## Troubleshooting
diff --git a/source/_integrations/google_assistant_sdk.markdown b/source/_integrations/google_assistant_sdk.markdown
index 62a1fb1c1be..5c93b5ff3b6 100644
--- a/source/_integrations/google_assistant_sdk.markdown
+++ b/source/_integrations/google_assistant_sdk.markdown
@@ -246,3 +246,8 @@ Then you can converse with Google Assistant by tapping the Assist icon at the to
Or by calling the `conversation.process` action.
Note: due to a bug in the Google Assistant API, not all responses contain text, especially for home control commands, like turn on the lights. These will be shown as ``. For those, Google Assistant responds with HTML and Home Assistant integrations are [not allowed](https://github.com/home-assistant/architecture/blob/master/adr/0004-webscraping.md) to parse HTML.
+
+
+## Removing the integration
+
+{% include integrations/remove_device_service.md %}
diff --git a/source/_integrations/google_generative_ai_conversation.markdown b/source/_integrations/google_generative_ai_conversation.markdown
index ec7f6e634b0..51ce0e12d47 100644
--- a/source/_integrations/google_generative_ai_conversation.markdown
+++ b/source/_integrations/google_generative_ai_conversation.markdown
@@ -2,6 +2,7 @@
title: Google Generative AI
description: Instructions on how to integrate Google Generative AI as a conversation agent
ha_category:
+ - Speech-to-text
- Text-to-speech
- Voice
ha_release: 2023.6
@@ -15,6 +16,7 @@ ha_integration_type: service
ha_platforms:
- conversation
- diagnostics
+ - stt
- tts
related:
- docs: /voice_control/voice_remote_expose_devices/
@@ -27,7 +29,7 @@ related:
title: Google Generative AI
---
-The Google Generative AI integration adds a conversation agent and text-to-speech engine powered by [Google Generative AI](https://ai.google.dev/) to Home Assistant. It can optionally be allowed to control Home Assistant.
+The Google Generative AI integration adds a conversation agent, speech-to-text, and text-to-speech entities powered by [Google Generative AI](https://ai.google.dev/) to Home Assistant. The conversation agent can optionally be allowed to control Home Assistant.
Controlling Home Assistant is done by providing the AI access to the Assist API of Home Assistant. You can control what devices and entities it can access from the {% my voice_assistants title="exposed entities page" %}. The AI is able to provide you information about your devices and control them.
@@ -241,3 +243,7 @@ logger:
homeassistant.components.conversation.chat_log: debug
homeassistant.components.google_generative_ai_conversation: debug
```
+
+## Removing the integration
+
+{% include integrations/remove_device_service.md %}
diff --git a/source/_integrations/govee_light_local.markdown b/source/_integrations/govee_light_local.markdown
index 41c726d0e6b..13f7d3df55b 100644
--- a/source/_integrations/govee_light_local.markdown
+++ b/source/_integrations/govee_light_local.markdown
@@ -22,7 +22,6 @@ To enable local control on your Govee device, refer to the instructions availabl
## Supported devices
-H6008,
H6022,
H6042,
H6046,
diff --git a/source/_integrations/gree.markdown b/source/_integrations/gree.markdown
index 01ec11caaae..f5c61277194 100644
--- a/source/_integrations/gree.markdown
+++ b/source/_integrations/gree.markdown
@@ -40,6 +40,7 @@ Any Gree Smart device working with the Gree+ app should be supported, including
- Heiwa
- Ekokai
- Lessar
+- Tosot
## Climate
diff --git a/source/_integrations/hddtemp.markdown b/source/_integrations/hddtemp.markdown
index 7bef7fcd4ec..5cbb5619d68 100644
--- a/source/_integrations/hddtemp.markdown
+++ b/source/_integrations/hddtemp.markdown
@@ -25,10 +25,6 @@ It required that `hddtemp` is started or running in daemon mode on a local or re
hddtemp -dF
```
-{% important %}
-You can't use this sensor in a container (only Home Assistant Core is supported) as it requires access to `hddtemp` which is not available in a container-based setup.
-{% endimportant %}
-
## Configuration
To setup a HDDTemp to your installation, add the following to your {% term "`configuration.yaml`" %} file.
diff --git a/source/_integrations/heos.markdown b/source/_integrations/heos.markdown
index c1dd47478ef..1a08413b9e8 100644
--- a/source/_integrations/heos.markdown
+++ b/source/_integrations/heos.markdown
@@ -70,7 +70,7 @@ Password:
Once setup, the host name or IP address used to access the HEOS System can be changed by reconfiguring the integration.
1. Go to **{% my integrations icon title="Settings > Devices & Services" %}**.
-2. Select **Denon HEOS**. Click the three-dot {% icon "mdi:dots-vertical" %} menu and then select **Reconfigure**.
+2. Select **Denon HEOS**. Click the three dots {% icon "mdi:dots-vertical" %} menu and then select **Reconfigure**.
3. Enter a new [host name or IP address](/integrations/heos/#host).
4. Click Submit to complete the reconfiguration.
@@ -79,7 +79,7 @@ Once setup, the host name or IP address used to access the HEOS System can be ch
This integration follows standard integration removal. No extra steps are required.
1. Go to **{% my integrations icon title="Settings > Devices & Services" %}**.
-2. Select **Denon HEOS**. Click the three-dot {% icon "mdi:dots-vertical" %} menu and then select **Delete**.
+2. Select **Denon HEOS**. Click the three dots {% icon "mdi:dots-vertical" %} menu and then select **Delete**.
## Actions
diff --git a/source/_integrations/history_stats.markdown b/source/_integrations/history_stats.markdown
index bc340880ce1..80e2ffb01ee 100644
--- a/source/_integrations/history_stats.markdown
+++ b/source/_integrations/history_stats.markdown
@@ -121,7 +121,7 @@ Depending on the sensor type you choose, the `history_stats` integration can sho
- **time**: The default value, which is the tracked time, in hours
- **ratio**: The tracked time divided by the length of your period, as a percentage
-- **count**: How many times the tracked entity matched the configured state during the time period. This will count states (for example, how many times a light was in the `on` state during the time period), as opposed to counting state transitions (for example, how many times a light was *turned* `on`). The difference is if the entity was already in the desired state at the start of the time period, that scenario will be counted with this sensor type.
+- **count**: How many times the tracked entity matched the configured state during the time period. This will count states (for example, how many times a light was in the `on` state during the time period), as opposed to counting state transitions (for example, how many times a light was *turned* `on`). The difference is if the entity was already in the desired state at the start of the time period, that scenario will be counted with this sensor type. If a list of states is provided to the state option, transitions between defined states are considered all part of a single event and do not increment the count.
{% note %}
For a **time** or **count** sensor that uses a time period that does not slide (such as one that resets upon each hour, as opposed to one which considers the trailing 60 minutes), consider using [customization](/docs/configuration/customizing-devices/#customizing-an-entity-in-yaml) to change the `state_class` to `total_increasing` to generate statistics that track the `sum`. This is useful when emulating the behavior of a `utility_meter` helper that has a defined reset cycle. Without intervention, the `state_class` of any `history_stats` sensor will be `measurement` and will therefore generate `average`, `min`, and `max` statistics.
diff --git a/source/_integrations/home_connect.markdown b/source/_integrations/home_connect.markdown
index 0e66fd0d1cb..d5a9c17d590 100644
--- a/source/_integrations/home_connect.markdown
+++ b/source/_integrations/home_connect.markdown
@@ -1130,9 +1130,7 @@ actions:
device_id: "your_device_id"
affects_to: "active_program"
program: "dishcare_dishwasher_program_eco_50"
- options:
- - key: "dishcare_dishwasher_option_silence_on_demand"
- value: true
+ dishcare_dishwasher_option_silence_on_demand: true
else:
- service: home_connect.set_program_and_options
data:
diff --git a/source/_integrations/homee.markdown b/source/_integrations/homee.markdown
index 353cc785ef1..2d882d8c378 100644
--- a/source/_integrations/homee.markdown
+++ b/source/_integrations/homee.markdown
@@ -40,7 +40,7 @@ ha_platforms:
- switch
- valve
ha_integration_type: hub
-ha_quality_scale: bronze
+ha_quality_scale: silver
---
[Homee](https://hom.ee) is a smart home system, able to integrate various protocols such as Z-Wave, Zigbee, EnOcean, and more. The Homee {% term integration %} will let you use the {% term devices %} from your Homee in Home Assistant.
@@ -100,7 +100,7 @@ This integration supports reconfiguration, allowing you to change the IP address
1. Go to {% my integrations title="**Settings** > **Devices & services**" %} and select the homee integration card.
2. From the list of hubs, select the one you want to reconfigure.
-3. Next to the entry, select the three-dot {% icon "mdi:dots-vertical" %} menu. Then, select **Reconfigure**.
+3. Next to the entry, select the three dots {% icon "mdi:dots-vertical" %} menu. Then, select **Reconfigure**.
## Removing the integration
diff --git a/source/_integrations/homematicip_cloud.markdown b/source/_integrations/homematicip_cloud.markdown
index 6742f80edb2..ecc0344f7c1 100644
--- a/source/_integrations/homematicip_cloud.markdown
+++ b/source/_integrations/homematicip_cloud.markdown
@@ -13,6 +13,7 @@ ha_category:
- Lock
- Sensor
- Switch
+ - Valve
ha_iot_class: Cloud Push
ha_release: 0.66
ha_config_flow: true
@@ -28,6 +29,7 @@ ha_platforms:
- lock
- sensor
- switch
+ - valve
- weather
ha_integration_type: integration
ha_codeowners:
@@ -48,6 +50,7 @@ There is currently support for the following device types within Home Assistant:
- Lock
- Sensor
- Switch
+- Valve
- Weather
{% include integrations/config_flow.md %}
@@ -207,6 +210,9 @@ Currently, the **HmIP-DLD** can only be used in Home Assistant without a PIN. En
- Switch Actuator for DIN rail mount – 1x channels (*HMIP-DRSI1*)
- Switch Actuator - 2x channels (*HmIP-BS2*)
+- homematicip_cloud.valve
+ - Smart Watering Actuator (*ELV-SH-WSM*)
+
- homematicip_cloud.weather
- Weather Sensor – basic (*HmIP-SWO-B*)
- Weather Sensor – plus (*HmIP-SWO-PL*)
diff --git a/source/_integrations/humidifier.mqtt.markdown b/source/_integrations/humidifier.mqtt.markdown
index e82c0821ec6..385641704d3 100644
--- a/source/_integrations/humidifier.mqtt.markdown
+++ b/source/_integrations/humidifier.mqtt.markdown
@@ -18,7 +18,8 @@ When a `state_topic` is not available, the humidifier will work in optimistic mo
Optimistic mode can be forced even if a `state_topic` is available. Try to enable it if you are experiencing incorrect humidifier operation.
-To enable MQTT humidifiers in your installation, add the following to your {% term "`configuration.yaml`" %} file:
+To use an MQTT humidifier in your installation, add the following to your {% term "`configuration.yaml`" %} file.
+{% include integrations/restart_ha_after_config_inclusion.md %}
```yaml
# Example configuration.yaml entry
@@ -28,6 +29,8 @@ mqtt:
target_humidity_command_topic: "bedroom_humidifier/humidity/set"
```
+Alternatively, a more advanced approach is to set it up via [MQTT discovery](/integrations/mqtt/#mqtt-discovery).
+
{% configuration %}
action_template:
description: A template to render the value received on the `action_topic` with.
@@ -195,7 +198,7 @@ name:
type: string
default: MQTT humidifier
object_id:
- description: Used instead of `name` for automatic generation of `entity_id`
+ description: Used `object_id` instead of `name` for automatic generation of `entity_id`. This only works when the entity is added for the first time. When set, this overrides a user-customized Entity ID in case the entity was deleted and added again.
required: false
type: string
optimistic:
diff --git a/source/_integrations/husqvarna_automower.markdown b/source/_integrations/husqvarna_automower.markdown
index 6a1904636b5..36f1c50ed1a 100644
--- a/source/_integrations/husqvarna_automower.markdown
+++ b/source/_integrations/husqvarna_automower.markdown
@@ -149,6 +149,7 @@ The integration will create the following sensors:
- Cutting blade usage time (if available)
- Error. For example: *Mower tilted*, *outside geofence*.
- Downtime (if available)
+- Inactive reason (if available). For example: *Searching for satellites* or *planning*.
- Restricted reason. For example: *Week schedule*, *frost*, or *daily limit*.
- Mode
- Next start
diff --git a/source/_integrations/huum.markdown b/source/_integrations/huum.markdown
index aa61d470fe3..78cbc17fc35 100644
--- a/source/_integrations/huum.markdown
+++ b/source/_integrations/huum.markdown
@@ -2,15 +2,20 @@
title: Huum
description: Instructions on how to integrate a Huum saunas into Home Assistant.
ha_category:
+ - Binary sensor
- Climate
+ - Light
ha_release: 2024.2
ha_iot_class: Cloud Polling
ha_codeowners:
- '@frwickst'
+ - '@vincentwolsink'
ha_domain: huum
ha_config_flow: true
ha_platforms:
+ - binary_sensor
- climate
+ - light
ha_integration_type: integration
---
@@ -28,3 +33,20 @@ sauna by mistake.
{% endnote %}
{% include integrations/config_flow.md %}
+
+## Available platforms & entities
+
+### Binary sensors
+
+- **Door**: Sauna door state (open or closed).
+
+### Climate
+
+The climate entity controls the sauna heater and offers the following capabilities:
+
+- Adjust target temperature
+- Change operation mode (off or heat)
+
+### Light
+
+- **Light**: Sauna light control (on or off).
diff --git a/source/_integrations/image.mqtt.markdown b/source/_integrations/image.mqtt.markdown
index 7ff40d7cb14..7a880310b6f 100644
--- a/source/_integrations/image.mqtt.markdown
+++ b/source/_integrations/image.mqtt.markdown
@@ -18,7 +18,8 @@ An alternative setup is to use the `url_topic` option to receive an image URL fo
## Configuration
-To enable this image in your installation, add the following to your {% term "`configuration.yaml`" %} file:
+To use an MQTT image entity in your installation, add the following to your {% term "`configuration.yaml`" %} file.
+{% include integrations/restart_ha_after_config_inclusion.md %}
```yaml
# Example configuration.yaml entry
@@ -27,6 +28,8 @@ mqtt:
url_topic: mynas/status/url
```
+Alternatively, a more advanced approach is to set it up via [MQTT discovery](/integrations/mqtt/#mqtt-discovery).
+
{% configuration %}
availability:
description: A list of MQTT topics subscribed to receive availability (online/offline) updates. Must not be used together with `availability_topic`.
@@ -165,7 +168,7 @@ name:
required: false
type: string
object_id:
- description: Used instead of `name` for automatic generation of `entity_id`
+ description: Used `object_id` instead of `name` for automatic generation of `entity_id`. This only works when the entity is added for the first time. When set, this overrides a user-customized Entity ID in case the entity was deleted and added again.
required: false
type: string
unique_id:
diff --git a/source/_integrations/imgw_pib.markdown b/source/_integrations/imgw_pib.markdown
index c9b8806eb18..e7ff8557d59 100644
--- a/source/_integrations/imgw_pib.markdown
+++ b/source/_integrations/imgw_pib.markdown
@@ -30,7 +30,9 @@ Hydrological station:
Sensor entities added to Home Assistant:
- Water level
+- Water flow (if a given hydrological station supports it)
- Water temperature (if a given hydrological station supports it)
+- Hydrological alert (provides information on hydrological alerts for a given river and area)
## Removing the integration
diff --git a/source/_integrations/immich.markdown b/source/_integrations/immich.markdown
index 62db398e47b..7daf51e9fb5 100644
--- a/source/_integrations/immich.markdown
+++ b/source/_integrations/immich.markdown
@@ -26,6 +26,10 @@ This integration allows adding an [Immich](https://immich.app/) user account to
You need to [obtain the API key](https://immich.app/docs/features/command-line-interface#obtain-the-api-key) for your user account in your Immich instance.
+### API key permissions
+
+For full functionality, enable the `album.read` and the `asset.upload` permission when creating your API key. Without this permission, the media source integration will not work, but all monitoring sensors will continue to function normally.
+
{% include integrations/config_flow.md %}
{% configuration_basic %}
@@ -43,7 +47,7 @@ The integration polls data every 60 seconds.
## Media source
-A [media source](/integrations/media_source/) is provided for your [Immich](https://immich.app/) albums. It shows only the albums you own or that are shared with you. If you have multiple Immich integrations in Home Assistant (_one integration for each Immich user_), only the albums for that specific user are shown.
+A [media source](/integrations/media_source/) is provided for your [Immich](https://immich.app/) albums. It shows only the assets you own or that are shared with you. If you have multiple Immich integrations in Home Assistant (_one integration for each Immich user_), only the assets for that specific user are shown. The assets are grouped by albums, people, and tags.
## Sensors
@@ -64,6 +68,52 @@ The following {% term sensors %} are created. For some of those the API key need
An {% term update %} entity is created to inform about a new available Immich server version (_requires Immich server v1.134.0_).
+## Actions
+
+### Upload file
+
+This action allows you to upload a media file to your Immich instance. It takes the following arguments:
+
+{% configuration_basic %}
+Immich instance:
+ description: The config entry of the Immich instance where to upload the file.
+File:
+ description: Use the [MediaSelector](/docs/blueprint/selectors/#media-selector) to define the file to be uploaded.
+ keys:
+ media_content_id:
+ description: The [media source](/integrations/media_source) URL.
+ media_content_type:
+ description: The MIME type of the file to be uploaded.
+Album ID:
+ description: The album in which the file should be placed after uploading. To get the album ID, open the Immich instance web UI in a browser and navigate to the corresponding album, the album ID can now be found in the URL `https://your-immich-instance/albums/`
+{% endconfiguration_basic %}
+
+#### Example script
+
+Take a snapshot of a camera entity via the [`camera.snapshot`](/integrations/camera/#action-snapshot) action, use the [local media](/integrations/media_source/#local-media) path to store the snapshot and upload it to the Immich instance in a specific album.
+
+{% raw %}
+
+```yaml
+sequence:
+ - variables:
+ file_name: camera.yourcamera_{{ now().strftime("%Y%m%d-%H%M%S") }}.jpg
+ - action: camera.snapshot
+ data:
+ filename: "/media/{{ file_name }}"
+ target:
+ entity_id: camera.yourcamera
+ - action: immich.upload_file
+ data:
+ config_entry_id: 01JVJ0RA387MWA938VE8HGXBMJ
+ file:
+ media_content_id: "media-source://media_source/local/{{ file_name }}",
+ media_content_type: "image/jpeg",
+ album_id: f2de0ede-d7d4-4db3-afe3-7288f4e65bb1
+```
+
+{% endraw %}
+
## Troubleshooting
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 re-occurs, 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.
diff --git a/source/_integrations/iron_os.markdown b/source/_integrations/iron_os.markdown
index 56b80f6ee6a..48187360a84 100644
--- a/source/_integrations/iron_os.markdown
+++ b/source/_integrations/iron_os.markdown
@@ -91,7 +91,8 @@ The following controls allow you to customize the settings and options for your
### Basic settings
-- **Boost temperature:** Sets the temperature for boost mode, which temporarily overrides the soldering temperature when the front button is held down.
+- **Boost:** Enables or disables the boost feature. When enabled, holding the front button temporarily raises the tip to the boost temperature.
+- **Boost temperature:** Defines the temporary temperature increase activated when holding the front button.
- **Sleep temperature:** The temperature the device drops to after a specified period of inactivity (no movement or button presses).
- **Sleep timeout:** The duration of inactivity required before the device enters sleep mode and drops to the sleep temperature.
diff --git a/source/_integrations/ituran.markdown b/source/_integrations/ituran.markdown
index 3e9b635fb88..d99ce3e9b40 100644
--- a/source/_integrations/ituran.markdown
+++ b/source/_integrations/ituran.markdown
@@ -12,6 +12,7 @@ ha_codeowners:
- '@shmuelzon'
ha_domain: ituran
ha_platforms:
+ - binary_sensor
- device_tracker
- sensor
ha_integration_type: hub
@@ -39,6 +40,12 @@ The information is pulled every 5 minutes from the Ituran web service; however,
## Supported functionality
+### Binary sensor
+
+The Ituran {% term integration %} exposes the following binary sensors for each registered vehicle:
+
+- **Charging** - Only for EV's. The charging state of the vehicle
+
### Device tracker
The Ituran {% term integration %} will track the location of each vehicle registered to your account.
@@ -48,10 +55,12 @@ The Ituran {% term integration %} will track the location of each vehicle regist
The Ituran {% term integration %} also exposes the following sensors for each registered vehicle:
- **Address** - The address that corresponds with the vehicle's location, as determined by Ituran
+- **Battery level** - Only for EV's. The battery level (%) of the vehicle
- **Battery voltage** - The measured voltage (V) of the car battery. If not supported by the installation, the value will be set to `-1`
- **Heading** - The direction (0-359°) that the vehicle is pointing to
- **Last update from vehicle** - The time from when the vehicle last published its information to the Ituran cloud
- **Mileage** - The distance (km) the vehicle has traveled
+- **Remaining range** - The distance (km) the vehicle can travel until the battery is depleted
- **Speed** - The current speed (km/h) of the vehicle
## Known limitations
diff --git a/source/_integrations/jellyfin.markdown b/source/_integrations/jellyfin.markdown
index 439852d6149..82324774c6b 100644
--- a/source/_integrations/jellyfin.markdown
+++ b/source/_integrations/jellyfin.markdown
@@ -65,3 +65,126 @@ Password:
Audio Codec:
description: Sets the audio encoding codec to a Jellyfin API supported codec (aac, mp3, vorbis, wma)
{% endconfiguration_basic %}
+
+## Actions
+
+### Action browse media
+
+You can use the `media_player.browse_media` action to step through your Jellyfin library to find media you want to play.
+
+| Data attribute | Description |
+| --------------------- | ----------------------------------------------------------------------- |
+| `entity_id` | `entity_id` of the media player |
+| `media_content_id` | **(optional)** Unique identifier of the content you want to browse into |
+
+To start your browsing you don't set `media_content_id` to browse the root node.
+
+#### Examples:
+```yaml
+action: media_player.browse_media
+target:
+ entity_id: media_player.jellyfin
+data:
+ media_content_id: a656b907eb3a73532e40e44b968d0225
+```
+
+#### Response
+```yaml
+media_player.jellyfin:
+ title: Series
+ media_class: directory
+ media_content_type: None
+ media_content_id: a656b907eb3a73532e40e44b968d0225
+ children_media_class: directory
+ can_play: false
+ can_expand: true
+ can_search: false
+ thumbnail: >-
+ https://jellyfin
+ not_shown: 0
+ children:
+ - title: "Tales of the Jedi"
+ media_class: directory
+ media_content_type: tvshow
+ media_content_id: 34361f3855c9c0ac39b0f7503fe86be0
+ children_media_class: null
+ can_play: false
+ can_expand: true
+ can_search: false
+ thumbnail: >-
+ https://jellyfin
+```
+
+### Action search media
+
+You can use the `media_player.search_media` action to find media you want to play.
+
+| Data attribute | Description |
+| --------------------- | ------------------------------------------------- |
+| `entity_id` | `entity_id` of the media player |
+| `search_query` | The search term |
+
+#### Examples:
+
+```yaml
+action: media_player.search_media
+target:
+ entity_id:
+ - media_player.jellyfin
+data:
+ search_query: star
+```
+#### Response
+```yaml
+media_player.jellyfin:
+ version: 1
+ result:
+ - title: Star Wars
+ media_class: directory
+ media_content_type: Video
+ media_content_id: 895dc4e1066da92847d48f9be28eb77c
+ children_media_class: null
+ can_play: false
+ can_expand: false
+ can_search: false
+ thumbnail: >-
+ https://jellyfin
+ not_shown: 0
+ children: []
+ - title: Star Trek
+ media_class: directory
+ media_content_type: Video
+ media_content_id: 5ae55567cae75c26671a0a6b027bdd5b
+ children_media_class: null
+ can_play: false
+ can_expand: false
+ can_search: false
+ thumbnail: >-
+ https://jellyfin
+ not_shown: 0
+ children: []
+```
+### Action play media
+
+To play media on any player you first need to find the `media_content_id` of the content you want to play, through either [browsing to the media](#action-browse-media) or [searching media](#action-search-media).
+
+| Data attribute | Description |
+| --------------------- | ------------------------------------------------- |
+| `entity_id` | `entity_id` of the media player |
+| `media_content_id` | Unique identifier of the content you want to play |
+| `media_content_type` | `movie` or `tvshow` |
+
+#### Examples:
+
+Play a movie on one of the Jellyfin clients that supports playback.
+
+```yaml
+action: media_player.play_media
+target:
+ entity_id:
+ - media_player.jellyfin
+data:
+ media_content_id: a982a31451450daeda02c89952e6d7cf
+ media_content_type: movie
+```
+
diff --git a/source/_integrations/jewish_calendar.markdown b/source/_integrations/jewish_calendar.markdown
index 97f12db4f95..31988fcdb38 100644
--- a/source/_integrations/jewish_calendar.markdown
+++ b/source/_integrations/jewish_calendar.markdown
@@ -16,32 +16,30 @@ ha_integration_type: integration
ha_config_flow: true
---
-The Jewish Calendar (`jewish_calendar`) {% term integration %} displays various information related to the Jewish Calendar as various sensors.
+The Jewish Calendar {% term integration %} exposes Jewish calendar information through multiple sensors.
{% include integrations/config_flow.md %}
+{% configuration_basic %}
-### Language
+Language:
+ description: The language to be used for textual sensors in Hebrew (א' תשרי תשע"ט) or English characters (1 Tishrei 5779). Valid options are `english` and `hebrew`. Default value is `english`.
-Default: English
-Whether to represent the sensors in Hebrew (א' תשרי תשע"ט) or English characters (1 Tishrei 5779). Valid options are 'english' and 'hebrew'.
+Diaspora:
+ description: Consider the location as diaspora (חוץ לארץ) for calculation of the weekly portion and holidays. By default it will consider the location as Israel (One day Yom Tov), setting it to true will show a second day Yom Tov.
-### Diaspora
+Latitude, Longitude, Time Zone and Elevation:
+ description: Allows you to override the default location information provided by Home Assistant for the calculations.
+{% endconfiguration_basic %}
-Default: False
-Consider the location as diaspora (חוץ לארץ) for calculation of the weekly portion and holidays. By default it will consider the location as Israel (One day Yom Tov), setting it to true will show a second day Yom Tov.
+## Advanced Options
-### Minutes before sunset for candle lighting
+{% configuration_basic %}
+Minutes before sunset for candle lighting:
+ description: How many minutes before sunset is considered candle-lighting time. In Israel, this is usually 20, 30, or 40 minutes depending on your location. Outside of Israel, it's customary to use either 18 or 24. *The default is set to 18 minutes.*
-Default: 18 minutes
-This defines how many minutes before sunset is considered candle-lighting time. In Israel, this is usually 20/30/40 depending on your location. Outside of Israel, you probably want to use 18/24.
-
-### 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 past the time of sunset.
-
-### Latitude, Longitude, Time Zone and Elevation
-
-Allows you to override the default location information provided by Home Assistant for the calculations.
+Minutes after sunset for Havdalah:
+ description: 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 time offset relative to sunset.
+{% endconfiguration_basic %}
## Sensor list
diff --git a/source/_integrations/knx.markdown b/source/_integrations/knx.markdown
index 6d2fe880fb7..3fb38c57f4f 100644
--- a/source/_integrations/knx.markdown
+++ b/source/_integrations/knx.markdown
@@ -126,13 +126,23 @@ Local IP interface:
See [Connection](#connection) on how to get the files or keys needed for this configuration step.
-{% include integrations/option_flow.md %}
+## Reconfiguration
+
+You can change your KNX connection configuration at any time through the integration settings. This is useful when you need to update the Keyring file or switch to a different connection type.
+
+1. Go to {% my integrations icon title="**Settings** > **Devices & services**" %}.
+2. Select **KNX**.
+3. Click the three-dot {% icon "mdi:dots-vertical" %} menu and then select **Reconfigure**.
### Configure KNX interface
Reconfigure your connection settings. See above for more information.
-### Communication settings
+### Import KNX Keyring
+
+Provide a new keyring file to be used by the integration. See [KNX Secure](#knx-secure) on how to get this file.
+
+{% include integrations/option_flow.md %}
{% configuration_basic %}
State updater:
@@ -143,10 +153,6 @@ Telegram history limit:
description: "Number of Telegrams to keep in memory for the KNX panels group monitor."
{% endconfiguration_basic %}
-### Import KNX Keyring
-
-Provide a (new) keyring file to be used by the integration. See [KNX Secure](#knx-secure) on how to get this file.
-
## Basic configuration
In order to make use of the various platforms offered by the KNX integration, you will need to set them up via the KNX panel or add the corresponding configuration yaml to your {% term "`configuration.yaml`" %}. See [Splitting up the configuration](/docs/configuration/splitting_configuration/) if you like to arrange YAML parts in dedicated files.
diff --git a/source/_integrations/lawn_mower.mqtt.markdown b/source/_integrations/lawn_mower.mqtt.markdown
index e75bb881fcc..28ad25c9798 100644
--- a/source/_integrations/lawn_mower.mqtt.markdown
+++ b/source/_integrations/lawn_mower.mqtt.markdown
@@ -12,7 +12,8 @@ The `mqtt` `lawn_mower` platform allows controlling a lawn mower over MQTT.
## Configuration
-To enable MQTT lawn mower in your installation, add the following to your {% term "`configuration.yaml`" %} file:
+To use an MQTT lawn mower in your installation, add the following to your {% term "`configuration.yaml`" %} file.
+{% include integrations/restart_ha_after_config_inclusion.md %}
```yaml
# Example configuration.yaml entry
@@ -22,6 +23,8 @@ mqtt:
name: "Test Lawn Mower"
```
+Alternatively, a more advanced approach is to set it up via [MQTT discovery](/integrations/mqtt/#mqtt-discovery).
+
{% configuration %}
activity_state_topic:
description: The MQTT topic subscribed to receive an update of the activity. Valid activities are `mowing`, `paused`, `docked`, and `error`. Use `value_template` to extract the activity state from a custom payload. When payload `none` is received, the activity state will be reset to `unknown`.
@@ -163,7 +166,7 @@ name:
required: false
type: string
object_id:
- description: Used instead of `name` for automatic generation of `entity_id`
+ description: Used `object_id` instead of `name` for automatic generation of `entity_id`. This only works when the entity is added for the first time. When set, this overrides a user-customized Entity ID in case the entity was deleted and added again.
required: false
type: string
optimistic:
diff --git a/source/_integrations/light.mqtt.markdown b/source/_integrations/light.mqtt.markdown
index 46e87b11641..fab68913a2d 100644
--- a/source/_integrations/light.mqtt.markdown
+++ b/source/_integrations/light.mqtt.markdown
@@ -42,6 +42,9 @@ Optimistic mode can be forced, even if the `state_topic` is available. Try to en
Home Assistant internally assumes that a light's state corresponds to a defined `color_mode`.
The state of MQTT lights with default schema and support for both color and color temperature will set the `color_mode` according to the last received valid color or color temperature. Optionally, a `color_mode_state_topic` can be configured for explicit control of the `color_mode`.
+To use an MQTT basic light in your installation, [add a MQTT device as a subentry](/integrations/mqtt/#configuration), or add the following to your {% term "`configuration.yaml`" %} file.
+{% include integrations/restart_ha_after_config_inclusion.md %}
+
```yaml
# Example configuration.yaml entry
mqtt:
@@ -49,6 +52,8 @@ mqtt:
command_topic: "office/rgb1/light/switch"
```
+Alternatively, a more advanced approach is to set it up via [MQTT discovery](/integrations/mqtt/#mqtt-discovery).
+
{% configuration %}
availability:
description: A list of MQTT topics subscribed to receive availability (online/offline) updates. Must not be used together with `availability_topic`.
@@ -286,7 +291,7 @@ name:
type: string
default: MQTT Light
object_id:
- description: Used instead of `name` for automatic generation of `entity_id`
+ description: Used `object_id` instead of `name` for automatic generation of `entity_id`. This only works when the entity is added for the first time. When set, this overrides a user-customized Entity ID in case the entity was deleted and added again.
required: false
type: string
on_command_type:
@@ -542,6 +547,9 @@ When a state topic is not available, the light will work in optimistic mode. In
Optimistic mode can be forced, even if state topic is available. Try enabling it if the light is operating incorrectly.
+To use an MQTT JSON light in your installation, [add a MQTT device as a subentry](/integrations/mqtt/#configuration), or add the following to your {% term "`configuration.yaml`" %} file.
+{% include integrations/restart_ha_after_config_inclusion.md %}
+
```yaml
# Example configuration.yaml entry
mqtt:
@@ -550,6 +558,8 @@ mqtt:
command_topic: "home/rgb1/set"
```
+Alternatively, a more advanced approach is to set it up via [MQTT discovery](/integrations/mqtt/#mqtt-discovery).
+
{% configuration %}
availability:
description: A list of MQTT topics subscribed to receive availability (online/offline) updates. Must not be used together with `availability_topic`.
@@ -717,7 +727,7 @@ name:
type: string
default: MQTT JSON Light
object_id:
- description: Used instead of `name` for automatic generation of `entity_id`
+ description: Used `object_id` instead of `name` for automatic generation of `entity_id`. This only works when the entity is added for the first time. When set, this overrides a user-customized Entity ID in case the entity was deleted and added again.
required: false
type: string
optimistic:
@@ -948,6 +958,9 @@ When a state topic is not available, the light will work in optimistic mode. In
Optimistic mode can be forced, even if state topic is available. Try enabling it if the light is operating incorrectly.
+To use an MQTT template light in your installation, [add a MQTT device as a subentry](/integrations/mqtt/#configuration), or add the following to your {% term "`configuration.yaml`" %} file.
+{% include integrations/restart_ha_after_config_inclusion.md %}
+
```yaml
# Example configuration.yaml entry
mqtt:
@@ -958,6 +971,8 @@ mqtt:
command_off_template: "off"
```
+Alternatively, a more advanced approach is to set it up via [MQTT discovery](/integrations/mqtt/#mqtt-discovery).
+
{% configuration %}
availability:
description: A list of MQTT topics subscribed to receive availability (online/offline) updates. Must not be used together with `availability_topic`.
@@ -1123,7 +1138,7 @@ name:
type: string
default: MQTT Template Light
object_id:
- description: Used instead of `name` for automatic generation of `entity_id`
+ description: Used `object_id` instead of `name` for automatic generation of `entity_id`. This only works when the entity is added for the first time. When set, this overrides a user-customized Entity ID in case the entity was deleted and added again.
required: false
type: string
optimistic:
diff --git a/source/_integrations/litterrobot.markdown b/source/_integrations/litterrobot.markdown
index 1f0f7458757..244c03cbfe2 100644
--- a/source/_integrations/litterrobot.markdown
+++ b/source/_integrations/litterrobot.markdown
@@ -75,9 +75,10 @@ Before using this integration, you’ll need a Whisker account and a Wi-Fi-enabl
### Pet
-| Entity | Domain | Description |
-| ------ | -------- | ------------- |
-| Weight | `sensor` | Pet's weight. |
+| Entity | Domain | Description |
+| ------------ | -------- | ------------------------------------------------- |
+| Visits today | `sensor` | Pet's daily visits to the Litter-Robot. |
+| Weight | `sensor` | Pet's weight. |
## Actions
diff --git a/source/_integrations/lock.mqtt.markdown b/source/_integrations/lock.mqtt.markdown
index 1611a73e3fe..76a935c61c3 100644
--- a/source/_integrations/lock.mqtt.markdown
+++ b/source/_integrations/lock.mqtt.markdown
@@ -21,7 +21,9 @@ Optimistic mode can be forced, even if state topic is available. Try to enable i
It's mandatory for locks to support `lock` and `unlock`. A lock may optionally support `open`, (e.g. to open the bolt in addition to the latch), in this case, `payload_open` is required in the configuration. If the lock is in optimistic mode, it will change states to `unlocked` when handling the `open` command.
An MQTT lock can also report the intermediate states `unlocking`, `locking` or `jammed` if the motor reports a jammed state.
-To enable MQTT locks in your installation, add the following to your {% term "`configuration.yaml`" %} file:
+
+To use an MQTT lock in your installation, add the following to your {% term "`configuration.yaml`" %} file.
+{% include integrations/restart_ha_after_config_inclusion.md %}
```yaml
# Example configuration.yaml entry
@@ -30,6 +32,8 @@ mqtt:
command_topic: "home/frontdoor/set"
```
+Alternatively, a more advanced approach is to set it up via [MQTT discovery](/integrations/mqtt/#mqtt-discovery).
+
{% configuration %}
availability:
description: A list of MQTT topics subscribed to receive availability (online/offline) updates. Must not be used together with `availability_topic`.
@@ -168,7 +172,7 @@ name:
type: string
default: MQTT Lock
object_id:
- description: Used instead of `name` for automatic generation of `entity_id`
+ description: Used `object_id` instead of `name` for automatic generation of `entity_id`. This only works when the entity is added for the first time. When set, this overrides a user-customized Entity ID in case the entity was deleted and added again.
required: false
type: string
optimistic:
diff --git a/source/_integrations/matter.markdown b/source/_integrations/matter.markdown
index dc99f0c7fe8..d1e0d8007be 100644
--- a/source/_integrations/matter.markdown
+++ b/source/_integrations/matter.markdown
@@ -313,11 +313,11 @@ Follow these steps if you want to remove a device from a particular Matter contr
1. Go to {% my integrations title="**Settings** > **Devices & services**" %} and on the **Matter** integration card, select **Devices**.
2. From the list of devices, select the device you want to remove from a controller.
-3. In the **Device info** section, next to **Share device**, select the three-dot menu. Then, select **Manage fabrics**.
+3. In the **Device info** section, next to **Share device**, select the three dots {% icon "mdi:dots-vertical" %} menu. Then, select **Manage fabrics**.
4. From the list, remove the controller of interest.
- If you want to remove Apple Home, also remove the Apple Keychain entry.

-5. If you want to remove the device from Home Assistant itself, select the three-dot menu and select **Delete**.
+5. If you want to remove the device from Home Assistant itself, select the three dots {% icon "mdi:dots-vertical" %} menu and select **Delete**.
## About Matter device information
diff --git a/source/_integrations/mcp_server.markdown b/source/_integrations/mcp_server.markdown
index 034f5cbeacf..937b44650c5 100644
--- a/source/_integrations/mcp_server.markdown
+++ b/source/_integrations/mcp_server.markdown
@@ -16,7 +16,7 @@ related:
ha_quality_scale: silver
---
-The [Model Context Protocol](https://modelcontextprotocol.io) is an open protocol that standardizes how applications provide context to LLMs. The **Model Context Protocol Server** (MCP) integration enables using Home Assistant to provide context for MCP LLM Client Applications. For example, you can expose your Google Tasks To-do list as a tool for Claude Desktop.
+The [Model Context Protocol](https://modelcontextprotocol.io) is an open protocol that standardizes how applications provide context to LLMs. The **Model Context Protocol Server** (MCP) integration enables using Home Assistant to provide context for MCP LLM Client Applications. For example, you can control your lights from Claude Desktop, or expose your Google Tasks to-do list as a tool.
Controlling Home Assistant is done by providing MCP clients access to the Assist API of Home Assistant. You can control what devices and entities it can access from the {% my voice_assistants title="exposed entities page" %}.
@@ -186,7 +186,6 @@ subset of MCP features:
| Sampling | ❌ |
| Notifications | ❌ |
-Home Assistant does not yet provide built-in tools that can fetch device state.
## Troubleshooting
diff --git a/source/_integrations/mealie.markdown b/source/_integrations/mealie.markdown
index 0e506e58a4a..592d9f703a0 100644
--- a/source/_integrations/mealie.markdown
+++ b/source/_integrations/mealie.markdown
@@ -17,6 +17,7 @@ ha_platforms:
- sensor
- todo
ha_integration_type: service
+ha_quality_scale: silver
---
[Mealie](https://mealie.io/) is an open source, self-hosted recipe manager, meal planner, and shopping list. The Mealie {% term integration %} will fetch and allow you to create and update data held in your Mealie instance.
diff --git a/source/_integrations/media_player.markdown b/source/_integrations/media_player.markdown
index 6e740a75d75..15de81a67b9 100644
--- a/source/_integrations/media_player.markdown
+++ b/source/_integrations/media_player.markdown
@@ -29,7 +29,6 @@ A media player can have the following states:
- **Idle**: The media player is turned on and accepting commands, but currently not playing any media. Possibly at some idle home screen.
- **Playing**: The media player is currently playing media.
- **Paused**: The media player has an active media and is currently paused
-- **Standby**: The media player is in a low power state, accepting commands.
- **Buffering**: The media player is preparing to start playback of media.
- **Unavailable**: The entity is currently unavailable.
- **Unknown**: The state is not yet known.
diff --git a/source/_integrations/miele.markdown b/source/_integrations/miele.markdown
index 7c778df2227..f168b34c18e 100644
--- a/source/_integrations/miele.markdown
+++ b/source/_integrations/miele.markdown
@@ -159,10 +159,10 @@ Climate entities are used to control target temperatures in refrigerators, freez
- **Energy forecast**: Shows the forecast percentage of the maximum energy the program will consume for a given cycle.
- **Water consumption**: Shows the water consumption during the current program cycle. The value will be reset after finishing the program.
- **Water forecast**: Shows the forecast percentage of the maximum water the program will consume for a given cycle.
- - **Temperature**: Represents the current temperature in refrigerators, freezers, and ovens. Entities are created for up to 3 zones depending on the device capabilities.
+ - **Temperature**: Represents the current temperature in refrigerators, freezers, and ovens. Entities are created for up to 3 zones depending on the device capabilities. For zones 2 and 3, the temperature sensor is dynamically created when the appliance is turned on and a valid value is reported.
- **Target temperature**: Shows the set target temperature for ovens and washing machines.
- - **Core temperature**: Shows the core temperature of the food in ovens with an appropriate temperature probe.
- - **Target core temperature**: Shows the set core target temperature for the food in ovens with an appropriate temperature probe.
+ - **Core temperature**: Shows the core temperature of the food in ovens with an appropriate temperature probe. This sensor is dynamically created when the appliance is turned on, a program is started and the temperature probe is connected to the appliance.
+ - **Target core temperature**: Shows the set core target temperature for the food in ovens with an appropriate temperature probe. This sensor is dynamically created when the appliance is turned on, a program is started and the core target temperature is set on the device.
- **Drying step**: Shows the selected drying step on tumble dryers.
- **Elapsed time**: Shows the number of minutes that the current program has been running.
- **Remaining time**: Shows the estimated number of minutes remaining in the current program cycle. This value can fluctuate during a program cycle based on load dirtiness or water‑heating time.
@@ -186,6 +186,26 @@ Climate entities are used to control target temperatures in refrigerators, freez
- **Robot vacuum cleaner**: Miele robot vacuum cleaners can be monitored and controlled to a limited extent. The device can be started, stopped, and paused. The fan speed can also be set.
{% enddetails %}
+## Actions
+
+### Action `miele.set_program`
+
+Set and start a program for applicable appliances. Note that the device must be in a state where it will accept a new program, for example, most washing machines must be in state `on` and many appliances must be set manually to 'MobileStart' or 'MobileControl' in advance. An error message is displayed if the device did not accept the action command.
+The action can be set up by UI in Automations editor. It can also be executed in Developer tools.
+
+| Data attribute | Optional | Description |
+| -------------- | -------- | ----------------------------------------------------------------------------------------------------------------- |
+| `device_id` | no | Select device in GUI mode, then switch to YAML mode to see the device_id. |
+| `program_id` | no | Enter the program_id number. The easiest way to find the number is to use the `get_programs` action from developer tools. It can also be found by fetching a diagnostic download while running the actual program. Use the value from the key `state.programId.value_raw`.|
+
+### Action `miele.get_programs`
+
+Get the list of available programs and associated parameters for applicable appliances. The API will return an empty list if the device doesn't support programs (for example, freezers). Same requirements on device state as described for `set_program` action above.
+
+| Data attribute | Optional | Description |
+| -------------- | -------- | ----------------------------------------------------------------------------------------------------------------- |
+| `device_id` | no | Select the device in GUI mode, then switch to YAML mode to see the device_id. |
+
## Automation examples
Get started with these automation examples
diff --git a/source/_integrations/monzo.markdown b/source/_integrations/monzo.markdown
index 0690f319f7d..5957fe2e817 100644
--- a/source/_integrations/monzo.markdown
+++ b/source/_integrations/monzo.markdown
@@ -41,9 +41,9 @@ The **Monzo** {% term integration %} allows you to connect your Monzo bank accou
### Adding a second account
1. To add a second Monzo account in Home Assistant, repeat the above process for creating an OAuth client.
-2. Then, in Home Assistant, add the new credentials *before* trying to add the new entry.
- - In the top right of **Devices & services** page, select the three dot menu, open **Application Credentials**, and select **Add application credentials**
- - It is recommended to include the person's name in the *Name* field so you can distinguish it later.
+2. Then, in Home Assistant, add the new credentials *before* trying to add the new entry.
+ - In the top right of **Devices & services** page, select the three dots {% icon "mdi:dots-vertical" %} menu, open **Application Credentials**, and select **Add application credentials**
+ - It is recommended to include the person's name in the *Name* field so you can distinguish it later.
3. Once added, you can return to **Devices & services** > **Monzo** > **Add Entry** to proceed with authentication.
## Sensor
diff --git a/source/_integrations/mqtt.markdown b/source/_integrations/mqtt.markdown
index cbe562cff4c..37eef4d3009 100644
--- a/source/_integrations/mqtt.markdown
+++ b/source/_integrations/mqtt.markdown
@@ -173,7 +173,7 @@ Add the MQTT integration, then provide your broker's hostname (or IP address) an
2. Select the MQTT integration.
3. Reconfigure the MQTT broker settings via {% my integrations title="**Settings** > **Devices & services**" %}, click {% icon "mdi:dots-vertical" %} and select **Reconfigure**.
-MQTT subentries can also be reconfigured. Additional entities can be added, or an entity can bve removed from the sub entry. Each MQTT subentry holds one MQTT device. The MQTT device must have at least one entity.
+MQTT subentries can also be reconfigured. Additional entities can be added, or an entity can be removed from the sub entry. Each MQTT subentry holds one MQTT device. The MQTT device must have at least one entity.
{% important %}
If you experience an error message like `Failed to connect due to exception: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed`, then turn on `Advanced options` and set [Broker certificate validation](/integrations/mqtt/#broker-certificate-validation) to `Auto`.
diff --git a/source/_integrations/music_assistant.markdown b/source/_integrations/music_assistant.markdown
index 0f6595d2bd4..31cd6b7decd 100644
--- a/source/_integrations/music_assistant.markdown
+++ b/source/_integrations/music_assistant.markdown
@@ -20,8 +20,10 @@ The **Music Assistant** (MA) {% term integration %} allows you to connect Home A
There is currently support for the following Home Assistant Platforms:
-- [Media player](#media-player)
+- [Media player](#media-player-entities)
- [Button](#favorite-current-song-button)
+
+
All of the Home Assistant [Media Player Control Actions](https://www.home-assistant.io/integrations/media_player/#media-control-actions) are supported.
The `media_content_id` payload for `media_player.play_media` can be any of the following:
@@ -51,7 +53,7 @@ The Music Assistant integration creates media player entities for all players an
### Favorite current song button
-The Music Assistant integration creates a button entity for each player to favorite the current song. Pressing this button (manually or by automation) adds the current song to your Music Assistant favorites. This works for local playing songs and tracks from streaming providers. It also works with remote content such as Spotify Connect, AirPlay, or a radio station, as long as the external source provides an artist and title combination (and optionally the album). Note that the button will be marked as unavailable if there is no content playable that could be favorited.
+The Music Assistant integration creates a button entity for each player to favorite the current song. Pressing this button (manually or by automation) adds the current song to your Music Assistant favorites. This works for songs stored locally as well as for tracks from streaming providers. It also works with remote content such as Spotify Connect, AirPlay, or a radio station, as long as the external source provides an artist and title combination (and optionally the album).
## Actions
diff --git a/source/_integrations/nasweb.markdown b/source/_integrations/nasweb.markdown
index 3b3c9f01bed..c06c375454f 100644
--- a/source/_integrations/nasweb.markdown
+++ b/source/_integrations/nasweb.markdown
@@ -2,6 +2,7 @@
title: NASweb
description: Integrate NASweb devices
ha_category:
+ - Sensor
- Switch
ha_release: '2024.12'
ha_codeowners:
@@ -10,6 +11,7 @@ ha_iot_class: Local Push
ha_domain: nasweb
ha_config_flow: true
ha_platforms:
+ - sensor
- switch
ha_integration_type: hub
---
diff --git a/source/_integrations/nextdns.markdown b/source/_integrations/nextdns.markdown
index cdecebee2db..87f22eb591d 100644
--- a/source/_integrations/nextdns.markdown
+++ b/source/_integrations/nextdns.markdown
@@ -25,3 +25,17 @@ NextDNS is a DNS service that protects from all kinds of security threats, block
To obtain API key go to the NextDNS site >> [Account section](https://my.nextdns.io/account).
{% include integrations/config_flow.md %}
+
+{% configuration_basic %}
+API Key:
+ description: "The API key for your NextDNS account."
+Profile:
+ description: "The NextDNS configuration profile you want to integrate."
+{% endconfiguration_basic %}
+
+## 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/nordpool.markdown b/source/_integrations/nordpool.markdown
index 067b90314b1..54424aaf9b5 100644
--- a/source/_integrations/nordpool.markdown
+++ b/source/_integrations/nordpool.markdown
@@ -164,6 +164,56 @@ data:
{% endraw %}
+### Get price indices for date
+
+The integration can also provide price indices for any date with published prices. Use the "Get price indices for date" action to retrieve pricing information with a custom resolution time.
+
+The areas, currency, and resolution parameters are optional. If omitted, the values configured in the integration will be used and for resolution it will default to 60 minutes.
+
+{% configuration_basic %}
+Nord Pool configuration entry:
+ description: Select the Nord Pool configuration entry to target.
+Date:
+ description: Pick the date to fetch prices for (see note about possible dates below).
+Areas:
+ description: Select one market area to create output for. If omitted it will use the areas from the configuration entry.
+Currency:
+ description: Currency to display prices in. EUR is the base currency in Nord Pool prices. If omitted, it will use the currency from the configuration entry.
+Resolution:
+ description: Resolution time for price indices.
+{% endconfiguration_basic %}
+
+{% note %}
+
+The public API only allows us to see past pricing information for up to 2 months.
+
+Although Nord Pool operates in the CET/CEST timezone, all data is returned in UTC. Depending on how the data is consumed or manipulated, you may need to consider this.
+
+Tomorrow's prices are typically released around 13:00 CET/CEST, and trying to get them before that time will generate an error that needs to be considered in such a case.
+
+{% 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 %}
+
+```yaml
+action: nordpool.get_prices_for_date
+data:
+ config_entry: 1234567890a
+ date: "2024-11-10"
+ areas:
+ - SE3
+ - SE4
+ currency: SEK
+```
+
+{% endraw %}
+
## Examples
A template sensor to add VAT and fixed cost is useful to get the actual energy cost in the energy dashboard.
diff --git a/source/_integrations/notify.markdown b/source/_integrations/notify.markdown
index 7b404c8923e..19ffb61236d 100644
--- a/source/_integrations/notify.markdown
+++ b/source/_integrations/notify.markdown
@@ -75,7 +75,7 @@ To test the entity platform action, select the `notify.send_message` action, and
### Example with the entity platform notify action
-Under {% my developer_services title="**Developer Tools** > **Actions**" %}, select the **Notifications: Send a notification message** action. Select some target entity's using the entity selectors, enter a message and test sending it.
+Under {% my developer_services title="**Developer Tools** > **Actions**" %}, select the **Notifications: Send a notification message** action. Select some target entities using the entity selectors, enter a message and test sending it.
If you switch to view the YAML data under **Developer Tools**, it will appear as below. The same {% term action %} can be chosen in {% term automation %}. The YAML will appear the same:
diff --git a/source/_integrations/notify.mqtt.markdown b/source/_integrations/notify.mqtt.markdown
index b13408aa52a..047f907f258 100644
--- a/source/_integrations/notify.mqtt.markdown
+++ b/source/_integrations/notify.mqtt.markdown
@@ -12,6 +12,12 @@ The **MQTT notify** platform lets you send an MQTT message when the `send_messag
## Configuration
+To use an MQTT notify entity in your installation, [add a MQTT device as a subentry](/integrations/mqtt/#configuration), or add the following to your {% term "`configuration.yaml`" %} file.
+{% include integrations/restart_ha_after_config_inclusion.md %}
+
+To use an MQTT notify entity in your installation, add the following to your {% term "`configuration.yaml`" %} file.
+{% include integrations/restart_ha_after_config_inclusion.md %}
+
```yaml
# Example configuration.yaml entry
mqtt:
@@ -19,6 +25,8 @@ mqtt:
command_topic: "home/living_room/status_screen/notifications"
```
+Alternatively, a more advanced approach is to set it up via [MQTT discovery](/integrations/mqtt/#mqtt-discovery).
+
{% configuration %}
availability:
description: A list of MQTT topics subscribed to receive availability (online/offline) updates. Must not be used together with `availability_topic`.
@@ -153,7 +161,7 @@ name:
type: string
default: MQTT notify
object_id:
- description: Used instead of `name` for automatic generation of `entity_id`
+ description: Used `object_id` instead of `name` for automatic generation of `entity_id`. This only works when the entity is added for the first time. When set, this overrides a user-customized Entity ID in case the entity was deleted and added again.
required: false
type: string
payload_available:
diff --git a/source/_integrations/ntfy.markdown b/source/_integrations/ntfy.markdown
index 2f5ebcb4f9e..e49185ae244 100644
--- a/source/_integrations/ntfy.markdown
+++ b/source/_integrations/ntfy.markdown
@@ -44,7 +44,7 @@ The ntfy integration can be used to send push notifications from automations and
3. **Adding a topic**
- To set up topics for notifications, select the three-dot {% icon "mdi:dots-vertical" %} menu next to the entry of the previously configured ntfy service, then click **{% icon "mdi:plus" %} Add topic**.
+ To set up topics for notifications, select the three dots {% icon "mdi:dots-vertical" %} menu next to the entry of the previously configured ntfy service, then click **{% icon "mdi:plus" %} Add topic**.
You can now choose one of the following options:
diff --git a/source/_integrations/nuki_matter.markdown b/source/_integrations/nuki_matter.markdown
index bdd10cda24b..990aee35b9f 100644
--- a/source/_integrations/nuki_matter.markdown
+++ b/source/_integrations/nuki_matter.markdown
@@ -14,12 +14,16 @@ ha_iot_class: Local Push
ha_integration_type: virtual
ha_iot_standard:
- matter
+works_with:
+ - matter
---
-[Nuki](https://nuki.io) is committed to making sure their products are up-to-date and ready to use in Home Assistant.
+{% include integrations/wwha.md url="https://nuki.io" name="Nuki" %}
-Nuki 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.
+## Supported devices
-{% my add_matter_device badge domain=page.ha_domain %}
+The following devices are supported:
-[Learn more about Matter in Home Assistant.](/integrations/matter/)
+- [Nuki Smart Lock Go](https://nuki.io/en-uk/products/smart-lock-go)
+- [Nuki Smart Lock Pro](https://nuki.io/en-uk/products/smart-lock-pro-5th-gen)
+- [Nuki Smart Lock Ultra](https://nuki.io/en-uk/products/smart-lock-ultra)
diff --git a/source/_integrations/number.markdown b/source/_integrations/number.markdown
index b0cfffc6d3e..4450b475058 100644
--- a/source/_integrations/number.markdown
+++ b/source/_integrations/number.markdown
@@ -39,6 +39,7 @@ In addition, the entity can have the following states:
The following device classes are supported for numbers:
- **None**: Generic number. This is the default and doesn't need to be set.
+- **absolute_humidity**: Absolute humidity in g/m³, mg/m³.
- **apparent_power**: Apparent power in VA.
- **aqi**: Air Quality Index (unitless).
- **area**: Area in m², cm², km², mm², in², ft², yd², mi², ac, ha
diff --git a/source/_integrations/number.mqtt.markdown b/source/_integrations/number.mqtt.markdown
index 8ae647a4b36..820e57f4cba 100644
--- a/source/_integrations/number.mqtt.markdown
+++ b/source/_integrations/number.mqtt.markdown
@@ -12,7 +12,8 @@ The `mqtt` Number platform allows you to integrate devices that might expose con
## Configuration
-To enable MQTT Number in your installation, add the following to your {% term "`configuration.yaml`" %} file:
+To use an MQTT number entity in your installation, add the following to your {% term "`configuration.yaml`" %} file.
+{% include integrations/restart_ha_after_config_inclusion.md %}
```yaml
# Example configuration.yaml entry
@@ -21,6 +22,8 @@ mqtt:
command_topic: my-device/threshold
```
+Alternatively, a more advanced approach is to set it up via [MQTT discovery](/integrations/mqtt/#mqtt-discovery).
+
{% configuration %}
availability:
description: A list of MQTT topics subscribed to receive availability (online/offline) updates. Must not be used together with `availability_topic`.
@@ -165,7 +168,7 @@ name:
required: false
type: string
object_id:
- description: Used instead of `name` for automatic generation of `entity_id`
+ description: Used `object_id` instead of `name` for automatic generation of `entity_id`. This only works when the entity is added for the first time. When set, this overrides a user-customized Entity ID in case the entity was deleted and added again.
required: false
type: string
optimistic:
diff --git a/source/_integrations/octoprint.markdown b/source/_integrations/octoprint.markdown
index 609c83c481e..96906f2c5dd 100644
--- a/source/_integrations/octoprint.markdown
+++ b/source/_integrations/octoprint.markdown
@@ -69,6 +69,8 @@ Supported sensors:
- Estimated Start Time
- Target Bed Temperature
- Target Tool (Nozzle) Temperature
+- Current File Name
+- Current File Size
## Camera
diff --git a/source/_integrations/ollama.markdown b/source/_integrations/ollama.markdown
index 4db4e5914e9..7b355a24a43 100644
--- a/source/_integrations/ollama.markdown
+++ b/source/_integrations/ollama.markdown
@@ -54,7 +54,7 @@ Think before responding:
## Controlling Home Assistant
-If you want to experiment with local LLMs using Home Assistant, we currently recommend using the `llama3.1:8b` model and exposing fewer than 25 entities. Note that smaller models are more likely to make mistakes than larger models.
+If you want to experiment with local LLMs using Home Assistant, we recommend exposing fewer than 25 entities. Note that smaller models are more likely to make mistakes than larger models.
Only models that support [Tools](https://ollama.com/search?c=tools) may control Home Assistant.
diff --git a/source/_integrations/onkyo.markdown b/source/_integrations/onkyo.markdown
index 7726c370804..146a920d60a 100644
--- a/source/_integrations/onkyo.markdown
+++ b/source/_integrations/onkyo.markdown
@@ -32,7 +32,7 @@ Listening modes:
description: List of listening modes supported by the receiver.
{% endconfiguration_basic %}
-The above settings can also be adjusted later. To change **Host** or **Volume Resolution**, select the three-dot menu on the integration entry and select **Reconfigure**.
+The above settings can also be adjusted later. To change **Host** or **Volume Resolution**, select the three dots {% icon "mdi:dots-vertical" %} menu on the integration entry and select **Reconfigure**.
{% include integrations/option_flow.md %}
diff --git a/source/_integrations/open_router.markdown b/source/_integrations/open_router.markdown
new file mode 100644
index 00000000000..612c89d4597
--- /dev/null
+++ b/source/_integrations/open_router.markdown
@@ -0,0 +1,37 @@
+---
+title: OpenRouter
+description: Instructions on how to integrate OpenRouter as a conversation agent
+ha_category:
+ - Voice
+ha_release: 2025.8
+ha_iot_class: Cloud Polling
+ha_config_flow: true
+ha_codeowners:
+ - '@joostlek'
+ha_domain: open_router
+ha_integration_type: service
+ha_platforms:
+ - conversation
+---
+
+The [OpenRouter](https://openrouter.ai/) {% term integration %} allows you to use the OpenRouter API as a conversation agent in Home Assistant.
+
+This integration provides a way to interact with a wide range of AI models available on OpenRouter, while billing is handled by OpenRouter.
+You can even use your own third-party (like OpenAI) API key.
+
+{% include integrations/config_flow.md %}
+
+## Generate an API Key
+
+The API key is used to authenticate requests to OpenRouter. To generate an API key take the following steps:
+
+- Log in to [OpenRouter](https://openrouter.ai/) or sign up for an account.
+- Go to the **API Keys** section in your account settings.
+- To generate a new key, select **Create API Key**.
+- Give the key a name, and be sure to set up billing limits.
+
+## 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
diff --git a/source/_integrations/opower.markdown b/source/_integrations/opower.markdown
index 3f2a9779b7d..fb34295f4dc 100644
--- a/source/_integrations/opower.markdown
+++ b/source/_integrations/opower.markdown
@@ -170,3 +170,10 @@ With the above changes your (**{% my config_energy title="Settings > Dashboards
- Before opening an issue, ensure you can access the energy usage section/dashboard on your utility website and verify that the data is up-to-date there.
- In your energy dashboard in Home Assistant, make sure you use the statistics and not the sensors.
+
+## Removing the integration
+
+{% include integrations/remove_device_service.md %}
+
+If you remove the integration, the statistics are not automatically deleted.
+You can find and delete the statistics in {% my developer_statistics title="**Developer Tools** > **Statistics**"%} and search for "opower".
diff --git a/source/_integrations/osoenergy.markdown b/source/_integrations/osoenergy.markdown
index 027cc68e3d1..bb0132d9473 100644
--- a/source/_integrations/osoenergy.markdown
+++ b/source/_integrations/osoenergy.markdown
@@ -168,6 +168,29 @@ script:
v40_min: 240
```
+### Service `osoenergy.turn_away_mode_on`
+
+You can use the service `osoenergy.turn_away_mode_on` to enable Away Mode for a water heater for a period of time in the range from 1 to 365 days.
+
+| Service data attribute | Optional | Description |
+| ---------------------- | -------- | -------------------------------------------------- |
+| `entity_id` | no | String, name of entity. For example: `water_heater.heater` |
+| `duration_days` | no | Number of days to keep Away Mode active (1-365). |
+
+Example:
+
+```yaml
+# Example script to enable Away Mode for a water heater.
+script:
+ turn_away_mode_on:
+ sequence:
+ - service: osoenergy.turn_away_mode_on
+ target:
+ entity_id: water_heater.heater
+ data:
+ duration_days: 7
+```
+
### Service `osoenergy.turn_off`
You can use the service `osoenergy.turn_off` to turn off the heating on your device for one hour or until the minimum temperature is reached.
@@ -258,6 +281,11 @@ The **OSO Energy** integration exposes OSO Energy data as a sensor. It provides
The OSO Energy water heater integration integrates your OSO Energy devices into Home Assistant.
+The water heater entity offers the following capabilities:
+
+- Adjust target temperature
+- Enable/disable away mode (will activate the "Holiday Mode" of the water heater)
+
It supports the following OSO Energy devices:
- Water Heaters
diff --git a/source/_integrations/pi_hole.markdown b/source/_integrations/pi_hole.markdown
index 9e2ca5ef152..2e20f676f72 100644
--- a/source/_integrations/pi_hole.markdown
+++ b/source/_integrations/pi_hole.markdown
@@ -22,7 +22,7 @@ ha_integration_type: integration
---
The Pi-hole integration allows you to retrieve statistics and interact with a
-[Pi-hole](https://pi-hole.net/) system (version < 6.0).
+[Pi-hole](https://pi-hole.net/) system.
{% include integrations/config_flow.md %}
@@ -30,14 +30,19 @@ During the setup, it will ask for the following:
| Item | Description | Example |
| ---- | ----------- | ------- |
-| `Host` | The IP or domain name to Pi-Hole | 192.168.1.1 |
-| `Port` | Port used to get to the admin page | 80 |
+| `Host` | The IP or domain name to Pi-Hole. | 192.168.1.1 |
+| `Port` | Port used to get to the admin page, typically `80` for `http` connections and `443` for `https` connections. | 80 |
| `Name` | Name to for this Pi-Hole. | Pi-Hole |
-| `Location` | the path to the admin page. | /admin |
+| `Location` | the path to the admin page. In the version 6 API this will be ignored. | /admin |
+| `API Key or App Password` | This can be found in your Pi-hole's **Settings** > **API (expert mode)**. | `585a2fe...` |
+| `Uses an SSL certificate` | Whether your Pi-hole has an Certificate, typically true for `https` connections and false for `http`. | {% icon "openmoji:check-mark" %} |
+| `Verify SSL certificate` | Whether to use verify your Pi-hole's certificate, ignored in Pi-hole API version 5. | {% icon "openmoji:check-mark" %} |
The combined host, port and location should take you to the login page of Pi-Hole. Using the example above, it would be `http://192.168.1.1:80/admin`.
-If your Pi-hole web interface is password protected, an API key will be requested by Home Assistant after submitting the initial details above. You can get the API key by logging into your Pi-Hole and going to _from Settings > API_ and then the **Show API token** button.
+To find your App Password, log into your Pi-Hole and go to **Settings** > **Web Interface/API**. Switch from **Basic** to **Expert** mode, then select **Configure app password**.
+
+Versions of Pi-hole before version 6 (released in Feb 2025) use an API Key if the Pi-hole was password protected, this can be found in _Settings > API Tab_ and clicking **Show API token**
## Actions
@@ -49,8 +54,8 @@ Disables configured Pi-hole(s) for the specified amount of time.
| Data attribute | Required | Type | Description |
| ---------------------- | -------- | -------- | ----------- |
-| `entity_id` | `False` | string | Target switch entity. Use `all` to target all Pi-hole services |
-| `duration` | `True` | timedelta | Time for which Pi-hole should be disabled |
+| `entity_id` | `False` | string | Target switch entity. Use `all` to target all Pi-hole services. |
+| `duration` | `True` | timedelta | Time for which Pi-hole should be disabled. `'0'` will enable blocking indefinitely. |
Example action:
diff --git a/source/_integrations/playstation_network.markdown b/source/_integrations/playstation_network.markdown
index 3b9c9559c0b..9793b39dcd0 100644
--- a/source/_integrations/playstation_network.markdown
+++ b/source/_integrations/playstation_network.markdown
@@ -2,12 +2,14 @@
title: PlayStation Network
description: Instructions on enabling PlayStation Network support for your Home Assistant
ha_category:
+ - Binary sensor
- Media player
- Sensor
ha_release: 2025.7
ha_iot_class: Cloud Polling
ha_domain: playstation_network
ha_platforms:
+ - binary_sensor
- diagnostics
- media_player
- sensor
@@ -67,6 +69,22 @@ The **PlayStation Network** {% term integration %} lets you integrate informatio
- **Last online**: Displays the time when you were last seen online.
- **Online status**: Indicates your current availability on the PlayStation Network. Status options include *Online*, *Offline*, *Away*, and *Online on PS App*.
+### Binary sensors
+
+- **Subscribed to PlayStation Plus**: Indicates if you have an active PlayStation Plus membership.
+
+### Image
+
+- **Avatar**: Displays your current avatar.
+- **Share profile**: Generates a QR code with a shareable link to your profile.
+
+### Notifiers
+
+The **PlayStation Network** integration creates a notify entity for each group you are a member of.
+You can send messages to a group using the `notify.send_message` {% term action %}.
+
+For more information on using notifications, refer to the [Getting Started with Automation](/getting-started/automation/) page.
+
## Data updates
This integration retrieves data from the PlayStation Network every 30 seconds to ensure timely updates.
@@ -88,13 +106,13 @@ The following devices are known to be supported by the integration:
- PlayStation 5
- PlayStation 4
- PlayStation 3
+- PlayStation Vita
- PlayStation PC
## Unsupported devices
The following devices are not supported by the integration:
-- PlayStation Vita
- PlayStation Portable
- Other PlayStation system variants (PlayStation TV) or older systems that do not support the PlayStation Network
diff --git a/source/_integrations/proxmoxve.markdown b/source/_integrations/proxmoxve.markdown
index 3128058d357..0d72e9b3d75 100644
--- a/source/_integrations/proxmoxve.markdown
+++ b/source/_integrations/proxmoxve.markdown
@@ -145,6 +145,10 @@ For the group to access the VMs we need to grant it the auditor role
Creating a dedicated user for Home Assistant, limited to only to the access just created is the most secure method. These instructions use the `pve` realm for the user. This allows a connection, but ensures that the user is not authenticated for SSH connections. If you use the `pve` realm, just be sure to add `realm: pve` to your configuration.
+{% important %}
+The Home Assistant user you create must already exist on the Linux system.
+{% endimportant %}
+
1. Click `Datacenter`
2. Open `Permissions` and click `Users`
3. Click `Add`
diff --git a/source/_integrations/rainmachine.markdown b/source/_integrations/rainmachine.markdown
index e41ed1a0701..7d6da10285b 100644
--- a/source/_integrations/rainmachine.markdown
+++ b/source/_integrations/rainmachine.markdown
@@ -104,7 +104,7 @@ See details of RainMachine API here:
| `minrh` | no | Min Relative Humidity (%RH) |
| `maxrh` | no | Max Relative Humidity (%RH) |
| `condition` | no | Current weather condition code (WNUM). See [here][wnum reference] for options. |
-| `pressure` | no | Barametric Pressure (kPa) |
+| `pressure` | no | Barometric Pressure (kPa) |
| `dewpoint` | no | Dew Point (°C) |
### `rainmachine.restrict_watering`
diff --git a/source/_integrations/recorder.markdown b/source/_integrations/recorder.markdown
index cd6700f640a..0c22657d489 100644
--- a/source/_integrations/recorder.markdown
+++ b/source/_integrations/recorder.markdown
@@ -258,7 +258,7 @@ Perform the action `recorder.enable` to start again saving events and states to
Perform the action `recorder.get_statistics` to retrieve statistics for one or more entities from the recorder database. This action is useful for automations or scripts that need to access historical statistics, such as mean, min, max, or sum values, for supported entities like sensors.
{% note %}
-Statistics are only available for entities that store [Long-term Statistics](https://developers.home-assistant.io/docs/core/entity/sensor/#long-term-statistics). More details can be found in the [2021.8.0 release notes](/blog/2021/08/04/release-20218/#long-term-statistics).
+Statistics are only available for entities that store {% term "Long-term statistics" %}
{% endnote %}
| Data attribute | Optional | Description |
diff --git a/source/_integrations/reolink.markdown b/source/_integrations/reolink.markdown
index 72187f76dd2..49e6b3d43f9 100644
--- a/source/_integrations/reolink.markdown
+++ b/source/_integrations/reolink.markdown
@@ -98,7 +98,7 @@ Dual lens cameras provide additional streams for the second lens.
### Binary sensors
-Depending on the supported features of the camera, binary sensors are added for:
+Depending on the supported features of the camera ([see specifications of the camera model on Reolink.com](#tested-models)), binary sensors are added for:
- Motion detection++
- Visitor++ (Doorbell presses)
@@ -131,7 +131,7 @@ For the **crossline**, **intrusion**, **linger**, **item forgotten**, and **item
### Number entities
-Depending on the supported features of the camera, number entities are added for:
+Depending on the supported features of the camera ([see specifications of the camera model on Reolink.com](#tested-models)), number entities are added for:
- Optical zoom control
- Focus control
@@ -177,6 +177,8 @@ Depending on the supported features of the camera, number entities are added for
- Image saturation*+ (default 128)
- Image sharpness*+ (default 128)
- Image hue*+ (default 128)
+- Pre-recording time*
+- Pre-recording stop battery level*
**Floodlight turn on brightness** controls the brightness of the floodlight when it is turned on internally by the camera (see **Floodlight mode** select entity) or when using the **Floodlight** light entity.
@@ -190,7 +192,7 @@ If the **Auto tracking** switch entity is enabled, and a object disappears from
### Button entities
-Depending on the supported features of the camera, button entities are added for:
+Depending on the supported features of the camera ([see specifications of the camera model on Reolink.com](#tested-models)), button entities are added for:
- PTZ stop
- PTZ left
@@ -219,7 +221,7 @@ Some Reolink PTZ cameras can move at di
### Select entities
-Depending on the supported features of the camera, select entities are added for:
+Depending on the supported features of the camera ([see specifications of the camera model on Reolink.com](#tested-models)), select entities are added for:
- Floodlight mode (Off, Auto, Schedule)
- Day night mode+ (Auto, Color, Black&White)
@@ -242,6 +244,8 @@ Depending on the supported features of the camera, select entities are added for
- Hub visitor ringtone
- Hub scene mode (Off, Disarmed, Home, Away)
- Recording packing time
+- Pre-recording frame rate*
+- Post-recording time
**PTZ preset** positions can be set in the Reolink app/windows/web client, the names of the presets will be loaded into Home Assistant at the start of the integration. When adding new preset positions, please restart the Reolink integration.
@@ -267,7 +271,7 @@ In some camera models, there is a delay of up to 5 seconds between the turn-off
### Switch entities
-Depending on the supported features of the camera, switch entities are added for:
+Depending on the supported features of the camera ([see specifications of the camera model on Reolink.com](#tested-models)), switch entities are added for:
- Infrared lights in night mode
- Record audio
@@ -279,6 +283,7 @@ Depending on the supported features of the camera, switch entities are added for
- Doorbell button sound
- Record
- Manual record+
+- Pre-recording
- Privacy mode+
- Privacy mask
- Push notifications
@@ -313,7 +318,7 @@ Polling the status of the **Hardwired chime enabled** switch can make the hardwi
### Light entities
-Depending on the supported features of the camera, light entities are added for:
+Depending on the supported features of the camera ([see specifications of the camera model on Reolink.com](#tested-models)), light entities are added for:
- Floodlight+
- Status LED
@@ -322,7 +327,7 @@ When the **floodlight** entity is ON always ON, when OFF controlled based on the
### Sensor entities
-Depending on the supported features of the camera, the following sensor entities are added:
+Depending on the supported features of the camera ([see specifications of the camera model on Reolink.com](#tested-models)), the following sensor entities are added:
- PTZ pan position
- PTZ tilt position
@@ -342,7 +347,7 @@ Therefore the update entity in Home Assistant can find and install a firmware up
### Media browser for playback of recordings
-Depending on the support of the camera, the Reolink integration will provide a media browser through which recorded videos of the camera can be accessed.
+If the camera supports recording to an SD card or NVR/Hub ([see specifications of the camera model on Reolink.com](#tested-models)), the Reolink integration will provide a media browser through which recorded videos of the camera can be accessed.
In the sidebar, select "Media" > "Reolink" and select the **camera** of which you want to see recordings. Optionally, select if you want a high or low **resolution** stream and select the recording **date**. Here, all available video files of that day will be shown.
Recordings up to 1 month old can be viewed in Home Assistant.
@@ -363,6 +368,9 @@ 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/)
+- [Elite Floodlight WiFi](https://reolink.com/product/elite-floodlight-wifi/)
+- [FE-P](https://reolink.com/product/fe-p/) (only "fisheye" or "5-in-1" view for the streams, not "dual panoramic", "quad", "cylindrical", "defished", or "hemispheric" view)
+- [FE-W](https://reolink.com/product/fe-w/) (only "fisheye" or "5-in-1" view for the streams, not "dual panoramic", "quad", "cylindrical", "defished", or "hemispheric" view)
- [Lumus Pro](https://reolink.com/product/lumus-pro/)
- RLC-410*
- [RLC-410W](https://reolink.com/product/rlc-410w/)
@@ -401,6 +409,7 @@ The following models have been tested and confirmed to work with a direct link t
- [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 Floodlight ([PoE](https://reolink.com/product/reolink-duo-floodlight-poe/) and [Wi-Fi](https://reolink.com/product/reolink-duo-floodlight-wifi/))
+- [Reolink Elite WiFi](https://reolink.com/product/elite-wifi/)
- [Reolink Floodlight PoE and Wi-Fi*](https://reolink.com/product/reolink-floodlight/)
- [Reolink Home Hub](https://reolink.com/product/reolink-home-hub/)
- [Reolink Home Hub Pro](https://reolink.com/product/reolink-home-hub-pro/)
@@ -433,6 +442,8 @@ The following battery-powered models have been tested and confirmed to work thro
- [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 Altas](https://reolink.com/product/reolink-altas/)
+- [Reolink Altas PT Ultra](https://reolink.com/product/altas-pt-ultra/)
- **[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.
@@ -529,7 +540,7 @@ Removing a camera from a NVR/Home Hub can be done by deleting the device followi
3. Go to {% my integrations title="**Settings** > **Devices & services**" %} and select the integration card.
4. From the list of integration entries, select the **x devices** underneath the integration instance of the NVR/Home Hub from which you want to remove a camera.
5. Select the camera you want to remove from the list of devices
-6. Underneath the **Device info**, select the three-dot {% icon "mdi:dots-vertical" %} menu. Then, select **Delete**.
+6. Underneath the **Device info**, select the three dots {% icon "mdi:dots-vertical" %} menu. Then, select **Delete**.
### Removing a chime
@@ -538,7 +549,7 @@ Removing a chime from a doorbell can be done by deleting the chime following the
1. Go to {% my integrations title="**Settings** > **Devices & services**" %} and select the integration card.
2. From the list of integration entries, select the **x devices** underneath the integration instance of the Doorbell/NVR/Home Hub from which you want to remove a chime.
3. Select the chime you want to remove from the list of devices
-4. Underneath the **Device info**, select the three-dot {% icon "mdi:dots-vertical" %} menu. Then, select **Delete**.
+4. Underneath the **Device info**, select the three dots {% icon "mdi:dots-vertical" %} menu. Then, select **Delete**.
This will also decouple the chime from the doorbell in the Reolink app/client. Therefore, the chime will no longer ring when the doorbell is pressed.
diff --git a/source/_integrations/rest_command.markdown b/source/_integrations/rest_command.markdown
index 7b9ba7bec03..ed207a711ff 100644
--- a/source/_integrations/rest_command.markdown
+++ b/source/_integrations/rest_command.markdown
@@ -100,7 +100,8 @@ rest_command:
### Using REST command Response in automations
-REST commands provide an action response in a dictionary containing `status` (containing the HTTP response code) and `content` containing the response body as text or JSON. This response can be accessed in automations using [`response_variable`](/docs/scripts/perform-actions#use-templates-to-handle-response-data).
+REST commands provide an action response in a dictionary containing `status` (containing the HTTP response code), `content` containing the response body as text or JSON and `headers` containing the response headers.
+This response can be accessed in automations using [`response_variable`](/docs/scripts/perform-actions#use-templates-to-handle-response-data).
The following example shows how the REST command response may be used in automations. In this case, checking the [Traefik API](https://doc.traefik.io/traefik/operations/api/) for errors.
diff --git a/source/_integrations/roomba.markdown b/source/_integrations/roomba.markdown
index 444b20d1cb3..b5b0660beb6 100644
--- a/source/_integrations/roomba.markdown
+++ b/source/_integrations/roomba.markdown
@@ -28,7 +28,7 @@ The **Roomba** {% term integrations %} allows you to control your [iRobot Roomba
{% note %}
-This {% term integrations %} has been tested and confirmed to be working with the iRobot Roomba s9+, Roomba 980, Roomba 960, Roomba 890, and Braava jet m6 models, but should also work fine with any Wi-Fi enabled Roomba or Braava like the 690. For auto-discovery, you will need to initiate a Roomba reboot. For example, by holding the clean button for up to 20 seconds on an i7 or 980. [More information about rebooting your robot](https://homesupport.irobot.com/s/article/9087).
+This {% term integrations %} has been tested and confirmed to be working with the iRobot Roomba s9+, Roomba 980, Roomba 960, Roomba 890, and Braava jet m6 models, but should also work fine with any of the older Wi-Fi enabled Roomba or Braava like the 690. It currently does NOT work with the newer x05 Wi-Fi models, such as Roomba 105, 405, and 505. For auto-discovery, you will need to initiate a Roomba reboot. For example, by holding the clean button for up to 20 seconds on an i7 or 980. [More information about rebooting your robot](https://homesupport.irobot.com/s/article/9087).
{% endnote %}
{% include integrations/config_flow.md %}
diff --git a/source/_integrations/rpi_camera.markdown b/source/_integrations/rpi_camera.markdown
index 23e065608d6..07c1348278f 100644
--- a/source/_integrations/rpi_camera.markdown
+++ b/source/_integrations/rpi_camera.markdown
@@ -15,7 +15,7 @@ related:
ha_quality_scale: legacy
---
-The `rpi_camera` {% term integration %} allows you to integrate the Raspberry Pi camera into Home Assistant. This integration uses the application [`raspistill`](https://www.raspberrypi.org/documentation/usage/camera/raspicam/raspistill.md) to store the image from camera.
+The `rpi_camera` {% term integration %} allows you to integrate the Raspberry Pi camera into Home Assistant. This integration uses the application [`rpicam-still`](https://www.raspberrypi.com/documentation/computers/camera_software.html#rpicam-still) to store the image from camera.
{% important %}
This integration is only available on Home Assistant Core installation types. Unfortunately, it cannot be used with Home Assistant OS, Supervised or Container.
@@ -31,7 +31,7 @@ To enable this camera in your installation, add the following to your {% term "`
rpi_camera:
```
-The whole set of configuration variables is documented here [`Raspberry Pi Camera Module - Raspberry Pi Documentation`](https://www.raspberrypi.org/documentation/raspbian/applications/camera.md).
+The whole set of configuration variables is documented in the [Raspberry Pi documentation of the camera software](https://www.raspberrypi.com/documentation/computers/camera_software.html#rpicam-still).
They are not all wrapped by this `rpi_camera` platform.
{% configuration %}
diff --git a/source/_integrations/russound_rio.markdown b/source/_integrations/russound_rio.markdown
index c2100708f07..1041f6f6db0 100644
--- a/source/_integrations/russound_rio.markdown
+++ b/source/_integrations/russound_rio.markdown
@@ -68,6 +68,45 @@ The integration provides a few entities to configure the device settings. The fo
- Loudness
- Turn on volume
+## Playing media
+
+Russound RIO supports recalling AM/FM and Sirius XM presets using the `media_player.play_media` action.
+
+### Examples:
+
+Russound RIO can recall any stored presets saved on the device for a given source. The preset ID can be between 1-36. Some devices may display presets within banks of six presets total. The preset ID can be calculated by combining the current bank and preset. An example action using a preset for Bank 1, Preset 1:
+
+```yaml
+action: media_player.play_media
+target:
+ entity_id: media_player.russound_deck
+data:
+ media_content_type: "preset"
+ media_content_id: "1"
+```
+
+An example action using a preset for Bank 2, Preset 1:
+
+```yaml
+action: media_player.play_media
+target:
+ entity_id: media_player.russound_deck
+data:
+ media_content_type: "preset"
+ media_content_id: "7"
+```
+
+
+The action will only impact the current source for a zone. If you want to recall a preset on a specific source, you can use the format `source_id,preset_id`. For example, if you want to recall Bank 2, Preset 2 using Source 1:
+```yaml
+action: media_player.play_media
+target:
+ entity_id: media_player.russound_deck
+data:
+ media_content_type: "preset"
+ media_content_id: "1,8"
+```
+
## Troubleshooting
### There is a delay on getting the current status
diff --git a/source/_integrations/sabnzbd.markdown b/source/_integrations/sabnzbd.markdown
index 108720d5301..30f82755169 100644
--- a/source/_integrations/sabnzbd.markdown
+++ b/source/_integrations/sabnzbd.markdown
@@ -20,54 +20,231 @@ ha_integration_type: integration
ha_quality_scale: bronze
---
-The SABnzbd integration will allow you to monitor and control your downloads with [SABnzbd](https://sabnzbd.org) from within Home Assistant and setup automations based on the information.
+The **SABnzbd** {% term integration %} allows you to monitor and control your downloads with [SABnzbd](https://sabnzbd.org) from within Home Assistant and set up automations based on download status and activity.
+
+SABnzbd is a popular newsgroup binary downloader that automates the downloading, verification, repairing, and extraction of files from Usenet. With this integration, you can create smart home automations that respond to your download activity, monitor disk space, and control your downloads remotely.
+
+## Use cases
+
+Here are some practical ways you can use the SABnzbd integration:
+
+- Download completion notifications: Get notified on your phone or smart display when downloads finish.
+- Bandwidth management: Automatically pause downloads during peak internet usage hours or when streaming services are active.
+- Disk space monitoring: Set up alerts when your download drive is running low on space.
+- Smart scheduling: Automatically start downloads during off-peak hours when internet is faster or cheaper.
+- Home theater integration: Pause downloads when movie night starts to ensure smooth streaming.
+- Security monitoring: Get alerted if SABnzbd goes offline or becomes unreachable.
## Prerequisites
You need to grab your API key from your SABnzbd instance in order to configure this integration:
-- Navigate to your SABnzbd.
-- Click "Config", then click "General".
-- Copy your API key under "Security".
+1. Navigate to your SABnzbd web interface.
+2. Select *Config** {% icon "mdi:settings" %}, then **General**.
+3. Copy your API key under **Security**.
{% include integrations/config_flow.md %}
+
{% configuration_basic %}
URL:
description: "The full URL, including port, of your SABnzbd server. Example: `http://localhost:8080` or `http://a02368d7-sabnzbd:8080`, if you are using the add-on."
API key:
- description: "The API key of your SABnzbd server. You can find this in the SABnzbd web interface under **Config cog** (top right) > **General** > **Security**."
+ description: "The API key of your SABnzbd server. You can find this in the SABnzbd web interface under **Config** {% icon "mdi:settings" %} (top right) > **General** > **Security**."
{% endconfiguration_basic %}
-## Sensor
+## Supported functionality
-This integration will create these sensors:
+### Binary sensors
-- `status`: The current status of SABnzbd. (Idle, Paused, etc.)
-- `speed`: The current download speed.
-- `queue`: The total size of the download queue.
-- `left`: The remaining size of the download queue.
-- `disk`: The total disk size at SABnzbd's download location.
-- `disk_free`: The available disk space at SABnzbd's download location.
-- `queue_count`: The number of items in the download queue.
-- `total`: Total GB downloaded.
-- `daily_total`: GB downloaded today. (disabled by default)
-- `weekly_size`: GB downloaded this week. (disabled by default)
-- `monthly_total`: GB downloaded this month. (disabled by default)
+- **Warnings**: Indicates if SABnzbd has any warnings (for example, disk space low, download errors)
-## Binary sensor
+### Buttons
-This integration will create a binary sensor to indicate if SABnzbd has recorded any warnings or errors.
+- **Pause**: Pause all downloads
+- **Resume**: Resume paused downloads
-## Button
+### Sensors
-This integration will create two buttons:
+This integration creates the following sensors to monitor your SABnzbd instance:
-- Pause the download queue.
-- Resume the download queue.
+- **Status**: The current status of SABnzbd (Idle, Downloading, Paused, etc.)
+- **Speed**: The current download speed in MB/s
+- **Queue**: The total size of the download queue in GB
+- **Left**: The remaining size of the download queue in GB
+- **Disk**: The total disk size at SABnzbd's download location in GB
+- **Disk free**: The available disk space at SABnzbd's download location in GB
+- **Queue count**: The number of items in the download queue
+- **Total**: Total GB downloaded since SABnzbd was last restarted
-## Number
+### Numbers
-This integration will create a number entity to set the download queue speed limit in percentage.
+- **Speed limit**: Set the download speed limit (as a percentage of your configured maximum speed).
+
+## Examples
+
+### Basic download monitoring automation
+
+This automation sends a notification when a download completes:
+
+{% raw %}
+```yaml
+- alias: "SABnzbd download complete"
+ triggers:
+ - trigger: state
+ entity_id: sensor.sabnzbd_status
+ to: "Idle"
+ from: "Downloading"
+ actions:
+ - action: notify.mobile_app_your_phone
+ data:
+ title: "Download Complete"
+ message: "SABnzbd has finished downloading and extracting files"
+```
+{% endraw %}
+
+### Disk space warning
+
+Get notified when your download drive is running low on space:
+
+{% raw %}
+```yaml
+- alias: "SABnzbd low disk space warning"
+ triggers:
+ - trigger: numeric_state
+ entity_id: sensor.sabnzbd_disk_free
+ below: 10
+ actions:
+ - action: notify.mobile_app_your_phone
+ data:
+ title: "Low Disk Space"
+ message: "Download drive has less than {{ states('sensor.sabnzbd_disk_free') }} GB free"
+ data:
+ priority: high
+```
+{% endraw %}
+
+### Bandwidth management during streaming
+
+Automatically pause downloads when your media players are active:
+
+{% raw %}
+```yaml
+- alias: "Pause downloads during movie time"
+ triggers:
+ - trigger: state
+ entity_id: media_player.living_room_tv
+ to: "playing"
+ conditions:
+ - condition: state
+ entity_id: sensor.sabnzbd_status
+ state: "Downloading"
+ actions:
+ - action: button.press
+ target:
+ entity_id: button.sabnzbd_pause
+ - action: notify.mobile_app_your_phone
+ data:
+ message: "Downloads paused for movie time"
+
+- alias: "Resume downloads after movie time"
+ triggers:
+ - trigger: state
+ entity_id: media_player.living_room_tv
+ from: "playing"
+ for: "00:05:00"
+ conditions:
+ - condition: state
+ entity_id: sensor.sabnzbd_status
+ state: "Paused"
+ actions:
+ - action: button.press
+ target:
+ entity_id: button.sabnzbd_resume
+```
+{% endraw %}
+
+### Smart scheduling with speed limits
+
+Reduce download speed during peak hours and increase it during off-peak hours:
+
+{% raw %}
+```yaml
+- alias: "SABnzbd peak hours speed limit"
+ triggers:
+ - trigger: time
+ at: "18:00:00"
+ actions:
+ - action: number.set_value
+ target:
+ entity_id: number.sabnzbd_speed_limit
+ data:
+ value: 30
+
+- alias: "SABnzbd off-peak full speed"
+ triggers:
+ - trigger: time
+ at: "23:00:00"
+ actions:
+ - action: number.set_value
+ target:
+ entity_id: number.sabnzbd_speed_limit
+ data:
+ value: 100
+```
+{% endraw %}
+
+### Dashboard card example
+
+Create a comprehensive SABnzbd monitoring card for your dashboard:
+
+{% raw %}
+```yaml
+type: entities
+title: SABnzbd Downloads
+entities:
+ - entity: sensor.sabnzbd_status
+ name: Status
+ - entity: sensor.sabnzbd_speed
+ name: Download speed
+ - entity: sensor.sabnzbd_queue_count
+ name: Items in queue
+ - entity: sensor.sabnzbd_left
+ name: Remaining
+ - type: divider
+ - entity: button.sabnzbd_pause
+ name: Pause downloads
+ - entity: button.sabnzbd_resume
+ name: Resume downloads
+ - type: divider
+ - entity: sensor.sabnzbd_disk_free
+ name: Free space
+ - entity: number.sabnzbd_speed_limit
+ name: Speed limit
+```
+{% endraw %}
+
+## Data updates
+
+The SABnzbd integration {% term polling polls %} data from your SABnzbd server every 30 seconds by default. This provides near real-time updates of download progress, queue status, and system information without putting excessive load on your SABnzbd instance.
+
+## Troubleshooting
+
+### SABnzbd not found or unreachable
+
+1. Verify SABnzbd is running: Check that SABnzbd is running and accessible via its web interface.
+2. Check the URL: Ensure you're using the correct URL format including the port (typically `http://localhost:8080`).
+3. Test API key: Verify your API key is correct by comparing it in the SABnzbd web interface.
+4. Network connectivity: If SABnzbd is on another device, ensure Home Assistant can reach it over the network
+5. Firewall settings: Check that your firewall allows connections to SABnzbd's port.
+6. Enable debug logging: Temporarily enable [debug logging](/docs/configuration/troubleshooting/#debug-logs-and-diagnostics) for the SABnzbd integration to get more detailed error messages.
+
+### SABnzbd add-on specific issues
+
+If you're using the SABnzbd Home Assistant add-on:
+
+1. Use internal URL: Use `http://a02368d7-sabnzbd:8080` instead of `localhost`.
+2. Check add-on logs: Review the SABnzbd add-on logs for any error messages.
+3. Add-on configuration: Ensure the add-on is properly configured and started.
## Removing the integration
diff --git a/source/_integrations/saj.markdown b/source/_integrations/saj.markdown
index 00505541dc9..7b71c2277eb 100644
--- a/source/_integrations/saj.markdown
+++ b/source/_integrations/saj.markdown
@@ -19,7 +19,8 @@ ha_quality_scale: legacy
The `saj` {% term integration %} will poll a [SAJ](https://www.saj-electric.com/) solar inverter and present the values as sensors in Home Assistant.
-This sensor uses the web interface and to use it, you have to be able to connect to the solar inverter from your favorite web browser.
+This sensor uses the web interface and to use it, you have to be able to connect to the solar inverter from your favorite web browser.
+Not all inverters appear to support the local interface.
There is a difference between inverters that are connected via an ethernet module and those connected via a Wi-Fi module.
The Wi-Fi module requires a username and password for authentication where the ethernet module does not.
diff --git a/source/_integrations/scene.mqtt.markdown b/source/_integrations/scene.mqtt.markdown
index ea0b9f5560f..e53179a17b6 100644
--- a/source/_integrations/scene.mqtt.markdown
+++ b/source/_integrations/scene.mqtt.markdown
@@ -12,7 +12,8 @@ The `mqtt` scene platform lets you control your MQTT enabled scenes.
## Configuration
-To enable a MQTT scene in your installation, add the following to your {% term "`configuration.yaml`" %} file:
+To use an MQTT scene entity in your installation, add the following to your {% term "`configuration.yaml`" %} file.
+{% include integrations/restart_ha_after_config_inclusion.md %}
```yaml
# Example configuration.yaml entry
@@ -21,6 +22,8 @@ mqtt:
command_topic: zigbee2mqtt/living_room_group/set
```
+Alternatively, a more advanced approach is to set it up via [MQTT discovery](/integrations/mqtt/#mqtt-discovery).
+
{% configuration %}
availability:
description: A list of MQTT topics subscribed to receive availability (online/offline) updates. Must not be used together with `availability_topic`.
@@ -151,7 +154,7 @@ name:
type: string
default: MQTT Scene
object_id:
- description: Used instead of `name` for automatic generation of `entity_id`
+ description: Used `object_id` instead of `name` for automatic generation of `entity_id`. This only works when the entity is added for the first time. When set, this overrides a user-customized Entity ID in case the entity was deleted and added again.
required: false
type: string
payload_available:
diff --git a/source/_integrations/scrape.markdown b/source/_integrations/scrape.markdown
index fd53b078ccb..068341e29b0 100644
--- a/source/_integrations/scrape.markdown
+++ b/source/_integrations/scrape.markdown
@@ -18,12 +18,23 @@ related:
title: Configuration file
---
-The `scrape` sensor {% term integration %} scrapes information from websites. The sensor loads an HTML page, and allows you to search and extract specific values. As this is not a fully featured web scraper like [scrapy](https://scrapy.org/), it will work with simple web pages and it can be time-consuming to get the right section.
+The **Scrape** sensor {% term integration %} scrapes information from websites. The sensor loads an HTML page, and allows you to search and extract specific values. As this is not a fully featured web scraper like [scrapy](https://scrapy.org/), it will work with simple web pages and it can be time-consuming to get the right section.
-Both UI and YAML setup is supported while YAML provides additional configuration possibilities.
+Both UI and [YAML setup](#yaml-configuration) is supported while YAML provides additional configuration possibilities.
{% include integrations/config_flow.md %}
+{% note %}
+
+Scrape uses configuration subentries for configuring the sensors.
+
+1. Setup the resource configuration once per resource you want to scrape information from.
+2. Create one or multiple configuration subentries per sensor you want to create by scraping the website.
+
+{% endnote %}
+
+## YAML Configuration
+
To enable this {% term integration %} using YAML, add the following lines to your {% term "`configuration.yaml`" %} file.
{% include integrations/restart_ha_after_config_inclusion.md %}
diff --git a/source/_integrations/select.mqtt.markdown b/source/_integrations/select.mqtt.markdown
index 68af312e19c..87f95a57200 100644
--- a/source/_integrations/select.mqtt.markdown
+++ b/source/_integrations/select.mqtt.markdown
@@ -12,7 +12,8 @@ The `mqtt` Select platform allows you to integrate devices that might expose con
## Configuration
-To enable MQTT Select in your installation, add the following to your {% term "`configuration.yaml`" %} file:
+To use an MQTT select entity in your installation, add the following to your {% term "`configuration.yaml`" %} file.
+{% include integrations/restart_ha_after_config_inclusion.md %}
```yaml
# Example configuration.yaml entry
@@ -25,6 +26,8 @@ mqtt:
- "Option 2"
```
+Alternatively, a more advanced approach is to set it up via [MQTT discovery](/integrations/mqtt/#mqtt-discovery).
+
{% configuration %}
availability:
description: A list of MQTT topics subscribed to receive availability (online/offline) updates. Must not be used together with `availability_topic`.
@@ -158,7 +161,7 @@ name:
required: false
type: string
object_id:
- description: Used instead of `name` for automatic generation of `entity_id`
+ description: Used `object_id` instead of `name` for automatic generation of `entity_id`. This only works when the entity is added for the first time. When set, this overrides a user-customized Entity ID in case the entity was deleted and added again.
required: false
type: string
optimistic:
diff --git a/source/_integrations/sensor.markdown b/source/_integrations/sensor.markdown
index 7719f165edd..45c41495169 100644
--- a/source/_integrations/sensor.markdown
+++ b/source/_integrations/sensor.markdown
@@ -48,6 +48,7 @@ Example of various device class icons for sensors.
The following device classes are supported for sensors:
- **None**: Generic sensor. This is the default and doesn't need to be set.
+- **absolute_humidity**: Absolute humidity in g/m³, mg/m³.
- **apparent_power**: Apparent power in VA.
- **aqi**: Air Quality Index (unitless).
- **area**: Area in m², cm², km², mm², in², ft², yd², mi², ac, ha
diff --git a/source/_integrations/sensor.mqtt.markdown b/source/_integrations/sensor.mqtt.markdown
index e2d4639f77d..6ec8d673c5b 100644
--- a/source/_integrations/sensor.mqtt.markdown
+++ b/source/_integrations/sensor.mqtt.markdown
@@ -12,7 +12,9 @@ This `mqtt` sensor platform uses the MQTT message payload as the sensor value. I
## Configuration
-To use your MQTT sensor in your installation, add the following to your {% term "`configuration.yaml`" %} file:
+
+To use an MQTT sensor in your installation, [add a MQTT device as a subentry](/integrations/mqtt/#configuration), or add the following to your {% term "`configuration.yaml`" %} file.
+{% include integrations/restart_ha_after_config_inclusion.md %}
```yaml
# Example configuration.yaml entry
@@ -22,6 +24,8 @@ mqtt:
state_topic: "home/bedroom/temperature"
```
+Alternatively, a more advanced approach is to set it up via [MQTT discovery](/integrations/mqtt/#mqtt-discovery).
+
{% configuration %}
availability:
description: A list of MQTT topics subscribed to receive availability (online/offline) updates. Must not be used together with `availability_topic`.
@@ -135,7 +139,7 @@ entity_picture:
required: false
type: string
expire_after:
- description: If set, it defines the number of seconds after the sensor's state expires, if it's not updated. After expiry, the sensor's state becomes `unavailable`. Default the sensors state never expires.
+ description: If set, it defines the number of seconds after the sensor's state expires if it's not updated. After expiry, the sensor's state becomes `unavailable`. Default the sensors state never expires. By default, the sensor's state never expires. Note that when a sensor's value was sent retained to the MQTT broker, the last value sent will be replayed by the MQTT broker when Home Assistant restarts or is reloaded. As this could cause the sensor to become available with an expired state, it is not recommended to retain the sensor's state payload at the MQTT broker. Home Assistant will store and restore the sensor's state for you and calculate the remaining time to retain the sensor's state before it becomes unavailable.
required: false
type: integer
default: 0
@@ -166,7 +170,7 @@ name:
type: string
default: MQTT Sensor
object_id:
- description: Used instead of `name` for automatic generation of `entity_id`
+ description: Used `object_id` instead of `name` for automatic generation of `entity_id`. This only works when the entity is added for the first time. When set, this overrides a user-customized Entity ID in case the entity was deleted and added again.
required: false
type: string
options:
@@ -201,7 +205,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 `'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`.
+ 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/sensor.rest.markdown b/source/_integrations/sensor.rest.markdown
index db1d6151b83..50ffdaae431 100644
--- a/source/_integrations/sensor.rest.markdown
+++ b/source/_integrations/sensor.rest.markdown
@@ -64,6 +64,11 @@ device_class:
description: Sets the [class of the device](/integrations/sensor#device-class), changing the device state and icon that is displayed on the frontend.
required: false
type: string
+encoding:
+ description: The character encoding to use if none provided in the header of the shared data.
+ required: false
+ type: string
+ default: UTF-8
force_update:
description: Sends update events even if the value hasn't changed. Useful if you want to have meaningful value graphs in history.
required: false
diff --git a/source/_integrations/shelly_zwave.markdown b/source/_integrations/shelly_zwave.markdown
index 041c35bec32..5825c7aeefd 100644
--- a/source/_integrations/shelly_zwave.markdown
+++ b/source/_integrations/shelly_zwave.markdown
@@ -13,6 +13,8 @@ ha_platforms:
- binary_sensor
- sensor
- switch
+works_with:
+ - zwave
ha_iot_standard: zwave
ha_brand: true
---
@@ -25,6 +27,8 @@ ha_brand: true
## Supported devices
-- [Shelly Wave 1PM Mini](https://www.shelly.com/products/shelly-qubino-wave-1pm-mini)
- [Shelly Wave PM Mini](https://www.shelly.com/products/shelly-qubino-wave-pm-mini)
- [Shelly Wave i4](https://www.shelly.com/products/shelly-qubino-wave-i4)
+- [Shelly Wave 1PM Mini](https://www.shelly.com/products/shelly-qubino-wave-1pm-mini)
+- [Shelly Wave 2PM](https://www.shelly.com/products/shelly-qubino-wave-2pm)
+- [Shelly Wave Pro 1PM](https://www.shelly.com/products/shelly-wave-pro-1-pm)
diff --git a/source/_integrations/siren.mqtt.markdown b/source/_integrations/siren.mqtt.markdown
index 730e2b5dead..e403806a692 100644
--- a/source/_integrations/siren.mqtt.markdown
+++ b/source/_integrations/siren.mqtt.markdown
@@ -18,7 +18,8 @@ When a `state_topic` is not available, the siren will work in optimistic mode. I
Optimistic mode can be forced, even if the `state_topic` is available. Try to enable it, if experiencing incorrect operation.
-To enable this siren in your installation, add the following to your {% term "`configuration.yaml`" %} file:
+To use an MQTT siren in your installation, add the following to your {% term "`configuration.yaml`" %} file.
+{% include integrations/restart_ha_after_config_inclusion.md %}
```yaml
# Example configuration.yaml entry
@@ -27,6 +28,8 @@ mqtt:
command_topic: "home/bedroom/siren/set"
```
+Alternatively, a more advanced approach is to set it up via [MQTT discovery](/integrations/mqtt/#mqtt-discovery).
+
{% configuration %}
availability:
description: A list of MQTT topics subscribed to receive availability (online/offline) updates. Must not be used together with `availability_topic`.
@@ -170,7 +173,7 @@ name:
type: string
default: MQTT Siren
object_id:
- description: Used instead of `name` for automatic generation of `entity_id`
+ description: Used `object_id` instead of `name` for automatic generation of `entity_id`. This only works when the entity is added for the first time. When set, this overrides a user-customized Entity ID in case the entity was deleted and added again.
required: false
type: string
optimistic:
diff --git a/source/_integrations/sleepiq.markdown b/source/_integrations/sleepiq.markdown
index 9438b2cd7dc..ba1b52723fe 100644
--- a/source/_integrations/sleepiq.markdown
+++ b/source/_integrations/sleepiq.markdown
@@ -49,6 +49,7 @@ There is currently support available for the following platforms within Home Ass
- Number - View/Set firmness for each side
- Select - Choose a foundation preset position
- Select/Number - Set a foot warmer mode and timeout
+- Select/Number - Set core climate heat/cool modes and timeout
- Sensor - View pressure of each side
- Switch - Toggle Privacy mode
diff --git a/source/_integrations/smartthings.markdown b/source/_integrations/smartthings.markdown
index 93afcad5f56..e4c4845abe9 100644
--- a/source/_integrations/smartthings.markdown
+++ b/source/_integrations/smartthings.markdown
@@ -19,6 +19,7 @@ ha_category:
- Sensor
- Switch
- Update
+ - Vacuum
- Valve
- Water heater
ha_release: 0.87
@@ -42,6 +43,7 @@ ha_platforms:
- sensor
- switch
- update
+ - vacuum
- valve
- water_heater
ha_dhcp: true
@@ -77,6 +79,7 @@ SmartThings represents devices as a set of [capabilities](https://developer.smar
- [Sensor](#sensor)
- [Scene](#scene)
- [Switch](#switch)
+- [Vacuum](#vacuum)
- [Valve](#valve)
- [Water heater](#water-heater)
@@ -273,6 +276,10 @@ It will also create switches for the following capabilities:
The SmartThings update platform lets you update the firmware of devices that have the [`firmwareUpdate`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#firmwareUpdate) capability.
+### Vacuum
+
+The SmartThings Vacuum platform lets you control devices that have the `samsungce.robotCleanerOperatingState` capability, showing the vacuum status and controlling the device.
+
### Valve
The SmartThings Valve platform lets you control devices that have the [`valve`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#valve) capability, showing the valve status and opening and closing.
diff --git a/source/_integrations/smhi.markdown b/source/_integrations/smhi.markdown
index 7d2b23fd2ae..bdaf7e4d4ab 100644
--- a/source/_integrations/smhi.markdown
+++ b/source/_integrations/smhi.markdown
@@ -3,6 +3,7 @@ title: SMHI
description: Instructions on how to integrate SMHI forecasts within Home Assistant.
ha_category:
- Hub
+ - Sensor
- Weather
ha_release: 0.81
ha_iot_class: Cloud Polling
@@ -10,24 +11,46 @@ ha_config_flow: true
ha_domain: smhi
ha_platforms:
- weather
+ - sensor
ha_codeowners:
- '@gjohansson-ST'
ha_integration_type: integration
---
-The `smhi` integration adds support for the [SMHI.se](https://www.smhi.se/) web service as a source for meteorological data for your location.
+The **SMHI** {% term integration %} adds support for the [SMHI.se](https://www.smhi.se/) web service as a source for meteorological data for your location.
-There is currently support for the following device types within Home Assistant:
+{% important %}
-- Weather
+Only locations close to Sweden can be added. See [SMHI.se area](https://opendata.smhi.se/metfcst/pmp/geographic_area) for more details which locations are supported.
+
+{% endimportant %}
{% include integrations/config_flow.md %}
+## Weather
+
+The weather entity provides the current state of the weather as well as detailed forecasts for daily, hourly, and twice-daily weather.
+
+## Sensors
+
+The integration creates entities showing the current state of some additional weather metrics.
+
+| Sensor | Type | Description |
+| ------------------------- | ----------------- | --------------------------------------------------------------------------------------------------------------------------- |
+| Thunder probability | % | Probability of thunder. |
+| Total cloud coverage | % | Mean value of total cloud cover. |
+| Low cloud coverage | % | Mean value of low level cloud cover. |
+| Medium cloud coverage | % | Mean value of medium level cloud cover. |
+| High cloud coverage | % | Mean value of high level cloud cover. |
+| Precipitation category | None | Precipitation category can be any of: No precipitation, Snow, Snow and rain, Rain, Drizzle, Freezing rain, Freezing drizzle. |
+| Frozen precipitation | % | Percent of precipitation in frozen form. |
+
+The cloud sensors are not enabled by default.
The SMHI weather service is free under the Creative Commons Attribution 4.0, international license. Weather data will be pulled once every 30 minutes.
-{% important %}
-Only location close to Sweden can be added. See [SMHI.se area](https://opendata.smhi.se/apidocs/metfcst/geographic_area.html) for more details what locations are supported.
-{% endimportant %}
+Details about the API are available in the [SMHI API documentation](https://opendata.smhi.se/metfcst/pmp/introduction).
-Details about the API are available in the [SMHI API documentation](https://opendata.smhi.se/apidocs/metfcst/index.html).
+## Remove the integration
+
+{% include integrations/remove_device_service.md %}
diff --git a/source/_integrations/ssdp.markdown b/source/_integrations/ssdp.markdown
index 77a1c8c137d..eb186576409 100644
--- a/source/_integrations/ssdp.markdown
+++ b/source/_integrations/ssdp.markdown
@@ -36,30 +36,43 @@ To open the SSDP/UPnP Browser, go to:
The following integrations are automatically discovered by the SSDP integration:
+ - [Arcam FMJ Receivers](/integrations/arcam_fmj/)
+ - [AVM FRITZ!Box Tools](/integrations/fritz/)
- [AVM FRITZ!SmartHome](/integrations/fritzbox/)
+ - [Axis](/integrations/axis/)
- [Belkin WeMo](/integrations/wemo/)
+ - [Control4](/integrations/control4/)
- [deCONZ](/integrations/deconz/)
- - [Denon AVR](/integrations/denonavr/)
+ - [Denon AVR Network Receivers](/integrations/denonavr/)
- [Denon HEOS](/integrations/heos/)
- [DirecTV](/integrations/directv/)
+ - [DLNA Digital Media Renderer](/integrations/dlna_dmr/)
+ - [DLNA Digital Media Server](/integrations/dlna_dms/)
- [Frontier Silicon](/integrations/frontier_silicon/)
- [Huawei LTE](/integrations/huawei_lte/)
- [Hyperion](/integrations/hyperion/)
+ - [Imeon Inverter](/integrations/imeon_inverter/)
+ - [Kaleidescape](/integrations/kaleidescape/)
- [Keenetic NDMS2 Router](/integrations/keenetic_ndms2/)
- [Konnected.io](/integrations/konnected/)
+ - [LaMetric](/integrations/lametric/)
- [LG webOS TV](/integrations/webostv/)
- - [Logitech Harmony](/integrations/harmony/)
- - [Lutron Caséta](/integrations/lutron_caseta/)
+ - [Linn / OpenHome](/integrations/openhome/)
+ - [Logitech Harmony Hub](/integrations/harmony/)
+ - [MusicCast](/integrations/yamaha_musiccast/)
+ - [Nanoleaf](/integrations/nanoleaf/)
+ - [NETGEAR](/integrations/netgear/)
- [OctoPrint](/integrations/octoprint/)
- [Onkyo](/integrations/onkyo/)
- - [Philips Hue](/integrations/hue/)
- [Roku](/integrations/roku/)
+ - [Samsung Smart TV](/integrations/samsungtv/)
- [Samsung SyncThru Printer](/integrations/syncthru/)
- - [Samsung TV](/integrations/samsungtv/)
- [Sonos](/integrations/sonos/)
+ - [Sony Bravia TV](/integrations/braviatv/)
- [Sony Songpal](/integrations/songpal/)
- [Synology DSM](/integrations/synology_dsm/)
- - [Ubiquiti UniFi](/integrations/unifi/)
+ - [UniFi Network](/integrations/unifi/)
+ - [UniFi Protect](/integrations/unifiprotect/)
- [Universal Devices ISY/IoX](/integrations/isy994/)
- - [UPnP](/integrations/upnp/)
- - [WiLight](/integrations/wilight/)
+ - [UPnP/IGD](/integrations/upnp/)
+ - [WiLight](/integrations/wilight/)
\ No newline at end of file
diff --git a/source/_integrations/statistics.markdown b/source/_integrations/statistics.markdown
index cfe89d538ae..48dfdd156ea 100644
--- a/source/_integrations/statistics.markdown
+++ b/source/_integrations/statistics.markdown
@@ -25,7 +25,7 @@ The statistics sensor can use either the numeric sensor or binary_sensor as its
Assuming the [`recorder`](/integrations/recorder/) integration is running, historical sensor data is read from the database on startup and is available immediately after a restart of the platform. If the [`recorder`](/integrations/recorder/) integration is *not* running, it can take some time for the sensor to start reporting data because some characteristics calculations require more than one source sensor value.
{% tip %}
-The statistics integration is different from [Long-term Statistics](https://developers.home-assistant.io/docs/core/entity/sensor/#long-term-statistics). More details on the differences can be found in the [2021.8.0 release notes](/blog/2021/08/04/release-20218/#long-term-statistics).
+The statistics integration is different from {% term "Long-term statistics" %}.
{% endtip %}
The statistics sensor has an internal buffer that stores the values it needs for the computation of the various functions (for example, average step). The sensor is updated whenever new values are added to the buffer or when elements are removed. This is triggered either by a change of the source sensor (which may or may not change its actual value) or by values expiring (in cases where max age was specified). This means that the buffer can hold a sequence of identical values in cases where values are not changing over time.
diff --git a/source/_integrations/stookwijzer.markdown b/source/_integrations/stookwijzer.markdown
index e5198521c60..dba7e3c626a 100644
--- a/source/_integrations/stookwijzer.markdown
+++ b/source/_integrations/stookwijzer.markdown
@@ -30,3 +30,82 @@ Additionally, various sensor entities are provided:
- **Air Quality Index**: Sensor containing the air quality index at the selected location.
{% include integrations/config_flow.md %}
+
+## Action: Get Forecast
+
+The `stookwijzer.get_forecast` action populates [response data](/docs/scripts/perform-actions#use-templates-to-handle-response-data)
+with a mapping of the Stookwijzer advice forecast.
+
+```yaml
+action: stookwijzer.get_forecast
+target:
+ config_entry_id: 12345
+response_variable: stookwijzer_forecast
+```
+
+The response data field contains the `forecast` field.
+`forecast` is a list of forecast advice entries at a given time:
+
+| Response data | Description | Example |
+|--------------|-----------------------------------------------------------------------------|---------------------------|
+| `datetime` | The time of the forecasted advice. | 2025-01-14T14:00:00+00:00 |
+| `advice` | The forecasted advice code. | code_yellow |
+| `final` | Indicator whether the advice is final or can still change. | True |
+
+{% details "Example action response" %}
+
+```yaml
+forecast:
+ - datetime: "2025-02-12T17:00:00+01:00"
+ advice: code_yellow
+ final: True
+ - datetime: "2025-02-12T23:00:00+01:00"
+ advice: code_yellow
+ final: True
+ - datetime: "2025-02-13T05:00:00+01:00"
+ advice: code_orange
+ final: False
+ - datetime: "2025-02-13T11:00:00+01:00"
+ advice: code_red
+ final: False
+```
+
+{% enddetails %}
+
+## Examples
+
+{% details "Example template sensor using get_forecast" %}
+
+Example template sensors containing the Stookwijzer forecast for 6 and 12 hours from now.
+
+{% raw %}
+
+```yaml
+template:
+ - trigger:
+ - trigger: time_pattern
+ hours: /1
+ action:
+ - action: stookwijzer.get_forecast
+ target:
+ entity_id: sensor.stookwijzer_advice_code
+ response_variable: advice_forecast
+ sensor:
+ - name: Stookwijzer forecast 6 hours
+ unique_id: stookwijzer_forecast_6_hours
+ state: "{{ advice_forecast['forecast'][0]['advice'] }}"
+ attributes:
+ final: "{{ advice_forecast['forecast'][0]['final'] }}"
+ timestamp: "{{ advice_forecast['forecast'][0]['datetime'] }}"
+ - name: Stookwijzer forecast 12 hours
+ unique_id: stookwijzer_forecast_12_hours
+ state: "{{ advice_forecast['forecast'][1]['advice'] }}"
+ attributes:
+ final: "{{ advice_forecast['forecast'][1]['final'] }}"
+ timestamp: "{{ advice_forecast['forecast'][1]['datetime'] }}"
+```
+
+{% endraw %}
+
+{% enddetails %}
+
diff --git a/source/_integrations/stream.markdown b/source/_integrations/stream.markdown
index f988ec07dd0..d514d6519bb 100644
--- a/source/_integrations/stream.markdown
+++ b/source/_integrations/stream.markdown
@@ -20,7 +20,16 @@ The stream integration provides a way to proxy live streams through Home Assista
## Configuration
-The `stream` integration is automatically loaded by `default_config` and enabled by the `camera` platforms that support it. If `default_config` is used, no separate {% term "`configuration.yaml`" %} entry is necessary. However, there are some extra options you can configure.
+The `stream` integration is automatically loaded by `default_config` and enabled by camera platforms that support it. If `default_config` is used, no separate {% term "`configuration.yaml`" %} entry is necessary. If `default_config` is **not** used, add the `stream` integration to {% term "`configuration.yaml`" %} to enable it.
+
+Example configuration:
+
+```yaml
+# Enables the stream integration when not using the default configuration
+stream:
+```
+
+Some extra options can be configured. If specified, these options will be used whenever the stream integration is loaded.
{% configuration %}
ll_hls:
@@ -63,6 +72,6 @@ The integration currently supports proxying H.264 and H.265 source streams to th
Note that while H.265 works on Android and iOS, it does not work in many browsers. This is a browser limitation and not a Home Assistant issue. Safari has native H.265 support, and H.265 also works in Edge on Windows when "HEVC Video Extensions" is installed. Chrome versions >= 104 may also work when started with the `--enable-features=PlatformHEVCDecoderSupport` option.
-For testing HEVC browser support, do not rely on the https://www.caniuse.com charts or the https://html5test.com site. They are inaccurate. You can instead use the ["Unprefixed tests" from caniuse.com](https://tests.caniuse.com/?feat=hevc) or the [hls.js demo app with an HEVC HLS stream](https://hls-js.netlify.app/demo/?src=https%3A%2F%2Fbitmovin-a.akamaihd.net%2Fcontent%2Fdataset%2Fmulti-codec%2Fhevc%2Fstream_fmp4.m3u8). The videos there should play if your browser supports H.265.
+For testing HEVC browser support, use the ["Unprefixed tests" from caniuse.com](https://tests.caniuse.com/?feat=hevc) or the [hls.js demo app with an HEVC HLS stream](https://hls-js.netlify.app/demo/?src=https%3A%2F%2Fbitmovin-a.akamaihd.net%2Fcontent%2Fdataset%2Fmulti-codec%2Fhevc%2Fstream_fmp4.m3u8). The videos there should play if your browser supports H.265. Do not rely on the [https://www.caniuse.com](https://www.caniuse.com) charts or the [https://html5test.com](https://html5test.com) site. They are inaccurate.
The `stream` integration supports AAC and MP3 audio. PCM codecs (e.g. G.711/G.723/G.726/G.729) are not supported.
diff --git a/source/_integrations/switch.mqtt.markdown b/source/_integrations/switch.mqtt.markdown
index c8b9b39fa22..b2dec5391fa 100644
--- a/source/_integrations/switch.mqtt.markdown
+++ b/source/_integrations/switch.mqtt.markdown
@@ -18,7 +18,8 @@ When a `state_topic` is not available, the switch will work in optimistic mode.
Optimistic mode can be forced, even if the `state_topic` is available. Try to enable it, if experiencing incorrect switch operation.
-To enable this switch in your installation, add the following to your {% term "`configuration.yaml`" %} file:
+To use an MQTT switch in your installation, [add a MQTT device as a subentry](/integrations/mqtt/#configuration), or add the following to your {% term "`configuration.yaml`" %} file.
+{% include integrations/restart_ha_after_config_inclusion.md %}
```yaml
# Example configuration.yaml entry
@@ -27,6 +28,8 @@ mqtt:
command_topic: "home/bedroom/switch1/set"
```
+Alternatively, a more advanced approach is to set it up via [MQTT discovery](/integrations/mqtt/#mqtt-discovery).
+
{% configuration %}
availability:
description: A list of MQTT topics subscribed to receive availability (online/offline) updates. Must not be used together with `availability_topic`.
@@ -165,7 +168,7 @@ name:
type: string
default: MQTT Switch
object_id:
- description: Used instead of `name` for automatic generation of `entity_id`
+ description: Used `object_id` instead of `name` for automatic generation of `entity_id`. This only works when the entity is added for the first time. When set, this overrides a user-customized Entity ID in case the entity was deleted and added again.
required: false
type: string
optimistic:
diff --git a/source/_integrations/switchbot_cloud.markdown b/source/_integrations/switchbot_cloud.markdown
index d9bc172599c..e612e972cb6 100644
--- a/source/_integrations/switchbot_cloud.markdown
+++ b/source/_integrations/switchbot_cloud.markdown
@@ -4,6 +4,7 @@ description: Instructions on how to set up SwitchBot Devices.
ha_category:
- Binary Sensor
- Button
+ - Fan
- Hub
- Lock
- Plug
@@ -22,6 +23,7 @@ ha_platforms:
- binary_sensor
- button
- climate
+ - fan
- lock
- sensor
- switch
@@ -79,6 +81,10 @@ Please note, device names configured in the SwitchBot app are transferred into H
- [S1](https://www.switchbot.jp/products/switchbot-robot-vacuum-cleaner?&variant=41850919420079)
- [S1 Plus](https://www.switchbot.jp/products/switchbot-robot-vacuum-cleaner)
+### Fans
+
+- [Circulator Fan](https://www.switch-bot.com/products/switchbot-battery-circulator-fan)
+
## Supported functionality
### Plugs and switches
@@ -182,6 +188,17 @@ Features:
- get temperature
- get humidity
+### Fans
+
+#### Battery Circulator Fan/Circulator Fan
+
+Features:
+- turn on
+- turn off
+- set speed, only applicable for [direct mode]
+- set mode
+- get battery, only applicable for [Battery Circulator Fan]
+
### Vacuums
diff --git a/source/_integrations/switchbot_matter.markdown b/source/_integrations/switchbot_matter.markdown
index 86219c6e1f5..ffeb2414f62 100644
--- a/source/_integrations/switchbot_matter.markdown
+++ b/source/_integrations/switchbot_matter.markdown
@@ -31,6 +31,7 @@ SwitchBot also has Matter devices that are certified for use via one of their Ma
### Via a Matter Hub
- [SwitchBot Lock Ultra](https://www.switch-bot.com/products/switchbot-lock_ultra)
+- [SwitchBot Motion Sensor](https://www.switch-bot.com/products/motion-sensor)
- [SwitchBot Meter](https://www.switch-bot.com/products/switchbot-meter)
- [SwitchBot Meter Pro](https://www.switch-bot.com/products/switchbot-meter-pro)
- [SwitchBot Meter Pro CO2](https://www.switch-bot.com/products/switchbot-meter-pro-co2-monitor)
diff --git a/source/_integrations/tado.markdown b/source/_integrations/tado.markdown
index b1631351de0..3432bb963b0 100644
--- a/source/_integrations/tado.markdown
+++ b/source/_integrations/tado.markdown
@@ -6,6 +6,7 @@ ha_category:
- Climate
- Hub
- Presence detection
+ - Select
- Sensor
- Switch
- Water heater
@@ -22,6 +23,7 @@ ha_platforms:
- climate
- device_tracker
- diagnostics
+ - select
- sensor
- switch
- water_heater
@@ -37,9 +39,10 @@ There is currently support for the following device types within Home Assistant:
- Climate - for every Tado zone.
- Water heater - for water heater zones.
- [Presence detection](#presence-detection)
+- Select - for controlling the heating circuit of a zone.
- Sensor - for some additional information of the zones.
- Weather - for information about the current weather at the location of your Tado home.
-- Switch - for controlling child lock on supported devices
+- Switch - for controlling child lock on supported devices.
The Tado thermostats are internet connected thermostats. There exists an unofficial API at [my.tado.com](https://my.tado.com/), which is used by their website and now by this component.
diff --git a/source/_integrations/telegram_bot.markdown b/source/_integrations/telegram_bot.markdown
index 48d5b5accd4..be334db9ef3 100644
--- a/source/_integrations/telegram_bot.markdown
+++ b/source/_integrations/telegram_bot.markdown
@@ -41,8 +41,25 @@ This implementation allows Telegram to push updates directly to your server and
Create your Telegram bot and [retrieve the API key](/integrations/telegram). The `api_key` will be used for adding the bot to Home Assistant during integration setup.
+### Allow Telegram bot to access your Home Assistant files (Optional)
+
+To enable Telegram bot to send local files, you must grant access to it by adding the file's folder to [`allowlist_external_dirs`](/integrations/homeassistant/#allowlist_external_dirs).
+
+Example `configuration.yaml`:
+
+```yaml
+homeassistant:
+ allowlist_external_dirs:
+ - "/media"
+```
+
### Allow Telegram to connect to your Home Assistant (Webhooks platform only)
+{% note %}
+This integration currently does not support self-signed certificates for HTTPS.
+If you are using the *Reverse proxy* or *Direct* method, please ensure that your certificates are signed by a public Certificate Authority (CA).
+{% endnote %}
+
If you plan to use the `Webhooks` platform, you will need to allow Telegram to connect to your Home Assistant using one of the following methods:
#### Home Assistant Cloud
@@ -57,7 +74,16 @@ If your Home Assistant is behind a publicly accessible reverse proxy (for exampl
2. Configure the [HTTP integration](/integrations/http) to allow Home Assistant to accept connections from your reverse proxy:
- Set `use_x_forwarded_for` to `true`.
- Add the IP address of the reverse proxy to `trusted_proxies`.
-
+
+Example `configuration.yaml`:
+
+```yaml
+http:
+ use_x_forwarded_for: true
+ trusted_proxies:
+ - 192.168.0.0/16
+```
+
#### Direct
If your Home Assistant is publicly accessible, do the following:
@@ -82,12 +108,16 @@ Proxy URL:
### Webhooks configuration
+{% note %}
+If you are using Home Assistant Cloud, you must include `127.0.0.1` in the **Trusted networks** field as IP address of incoming requests are not forwarded to your Home Assistant.
+{% endnote %}
+
If you have selected the `Webhooks` Telegram bot type, the integration setup will continue with the webhooks configuration step.
{% configuration_basic %}
URL:
description: Allow to overwrite the external URL from the Home Assistant [configuration](/integrations/homeassistant/#editing-the-general-settings-in-yaml) for different setups (`https://:`).
Trusted networks:
- description: Telegram server access ACL as list.
+ description: Telegram server access ACL as list. Default is `149.154.160.0/20, 91.108.4.0/22`.
{% endconfiguration_basic %}
{% include integrations/option_flow.md %}
@@ -96,7 +126,7 @@ The integration can be configured to use a default parse mode for messages.
{% configuration_basic %}
Parse mode:
- description: Default parser for messages if not explicit in message data, either `markdown` (legacy), `markdownv2` or `html`. Refer to Telegram's [formatting options](https://core.telegram.org/bots/api#formatting-options) for more information.
+ description: Default parser for messages if not explicit in message data, either `markdown` (legacy), `markdownv2`, `html` or `plain_text`. Refer to Telegram's [formatting options](https://core.telegram.org/bots/api#formatting-options) for more information.
{% endconfiguration_basic %}
## Allowlisting chat IDs via Subentries
@@ -107,7 +137,7 @@ To allowlist the chat ID, [retrieve the chat ID](/integrations/telegram#methods-
1. Go to **{% my integrations title="Settings > Devices & services" %}**.
2. Select the Telegram bot integration.
-3. Next to the entry, select the three-dot {% icon "mdi:dots-vertical" %} menu. Then, select **Add allowed chat ID**.
+3. Next to the entry, select the three dots {% icon "mdi:dots-vertical" %} menu. Then, select **Add allowed chat ID**.
{% configuration_basic %}
Chat ID:
@@ -151,9 +181,9 @@ Send a photo.
| `url` | no | Remote path to an image. |
| `file` | no | Local path to an image. |
| `caption` | yes | The title of the image. |
-| `username` | yes | Username for a URL which requires HTTP authentication. |
-| `password` | yes | Password (or bearer token) for a URL which require HTTP authentication. |
-| `authentication` | yes | Define which authentication method to use. Set to `digest` to use HTTP digest authentication, or `bearer_token` for OAuth 2.0 bearer token authentication. Defaults to `basic`. |
+| `authentication` | yes | Define which authentication method to use. Set to `basic` for HTTP basic authentication, `digest` for HTTP digest authentication, or `bearer_token` for OAuth 2.0 bearer token authentication. |
+| `username` | yes | Username for a URL which requires HTTP `basic` or `digest` authentication. |
+| `password` | yes | Password (or bearer token) for a URL that requires authentication. |
| `target` | yes | An array of pre-authorized chat_ids or user_ids to send the notification to. Defaults to the first allowed chat_id. |
| `parse_mode` | yes | Parser for the message text: `markdownv2`, `html`, `markdown` or `plain_text`. |
| `disable_notification` | yes | True/false for send the message silently. iOS users and web users will not receive a notification, Android users will receive a notification with no sound. Defaults to False. |
@@ -177,9 +207,9 @@ Send a video.
| `url` | no | Remote path to a video. |
| `file` | no | Local path to a video. |
| `caption` | yes | The title of the video. |
-| `username` | yes | Username for a URL which requires HTTP authentication. |
-| `password` | yes | Password (or bearer token) for a URL which require HTTP authentication. |
-| `authentication` | yes | Define which authentication method to use. Set to `digest` to use HTTP digest authentication, or `bearer_token` for OAuth 2.0 bearer token authentication. Defaults to `basic`. |
+| `authentication` | yes | Define which authentication method to use. Set to `basic` for HTTP basic authentication, `digest` for HTTP digest authentication, or `bearer_token` for OAuth 2.0 bearer token authentication. |
+| `username` | yes | Username for a URL which requires HTTP `basic` or `digest` authentication. |
+| `password` | yes | Password (or bearer token) for a URL that requires authentication. |
| `target` | yes | An array of pre-authorized chat_ids or user_ids to send the notification to. Defaults to the first allowed chat_id. |
| `parse_mode` | yes | Parser for the message text: `markdownv2`, `html`, `markdown` or `plain_text`. |
| `disable_notification` | yes | True/false to send the message silently. iOS users and web users will not receive a notification. Android users will receive a notification with no sound. Defaults to False. |
@@ -202,9 +232,9 @@ Send an animation.
| `url` | no | Remote path to a GIF or H.264/MPEG-4 AVC video without sound. |
| `file` | no | Local path to a GIF or H.264/MPEG-4 AVC video without sound. |
| `caption` | yes | The title of the animation. |
-| `username` | yes | Username for a URL which requires HTTP authentication. |
-| `password` | yes | Password (or bearer token) for a URL which require HTTP authentication. |
-| `authentication` | yes | Define which authentication method to use. Set to `digest` to use HTTP digest authentication, or `bearer_token` for OAuth 2.0 bearer token authentication. Defaults to `basic`. |
+| `authentication` | yes | Define which authentication method to use. Set to `basic` for HTTP basic authentication, `digest` for HTTP digest authentication, or `bearer_token` for OAuth 2.0 bearer token authentication. |
+| `username` | yes | Username for a URL which requires HTTP `basic` or `digest` authentication. |
+| `password` | yes | Password (or bearer token) for a URL that requires authentication. |
| `target` | yes | An array of pre-authorized chat_ids or user_ids to send the notification to. Defaults to the first allowed chat_id. |
| `parse_mode` | yes | Parser for the message text: `markdownv2`, `html`, `markdown` or `plain_text`. |
| `disable_notification` | yes | True/false to send the message silently. iOS users and web users will not receive a notification. Android users will receive a notification with no sound. Defaults to False. |
@@ -228,9 +258,9 @@ Send a voice message.
| `url` | no | Remote path to a voice message. |
| `file` | no | Local path to a voice message. |
| `caption` | yes | The title of the voice message. |
-| `username` | yes | Username for a URL which requires HTTP authentication. |
-| `password` | yes | Password (or bearer token) for a URL which require HTTP authentication. |
-| `authentication` | yes | Define which authentication method to use. Set to `digest` to use HTTP digest authentication, or `bearer_token` for OAuth 2.0 bearer token authentication. Defaults to `basic`. |
+| `authentication` | yes | Define which authentication method to use. Set to `basic` for HTTP basic authentication, `digest` for HTTP digest authentication, or `bearer_token` for OAuth 2.0 bearer token authentication. |
+| `username` | yes | Username for a URL which requires HTTP `basic` or `digest` authentication. |
+| `password` | yes | Password (or bearer token) for a URL that requires authentication. |
| `target` | yes | An array of pre-authorized chat_ids or user_ids to send the notification to. Defaults to the first allowed chat_id. |
| `disable_notification` | yes | True/false to send the message silently. iOS users and web users will not receive a notification. Android users will receive a notification with no sound. Defaults to False. |
| `verify_ssl` | yes | True/false for checking the SSL certificate of the server for HTTPS URLs. Defaults to True. |
@@ -253,9 +283,9 @@ Send a sticker.
| `url` | no | Remote path to a static .webp or animated .tgs sticker. |
| `file` | no | Local path to a static .webp or animated .tgs sticker. |
| `sticker_id` | no | ID of a sticker that exists on telegram servers. The ID can be found by sending a sticker to your bot and querying the telegram-api method [getUpdates](https://core.telegram.org/bots/api#getting-updates) or by using the [@idstickerbot](https://t.me/idstickerbot) |
-| `username` | yes | Username for a URL which requires HTTP authentication. |
-| `password` | yes | Password (or bearer token) for a URL which require HTTP authentication. |
-| `authentication` | yes | Define which authentication method to use. Set to `digest` to use HTTP digest authentication, or `bearer_token` for OAuth 2.0 bearer token authentication. Defaults to `basic`. |
+| `authentication` | yes | Define which authentication method to use. Set to `basic` for HTTP basic authentication, `digest` for HTTP digest authentication, or `bearer_token` for OAuth 2.0 bearer token authentication. |
+| `username` | yes | Username for a URL which requires HTTP `basic` or `digest` authentication. |
+| `password` | yes | Password (or bearer token) for a URL that requires authentication. |
| `target` | yes | An array of pre-authorized chat_ids or user_ids to send the notification to. Defaults to the first allowed chat_id. |
| `disable_notification` | yes | True/false for send the message silently. iOS users and web users will not receive a notification, Android users will receive a notification with no sound. Defaults to False. |
| `verify_ssl` | yes | True/false for checking the SSL certificate of the server for HTTPS URLs. Defaults to True. |
@@ -278,9 +308,9 @@ Send a document.
| `url` | no | Remote path to a document. |
| `file` | no | Local path to a document. |
| `caption` | yes | The title of the document. |
-| `username` | yes | Username for a URL which requires HTTP authentication. |
-| `password` | yes | Password (or bearer token) for a URL which require HTTP authentication. |
-| `authentication` | yes | Define which authentication method to use. Set to `digest` to use HTTP digest authentication, or `bearer_token` for OAuth 2.0 bearer token authentication. Defaults to `basic`. |
+| `authentication` | yes | Define which authentication method to use. Set to `basic` for HTTP basic authentication, `digest` for HTTP digest authentication, or `bearer_token` for OAuth 2.0 bearer token authentication. |
+| `username` | yes | Username for a URL which requires HTTP `basic` or `digest` authentication. |
+| `password` | yes | Password (or bearer token) for a URL that requires authentication. |
| `target` | yes | An array of pre-authorized chat_ids or user_ids to send the notification to. Defaults to the first allowed chat_id. |
| `parse_mode` | yes | Parser for the message text: `markdownv2`, `html`, `markdown` or `plain_text`. |
| `disable_notification` | yes | True/false for send the message silently. iOS users and web users will not receive a notification, Android users will receive a notification with no sound. Defaults to False. |
diff --git a/source/_integrations/template.markdown b/source/_integrations/template.markdown
index 1f66306c795..16db1fecb25 100644
--- a/source/_integrations/template.markdown
+++ b/source/_integrations/template.markdown
@@ -140,7 +140,7 @@ template:
### Configuration reference
-{% configuration %}
+{% configuration trigger-based %}
actions:
description: Define actions to be executed when the trigger fires (for trigger-based entities only). Optional. Variables set by the action script are available when evaluating entity templates. This can be used to interact with anything using actions, in particular actions with [response data](/docs/scripts/perform-actions#use-templates-to-handle-response-data). [See action documentation](/docs/automation/action).
required: false
@@ -193,7 +193,7 @@ template:
{% endraw %}
-{% configuration %}
+{% configuration device %}
availability:
description: Defines a template to get the `available` state of the entity. If the template either fails to render or returns `True`, `"1"`, `"true"`, `"yes"`, `"on"`, `"enable"`, or a non-zero number, the entity will be `available`. If the template returns any other value, the entity will be `unavailable`. If not configured, the entity will always be `available`. Note that the string comparison is not case sensitive; `"TrUe"` and `"yEs"` are allowed.
required: false
@@ -268,7 +268,7 @@ template:
{% endraw %}
-{% configuration %}
+{% configuration alarm_control_panel %}
alarm_control_panel:
description: List of alarm control panels
required: true
@@ -349,7 +349,7 @@ template:
{% endraw %}
-{% configuration %}
+{% configuration binary-sensor %}
binary_sensor:
description: List of binary sensors
required: true
@@ -536,7 +536,7 @@ template:
{% endraw %}
-{% configuration %}
+{% configuration button %}
button:
description: List of buttons
required: true
@@ -591,7 +591,7 @@ template:
{% endraw %}
-{% configuration %}
+{% configuration cover %}
cover:
description: Characteristics of a cover
type: map
@@ -822,7 +822,7 @@ template:
{% endraw %}
-{% configuration %}
+{% configuration fan %}
fan:
description: List of fans
required: true
@@ -1028,7 +1028,7 @@ template:
{% endraw %}
-{% configuration %}
+{% configuration image %}
image:
description: List of images
required: true
@@ -1055,7 +1055,7 @@ Light entities can only be created from YAML.
```yaml
# Example state-based configuration.yaml entry
-light:
+template:
- light:
- name: "Theater Lights"
level: "{{ state_attr('sensor.theater_brightness', 'lux')|int }}"
@@ -1161,7 +1161,7 @@ template:
{% endraw %}
-{% configuration %}
+{% configuration light %}
light:
description: List of your lights.
required: true
@@ -1421,7 +1421,7 @@ template:
{% endraw %}
-{% configuration %}
+{% configuration lock %}
lock:
description: List of locks
required: true
@@ -1609,7 +1609,7 @@ template:
{% endraw %}
-{% configuration %}
+{% configuration number %}
number:
description: List of numbers
required: true
@@ -1717,7 +1717,7 @@ template:
{% endraw %}
-{% configuration %}
+{% configuration select %}
select:
description: List of selects
required: true
@@ -1737,9 +1737,10 @@ select:
required: true
type: action
state:
- description: Template for the select's current value.
- required: true
+ description: Template for the select's current value. When omitted, the state will be set to the `option` provided by the `select_option` action.
+ required: false
type: template
+ default: optimistic
{% endconfiguration %}
### State based select - Control Day/Night mode of a camera
@@ -1808,7 +1809,7 @@ template:
{% endraw %}
-{% configuration %}
+{% configuration sensor %}
sensor:
description: List of sensors
required: true
@@ -1833,7 +1834,7 @@ sensor:
required: true
type: template
state_class:
- description: "The [state_class](https://developers.home-assistant.io/docs/core/entity/sensor#available-state-classes) of the sensor. This will also display the value based on the user profile Number Format setting and influence the graphical presentation in the history visualization as a continuous value. If you desire to include the sensor in long-term statistics, include this key and assign it the appropriate value"
+ description: "The [state_class](https://developers.home-assistant.io/docs/core/entity/sensor#available-state-classes) of the sensor. This will also display the value based on the user profile Number Format setting and influence the graphical presentation in the history visualization as a continuous value. If you desire to include the sensor in {% term "Long-term statistics" %}, include this key and assign it the appropriate value"
required: false
type: string
default: None
@@ -1971,7 +1972,7 @@ template:
{% endraw %}
-{% configuration %}
+{% configuration switch %}
switch:
description: List of switches
required: true
@@ -2117,7 +2118,7 @@ template:
{% endraw %}
-{% configuration %}
+{% configuration vacuum %}
vacuum:
description: List of vacuum entities
required: true
@@ -2277,7 +2278,7 @@ template:
{% endraw %}
-{% configuration %}
+{% configuration weather %}
weather:
description: List of weather entities
required: true
@@ -2339,6 +2340,10 @@ weather:
description: Unit for temperature_template output. Valid options are °C, °F, and K.
required: false
type: string
+ uv_index_template:
+ description: The current UV index.
+ required: false
+ type: template
visibility_template:
description: The current visibility.
required: false
@@ -2647,7 +2652,7 @@ alarm_control_panel:
{% endraw %}
-{% configuration %}
+{% configuration legacy_alarm_control_panel %}
panels:
description: List of your panels.
required: true
@@ -2731,7 +2736,7 @@ binary_sensor:
{% endraw %}
-{% configuration %}
+{% configuration legacy_binary_sensor %}
sensors:
description: List of your sensors.
required: true
@@ -2818,7 +2823,7 @@ cover:
{% endraw %}
-{% configuration %}
+{% configuration legacy_cover %}
covers:
description: List of your covers.
required: true
@@ -2942,7 +2947,7 @@ fan:
{% endraw %}
-{% configuration %}
+{% configuration legacy_fan %}
fans:
description: List of your fans.
required: true
@@ -3078,7 +3083,7 @@ light:
{% endraw %}
-{% configuration %}
+{% configuration legacy_light %}
lights:
description: List of your lights.
required: true
@@ -3225,7 +3230,7 @@ lock:
{% endraw %}
-{% configuration %}
+{% configuration legacy_lock %}
name:
description: Name to use in the frontend.
required: false
@@ -3292,7 +3297,7 @@ sensor:
{% endraw %}
-{% configuration %}
+{% configuration legacy_sensor %}
sensors:
description: Map of your sensors.
required: true
@@ -3375,7 +3380,7 @@ switch:
{% endraw %}
-{% configuration %}
+{% configuration legacy_switch %}
switches:
description: List of your switches.
required: true
@@ -3437,7 +3442,7 @@ vacuum:
{% endraw %}
-{% configuration %}
+{% configuration legacy_vacuum %}
vacuums:
description: List of your vacuums.
required: true
@@ -3533,7 +3538,7 @@ weather:
{% endraw %}
-{% configuration %}
+{% configuration legacy_weather %}
name:
description: Name to use in the frontend.
required: true
diff --git a/source/_integrations/text.mqtt.markdown b/source/_integrations/text.mqtt.markdown
index 496f067c8e6..981dc742b7f 100644
--- a/source/_integrations/text.mqtt.markdown
+++ b/source/_integrations/text.mqtt.markdown
@@ -12,7 +12,8 @@ The `mqtt` Text platform allows you to integrate devices that show text that can
## Configuration
-To enable MQTT text platform in your installation, add the following to your {% term "`configuration.yaml`" %} file:
+To use an MQTT text entity in your installation, add the following to your {% term "`configuration.yaml`" %} file.
+{% include integrations/restart_ha_after_config_inclusion.md %}
```yaml
# Example configuration.yaml entry
@@ -21,6 +22,8 @@ mqtt:
command_topic: command-topic
```
+Alternatively, a more advanced approach is to set it up via [MQTT discovery](/integrations/mqtt/#mqtt-discovery).
+
{% configuration %}
availability:
description: A list of MQTT topics subscribed to receive availability (online/offline) updates. Must not be used together with `availability_topic`.
@@ -166,7 +169,7 @@ name:
type: string
default: "MQTT Text"
object_id:
- description: Used instead of `name` for automatic generation of `entity_id`
+ description: Used `object_id` instead of `name` for automatic generation of `entity_id`. This only works when the entity is added for the first time. When set, this overrides a user-customized Entity ID in case the entity was deleted and added again.
required: false
type: string
pattern:
diff --git a/source/_integrations/thermopro.markdown b/source/_integrations/thermopro.markdown
index 26e0599a50e..61caddb0866 100644
--- a/source/_integrations/thermopro.markdown
+++ b/source/_integrations/thermopro.markdown
@@ -21,13 +21,13 @@ Integrates [ThermoPro](https://buythermopro.com/) devices into Home Assistant.
## Supported devices
-- [TP359](https://buythermopro.com/product/thermopro-tp59-bluetooth-wireless-thermometer-hygrometer-humidity-monitor/)
-- [TP357](https://buythermopro.com/product/thermopro-tp357-bluetooth-digital-indoor-hygrometer-thermometer/)
-- [TP358](https://buythermopro.com/product/tp358/)
-- [TP393](https://buythermopro.com/product/tp393/)
-- [TP960](https://buythermopro.com/product/tempspike/)
-- [TP962](https://buythermopro.com/twin-tempspike/)
-- [TP970](https://buythermopro.com/product/tempspike-plus-tp970/)
+- [TP357 Bluetooth Indoor Thermometer Hygrometer](https://buythermopro.com/products/tp357-bluetooth-hygrometer-thermometer)
+- [TP358 Bluetooth Indoor Thermometer Hygrometer](https://buythermopro.com/products/tp358-bluetooth-indoor-thermometer-hygrometer)
+- [TP359 Bluetooth Indoor Thermometer Hygrometer](https://buythermopro.com/products/tp359-bluetooth-indoor-hygrometer-thermometer)
+- [TP393 Bluetooth Indoor Thermometer Hygrometer](https://device.report/manual/3622300)
+- [TP960 TempSpike Bluetooth Meat Thermometer](https://buythermopro.com/products/tp960-tempspike-bluetooth-meat-thermometer)
+- [TP962 Twin TempSpike Bluetooth Meat Thermometer](https://buythermopro.com/products/tp962-twin-tempspike-bluetooth-meat-thermometer)
+- [TP970 TempSpike Plus Bluetooth Meat Thermometer](https://buythermopro.com/products/tp970-tempspike-plus-bluetooth-meat-thermometer)
The ThermoPro integration will automatically discover devices once the [Bluetooth](/integrations/bluetooth) integration is enabled and functional.
diff --git a/source/_integrations/todoist.markdown b/source/_integrations/todoist.markdown
index 6aadec01444..6263ca77142 100644
--- a/source/_integrations/todoist.markdown
+++ b/source/_integrations/todoist.markdown
@@ -29,7 +29,7 @@ related:
title: Todoist projects
---
-This platform allows you to connect to your [Todoist projects](https://todoist.com) as [todo](/integrations/todo/) or [calendar](/integrations/calendar/) entities. All tasks get updated roughly every 15 minutes.
+This platform allows you to connect to your [Todoist projects](https://todoist.com) as [todo](/integrations/todo/) or [calendar](/integrations/calendar/) entities. All tasks get updated roughly every minute.
A calendar entity will be `on` if you have a task due in that project. It will be `off` if all the tasks in the project are completed or if the project doesn't have any tasks at all.
@@ -135,7 +135,7 @@ the Todoist UI.
- **location**: Not used.
- - **start_time**: The last time the Todoist integration got updated. Usually within the last 15 minutes.
+ - **start_time**: The last time the Todoist integration got updated. Usually within the last minute.
- **end_time**: When the task is due.
diff --git a/source/_integrations/unifiprotect.markdown b/source/_integrations/unifiprotect.markdown
index 0a264f648fa..0082f72bd10 100644
--- a/source/_integrations/unifiprotect.markdown
+++ b/source/_integrations/unifiprotect.markdown
@@ -47,22 +47,21 @@ The **UniFi Protect** {% term integration %} adds support for retrieving camera
### Hardware support
-This {% term integration %} supports all UniFi OS Consoles that can run UniFi Protect. Currently, this includes:
-
-- Any UniFi Protect Network Video Recorder (**[UNVR](https://store.ui.com/collections/unifi-protect-nvr/products/unvr)** or **[UNVRPRO](https://store.ui.com/collections/unifi-protect-nvr/products/unvr-pro)**)
-- Any UniFi "Dream" device (**[UDMPRO](https://store.ui.com/collections/unifi-network-unifi-os-consoles/products/udm-pro)**, **[UDR](https://store.ui.com/collections/unifi-network-unifi-os-consoles/products/dream-router)**, or **[UDMSE](https://store.ui.com/collections/unifi-network-unifi-os-consoles/products/dream-machine-se)**), _except the base UniFi Dream Machine/UDM_
-- UniFi Cloud Key Gen2 Plus (**[UCKP](https://store.ui.com/collections/unifi-protect-nvr/products/unifi-cloudkey-plus)**) firmware version v2.0.24+
-
-UCKP with Firmware v1.x **do NOT run UniFi OS**, you must upgrade to firmware [`v2.0.24`](https://community.ui.com/releases/UniFi-Cloud-Key-Firmware-2-0-24/b6684f1e-8542-4660-bc0b-74e0634448e8) or newer.
+This {% term integration %} supports all UniFi OS Consoles that can run UniFi Protect.
### Software support
-The **absolute minimum** software version is [`v1.20.0`](https://community.ui.com/releases/UniFi-Protect-Application-1-20-0/d43c0905-3fb4-456b-a7ca-73aa830cb011) for UniFi Protect. If you have an older version, you will get errors trying to set up the integration. However, the general advice is the latest 2 minor versions of UniFi Protect are supported.
+The **absolute minimum** software version is `v6.0.0` for UniFi Protect. If you have an older version, you will get errors trying to set up the integration.
+### No EA support
{% important %}
**Early Access and Release Candidate versions are not supported by Home Assistant.**
Using Early Access Release Candidate versions of UniFi Protect or UniFi OS will likely cause your UniFi Protect {% term integration %} to break unexpectedly. If you choose to opt into either the Early Access or the Release Candidate release channel and anything breaks in Home Assistant, you will need to wait until that version goes to the official Stable Release channel before it is expected to work.
+
+It is OK to open Early Access (EA) issues—it's actually encouraged as an early warning that something might soon break. However, it is very important to understand:
+This does not mean that everything reported from EA channels will be fixed immediately. Please, before opening a new issue, check thoroughly if there is already an open or closed issue or pull request regarding your problem.
+Also, make sure your report is reproducible and provides all necessary context: always include the Protect version, and if your issue concerns specific cameras, please mention the model(s) as well. Whenever possible, also provide relevant excerpts from the error log.
{% endimportant %}
### Local user
@@ -77,11 +76,23 @@ use has.
2. Go to **Admins & Users** from the left hand side menu and select the **Admins** tab or go to [IP address]/admins/ (e.g. _192.168.1.1/admins/_).
3. Click on **+** in the top right corner and select **Add Admin**.
4. Select **Restrict to local access only** and enter a new _username_ and _password_.
-5. Select **Full Management** for the _Protect_ role.
+5. Select **Full Management** for the _Protect_ role.
6. Click **Add** in the bottom right.

+In addition to the username and password, you now need to create an API key for Home Assistant.
+
+1. Log in to your _Local Portal_ on your UniFi OS device with an administrator account.
+2. Go to **Settings** > **Control Plane** > **Integrations**.
+3. Enter a new name for the API key, like "Home Assistant".
+4. Select **Create API Key** and copy the generated key.
+5. Use this API key together with your username and password when setting up the UniFi Protect integration in Home Assistant.
+
+{% tip %}
+Currently, creating an API key requires you to be logged in as an administrator.
+{% endtip %}
+
### Camera streams
The integration uses the RTSP(S) Streams as the Live Feed source, so this needs to be enabled on each camera to ensure
diff --git a/source/_integrations/upc_connect.markdown b/source/_integrations/upc_connect.markdown
index bf6d15e4883..546cdf32e1a 100644
--- a/source/_integrations/upc_connect.markdown
+++ b/source/_integrations/upc_connect.markdown
@@ -18,7 +18,7 @@ related:
ha_quality_scale: legacy
---
-The `upc_connect` {% term integration %} offers presence detection by looking at connected devices to a [Connect Box](https://www.upc.ch/en/internet/learn-about-internet/) from [Liberty Global](https://www.libertyglobal.com) (also known as UPC Cablecom in Switzerland) which is an Internet provider in Switzerland, Austria, the Netherlands (under Ziggo) and Hungary (under Vodafone).
+The `upc_connect` {% term integration %} offers presence detection by looking at connected devices to a [Connect Box](https://www.upc.ch/en/internet/learn-about-internet/) from [Liberty Global](https://www.libertyglobal.com) (also known as UPC Cablecom in Switzerland) which is an Internet provider in Switzerland, Austria, the Netherlands (under Ziggo), Hungary (under Vodafone) and Poland (under PLAY).
{% important %}
This integration works by logging into the router with a password. The router can only have one active session at any time, so if you want to access your router settings then stop Home Assistant first.
diff --git a/source/_integrations/update.mqtt.markdown b/source/_integrations/update.mqtt.markdown
index 17cdfdbbf53..537dbd0fe39 100644
--- a/source/_integrations/update.mqtt.markdown
+++ b/source/_integrations/update.mqtt.markdown
@@ -12,7 +12,8 @@ The `mqtt` Update platform allows you to integrate devices that might expose fir
## Configuration
-To enable MQTT Update in your installation, add the following to your {% term "`configuration.yaml`" %} file:
+To use an MQTT update entity in your installation, add the following to your {% term "`configuration.yaml`" %} file.
+{% include integrations/restart_ha_after_config_inclusion.md %}
```yaml
# Example configuration.yaml entry
@@ -22,6 +23,8 @@ mqtt:
latest_version_topic: topic-latest
```
+Alternatively, a more advanced approach is to set it up via [MQTT discovery](/integrations/mqtt/#mqtt-discovery).
+
{% configuration %}
availability:
description: A list of MQTT topics subscribed to receive availability (online/offline) updates. Must not be used together with `availability_topic`.
@@ -168,7 +171,7 @@ name:
required: false
type: string
object_id:
- description: Used instead of `name` for automatic generation of `entity_id`
+ description: Used `object_id` instead of `name` for automatic generation of `entity_id`. This only works when the entity is added for the first time. When set, this overrides a user-customized Entity ID in case the entity was deleted and added again.
required: false
type: string
payload_install:
diff --git a/source/_integrations/uptime_kuma.markdown b/source/_integrations/uptime_kuma.markdown
new file mode 100644
index 00000000000..5c4a1cc1dc1
--- /dev/null
+++ b/source/_integrations/uptime_kuma.markdown
@@ -0,0 +1,140 @@
+---
+title: Uptime Kuma
+description: Instructions on how to integrate Uptime Kuma with Home Assistant.
+ha_category:
+ - Sensor
+ha_iot_class: Cloud polling
+ha_release: 2025.8
+ha_config_flow: true
+ha_codeowners:
+ - '@tr4nt0r'
+ha_domain: uptime_kuma
+ha_integration_type: integration
+ha_platforms:
+ - sensor
+---
+
+The **Uptime Kuma** {% term integration %} connects Home Assistant with your Uptime Kuma monitoring tool.
+
+## About Uptime Kuma
+
+Uptime Kuma is an open-source, free, and easy-to-use self-hosted monitoring tool used to track the uptime and performance of websites, applications, and other services.
+
+## How you can use this integration
+
+This integration allows you to track the status of your **Uptime Kuma** monitors directly in Home Assistant. You can use these entities in dashboards, automations, and scripts to react to service outages or monitor uptime trends within your smart home setup.
+
+## Prerequisites
+
+To set up the **Uptime Kuma** integration, you need an **API key** and the **URL** of your Uptime Kuma instance (for example: `https://uptime.example.org`).
+
+You can create an API key by logging into your Uptime Kuma instance, navigating to **{% icon "mdi:cog" %} Settings → API Keys** and selecting **{% icon "mdi:plus" %}Add API Key**.
+
+{% include integrations/config_flow.md %}
+
+{% configuration_basic %}
+"URL":
+ description: "Address of your Uptime Kuma instance. Example: `https://uptime.example.com`."
+"Verify SSL certificate":
+ description: "Enable SSL certificate verification for secure connections."
+"API key":
+ description: "An API key to authenticate with your Uptime Kuma instance."
+{% endconfiguration_basic %}
+
+## Sensors
+
+- **Status**: The current status of the monitor. Possible states: *up*, *down*, *pending*, or *maintenance*.
+- **Response time**: Time in milliseconds taken for the last status check.
+- **Certificate expiry**: Number of days remaining before the SSL certificate expires.
+- **Monitor type**: The type of check being performed (e.g., HTTP(s), TCP, ping).
+- **Monitored hostname**: The hostname or IP address being monitored (if applicable).
+- **Monitored port**: The port number used by the monitored service (if applicable).
+- **Monitored URL**: The full URL of the monitored service (if applicable).
+
+## Update
+
+- **Uptime Kuma version**: The update entity indicates if Uptime Kuma is up-to-date or if there is a newer Uptime Kuma version available. For more information on how to update your Uptime Kuma instance, please refer to the [documentation](https://github.com/louislam/uptime-kuma/wiki/%F0%9F%86%99-How-to-Update). If you are using the Uptime Kuma community add-on, you will receive an update notification in Home Assistant as soon as the add-on is updated.
+
+## Automations
+
+Get started with this automation example to create an Uptime Kuma warning light that changes color based on the monitor's status.
+
+{% details "Example YAML configuration" %}
+
+{% raw %}
+
+```yaml
+actions:
+ - choose:
+ - conditions:
+ - condition: state
+ entity_id: sensor.uptime_kuma_my_service
+ state: down
+ sequence:
+ - action: light.turn_on
+ data:
+ color_name: red
+ target:
+ entity_id: light.warning_light
+ - conditions:
+ - condition: state
+ entity_id: sensor.uptime_kuma_my_service
+ state: pending
+ sequence:
+ - action: light.turn_on
+ data:
+ color_name: yellow
+ target:
+ entity_id: light.warning_light
+ - conditions:
+ - condition: state
+ entity_id: sensor.uptime_kuma_my_service
+ state: maintenance
+ sequence:
+ - action: light.turn_on
+ data:
+ color_name: blue
+ target:
+ entity_id: light.warning_light
+ - conditions:
+ - condition: state
+ entity_id: sensor.uptime_kuma_my_service
+ state: up
+ sequence:
+ - action: light.turn_on
+ data:
+ color_name: green
+ target:
+ entity_id:
+ - light.warning_light
+triggers:
+ - trigger: state
+ entity_id:
+ - sensor.uptime_kuma_my_service
+```
+
+{% endraw %}
+
+{% enddetails %}
+
+## Data updates
+
+This integration retrieves data from your Uptime Kuma instance every 30 seconds.
+
+## Known limitations
+
+- Uptime Kuma's API does not expose unique identifiers for monitors. Because of this, using the same name for multiple monitors will cause only one of them to appear in Home Assistant. Renaming a monitor will result in new entities being created, while the old (stale) entities will remain unless manually removed.
+
+## Troubleshooting
+
+The **Uptime Kuma** integration relies on an active internet connection to communicate with your Uptime Kuma instance, unless it's running locally. If you encounter issues, verify that your network connection is stable and your Uptime Kuma instance is accessible.
+
+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:
+
+{% include integrations/remove_device_service.md %}
+
+4. You can now remove the API key used for Home Assistant from Uptime Kuma, unless it is also used by other integrations or applications.
diff --git a/source/_integrations/vacuum.mqtt.markdown b/source/_integrations/vacuum.mqtt.markdown
index fc336fac5b8..9356c1a03d2 100644
--- a/source/_integrations/vacuum.mqtt.markdown
+++ b/source/_integrations/vacuum.mqtt.markdown
@@ -12,7 +12,18 @@ The initial state of the MQTT vacuum {% term entity %} will set to `unknown` and
## Configuration
-MQTT vacuum configuration section.
+To use an MQTT vacuum in your installation, add the following to your {% term "`configuration.yaml`" %} file.
+{% include integrations/restart_ha_after_config_inclusion.md %}
+
+```yaml
+# Example configuration.yaml entry
+mqtt:
+ - vacuum:
+ state_topic: state-topic
+ command_topic: command-topic
+```
+
+Alternatively, a more advanced approach is to set it up via [MQTT discovery](/integrations/mqtt/#mqtt-discovery).
{% configuration %}
availability:
@@ -131,7 +142,7 @@ name:
type: string
default: MQTT Vacuum
object_id:
- description: Used instead of `name` for automatic generation of `entity_id`
+ description: Used `object_id` instead of `name` for automatic generation of `entity_id`. This only works when the entity is added for the first time. When set, this overrides a user-customized Entity ID in case the entity was deleted and added again.
required: false
type: string
payload_available:
diff --git a/source/_integrations/valve.mqtt.markdown b/source/_integrations/valve.mqtt.markdown
index 198418b6407..8f96fbc9251 100644
--- a/source/_integrations/valve.mqtt.markdown
+++ b/source/_integrations/valve.mqtt.markdown
@@ -18,16 +18,19 @@ A valve entity can be have the following states: `open`, `opening`, `closed` or
If a `state_topic` is configured, the entity's state will be updated only after an MQTT message is received on `state_topic` matching `state_open`, `state_opening`, `state_closed` or `state_closing`. Commands configured through `payload_open`, `payload_closed`, and `payload_stop` will be published to `command_topic` to control the valve.
-To use your MQTT valve in your installation, add the following to your {% term "`configuration.yaml`" %} file:
+To use an MQTT valve in your installation, add the following to your {% term "`configuration.yaml`" %} file.
+{% include integrations/restart_ha_after_config_inclusion.md %}
```yaml
# Example configuration.yaml entry for a value that is set by open or close command
mqtt:
- valve:
- command_topic: "home-assistant/valve/set"
- state_topic: "home-assistant/valve/state"
+ command_topic: "heater/valve/set"
+ state_topic: "heater/valve/state"
```
+Alternatively, a more advanced approach is to set it up via [MQTT discovery](/integrations/mqtt/#mqtt-discovery).
+
### Valve controlled by position
If the valve supports reporting its position (the `reports_position` config option is set to `true`), a numeric state is expected on `state_topic`, but state updates are still allowed for `state_opening` and `state_closing`. Also, a JSON format is supported. It allows both `state` and `position` to be reported together.
@@ -46,8 +49,8 @@ To use your MQTT valve in your installation, add the following to your {% term "
# Example configuration.yaml entry for a valve that reports position
mqtt:
- valve:
- command_topic: "home-assistant/valve/set"
- state_topic: "home-assistant/valve/state"
+ command_topic: "heater/valve/set"
+ state_topic: "heater/valve/state"
reports_position: true
```
@@ -311,10 +314,10 @@ mqtt:
- valve:
name: "MQTT valve"
command_template: '{"x": {{ value }} }'
- command_topic: "home-assistant/valve/set"
- state_topic: "home-assistant/valve/state"
+ command_topic: "heater/valve/set"
+ state_topic: "heater/valve/state"
availability:
- - topic: "home-assistant/valve/availability"
+ - topic: "heater/valve/availability"
qos: 0
reports_position: false
retain: true
@@ -345,10 +348,10 @@ mqtt:
- valve:
name: "MQTT valve"
command_template: '{"x": {{ value }} }'
- command_topic: "home-assistant/valve/set"
- state_topic: "home-assistant/valve/state"
+ command_topic: "heater/valve/set"
+ state_topic: "heater/valve/state"
availability:
- - topic: "home-assistant/valve/availability"
+ - topic: "heater/valve/availability"
reports_position: true
value_template: "{{ value_json.x }}"
```
diff --git a/source/_integrations/vegehub.markdown b/source/_integrations/vegehub.markdown
index 40d2dc4f854..35444d117a8 100644
--- a/source/_integrations/vegehub.markdown
+++ b/source/_integrations/vegehub.markdown
@@ -8,33 +8,36 @@ ha_config_flow: true
ha_release: 2025.7
ha_iot_class: Local Push
ha_codeowners:
- - '@ghowevege'
+ - '@thulrus'
+ - '@vegetronix'
ha_domain: vegehub
ha_platforms:
- sensor
- switch
ha_integration_type: integration
related:
- - url: https://www.vegetronix.com/Products/VG-HUB-RELAY/
+ - url: https://vegetronix.com/Products/ha/VG-HUB-RELAY/
title: VegeHub product page
- - url: https://www.vegetronix.com/Products/VG-HUB-GEN2/QuickStart
+ - url: https://vegetronix.com/Products/VG-HUB-GEN2/QuickStart
title: VegeHub Quick Start Guide
- url: https://vegetronix.com/Products/VG-HUB-GEN2/Manual
title: VegeHub Manual
---
-The **Vegetronix VegeHub** {% term integration %} allows you to control your [VegeHub](https://www.vegetronix.com/Products/VG-HUB-RELAY/) and gather data from its attached sensors.
+The **[Vegetronix VegeHub](https://vegetronix.com/Products/ha/VG-HUB-RELAY/)** is a compact, network-connected device designed for agricultural monitoring and control. It supports a variety of environmental sensors—including *soil moisture, soil temperature, light, and more*—making it suitable for use in gardening, landscaping, and precision agriculture. In addition to monitoring, the VegeHub can also control actuators such as *relays, pumps, or water valves*, enabling automation of irrigation and other systems. This {% term integration %} allows Home Assistant to receive real-time data from VegeHub devices and optionally control connected outputs.
+
+The VegeHub is available in the [standard configurations](https://vegetronix.com/Products/ha/VG-HUB-RELAY/), as well as the [sprinkler control variation](https://vegetronix.com/Products/ha/VG-SPRINKLER-4L/). Both are supported by this integration.
There is currently support for the following platforms within Home Assistant:
-- Sensor - Gathers data from sensor channels on a VegeHub and stores the values in Home Assistant
-- Switch - Allows you to view the status of relays on a VegeHub, and control them.
-
-{% include integrations/config_flow.md %}
+- Sensor: Collects data from VegeHub sensor channels.
+- Switch: Shows actuator states and lets you control them.
## Supported devices
-- [Vegetronix VegeHub](https://www.vegetronix.com/Products/VG-HUB-RELAY/) - Firmware **4.0 or later** - All variants
+- [Sensor Based WiFi Controller](https://vegetronix.com/Products/ha/VG-HUB-RELAY/) - Firmware 4.0 or later - All variants
+- [Sensor Based WiFi Data Logger](https://vegetronix.com/Products/ha/VG-HUB/) - Firmware 4.0 or later - All variants
+- [Sensor Based WiFi Sprinkler Valve Controller](https://vegetronix.com/Products/ha/VG-SPRINKLER-4L/) - Firmware 4.0 or later - All variants
## Prerequisites
@@ -46,13 +49,25 @@ Once connected to the network, you should automatically be directed by your devi
It is crucial to change the default access point password. If you don't, anyone can easily access your VegeHub and potentially compromise your Wi-Fi network credentials.
{% endimportant %}
-Select **Apply** and your VegeHub will reset the network connection and try to connect to the credentials you put in.
+Select **Apply**, and your VegeHub will reset its network connection and try to connect using the credentials you entered.
+
+### Connecting to Home Assistant
+
+Home Assistant monitors your network for VegeHub devices. As soon as your VegeHub is connected to the same network as Home Assistant, it should be detected automatically. Go to {% my integrations title="**Settings** > **Devices & services**" %} in Home Assistant, where you should see your VegeHub listed under **Discovered** devices.
+
+{% important %}
+The VegeHub device relies on your Home Assistant instance keeping the same IP address. If your Home Assistant device changes its IP address, the VegeHub will no longer be able to send updates until you update its configuration with the new IP address.
+
+To avoid issues, it is recommended to assign a static IP address or DHCP reservation to your Home Assistant device on your network. If you ever change your Home Assistant device's IP address, remember to update the VegeHub's configuration so it can continue sending updates.
+{% endimportant %}
+
+We recommend adding devices through Home Assistant's automatic detection, but you can also add devices manually if needed.
{% include integrations/config_flow.md %}
### Device settings
-To open the VegeHub's device settings interface on their website, go to {% my integrations title="Settings > Devices & services" %}, and on the integration card, select 1 device to open the device page. Under Device info, select Visit to open the website with the settings.
+To open the VegeHub settings page, navigate to {% my integrations title="**Settings** > **Devices & services**" %}, choose the VegeHub device card, and under **Device info** select **Visit**.
## Power management
diff --git a/source/_integrations/velux.markdown b/source/_integrations/velux.markdown
index 2102cbd66ec..af533543cbf 100644
--- a/source/_integrations/velux.markdown
+++ b/source/_integrations/velux.markdown
@@ -13,6 +13,7 @@ ha_codeowners:
- '@pawlizio'
ha_domain: velux
ha_platforms:
+ - binary_sensor
- cover
- light
- scene
@@ -26,10 +27,13 @@ At least firmware version > 2.0.0.0 is required on the KLF 200 device. The firmw
There is currently support for the following device types within Home Assistant:
+- Binary sensor (reports rain detection for windows that support it)
- Cover
- Light
- Scene
+Rain sensors of supported windows do not report automatically and must be polled every 5 minutes. For this reason, they are disabled by default, because polling uses more radio bandwidth and battery power than simply reporting changed window positions.
+
{% include integrations/config_flow.md %}
During configuration, you will be asked for a hostname and password:
diff --git a/source/_integrations/volvo.markdown b/source/_integrations/volvo.markdown
new file mode 100644
index 00000000000..920b71b629e
--- /dev/null
+++ b/source/_integrations/volvo.markdown
@@ -0,0 +1,153 @@
+---
+title: Volvo
+description: Instructions on setting up Volvo within Home Assistant.
+ha_release: 2025.8
+ha_iot_class: Cloud Polling
+ha_codeowners:
+ - '@thomasddn'
+ha_domain: volvo
+ha_integration_type: integration
+ha_config_flow: true
+ha_category:
+ - Sensor
+ha_platforms:
+ - sensor
+ha_quality_scale: silver
+related:
+ - url: https://developer.volvocars.com/
+ title: Volvo developers portal
+---
+
+The **Volvo** {% term integration %} is used to integrate your [Volvo](https://www.volvocars.com/) vehicle.
+
+## Supported vehicles
+
+- Car models starting from model year 2010. Features available depend on model and year.
+- Cars located in Europe, Middle East, Africa, US, Canada, and Latin America regions. Or view the [full list of countries](https://developer.volvocars.com/terms-and-conditions/apis-supported-locations/).
+
+## Prerequisites
+
+1. Head over to [Volvo's developer portal](https://developer.volvocars.com/).
+2. Make an account.
+3. Go to the [API applications page](https://developer.volvocars.com/account/#your-api-applications).
+4. Create an **API application** and give it a meaningful name.
+
+It's recommended to add an API application per vehicle you want to add. There is a maximum on the number of requests that can be made per API key per day.
+
+{% include integrations/config_flow.md %}
+
+{% configuration_basic %}
+API key:
+ description: "Enter the API key obtained in the prerequisites steps."
+VIN:
+ description: "If you have more than one car under this account, then you can select the Vehicle Identification Number of the vehicle you wish to add."
+{% endconfiguration_basic %}
+
+## Supported functionality
+
+The **Volvo** integration provides the following entities.
+
+### All engine types
+
+#### Sensors
+
+- **Car connection**: Connectivity of the car
+- **Distance to service**: Remaining distance until the next service maintenance
+- **Odometer**: Odometer
+- **Time to engine service**: Remaining engine-hours until the next service maintenance
+- **Time to service**: Remaining time until the next service maintenance
+- **Trip automatic average speed**: Average speed on the automatic trip meter
+- **Trip automatic distance**: Total distance on the automatic trip meter
+- **Trip manual average speed**: Average speed on the manual trip meter
+- **Trip manual distance**: Total distance on the manual trip meter
+
+### Battery-only and plug-in hybrid
+
+#### Sensors
+
+- **Average energy consumption since charge**: Average energy consumption since the last charge of the battery
+- **Battery**: Current state of charge of the battery
+- **Battery capacity**: Total capacity of the battery
+- **Distance to empty battery**: Electric range
+
+#### Sensors for specific models
+
+Go to Volvo's developer portal to view [the list of supported models](https://developer.volvocars.com/apis/energy/v1/overview/#availability).
+
+- **Charging connection status**: Charging connection status
+- **Charging limit**: Charging limit configured in the car
+- **Charging power**: Current charging power
+- **Charging power status**: Indication if power is being provided
+- **Charging status**: Indication if the car is charging or not
+- **Charging type**: AC or DC
+- **Estimated charging time**: Estimated charging time to reach the target battery charge level
+- **Trip automatic average energy consumption**: Average energy consumption on the automatic trip meter
+- **Target battery charge level**: Target battery charge level configured in the car
+- **Trip manual average energy consumption**: Average energy consumption on the manual trip meter
+
+### Fuel-only and plug-in hybrid
+
+#### Sensors
+
+- **Distance to empty tank**: Fuel range
+- **Fuel amount**: Remaining fuel
+- **Trip automatic average fuel consumption**: Average fuel consumption on the automatic trip meter
+- **Trip manual average fuel consumption**: Average fuel consumption on the manual trip meter
+
+## Examples
+
+### Estimated charging finish time
+
+The Volvo API only provides an estimated charging time (in minutes). To calculate the finish time, you can create a **Template sensor** helper with the template below.
+
+{% raw %}
+
+```jinja2
+{% set charging_time = states('sensor.volvo_YOUR_MODEL_estimated_charging_time') | int(0) %}
+{% if charging_time > 0 -%}
+ {% set new_time = now() + timedelta(minutes=charging_time) %}
+ {{ new_time }}
+{%- else -%}
+ {{ this.state }}
+{%- endif %}
+```
+
+{% endraw %}
+
+Set the **Device class** to **Timestamp** and optionally choose your vehicle for **Device**.
+
+## Data updates
+
+The **Volvo** integration fetches data from the API at different intervals:
+
+- **Every 60 minutes**: diagnostics, odometer, and statistics
+- **Every 15 minutes**: car connectivity and fuel status
+- **Every 2 minutes**: energy data (for battery cars)
+
+If you decide to define a custom polling interval, beware that there is a maximum of 10,000 requests per day.
+Every poll operation accounts for about a dozen calls (depends on model).
+
+## Known limitations
+
+The official Volvo app has access to a more feature-rich API. As a result, this integration cannot provide live updates, display tire pressure values, start air purifying, schedule climatization, show climatization status, and so on.
+
+## Troubleshooting
+
+### Recharge API
+
+#### Symptoms
+
+The **Volvo** {% term integration %} does not show recharge entities, or they are unavailable.
+This happens because sometimes the Volvo recharge API does not respond properly.
+
+#### Resolution
+
+The integration will automatically re-enable the recharge entities once the API becomes available again.
+
+## Removing the integration
+
+This integration follows standard integration removal.
+
+{% include integrations/remove_device_service.md %}
+
+After deleting the integration, go to the app of the manufacturer and remove the Home Assistant integration from there as well.
diff --git a/source/_integrations/wake_on_lan.markdown b/source/_integrations/wake_on_lan.markdown
index 697864cdc54..9ecd40b3a25 100644
--- a/source/_integrations/wake_on_lan.markdown
+++ b/source/_integrations/wake_on_lan.markdown
@@ -151,7 +151,7 @@ from Home Assistant running on another Linux computer (the **server**).
switch:
- platform: wake_on_lan
name: "TARGET"
- ...
+ mac: XX:XX:XX:XX:XX:XX
turn_off:
action: shell_command.turn_off_TARGET
diff --git a/source/_integrations/wallbox.markdown b/source/_integrations/wallbox.markdown
index 28eac6ab260..1fb85e39cc5 100644
--- a/source/_integrations/wallbox.markdown
+++ b/source/_integrations/wallbox.markdown
@@ -18,10 +18,18 @@ ha_codeowners:
ha_integration_type: integration
---
-The **Wallbox** {% term integration %} pulls data from the [MyWallbox Portal](https://my.wallbox.com) for your Wallbox charging station.
+The **Wallbox** {% term integration %} pulls data from the [MyWallbox Portal](https://my.wallbox.com) for your Wallbox charging station.
+Use this integration to monitor the charging of your car by the **Wallbox** charger and modify settings such as **Charging Power**, **Energy Price**, **Solar Charging** and **Pause/Resume**. The energy usage collected by this integration can be used in the [Energy dashboard](/home-energy-management).
{% include integrations/config_flow.md %}
+{% configuration_basic %}
+Station Serial Number:
+ description: "The Serial number of your charger. You can find it in the Wallbox App or on the Wallbox Portal."
+Username:
+ description: "This integration only supports a regular / email login, Apple or Google accounts are not supported."
+{% endconfiguration_basic %}
+
## Sensors
The {% term integration %} adds the following sensors:
@@ -64,3 +72,35 @@ The {% term integration %} adds a select {% term entity %} to control solar char
## Switch
The {% term integration %} adds a switch {% term entity %}, allowing you to pause/resume the charging process.
+
+## Data updates
+
+Data is refreshed once every minute. Note that this update interval has been chosen in conjunction with Wallbox to prevent overloading their infrastructure. Altering this refresh rate is not recommended.
+
+## Troubleshooting
+
+
+### Setup errors
+
+- You can only use a regular login with this integration.
+- Google or Apple logins are not supported.
+- You can find the serial number of your charger in the Wallbox app or on the Wallbox Portal under the Chargers section.
+
+### Connection failures
+
+Users often report issues with the Wi-Fi reception of their charger; use a wired connection if possible. Also verify that the charger is communicating with the Wallbox Portal.
+
+
+### Insufficient Rights
+
+This integrations needs admin credentials to function properly. Please assign the user appropriate permissions in the Wallbox portal.
+
+
+### Other issues
+
+Always first check whether the data is being received by the Wallbox Portal as this integration uses the same API. Many problems are related to the connectivity of the charger.
+
+## Removing the integration
+
+{% include integrations/remove_device_service.md %}
+
diff --git a/source/_integrations/water_heater.mqtt.markdown b/source/_integrations/water_heater.mqtt.markdown
index 0919a7c6c33..4894318e1b3 100644
--- a/source/_integrations/water_heater.mqtt.markdown
+++ b/source/_integrations/water_heater.mqtt.markdown
@@ -12,7 +12,8 @@ The `mqtt` water heater platform lets you control your MQTT enabled water heater
## Configuration
-To enable this water heater platform in your installation, first add the following to your {% term "`configuration.yaml`" %} file:
+To use an MQTT water heater in your installation, add the following to your {% term "`configuration.yaml`" %} file.
+{% include integrations/restart_ha_after_config_inclusion.md %}
```yaml
# Example configuration.yaml entry
@@ -22,6 +23,8 @@ mqtt:
mode_command_topic: "basement/boiler/mode/set"
```
+Alternatively, a more advanced approach is to set it up via [MQTT discovery](/integrations/mqtt/#mqtt-discovery).
+
{% configuration %}
availability:
description: A list of MQTT topics subscribed to receive availability (online/offline) updates. Must not be used together with `availability_topic`.
@@ -189,7 +192,7 @@ name:
type: string
default: MQTT water heater
object_id:
- description: Used instead of `name` for automatic generation of `entity_id`
+ description: Used `object_id` instead of `name` for automatic generation of `entity_id`. This only works when the entity is added for the first time. When set, this overrides a user-customized Entity ID in case the entity was deleted and added again.
required: false
type: string
optimistic:
diff --git a/source/_integrations/wiz.markdown b/source/_integrations/wiz.markdown
index be2eece66f3..fa0dbf9a8a4 100644
--- a/source/_integrations/wiz.markdown
+++ b/source/_integrations/wiz.markdown
@@ -3,6 +3,7 @@ title: WiZ
description: Instructions on setting up WiZ within Home Assistant.
ha_category:
- Binary sensor
+ - Fan
- Light
- Number
- Sensor
@@ -13,10 +14,12 @@ ha_dhcp: true
ha_config_flow: true
ha_codeowners:
- '@sbidy'
+ - '@arturpragacz'
ha_domain: wiz
ha_platforms:
- binary_sensor
- diagnostics
+ - fan
- light
- number
- sensor
diff --git a/source/_integrations/xiaomi_ble.markdown b/source/_integrations/xiaomi_ble.markdown
index 79dc82e2309..ae250a57857 100644
--- a/source/_integrations/xiaomi_ble.markdown
+++ b/source/_integrations/xiaomi_ble.markdown
@@ -58,7 +58,7 @@ Flower Care firmware update steps:
- Press the "+" button on the top right in the devices tab of the app
- Add the plant sensor to the app and select an arbitrary plant
- Wait for the synchronization of the sensor to finish, and a dialog asking for a firmware update should appear (this might take a few minutes)
-- The installed and latest firmware version can be verified by selecting the plant -> three-dot menu -> Hardware settings -> Hardware update
+- The installed and latest firmware version can be verified by selecting the plant -> three dots menu -> Hardware settings -> Hardware update
- The Flower Care account and app are not required any further for this integration to work
Also note that the battery level of the plant sensor can only be retrieved by connecting to the device (reading characteristics), while the other sensor data is broadcasted passively. To prevent battery drainage, a connection is made only once a day. Connecting to the device also requires that the device has a good signal strength.
diff --git a/source/_integrations/xmpp.markdown b/source/_integrations/xmpp.markdown
index 355db8c5d79..3c17605c9c7 100644
--- a/source/_integrations/xmpp.markdown
+++ b/source/_integrations/xmpp.markdown
@@ -74,6 +74,11 @@ room:
description: "Room's name (e.g., example@conference.jabber.org). If set, send a message to chatroom instead of the recipient."
required: false
type: string
+title:
+ description: Default message title. To make it empty, set it to `""`.
+ required: false
+ type: string
+ default: "Home Assistant"
{% endconfiguration %}
{% note %}
@@ -90,7 +95,7 @@ You can send text messages and images as well as other files through Jabber.
Here are some examples on how to set up a script, that can be run from an automation.
Number 1 shows a classical, text-only message. The Title is optional, although if omitted,
-`Home-Assistant` will be set. To keep it empty set it to `""`.
+it will be set to the component's `title` configuration variable. To keep it empty, set it to `""`.
```yaml
# Example script.yaml entry
diff --git a/source/_integrations/yalexs_ble.markdown b/source/_integrations/yalexs_ble.markdown
index 6921773cd80..09b19d574b9 100644
--- a/source/_integrations/yalexs_ble.markdown
+++ b/source/_integrations/yalexs_ble.markdown
@@ -36,8 +36,8 @@ Devices must have a Yale Access module installed to function with this {% term i
- YRD256 (Yale Assure Lock Keypad)
- YRD420 (Yale Assure Lock 2)
- YRD450 (Yale Assure Lock 2 Key Free)
-- YUR/SSDL/1/SIL (Yale Unity Screen Door Lock - Australia)
-- YUR/DEL/1/SIL (Yale Unity Entrance Lock - Australia)
+- YUR/SSDL/1/SIL and MBK (Yale Unity Screen Door Lock - Australia)
+- YUR/DEL/1/SIL and MBK (Yale Unity Entrance Lock - Australia)
- IES-D210W-G0 (Yale Smart Safe)
- YRSM-1 (Yale Smart Safe)
- ASL-05 (August WiFi Smart Lock - Gen 4)
@@ -51,6 +51,10 @@ These devices do not send updates, but can be locked and unlocked.
- MD-04I (Yale Conexis L1 (requires yale access module), Yale Conexis L2)
- YRCB-490 (Yale Smart Cabinet Lock)
+## Deadlock support
+
+Some Yale locks support a deadlock function (secure mode) for locking both the inside and outside. A secure mode lock entity (initially disabled) is exposed for all locks and can be enabled where the lock is known to support this capability.
+
## Troubleshooting
Lock operation requires setting up an encrypted connection highly sensitive to latency. It is recommended to use a [High-Performance Bluetooth adapter](/integrations/bluetooth/#known-working-high-performance-adapters) or [ESPHome Bluetooth proxy](/integrations/bluetooth/#remote-adapters-bluetooth-proxies) for stable operation.
@@ -77,11 +81,11 @@ The offline key and slot number are required to operate the lock. These credenti
### Yale Access, Yale Home, or August Cloud
-The [August](/integrations/august) {% term integration %} can automatically provision the offline key if the configured account has the key loaded. You may need to create or use a non-primary existing account with owner-level access to the lock, as not all accounts will have the key loaded. If the lock was not discovered by Home Assistant when the cloud {% term integration %} was loaded, reload the cloud {% term integration %} once the lock has been discovered.
+The [Yale](/integrations/yale) or [August](/integrations/august) cloud {% term integration %} can automatically provision the offline key if the configured account has the key loaded. You may need to create or use a non-primary existing account with owner-level access to the lock, as not all accounts will have the key loaded. If the lock was not discovered by Home Assistant when the cloud {% term integration %} was loaded, reload the cloud {% term integration %} once the lock has been discovered.
If the offline key can automatically be provisioned, you will not be asked to enter it and the {% term integration %} should be automatically added, configured and running.
-Most Yale branded locks can use the August cloud to obtain the keys. Accessing the August cloud to receive the key may not work unless the lock was purchased in a market that sells under both brands.
+Most Yale branded locks can use the cloud {% term integration %} to obtain the offline key. Accessing the August cloud to receive the key may only work if the lock was purchased in a market that sells under both brands and the Yale cloud should be tried for other markets.
### iOS - Yale Access App or August App
@@ -106,6 +110,6 @@ Root access is required to copy the `ModelDatabase.sql` from `/data/data/com.ass
### Lock frequently requires re-authentication
-If you use the key from an iOS or Android device that you also frequently use to operate the lock, you may find that the key is rotated, and the integration can no longer authenticate. If you are using the [August](/integrations/august) integration to keep the key up to date, it may need to be reloaded to update the key.
+If you use the key from an iOS or Android device that you also frequently use to operate the lock, you may find that the key is rotated, and the integration can no longer authenticate. If you are using the [Yale](/integrations/yale) or [August](/integrations/august) integration to keep the key up to date, it may need to be reloaded to update the key.
-To avoid the problem, create a second owner account in the August app, log in to it once on your iOS or Android device, operate the locks, log out of the account, remove the August integration, and set up the August integration with the secondary owner account. This method avoids the problem because there is no longer an iOS or Android device logged into the secondary owner account that can rotate the key unexpectedly.
+To avoid the problem, create a second owner account in the Yale Home or August app, log in to it once on your iOS or Android device, operate the locks, log out of the account, remove the Yale or August integration from Home Assistant, and set up the integration again with the secondary owner account. This method avoids the problem because there is no longer an iOS or Android device logged into the secondary owner account that can rotate the key unexpectedly.
diff --git a/source/_integrations/zbox_hub.markdown b/source/_integrations/zbox_hub.markdown
new file mode 100644
index 00000000000..532aced4fea
--- /dev/null
+++ b/source/_integrations/zbox_hub.markdown
@@ -0,0 +1,39 @@
+---
+title: Z-Box Hub
+description: Connect and control your devices connected to a Z-Box Hub using the Fibaro integration
+ha_category:
+ - Binary sensor
+ - Climate
+ - Cover
+ - Event
+ - Hub
+ - Light
+ - Lock
+ - Scene
+ - Sensor
+ - Switch
+ha_release: 2025.8
+ha_domain: zbox_hub
+ha_integration_type: virtual
+ha_supporting_domain: fibaro
+ha_supporting_integration: Fibaro
+ha_codeowners:
+ - '@rappenze'
+ha_config_flow: true
+ha_platforms:
+ - binary_sensor
+ - climate
+ - cover
+ - diagnostics
+ - event
+ - light
+ - lock
+ - scene
+ - sensor
+ - switch
+ha_iot_class: Local Push
+---
+
+Integrates [Z-Box Hub](https://zboxhub.com/) into Home Assistant.
+
+{% include integrations/supported_brand.md %}
diff --git a/source/_integrations/zeroconf.markdown b/source/_integrations/zeroconf.markdown
index 5db322505a1..d3d05549221 100644
--- a/source/_integrations/zeroconf.markdown
+++ b/source/_integrations/zeroconf.markdown
@@ -62,3 +62,100 @@ Configure the virtual machine to accept this traffic by adding the `trustGuestRx
```
This only works with the `virtio` network adapter type and it is disabled by default for security reasons. See [the libvirt documentation](https://libvirt.org/formatdomain.html#elementsNICS) for more details.
+
+## Discovered integrations
+
+The following integrations are automatically discovered by the `zeroconf` integration:
+
+ - [1-Wire](/integrations/onewire/)
+ - [AirGradient](/integrations/airgradient/)
+ - [Altruist](/integrations/altruist/)
+ - [Android TV Remote](/integrations/androidtv_remote/)
+ - [Apple TV](/integrations/apple_tv/)
+ - [Awair](/integrations/awair/)
+ - [Axis](/integrations/axis/)
+ - [Bang & Olufsen](/integrations/bang_olufsen/)
+ - [Big Ass Fans](/integrations/baf/)
+ - [BleBox devices](/integrations/blebox/)
+ - [Bluesound](/integrations/bluesound/)
+ - [Bond](/integrations/bond/)
+ - [Bosch SHC](/integrations/bosch_shc/)
+ - [Bose SoundTouch](/integrations/soundtouch/)
+ - [Brother Printer](/integrations/brother/)
+ - [BSB-Lan](/integrations/bsblan/)
+ - [Cambridge Audio](/integrations/cambridge_audio/)
+ - [Daikin AC](/integrations/daikin/)
+ - [Deako](/integrations/deako/)
+ - [Denon HEOS](/integrations/heos/)
+ - [Devialet](/integrations/devialet/)
+ - [devolo Home Control](/integrations/devolo_home_control/)
+ - [devolo Home Network](/integrations/devolo_home_network/)
+ - [DoorBird](/integrations/doorbird/)
+ - [ecobee](/integrations/ecobee/)
+ - [EHEIM Digital](/integrations/eheimdigital/)
+ - [Elexa Guardian](/integrations/guardian/)
+ - [Elgato Light](/integrations/elgato/)
+ - [Elmax](/integrations/elmax/)
+ - [Enphase Envoy](/integrations/enphase_envoy/)
+ - [ESPHome](/integrations/esphome/)
+ - [Freebox](/integrations/freebox/)
+ - [Google Cast](/integrations/cast/)
+ - [Home Connect](/integrations/home_connect/)
+ - [HomeKit Bridge](/integrations/homekit/)
+ - [HomeKit Device](/integrations/homekit_controller/)
+ - [HomeWizard Energy](/integrations/homewizard/)
+ - [Hunter Douglas PowerView](/integrations/hunterdouglas_powerview/)
+ - [Internet Printing Protocol (IPP)](/integrations/ipp/)
+ - [IOmeter](/integrations/iometer/)
+ - [iRobot Roomba and Braava](/integrations/roomba/)
+ - [Kodi](/integrations/kodi/)
+ - [Lektrico Charging Station](/integrations/lektrico/)
+ - [LinkPlay](/integrations/linkplay/)
+ - [LOOKin](/integrations/lookin/)
+ - [LOQED Touch Smart Lock](/integrations/loqed/)
+ - [Lutron Caséta](/integrations/lutron_caseta/)
+ - [Matter](/integrations/matter/)
+ - [Miele](/integrations/miele/)
+ - [Modern Forms](/integrations/modern_forms/)
+ - [Music Assistant](/integrations/music_assistant/)
+ - [Nanoleaf](/integrations/nanoleaf/)
+ - [Nettigo Air Monitor](/integrations/nam/)
+ - [Network UPS Tools (NUT)](/integrations/nut/)
+ - [OctoPrint](/integrations/octoprint/)
+ - [Overkiz](/integrations/overkiz/)
+ - [OwnTone](/integrations/forked_daapd/)
+ - [Peblar](/integrations/peblar/)
+ - [Philips Hue](/integrations/hue/)
+ - [Philips TV](/integrations/philips_js/)
+ - [Plex Media Server](/integrations/plex/)
+ - [Plugwise](/integrations/plugwise/)
+ - [Powerfox](/integrations/powerfox/)
+ - [Pure Energie](/integrations/pure_energie/)
+ - [Rabbit Air](/integrations/rabbitair/)
+ - [Rachio](/integrations/rachio/)
+ - [RainMachine](/integrations/rainmachine/)
+ - [ROMY Vacuum Cleaner](/integrations/romy/)
+ - [Russound RIO](/integrations/russound_rio/)
+ - [Samsung Smart TV](/integrations/samsungtv/)
+ - [Shelly](/integrations/shelly/)
+ - [Slide Local](/integrations/slide_local/)
+ - [Smappee](/integrations/smappee/)
+ - [SMLIGHT SLZB](/integrations/smlight/)
+ - [Sonos](/integrations/sonos/)
+ - [Synology DSM](/integrations/synology_dsm/)
+ - [System Bridge](/integrations/system_bridge/)
+ - [Tailwind](/integrations/tailwind/)
+ - [TechnoVE](/integrations/technove/)
+ - [Thread](/integrations/thread/)
+ - [Vegetronix VegeHub](/integrations/vegehub/)
+ - [VIZIO SmartCast](/integrations/vizio/)
+ - [Vogel's MotionMount](/integrations/motionmount/)
+ - [Volumio](/integrations/volumio/)
+ - [WLED](/integrations/wled/)
+ - [Wyoming Protocol](/integrations/wyoming/)
+ - [Xiaomi Gateway (Aqara)](/integrations/xiaomi_aqara/)
+ - [Xiaomi Home](/integrations/xiaomi_miio/)
+ - [Yeelight](/integrations/yeelight/)
+ - [Zigbee Home Automation](/integrations/zha/)
+ - [Z-Wave](/integrations/zwave_js/)
+ - [Z-Wave.Me](/integrations/zwave_me/)
diff --git a/source/_integrations/zha.markdown b/source/_integrations/zha.markdown
index 414f23da333..1679564d30d 100644
--- a/source/_integrations/zha.markdown
+++ b/source/_integrations/zha.markdown
@@ -558,7 +558,7 @@ Prerequisites and steps can vary depending on the device type, manufacturer, and
{% endnote %}
1. Navigate to the Zigbee device's configuration page,
-2. In the options menu (the "three-dots" icon), select **Manage Zigbee device**,
+2. In the options menu (the "three dots" icon), select **Manage Zigbee device**,
3. Select the **Bindings** tab in the pop-up dialog,
4. Choose the device from the dropdown list of _Bindable devices_ (or _Bindable groups_),
5. Confirm the Bind or Unbind action:
diff --git a/source/_integrations/zooz.markdown b/source/_integrations/zooz.markdown
index 0df6f0daae9..8840700406c 100644
--- a/source/_integrations/zooz.markdown
+++ b/source/_integrations/zooz.markdown
@@ -4,17 +4,66 @@ description: Connect and control your Zooz Z-Wave series devices using the Z-Wav
ha_release: '2025.7'
ha_iot_class: Local Push
ha_category:
- - Lock
+ - Plug
+ - Light
+ - Sensor
+ - Switch
+ - Water management
ha_domain: zooz
ha_integration_type: brand
ha_platforms:
- - lock
+ - binary_sensor
+ - light
+ - sensor
+ - switch
+works_with:
+ - zwave
ha_iot_standard: zwave
ha_brand: true
---
-Zooz Z-Wave devices work locally and integrate seamlessly with the Z-Wave integration in Home Assistant (Z-Wave stick required). As all connectivity is happening locally, status updates and controlling your devices happen instantly in Home Assistant.
+[Zooz](https://www.getzooz.com/) Z-Wave devices work locally and integrate seamlessly with the Z-Wave integration in Home Assistant (Z-Wave stick required). As all connectivity is happening locally, status updates and controlling your devices happen instantly in Home Assistant.
{% my add_zwave_device badge domain=page.ha_domain %}
[Learn more about Z-Wave in Home Assistant.](/integrations/zwave_js/)
+
+## Supported devices
+
+The following devices are certified for Works with Home Assistant:
+
+### Leak Protection
+
+[ZAC36 Titan Water Valve Actuator](https://www.getzooz.com/zooz-zac36-titan-water-valve-actuator/)
+
+### Plugs
+
+[ZEN04 Smart Plug](https://www.getzooz.com/zooz-zen04-smart-plug/)
+[ZEN05 Outdoor Plug](https://www.getzooz.com/zooz-zen05-outdoor-smart-plug/%20)
+
+### Relays
+
+[ZEN16 Multi Relay](https://www.getzooz.com/zooz-zen16-multirelay/)
+[ZEN51 Dry Contact Relay](https://www.getzooz.com/zooz-zen51-dry-contact-relay/)
+[ZEN52 Double Relay](https://www.getzooz.com/zooz-zen52-double-relay/)
+[ZEN52 DC Motor Controller](https://www.getzooz.com/zooz-zen53-dc-motor-controller/)
+
+### Lighting Switches
+
+[ZEN30 Double Switch](https://www.getzooz.com/zooz-zen30-double-switch/)
+[ZEN32 Scene Controller](https://www.getzooz.com/zooz-zen32-scene-controller/)
+[ZEN71 On Off Switch](https://www.getzooz.com/zooz-zen71-on-off-switch/)
+[ZEN72 Dimmer](https://www.getzooz.com/zooz-zen72-dimmer/)
+[ZEN74 Toggle Dimmer](https://www.getzooz.com/zooz-zen74-s2-toggle-dimmer/)
+[ZEN76 S2 On Off Switch](https://www.getzooz.com/zooz-zen76-s2-700-series-switch/)
+[ZEN77 S2 Dimmer](https://www.getzooz.com/zooz-zen77-s2-dimmer/)
+
+### Sensors
+
+[ZSE11 Q Sensor (4in1)](https://www.getzooz.com/zooz-zse11-q-sensor/)
+[ZSE18 Motion Sensor](https://www.getzooz.com/zooz-zse18-s2-motion-sensor/)
+[ZSE41 Open / Close XS Sensor](https://www.getzooz.com/zooz-zse41-open-close-xs-sensor/)
+[ZSE42 Water Leak XS Sensor](https://www.getzooz.com/zooz-zse42-water-leak-xs-sensor/)
+[ZSE43 Tilt Shock XS Sensor](https://www.getzooz.com/zooz-zse43-tilt-shock-xs-sensor/)
+[ZSE44 Temperature Humidity XS Sensor](https://www.getzooz.com/zooz-zse44-temperature-humidity-xs-sensor/)
+[ZSE70 Outdoor Motion Sensor](https://www.getzooz.com/zse70-outdoor-motion-sensor/)
diff --git a/source/_integrations/zwave_js.markdown b/source/_integrations/zwave_js.markdown
index 484bcf57d11..d51a6f87528 100644
--- a/source/_integrations/zwave_js.markdown
+++ b/source/_integrations/zwave_js.markdown
@@ -50,7 +50,7 @@ The **Z-Wave** {% term integration %} allows you to control a Z-Wave network fro
## Device compatibility
-You do not need a Z-Wave controller that is specifically designed for the Z-Wave integration in Home Assistant. The Z-Wave integration in Home Assistant can be operated with any Z-Wave network with other Z-Wave certified devices from other manufacturers. All mains operated nodes within the network will act as repeaters regardless of vendor to increase reliability of the network.
+You do not need a Z-Wave adapter that is specifically designed for the Z-Wave integration in Home Assistant. The Z-Wave integration in Home Assistant can be operated with any Z-Wave network with other Z-Wave certified devices from other manufacturers. All mains operated nodes within the network will act as repeaters regardless of vendor to increase reliability of the network.
## Getting started
@@ -60,14 +60,15 @@ This sections shows you how to set up a Z-Wave JS server and how to add your fir
Throughout this documentation, Home Assistant terminology is used. For some of the concepts, the terminology does not correspond to the terminology used in Z-Wave documentation. The table below provides equivalents for some of those terms.
-| Z-Wave functionality | Home Assistant | Definition |
-| -------------------- | ------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------- |
-| inclusion | add | The process of adding a node to the Z-Wave network |
-| exclusion | remove | The process of removing a node from the Z-Wave network |
-| replication | copy (not supported in Home Assistant) | The process of copying network information from one controller to another. Not supported in Home Assistant. |
-| barrier operator | cover |
-| window covering | cover |
-| multilevel switch | represented by different entity types: light, fan etc. |
+| Z-Wave functionality | Home Assistant | Definition |
+| -------------------- | -------------- | ---------- |
+| barrier operator | cover | |
+| controller | adapter, when referring to the hardware device that provides the Z-Wave functionality. The term controller is still used when referring to the network role (such as primary, secondary controller) | |
+| exclusion | remove | The process of removing a node from the Z-Wave network |
+| inclusion | add | The process of adding a node to the Z-Wave network |
+| multilevel switch | represented by different entity types: light, fan etc. | |
+| replication | copy (not supported in Home Assistant) | The process of copying network information from one adapter to another. Not supported in Home Assistant. |
+| window covering | cover | |
#### Classic inclusion versus SmartStart
@@ -81,7 +82,7 @@ For more Z-Wave term definitions, refer to the [terminology section](#z-wave-ter
To run a Z-Wave network, you need the following elements:
-- A [supported Z-Wave controller](/docs/z-wave/controllers/#supported-z-wave-usb-sticks--hardware-modules). First-time user? For recommendations on what to buy, go [here](#which-z-wave-controller-should-i-buy).
+- A [supported Z-Wave adapter](/docs/z-wave/controllers/#supported-z-wave-usb-sticks--hardware-modules). First-time user? For recommendations on what to buy, go [here](#which-z-wave-adapter-should-i-buy).
- A running [Z-Wave JS server](#setting-up-a-z-wave-js-server).
- An installed Z-Wave integration in Home Assistant.
@@ -94,12 +95,12 @@ For other ways to setup a Z-Wave server, refer to the [advanced installation ins
Follow these steps:
1. Open the Home Assistant user interface.
-2. Plug the Z-Wave dongle into the device running Home Assistant.
- - Most likely, your dongle will be recognized automatically.
+2. Plug the Z-Wave adapter into the device running Home Assistant.
+ - Most likely, your adapter will be recognized automatically.
- In the dialog, select **Recommended installation**.
- This will install the Z-Wave JS add-on on the Home Assistant server.
- Add the device to an {% term area %} and select **Finish**.
- - **Troubleshooting**: If your dongle is not recognized, follow these steps:
+ - **Troubleshooting**: If your adapter is not recognized, follow these steps:
{% details "Manual setup steps" %}
Use this My button:
@@ -118,15 +119,15 @@ Use this My button:
3. Wait for the installation to complete.
4. Depending on your Home Assistant version, you may be prompted for network security keys.
- If you are using Z-Wave for the first time, leave all the fields empty and select **Submit**. The system will generate network security keys for you.
- - If this Z-Wave dongle has already been paired with secure devices, you need to enter the previously used network key as the S0 network key. S2 security keys will be automatically generated for you.
- - Make sure that you keep a backup of these keys in a safe place in case you need to move your Z-Wave dongle to another device. Copy and paste them somewhere safe.
+ - If this Z-Wave adapter has already been paired with secure devices, you need to enter the previously used network key as the S0 network key. S2 security keys will be automatically generated for you.
+ - Make sure that you keep a backup of these keys in a safe place in case you need to move your Z-Wave adapter to another device. Copy and paste them somewhere safe.
5. Wait for the Z-Wave JS add-on to start up.
-6. Once the installation is complete, the **Device info** of the Z-Wave controller is shown.
+6. Once the installation is complete, the **Device info** of the Z-Wave adapter is shown.
- You successfully installed the Z-Wave integration and the Z-Wave JS add-on.
- You can now [add](/integrations/zwave_js/#adding-a-new-device-to-the-z-wave-network) devices to the Z-Wave network.
{% note %}
-While your Z-Wave mesh is permanently stored on your dongle, the additional metadata is not. When the Z-Wave integration starts up the first time, it will interview your entire Z-Wave network. Depending on the number of devices paired with the Z-Wave dongle, this can take a while. You can speed up this process by manually waking up your battery-powered devices. Most of the time, this is a button press on those devices (see their manual). It is not necessary to exclude and re-include devices from the mesh.
+While your Z-Wave mesh is permanently stored on your adapter, the additional metadata is not. When the Z-Wave integration starts up the first time, it will interview your entire Z-Wave network. Depending on the number of devices paired with the Z-Wave adapter, this can take a while. You can speed up this process by manually waking up your battery-powered devices. Most of the time, this is a button press on those devices (see their manual). It is not necessary to exclude and re-include devices from the mesh.
{% endnote %}
### Adding a new device to the Z-Wave network
@@ -135,7 +136,7 @@ While your Z-Wave mesh is permanently stored on your dongle, the additional meta
2. Select the Z-Wave integration.
- Then, on the entry of the hub, select {% icon "ic:baseline-arrow-forward-ios" %} to open the device info page.
3. Select **Add device**.
- - The Z-Wave controller is now in inclusion mode.
+ - The Z-Wave adapter is now in inclusion mode.
4. Check, if your device supports SmartStart:
- On the packaging, check for the SmartStart label.
- Find the QR code. It can be on the packaging or on the device itself.
@@ -148,55 +149,79 @@ While your Z-Wave mesh is permanently stored on your dongle, the additional meta
- Set the device in inclusion mode. Refer to the device manual to see how this is done.
- If your device is included using S2 security, you may be prompted to enter a PIN number provided with your device. Often, this PIN is provided with the documentation _and_ is also printed on the device itself. For more information on secure inclusion, refer to [this section](/integrations/zwave_js/#should-i-use-secure-inclusion).
6. The UI should confirm that the device was added. After a short while (seconds to minutes), the entities should also be created.
-7. **Troubleshooting**: If the controller fails to add/find your device, cancel the inclusion process.
+7. **Troubleshooting**: If the adapter fails to add/find your device, cancel the inclusion process.
- In some cases, it might help to first [remove](/integrations/zwave_js/#removing-a-device-from-the-z-wave-network) a device (exclusion) before you add it, even when the device has not been added to this Z-Wave network yet.
- Another approach would be to factory reset the device. Refer to the device manual to see how this is done.
**Important:**
-1. **Do not move your Z-Wave stick to include devices.** Moving the controller is no longer necessary and leads to broken routes.
-2. **Do not initiate device inclusion from the Z-Wave stick itself.** This is no longer supported.
+1. **Do not move your Z-Wave adapter to include devices.** Moving the adapter is no longer necessary and leads to broken routes.
+2. **Do not initiate device inclusion from the Z-Wave adapter itself.** This is no longer supported.
### Removing a device from the Z-Wave network
-Do this before using the device with another controller, or when you don't use the device anymore. It removes the device from the Z-Wave network stored on the controller. It also removes the device and all its entities from Home Assistant. You can not join a device to a new network if it is still paired with a controller.
+Do this before using the device with another adapter, or when you don't use the device anymore. It removes the device from the Z-Wave network stored on the adapter. It also removes the device and all its entities from Home Assistant. You can not join a device to a new network if it is still paired with an adapter.
1. In Home Assistant, go to {% my integrations title="**Settings** > **Devices & services**" %}.
2. Select the **Z-Wave** integration.
- Then, select the cogwheel {% icon "mdi:cog-outline" %}.
3. Select **Remove a device**, then **Start exclusion**.
- - The Z-Wave controller is now in exclusion mode.
+ - The Z-Wave adapter is now in exclusion mode.
4. Put the device you want to remove in exclusion mode. Refer to its manual how this is done.
5. The UI should confirm that the device was removed and the device and entities will be removed from Home Assistant.
-## Migrating a Z-Wave network to a new controller
+## Migrating a Z-Wave network to a new adapter
-Do this if you have an existing Z-Wave network and want to use a new controller. This will reset your current controller (remove all network information from it) and remove the controller from Home Assistant. The Z-Wave integration with all its entities will stay in Home Assistant. The new controller is added to Home Assistant and paired with the existing network.
+Do this if you have an existing Z-Wave network and want to replace its adapter with a new adapter. The Z-Wave integration with all its entities will stay in Home Assistant. The new adapter is added to Home Assistant and paired with the existing network.
+
+{% tip %}
+You cannot run two Z-Wave adapters simultaneously using the same add-on. If you only run one add-on, you need to migrate the network. If you want to run two adapters, you would need to install another add-on, such as Z-Wave JS UI.
+{% endtip %}
### Prerequisites
- Administrator rights in Home Assistant
-- If you want to migrate from a 500 series controller, before starting migration, update the controller to SDK 6.61+
+
+#### Device specific prerequisites
+
+- **Important**: If you want to migrate from a **500 series** adapter, before starting migration, you need to update the adapter to SDK 6.61+
- Check the documentation of your device to see if and how they can be updated.
- [Steps to update Aeotec Z-Stick 5](https://aeotec.freshdesk.com/support/solutions/articles/6000252294-z-stick-gen5-v1-02-firmware-update).
-### To migrate a Z-Wave network to a new controller
+- If you want to migrate from a **Nortek HUSBZB-1**:
-1. In Home Assistant, go to {% my integrations title="**Settings** > **Devices & services**" %}.
-2. Select the **Z-Wave** integration.
- - Then, select the cogwheel {% icon "mdi:cog-outline" %}.
-3. Under **Backup and restore**, select **Migrate controller**.
-4. Select **Migrate to a new controller**.
- - To confirm device reset, select **Submit**.
- - **Info**: This will initiate a backup of the network information and factory reset the controller. All the stored network information will be removed.
-5. When the **Unplug your controller** dialog shows up, unplug your old controller.
- - Connect the new controller.
- - Confirm that you connected the new controller by selecting **Submit**.
-6. Follow the steps on screen.
+ - There is no easy way to update that device.
+ - You need to set up a new network.
+ - If you are comfortable with soldering: some users have reported that they were able to upgrade the firmware of the **Nortek HUSBZB-1** with [this update procedure (requires soldering)](https://community.hubitat.com/t/guide-nortek-husbzb-1-nvm-backup-restore-and-updating-z-wave-firmware/48012).
+ - The procedure is very involved. Most likely, starting from scratch is quicker.
-## Overriding the radio frequency region of the controller in the Z-Wave JS add-on
+### To migrate a Z-Wave network to a new adapter
-The frequency used by Z-Wave devices depends on your region. For 700 and 800 series controllers, this frequency can be changed. The frequency of end devices cannot, so you need to make sure to buy devices specific to your region.
+1. If you want to migrate from a **500 series** adapter, before starting migration, you need to update the adapter to SDK 6.61+
+ - Check the documentation of your device to see if and how they can be updated.
+ - [Steps to update Aeotec Z-Stick 5](https://aeotec.freshdesk.com/support/solutions/articles/6000252294-z-stick-gen5-v1-02-firmware-update).
+2. In Home Assistant, go to {% my integrations title="**Settings** > **Devices & services**" %}.
+3. Connect your new adapter.
+ - Plug in your new adapter.
+ - **Result**: The adapter should be discovered and show up in the **Discovered section**.
+ - Select **Add** and follow the instructions on screen.
+ - **Troubleshooting**: Not all devices can be discovered automatically. If your device does not show up, follow these steps:
+ 1. Select the **Z-Wave** integration.
+ 2. Then, select the cogwheel {% icon "mdi:cog-outline" %}.
+ 3. Under **Backup and restore**, select **Migrate adapter**.
+ 4. Select **Migrate to a new adapter**.
+ - To confirm, select **Submit**.
+4. When the **Unplug your adapter** dialog shows up, unplug your old adapter.
+ - It is important to remove the old device now, as it might interfere with the new one. Even though it might not throw an error immediately, it might cause issues.
+5. Follow the steps on screen.
+6. Once the migration has completed, check if you want to rename the adapter. If you have previously changed the name, the new adapter might keep the name of the old adapter.
+ - In the top-left corner, select the back button to go back to the integration page.
+ - In the list of devices, check the device name.
+ - To change the device name, select the {% icon "mdi:pencil" %} button.
+
+## Overriding the radio frequency region of the adapter in the Z-Wave JS add-on
+
+The frequency used by Z-Wave devices depends on your region. For 700 and 800 series adapters, this frequency can be changed. The frequency of end devices cannot, so you need to make sure to buy devices specific to your region.
If you are using the Z-Wave JS add-on, Home Assistant automatically changes the radio frequency region to match the region/country you're in. If needed, you can override this setting.
@@ -204,20 +229,20 @@ If you are using the Z-Wave JS add-on, Home Assistant automatically changes the
- Administrator rights in Home Assistant
- All your Z-Wave devices must be specified for that region
-- Note: this procedure only applies if your controller is [set up using the Z-Wave JS add-on](#setting-up-a-z-wave-js-server)
+- Note: this procedure only applies if your adapter is [set up using the Z-Wave JS add-on](#setting-up-a-z-wave-js-server)
-### To override the radio frequency region of your Z-Wave controller
+### To override the radio frequency region of your Z-Wave adapter
1. Go to {% my supervisor_addon addon="core_zwave_js" title="**Settings** > **Add-ons** > **Z-Wave JS**" %}.
2. Open the **Configuration** tab.
3. In the **Options** section, select the **Radio Frequency Region**.
4. To apply your changes, select **Save**.
- - Your Z-Wave controller is now ready to communicate with devices that were specified for your chosen region.
+ - Your Z-Wave adapter is now ready to communicate with devices that were specified for your chosen region.
5. To return to the default setting and use the region defined by Home Assistant, under **Radio Frequency Region** choose **Automatic**.
## Backing up your Z-Wave network
-It's recommended to create a backup before making any major changes to your Z-Wave network. For example, before migrating from one controller to another, or before resetting your controller. The backup stores your Z-Wave controller's non-volatile memory (NVM), which contains your network information including paired devices. It is stored in a binary file that you can download.
+It's recommended to create a backup before making any major changes to your Z-Wave network. For example, before migrating from one adapter to another, or before resetting your adapter. The backup stores your Z-Wave adapter's non-volatile memory (NVM), which contains your network information including paired devices. It is stored in a binary file that you can download.
### Prerequisites
@@ -232,9 +257,27 @@ It's recommended to create a backup before making any major changes to your Z-Wa
- **Result**: The backup file is downloaded to the device from which you initiated the download.
4. Done! Store the backup file somewhere safe in case you need it later to restore your Z-Wave network.
+## Restoring your Z-Wave network from a backup
+
+You can restore your Z-Wave network from a backup.
+
+### Prerequisites
+
+- Administrator rights in Home Assistant
+- Have a [backup](#backing-up-your-z-wave-network) downloaded
+
+### Restoring a Z-Wave network from backup
+
+1. In Home Assistant, go to {% my integrations title="**Settings** > **Devices & services**" %}.
+2. Select the **Z-Wave** integration.
+ - Then, select the cogwheel {% icon "mdi:cog-outline" %}.
+3. Under **Backup and restore**, select **Restore from backup**.
+ - Select the backup you want to restore from.
+ - **Result**: The Z-Wave network is being restored and the devices that were part of the network should show up again.
+
## Updating the firmware of your Z-Wave device
-Controllers and devices with the Firmware Update Metadata Command Class allow you to update the firmware by uploading a firmware file. In those cases, you can start the firmware update from the device page in Home Assistant. Refer to the documentation of the device manufacturer to find the corresponding firmware file. An example is the [firmware page by Zooz](https://www.support.getzooz.com/kb/article/1158-zooz-ota-firmware-files/).
+Adapters and devices with the Firmware Update Metadata Command Class allow you to update the firmware by uploading a firmware file. In those cases, you can start the firmware update from the device page in Home Assistant. Refer to the documentation of the device manufacturer to find the corresponding firmware file. An example is the [firmware page by Zooz](https://www.support.getzooz.com/kb/article/1158-zooz-ota-firmware-files/).
{% note %}
**Risk of damage to the device due to firmware update**
@@ -266,30 +309,32 @@ The Home Assistant and Z-Wave JS teams do not take any responsibility for any da
- An interrupted update can damage your device.
5. Select **Begin firmware update** and wait for it to complete.
-## Resetting a Z-Wave controller
+## Resetting a Z-Wave adapter
It is recommended to back up your Z-Wave network before resetting the device.
-- The controller will forget all devices it is paired with.
+- The adapter will forget all devices it is paired with.
- All Z-Wave devices for this network will be removed from Home Assistant.
-- If there are any devices still paired with the controller when it is reset, they will have to be removed from their old network before they can be re-paired.
+
+- If there are any devices still paired with the adapter when it is reset, they will have to go through the exclusion process before they can be re-paired.
- The device firmware will remain on the device.
### Prerequisites
- Administrator rights on Home Assistant
- [Backup your Z-Wave network](#backing-up-your-z-wave-network)
-- [Remove all devices that are paired with your controller from the network](#removing-a-device-from-the-z-wave-network).
- - Removing can be done by any controller, not just the one that originally managed the network. In theory, this could also be done later.
+- [Remove all devices that are paired with your adapter from the network](#removing-a-device-from-the-z-wave-network).
+ - Removing can be done by any adapter, not just the one that originally managed the network. In theory, this could also be done later.
-### To reset a Z-Wave controller
+### To reset a Z-Wave adapter
1. In Home Assistant, go to {% my integrations title="**Settings** > **Devices & services**" %}.
2. Select the **Z-Wave** integration. Then, select the controller.
3. Under **Device info**, select the three-dot {% icon "mdi:dots-vertical" %} menu, then select **Factory reset**.
- 
-4. Once the process is finished, you can use this controller to start a new network, or pass it on to someone else.
+
+ 
+4. Once the process is finished, you can use this adapter to start a new network, or pass it on to someone else.
## Special Z-Wave entities
@@ -299,7 +344,7 @@ The Z-Wave integration provides several special entities, some of which are avai
1. **Node status** sensor: This sensor shows the node status for a given Z-Wave device. The sensor is disabled by default. The available node statuses are explained in the [Z-Wave JS documentation](https://zwave-js.github.io/node-zwave-js/#/api/node?id=status). They can be used in state change automations. For example to ping a device when it is dead, or refresh values when it wakes up.
2. **Ping** button: This button can be pressed to ping a device. It is an alternative to the `zwave_js.ping` action.
-3. **Controller/node statistics** sensors: Z-Wave JS collects statistics about communications between [nodes](https://zwave-js.github.io/node-zwave-js/#/api/node?id=quotstatistics-updatedquot) and the [controller](https://zwave-js.github.io/node-zwave-js/#/api/controller?id=quotstatistics-updatedquot). The statistics can be used to troubleshoot RF issues in your environment. These statistics are available in the network configuration and device info panels. But they are also available as sensors which are disabled by default.
+3. **Adapter/node statistics** sensors: Z-Wave JS collects statistics about communications between [nodes](https://zwave-js.github.io/node-zwave-js/#/api/node?id=quotstatistics-updatedquot) and the [adapter](https://zwave-js.github.io/node-zwave-js/#/api/controller?id=quotstatistics-updatedquot). The statistics can be used to troubleshoot RF issues in your environment. These statistics are available in the network configuration and device info panels. But they are also available as sensors which are disabled by default.
### Conditional entities
@@ -319,8 +364,8 @@ The following features can be accessed from the integration configuration panel:
- **Add device:** Allows you to pre-provision a SmartStart device or start the inclusion process for adding a new device to your network.
- **Remove device:** Starts the exclusion process for removing a device from your network.
-- **Rebuild network routes:** Forces your network to rediscover routes to the controller from each device. This is useful when devices or the controller have moved to a new location, or if you are having significant problems with your network, but it also generates a lot of network traffic and should be used sparingly.
-- **[Controller statistics](https://zwave-js.github.io/node-zwave-js/#/api/controller?id=quotstatistics-updatedquot):** Provides statistics about communication between the controller and other devices, allowing you to troubleshoot your network's RF quality.
+- **Rebuild network routes:** Discovers new routes between the adapter and the device. This is useful when devices or the adapter have moved to a new location, or if you are having significant problems with your network, but it also generates a lot of network traffic and should be used sparingly.
+- **[Adapter statistics](https://zwave-js.github.io/node-zwave-js/#/api/controller?id=quotstatistics-updatedquot):** Provides statistics about communication between the adapter and other devices, allowing you to troubleshoot your network's RF quality.
- **Third-party data opt-in/out:** Allows you to opt-in or out of telemetry that the Z-Wave JS project collects to help inform development decisions, influence manufacturers, etc. This telemetry is disabled by default and has to be opted in to be activated.
### Integration menu
@@ -332,16 +377,16 @@ Some features can be accessed from the menu of integration itself. As they are n
#### Network devices
-The following features can be accessed from the device panel of any Z-Wave device on your network aside from the controller:
+The following features can be accessed from the device panel of any Z-Wave device on your network aside from the adapter:

- **Configure:** Provides an easy way to look up and update configuration parameters for the device. While there is an existing action for setting configuration parameter values, this UI may sometimes be quicker to use for one-off changes.
- **Re-interview:** Forces the device to go through the interview process again so that Z-Wave-JS can discover all of its capabilities. Can be helpful if you don't see all the expected entities for your device.
-- **Rebuild routes:** Forces the device to rediscover its optimal route back to the controller. Use this if you think you are experiencing unexpected delays or RF issues with your device. Your device may be less responsive during this process.
-- **Remove failed:** Forces the controller to remove the device from the controller. Can be used when a device has failed and it can't go through the normal exclusion process.
-- **[Statistics](https://zwave-js.github.io/node-zwave-js/#/api/node?id=quotstatistics-updatedquot):** Provides statistics about communication between this device and the controller, allowing you to troubleshoot RF issues with the device.
-- **Update:** Updates a device's firmware using a manually uploaded firmware file. Only some devices support this feature (controllers and devices with the Firmware Update Metadata Command Class).
+- **Rebuild routes:** Discovers new routes between the adapter and the device. Use this if you think you are experiencing unexpected delays or RF issues with your device. Your device may be less responsive during this process.
+- **Remove failed:** Removes the device from the adapter without excluding the device from the network. Can be used when a device has failed and it can't go through the normal exclusion process.
+- **[Statistics](https://zwave-js.github.io/node-zwave-js/#/api/node?id=quotstatistics-updatedquot):** Provides statistics about communication between this device and the adapter, allowing you to troubleshoot RF issues with the device.
+- **Update:** Updates a device's firmware using a manually uploaded firmware file. Only some devices support this feature (adapters and devices with the Firmware Update Metadata Command Class).
- **Download diagnostics:** Exports a JSON file describing the entities of this specific device.
## Actions
@@ -872,7 +917,7 @@ If you are using Home Assistant Container or you don't want to use the built-in
### Running [Z-Wave JS Server](https://github.com/zwave-js/zwave-js-server)
-This application provides the connection between your Z-Wave USB stick and Home Assistant. The Home Assistant Z-Wave integration connects to this server via a WebSocket connection. You need to run this Z-Wave JS server before you can use the integration.
+This application provides the connection between your Z-Wave adapter and Home Assistant. The Home Assistant Z-Wave integration connects to this server via a WebSocket connection. You need to run this Z-Wave JS server before you can use the integration.
There are multiple ways to run this server:
The chart below illustrates Options 1 and 2, which are available for Home Assistant OS only.
@@ -902,7 +947,7 @@ This method provides the same server application and UI as the Z-Wave JS UI add-
This is considered a very advanced use case. In this case you run the Z-Wave JS Server or Z-Wave JS UI NodeJS application directly. Installation and maintaining this is out of scope for this document. See the [Z-Wave JS server](https://github.com/zwave-js/zwave-js-server) or [Z-Wave JS UI](https://github.com/zwave-js/zwave-js-ui/) GitHub repository for information.
{% note %}
-[Supported Z-Wave dongle](/docs/z-wave/controllers/#supported-z-wave-usb-sticks--hardware-modules). The Z-Wave controller dongle should be connected to the same host as where the Z-Wave JS server is running. In the configuration for the Z-Wave JS server, you need to provide the path to this stick. It's recommended to use the `/dev/serial-by-id/yourdevice` version of the path to your stick, to make sure the path doesn't change over reboots. The most common known path is `/dev/serial/by-id/usb-0658_0200-if00`.
+[Supported Z-Wave adapter](/docs/z-wave/controllers/#supported-z-wave-usb-sticks--hardware-modules). The Z-Wave adapter should be connected to the same host as where the Z-Wave JS server is running. In the configuration for the Z-Wave JS server, you need to provide the path to this adapter. It's recommended to use the `/dev/serial-by-id/yourdevice` version of the path to your adapter, to make sure the path doesn't change over reboots. The most common known path is `/dev/serial/by-id/usb-0658_0200-if00`.
{% endnote %}
{% note %}
@@ -933,15 +978,15 @@ You can also keep track of the road map for the Z-Wave integration [here](https:
## FAQ: Installation and configuration
-### Which Z-Wave controller should I buy?
+### Which Z-Wave adapter should I buy?
-Z-Wave supports all known 500-, 700-, and 800-series Z-Wave controllers. If you are just starting out, we recommend that you purchase a 800-series controller (with firmware updated to >=7.23.2).
+Z-Wave supports all known 500, 700, and 800 series Z-Wave adapters. If you are just starting out, we recommend that you purchase a 800-series adapter (with firmware updated to >=7.23.2).
-For more information, see [Supported Z-Wave dongles](/docs/z-wave/controllers/#supported-z-wave-usb-sticks--hardware-modules)
+For more information, see [Supported Z-Wave adapters](/docs/z-wave/controllers/#supported-z-wave-usb-sticks--hardware-modules)
### Why was I (not) automatically prompted to install Z-Wave?
-Some Z-Wave USB sticks can be auto-discovered, which can simplify the Z-Wave setup process. The following devices have been tested with discovery, and offer a quick setup experience; however, these are **not** all of the devices supported by Z-Wave:
+Some Z-Wave adapters can be auto-discovered, which can simplify the Z-Wave setup process. The following devices have been tested with discovery, and offer a quick setup experience; however, these are **not** all of the devices supported by Z-Wave:
| Device | Identifier | Vendor |
| -------------------- | ---------- | ---------------------------------------------------------------------------------- |
@@ -958,34 +1003,79 @@ Zwavejs2Mqtt was renamed Z-Wave JS UI in September 2022. They are synonymous wit
### Can I switch between Z-Wave JS and Z-Wave JS UI?
-You can switch between the official Z-Wave JS add-on and the Z-Wave JS UI add-on. However, but you cannot run them both at the same time. Only one of them can be active at the same time.
+You can switch between the official Z-Wave JS add-on and the Z-Wave JS UI add-on. However, you cannot run them both at the same time. Only one of them can be active at the same time.
-### How to switch between Z-Wave JS and Z-Wave JS UI?
+### How to switch from Z-Wave JS to the Z-Wave JS UI add-on?
-To switch between the official Z-Wave JS add-on and the Z-Wave JS UI add-on, follow these steps:
+You can switch from the official **Z-Wave JS** add-on to the community **Z-Wave JS UI** add-on. However, you cannot run them both at the same time. Only one of the add-ons can be active at the same time.
-Switching does not require renaming your devices.
+Both add-ons communicate with Home Assistant via the same **Z-Wave** {% term integration %}.
-1. Disable the Z-Wave integration. **Do not remove the Z-Wave integration or you will lose all device and entity naming.** This will automatically stop the official Z-Wave JS add-on.
+1. Note your network security keys from the official add-on.
+ - In your browser, open {% my supervisor_addon addon="core_zwave_js" title="**Settings** > **Add-ons** > **Z-Wave JS**" %}.
+ - From the three dots {% icon "mdi:dots-vertical" %} menu, select **Edit in YAML**.
+ - You should see about 12 lines of YAML, including items like `device: xxx` and `s2_access_control_key: xxx`. Select all and copy them somewhere safe. You will need them later.
-2. Note your network security keys from the official add-on.
+2. Install and start the community **Z-Wave JS UI** add-on.
+ - In your browser, open {% my supervisor_store title="**Settings** > **Add-ons** > **Add-on Store**" %}.
+ - Select **Install**, then **Start**.
+ - It may take a while for the add-on to start up.
-3. Install and start the Z-Wave JS UI add-on.
+3. Note the WebSocket URL that the integration will use to communicate with Z-Wave JS.
+ - Within the same **Z-Wave JS UI** add-on from step 2, open the **Documentation** tab.
+ - Search (Ctrl-F) for a link that begins with "ws://". For example, `ws://a0d7b954-zwavejs2mqtt:3000`.
+ - Copy that URL somewhere safe. You will need it later.
-4. Configure the Z-Wave JS UI add-on with the added control panel, including setting the location of your Z-Wave device and the network security keys.
+4. Start reconfiguring the integration.
+ - Open a new browser tab.
+ - Go to {% my integrations title="**Settings** > **Devices & services**" %} and select the **Z-Wave** integration.
+ - Select the three-dot {% icon "mdi:dots-vertical" %} menu next to the **Z-Wave JS** top row.
+ - From the menu, select **Reconfigure**, then **Reconfigure current adapter**.
+ - Uncheck **Use the Z-Wave JS Supervisor add-on**.
+ - Keep this tab open.
-5. Add the Z-Wave integration again (even though it is still installed), and uncheck the "Use the Z-Wave JS Supervisor add-on". Enter the correct address for the community add-on in the URL field in the next step.
+5. Configure the new add-on using the information saved in step 1.
+ - Switch back to your initial browser tab.
+ - Within the **Z-Wave JS UI** add-on, switch back to the **Info tab** and select **Open Web UI**.
+ - Open the **Settings** {% icon "mdi:cog" %} page and expand the **Z-Wave** section.
+ - Fill out the subsections for **Serial Port**, **Security Keys**, and **RF Region**.
+ - Save your changes.
-6. Uninstall the official Z-Wave JS add-on.
+6. Finish reconfiguring the integration.
+ - Switch back to the tab from step 4.
+ - Under **WebSocket URL**, enter the URL you saved in step 3.
-7. Enable the Z-Wave integration.
+7. Uninstall the official add-on.
+ - Go to {% my supervisor_addon addon="core_zwave_js" title="**Settings** > **Add-ons** > **Z-Wave JS**" %} and select **Uninstall**.
+ - You are asked if you want to delete the related data.
+ - Keep it if you think you might switch back to the **Z-Wave JS** add-on later.
+
+### How to migrate from one adapter to a new adapter using Z-Wave JS UI?
+
+If you are currently using [Z-Wave JS UI](https://zwave-js.github.io/zwave-js-ui/#/) instead of the official **Z-Wave JS** add-on and want to start using a new adapter, you can migrate your network inside **Z-Wave JS UI**.
+
+1. Before starting migration, disable the **Z-Wave** integration.
+ - Go to {% my integrations title="**Settings** > **Devices & services**" %} and select the Z-Wave integration and select the three dots {% icon "mdi:dots-vertical" %} menu and select **Disable**.
+2. Do the migration in Z-Wave JS UI.
+ - If you are using the **Z-Wave JS UI** add-on, go to {% my supervisor_addon addon="core_zwave_jsa0d7b954_zwavejs2mqtt" title="**Settings** > **Add-ons** > **Z-Wave JS UI**" %}
+ - Open the Z-Wave JS UI control panel and in the bottom-right corner, select the purple **Advanced actions** button.
+ - Under **NVM Management**, select **Backup**.
+ - Unplug the current adapter and connect the new adapter.
+ - Go to **Settings** > **UI** > **Z-Wave**.
+ - Under **Serial port**, update the device path to show your new device (for example, `/dev/serial/by-id/usb-XXXX`).
+ - Under **Default radio configuration** enter the region you're in and save.
+ - In the control panel, select the purple {% icon "mdi:magic" %} advanced actions button and under **NVM Management**, select **Restore**.
+3. Rebuild all routes.
+ - Select the purple {% icon "mdi:magic" %} advanced actions button and under **Rebuild routes**, select **Begin**.
+
+4. Enable the Z-Wave integration again.
### What's the benefit of using Z-Wave JS UI add-on?
-You might wonder what the benefit is of using the Z-Wave JS UI add-on instead of the official add-on.
-The official add-on provides the Z-Wave Server in its bare minimum variant, just enough to serve the Home Assistant integration.
+You might wonder what the benefit is of using the [Z-Wave JS UI](https://zwave-js.github.io/zwave-js-ui/#/README) add-on instead of the official **Z-Wave JS** add-on.
+The official **Z-Wave JS** add-on provides the Z-Wave Server in its bare minimum variant, just enough to serve the Home Assistant integration.
-The Z-Wave JS UI project includes the Z-Wave JS Server for convenience but also provides a Z-Wave control panel and the ability to serve your Z-Wave network to MQTT. This allows you to use the control panel, and if you so choose, to also use MQTT at the same time. For example, some users may use MQTT to interact with Z-Wave from other devices, while the Home Assistant integration still works (as long as you keep the WS Server enabled in Z-Wave JS UI).
+The **Z-Wave JS UI** project includes the Z-Wave JS Server for convenience but also provides a Z-Wave control panel and the ability to serve your Z-Wave network to MQTT. This allows you to use the control panel, and if you so choose, to also use MQTT at the same time. For example, some users may use MQTT to interact with Z-Wave from other devices, while the Home Assistant integration still works (as long as you keep the WS Server enabled in Z-Wave JS UI).
### Z-Wave JS UI provides discovery of HA devices on its own too, now I'm confused
@@ -1013,7 +1103,7 @@ By default, Z-Wave prefers Security S2, if supported. Security S0 is used only w
### Where can I see the security keys in the Z-Wave JS add-on?
-After the initial setup of the Z-Wave controller, you can view the security keys in the Z-Wave JS add-on. Go to {% my supervisor_addon addon="core_zwave_js" title="**Settings** > **Add-ons** > **Z-Wave JS**" %} and open the **Configuration** tab. You can now see the three S2 keys and the S0 key. The network security key is a legacy configuration setting, identical to the S0 key.
+After the initial setup of the Z-Wave adapter, you can view the security keys in the Z-Wave JS add-on. Go to {% my supervisor_addon addon="core_zwave_js" title="**Settings** > **Add-ons** > **Z-Wave JS**" %} and open the **Configuration** tab. You can now see the three S2 keys and the S0 key. The network security key is a legacy configuration setting, identical to the S0 key.
## FAQ: Troubleshooting topics
@@ -1027,9 +1117,9 @@ After ensuring you are using an extension cable, rebuild network routes.
The combination of these two steps corrects a large number of reported difficulties.
-### I have an Aeotec Gen5 controller, and it isn't detected on my Raspberry Pi 4?
+### I have an Aeotec Gen5 adapter, and it isn't detected on my Raspberry Pi 4?
-The first-generation Gen5 controller has a known bug when plugged into a Pi 4 and possibly other systems. Aeotec released the Gen5+ stick to correct this bug. Gen5 users can plug their sticks into a USB 2.0 hub in order to overcome the issue.
+The first-generation Gen5 adapter has a known bug when plugged into a Pi 4 and possibly other systems. Aeotec released the Gen5+ stick to correct this bug. Gen5 users can plug their adapters into a USB 2.0 hub in order to overcome the issue.
### I do not see any entities created for my device in Home Assistant
@@ -1039,7 +1129,7 @@ If you are certain that your device should have entities and you do not see them
### My device doesn't automatically update its status in HA if I control it manually
-Your device might not send automatic status updates to the controller. While the best advice would be to update to recent Z-Wave Plus devices, there is a workaround with active polling (request the status).
+Your device might not send automatic status updates to the adapter. While the best advice would be to update to recent Z-Wave Plus devices, there is a workaround with active polling (request the status).
Z-Wave does not automatically poll devices on a regular basis. Polling can quickly lead to network congestion and should be used very sparingly and only where necessary.
@@ -1067,7 +1157,7 @@ When trying to determine why something isn't working as you expect, or when repo
### How do I address interference issues?
-Many users have reported issues with interference when the USB stick was directly connected to the machine (proximity). If you are having issues, try to use a short USB 2.0 A (male to female) extension cord.
+Many users have reported issues with interference when the adapter was directly connected to the machine (proximity). If you are having issues, try to use a short USB 2.0 A (male to female) extension cord.
### How do I access the Z-Wave logs?
@@ -1076,7 +1166,7 @@ Many users have reported issues with interference when the USB stick was directl
##### Enable Z-Wave JS logging
1. Go to the Z-Wave integration panel: {% my integration badge domain="zwave_js" %}
-2. In the top-right corner, select the three-dot {% icon "mdi:dots-vertical" %} menu and select **Enable debug logging**.
+2. In the top-right corner, select the three dots {% icon "mdi:dots-vertical" %} menu and select **Enable debug logging**.
- **Result**: The log level will be set to `debug` for the integration, library, and optionally the driver (if the driver log level is not already set to `verbose`, `debug`, or `silly`), and all Z-Wave JS logs will be added to the Home Assistant logs.
3. If you want to change the log level, on the Z-Wave integration panel: {% my integration badge domain="zwave_js" %}, select the cogwheel {% icon "mdi:cog-outline" %}.
- Select the **Logs** tab, then select the log level.
@@ -1084,7 +1174,7 @@ Many users have reported issues with interference when the USB stick was directl
##### Disable Z-Wave JS logging
1. Go to the Z-Wave integration panel: {% my integration badge domain="zwave_js" %}
-2. In the top-right corner, select the three-dot {% icon "mdi:dots-vertical" %} menu and select **Disable debug logging**.
+2. In the top-right corner, select the three dots {% icon "mdi:dots-vertical" %} menu and select **Disable debug logging**.
- **Result**: The log level will be reset to its previous value for the integration, library, and driver, and the Home Assistant frontend will automatically send you the Z-Wave logs generated during that time period for download.
#### The advanced way
@@ -1101,11 +1191,11 @@ Set the log level for `zwave_js_server` to a level higher than `debug`. This can
This sections lists functionality that is available in Z-Wave but that is not currently supported in Home Assistant.
-### Setting the controller into learn mode to receive network information
+### Setting the adapter into learn mode to receive network information
In Home Assistant, it is currently not possible to set the Z-Wave controller into learn mode to receive network information from another controller.
-### Including / excluding a controller in an existing network using [classic inclusion](#classic-inclusion-versus-smartstart)
+### Including / excluding a adapter in an existing network using [classic inclusion](#classic-inclusion-versus-smartstart)
A Z-Wave controller that manages an empty network can also join a different network and act as a secondary controller there. However, with Home Assistant, this is not possible. Home Assistant does not allow the Z-Wave controller to join another network, because Home Assistant acts as the central hub.
@@ -1113,9 +1203,9 @@ A Z-Wave controller that manages an empty network can also join a different netw
In Home Assistant, a single [association group](#association-group) is implemented:
-- **Group 1**: This is an association group that includes only one device. It is used after a [factory reset](#controller), to send a **Device Reset Locally Notification**.
+- **Group 1**: This is an association group that includes only one device. It is used after a [factory reset](#resetting-a-z-wave-adapter), to send a **Device Reset Locally Notification**.
-This association group is used when Home Assistant [resets the Z-Wave controller](#controller).
+This association group is used when Home Assistant [resets the Z-Wave adapter](#resetting-a-z-wave-adapter).
Under normal circumstances, it is not necessary to add a device to this group.
@@ -1172,7 +1262,7 @@ An _association group_ in Z-Wave terminology is a group of devices that another
### SmartStart
-SmartStart enabled products can be added into a Z-Wave network by scanning the Z-Wave QR Code present on the product with a controller providing SmartStart inclusion.
+SmartStart enabled products can be added into a Z-Wave network by scanning the Z-Wave QR Code present on the product with an adapter supporting SmartStart inclusion.
No further action is required and the SmartStart product will be added automatically within 10 minutes of being switched on in the network vicinity. Not all devices support SmartStart. Some devices require [classic inclusion](#classic-inclusion-versus-smartstart). For documentation on adding a device to Home Assistant, refer to [adding a new device to the Z-Wave network](#adding-a-new-device-to-the-z-wave-network).
### Terminology mapping table
@@ -1186,17 +1276,17 @@ This removes all paired Z-Wave devices and their entities, the Z-Wave JS add-on,
### To remove Z-Wave JS from Home Assistant
1. [Remove the device from your Z-Wave network](/integrations/zwave_js/#removing-a-device-from-the-z-wave-network).
- - Do this for each device that is joined to your network so that it is no longer paired to the controller.
- - You cannot add a device to a new controller while it is still paired with an old one.
+ - Do this for each device that is joined to your network so that it is no longer paired to the adapter.
+ - You cannot add a device to a new adapter while it is still paired with an old one.
- Alternatively, you can factory reset each device. Refer to the device manual to see how this is done.
- This usually involves finding the device in your household and pressing a button.
2. Remove the Z-Wave integration.
- Go to {% my integrations title="**Settings** > **Devices & services**" %} and select the integration card.
- - Next to the integration entry, select the three-dot {% icon "mdi:dots-vertical" %} menu.
+ - Next to the integration entry, select the three dots {% icon "mdi:dots-vertical" %} menu.
- Select **Delete**.
3. If it hasn't been deleted automatically, remove the Z-Wave JS add-on.
- Go to {% my supervisor_addon addon="core_zwave_js" title="**Settings** > **Add-ons** > **Z-Wave JS**" %}.
- Select **Uninstall**.
- Decide whether to also delete the data related to the add-on or whether to keep it.
4. Done. Z-Wave JS is now completely removed from your Home Assistant server.
- - You can now use your Z-Wave devices and controller on a new server.
+ - You can now use your Z-Wave devices and adapter on a new server.
diff --git a/source/_posts/2025-07-02-release-20257.markdown b/source/_posts/2025-07-02-release-20257.markdown
index ee9977a34c8..251c5eec450 100644
--- a/source/_posts/2025-07-02-release-20257.markdown
+++ b/source/_posts/2025-07-02-release-20257.markdown
@@ -47,6 +47,11 @@ Stay cool, and enjoy the release!
- [Other noteworthy changes](#other-noteworthy-changes)
- [Full-screen code editors](#full-screen-code-editors)
- [Improved dashboard creation experience](#improved-dashboard-creation-experience)
+- [Patch releases](#patch-releases)
+ - [2025.7.1 - July 4](#202571---july-4)
+ - [2025.7.2 - July 14](#202572---july-14)
+ - [2025.7.3 - July 18](#202573---july-18)
+ - [2025.7.4 - July 28](#202574---july-28)
- [Need help? Join the community!](#need-help-join-the-community)
- [Backward-incompatible changes](#backward-incompatible-changes)
- [All changes](#all-changes)
@@ -136,6 +141,10 @@ This release introduces an all-new overview that leverages the redesigned Area c
+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!
+
+**Use [this feedback form](https://forms.clickup.com/2533032/f/2d9n8-32191/NK2MUOVKXQVH2L0NHI) to let us know your thoughts!**
+
## Integration sub-entries
Ever wondered why you had to enter your API keys for every AI agent you created, even though they all used the same key? Or why you had to authenticate for every calendar you added, regardless of the fact that they all shared the same account? Or why you couldn’t add MQTT devices from the UI?
@@ -357,6 +366,282 @@ The dialog for adding a new dashboard has been redesigned with a cleaner interfa
[@marcinbauer85]: https://github.com/marcinbauer85
[@quinnter]: https://github.com/quinnter
+## Patch releases
+
+We will also release patch releases for Home Assistant 2025.7 in July.
+These patch releases only contain bug fixes. Our goal is to release a patch
+release every Friday.
+
+### 2025.7.1 - July 4
+
+Happy Fourth of July! 🇺🇸
+
+- Set timeout for remote calendar ([@Thomas55555] - [#147024])
+- Fix missing port in samsungtv ([@epenet] - [#147962])
+- Bump ZHA to 0.0.62 ([@puddly] - [#147966])
+- Bump aiounifi to v84 ([@Kane610] - [#147987])
+- Fix state being incorrectly reported in some situations on Music Assistant players ([@marcelveldt] - [#147997])
+- Bump hass-nabucasa from 0.104.0 to 0.105.0 ([@ludeeus] - [#148040])
+- Fix Telegram bots using plain text parser failing to load on restart ([@hanwg] - [#148050])
+- Bump pyenphase to 2.2.0 ([@catsmanac] - [#148070])
+- Cancel enphase mac verification on unload. ([@catsmanac] - [#148072])
+- Bump aioamazondevices to 3.2.3 ([@chemelli74] - [#148082])
+- Update frontend to 20250702.1 ([@bramkragten] - [#148131])
+- [ci] Fix typing issue with aiohttp and aiosignal ([@cdce8p] - [#148141])
+- Bump venstarcolortouch to 0.21 ([@mlfreeman2] - [#148152])
+
+[#147024]: https://github.com/home-assistant/core/pull/147024
+[#147533]: https://github.com/home-assistant/core/pull/147533
+[#147962]: https://github.com/home-assistant/core/pull/147962
+[#147966]: https://github.com/home-assistant/core/pull/147966
+[#147987]: https://github.com/home-assistant/core/pull/147987
+[#147997]: https://github.com/home-assistant/core/pull/147997
+[#148040]: https://github.com/home-assistant/core/pull/148040
+[#148050]: https://github.com/home-assistant/core/pull/148050
+[#148070]: https://github.com/home-assistant/core/pull/148070
+[#148072]: https://github.com/home-assistant/core/pull/148072
+[#148082]: https://github.com/home-assistant/core/pull/148082
+[#148131]: https://github.com/home-assistant/core/pull/148131
+[#148141]: https://github.com/home-assistant/core/pull/148141
+[#148152]: https://github.com/home-assistant/core/pull/148152
+[@Kane610]: https://github.com/Kane610
+[@Thomas55555]: https://github.com/Thomas55555
+[@bramkragten]: https://github.com/bramkragten
+[@catsmanac]: https://github.com/catsmanac
+[@cdce8p]: https://github.com/cdce8p
+[@chemelli74]: https://github.com/chemelli74
+[@epenet]: https://github.com/epenet
+[@frenck]: https://github.com/frenck
+[@hanwg]: https://github.com/hanwg
+[@ludeeus]: https://github.com/ludeeus
+[@marcelveldt]: https://github.com/marcelveldt
+[@mlfreeman2]: https://github.com/mlfreeman2
+[@puddly]: https://github.com/puddly
+
+### 2025.7.2 - July 14
+
+- Squeezebox: Fix track selection in media browser ([@Hypfer] - [#147185])
+- Squeezebox: Fix tracks not having thumbnails ([@Hypfer] - [#147187])
+- Bump pysmlight to v0.2.7 ([@tl-sl] - [#148101])
+- Fix REST sensor charset handling to respect Content-Type header ([@bdraco] - [#148223])
+- Fix UTF-8 encoding for REST basic authentication ([@bdraco] - [#148225])
+- Bump pylamarzocco to 2.0.10 ([@zweckj] - [#148233])
+- Bump sharkiq to 1.1.1 ([@funkybunch] - [#148244])
+- bump motionblinds to 0.6.29 ([@starkillerOG] - [#148265])
+- Bump aiowebostv to 0.7.4 ([@thecode] - [#148273])
+- Bump `gios` to version 6.1.0 ([@bieniu] - [#148274])
+- Restore httpx compatibility for non-primitive REST query parameters ([@bdraco] - [#148286])
+- Bump pyenphase to 2.2.1 ([@catsmanac] - [#148292])
+- Add lamp states to smartthings selector ([@jvits227] - [#148302])
+- Fix Switchbot cloud plug mini current unit Issue ([@XiaoLing-git] - [#148314])
+- Bump pyswitchbot to 0.68.1 ([@zerzhang] - [#148335])
+- Handle binary coils with non default mappings in nibe heatpump ([@elupus] - [#148354])
+- Bump aioamazondevices to 3.2.8 ([@chemelli74] - [#148365])
+- Create own clientsession for lamarzocco ([@zweckj] - [#148385])
+- Bump pylamarzocco to 2.0.11 ([@zweckj] - [#148386])
+- Bump pySmartThings to 3.2.7 ([@joostlek] - [#148394])
+- Bump uiprotect to version 7.14.2 ([@RaHehl] - [#148453])
+- Bump hass-nabucasa from 0.105.0 to 0.106.0 ([@ludeeus] - [#148473])
+- Revert "Deprecate hddtemp" ([@edenhaus] - [#148482])
+- Fix entity_id should be based on object_id the first time an entity is added ([@jbouwh] - [#148484])
+- Bump aioimmich to 0.10.2 ([@mib1185] - [#148503])
+- Add workaround for sub units without main device in AVM Fritz!SmartHome ([@mib1185] - [#148507])
+- Add Home Connect resume command button when an appliance is paused ([@Diegorro98] - [#148512])
+- Use the link to the issue instead of creating new issues at Home Connect ([@Diegorro98] - [#148523])
+- Ensure response is fully read to prevent premature connection closure in rest command ([@jpbede] - [#148532])
+- Fix for Renson set Breeze fan speed ([@krmarien] - [#148537])
+- Remove vg argument from miele auth flow ([@astrandb] - [#148541])
+- Bump aiohttp to 3.12.14 ([@bdraco] - [#148565])
+- Update frontend to 20250702.2 ([@bramkragten] - [#148573])
+- Fix Google Cloud 504 Deadline Exceeded ([@luuquangvu] - [#148589])
+- Fix - only enable AlexaModeController if at least one mode is offered ([@jbouwh] - [#148614])
+- snoo: use correct value for right safety clip binary sensor ([@falconindy] - [#148647])
+- Bump nyt_games to 0.5.0 ([@hexEF] - [#148654])
+- Fix Charge Cable binary sensor in Teslemetry ([@Bre77] - [#148675])
+- Bump PyViCare to 2.50.0 ([@CFenner] - [#148679])
+- Fix hide empty sections in mqtt subentry flows ([@jbouwh] - [#148692])
+- Bump aioshelly to 13.7.2 ([@thecode] - [#148706])
+- Bump aioamazondevices to 3.2.10 ([@chemelli74] - [#148709])
+
+[#147185]: https://github.com/home-assistant/core/pull/147185
+[#147187]: https://github.com/home-assistant/core/pull/147187
+[#147533]: https://github.com/home-assistant/core/pull/147533
+[#148101]: https://github.com/home-assistant/core/pull/148101
+[#148171]: https://github.com/home-assistant/core/pull/148171
+[#148223]: https://github.com/home-assistant/core/pull/148223
+[#148225]: https://github.com/home-assistant/core/pull/148225
+[#148233]: https://github.com/home-assistant/core/pull/148233
+[#148244]: https://github.com/home-assistant/core/pull/148244
+[#148265]: https://github.com/home-assistant/core/pull/148265
+[#148273]: https://github.com/home-assistant/core/pull/148273
+[#148274]: https://github.com/home-assistant/core/pull/148274
+[#148286]: https://github.com/home-assistant/core/pull/148286
+[#148292]: https://github.com/home-assistant/core/pull/148292
+[#148302]: https://github.com/home-assistant/core/pull/148302
+[#148314]: https://github.com/home-assistant/core/pull/148314
+[#148335]: https://github.com/home-assistant/core/pull/148335
+[#148354]: https://github.com/home-assistant/core/pull/148354
+[#148365]: https://github.com/home-assistant/core/pull/148365
+[#148385]: https://github.com/home-assistant/core/pull/148385
+[#148386]: https://github.com/home-assistant/core/pull/148386
+[#148394]: https://github.com/home-assistant/core/pull/148394
+[#148453]: https://github.com/home-assistant/core/pull/148453
+[#148473]: https://github.com/home-assistant/core/pull/148473
+[#148482]: https://github.com/home-assistant/core/pull/148482
+[#148484]: https://github.com/home-assistant/core/pull/148484
+[#148503]: https://github.com/home-assistant/core/pull/148503
+[#148507]: https://github.com/home-assistant/core/pull/148507
+[#148512]: https://github.com/home-assistant/core/pull/148512
+[#148523]: https://github.com/home-assistant/core/pull/148523
+[#148532]: https://github.com/home-assistant/core/pull/148532
+[#148537]: https://github.com/home-assistant/core/pull/148537
+[#148541]: https://github.com/home-assistant/core/pull/148541
+[#148565]: https://github.com/home-assistant/core/pull/148565
+[#148573]: https://github.com/home-assistant/core/pull/148573
+[#148589]: https://github.com/home-assistant/core/pull/148589
+[#148614]: https://github.com/home-assistant/core/pull/148614
+[#148647]: https://github.com/home-assistant/core/pull/148647
+[#148654]: https://github.com/home-assistant/core/pull/148654
+[#148675]: https://github.com/home-assistant/core/pull/148675
+[#148679]: https://github.com/home-assistant/core/pull/148679
+[#148692]: https://github.com/home-assistant/core/pull/148692
+[#148706]: https://github.com/home-assistant/core/pull/148706
+[#148709]: https://github.com/home-assistant/core/pull/148709
+[@Bre77]: https://github.com/Bre77
+[@CFenner]: https://github.com/CFenner
+[@Diegorro98]: https://github.com/Diegorro98
+[@Hypfer]: https://github.com/Hypfer
+[@RaHehl]: https://github.com/RaHehl
+[@XiaoLing-git]: https://github.com/XiaoLing-git
+[@astrandb]: https://github.com/astrandb
+[@bdraco]: https://github.com/bdraco
+[@bieniu]: https://github.com/bieniu
+[@bramkragten]: https://github.com/bramkragten
+[@catsmanac]: https://github.com/catsmanac
+[@chemelli74]: https://github.com/chemelli74
+[@edenhaus]: https://github.com/edenhaus
+[@elupus]: https://github.com/elupus
+[@falconindy]: https://github.com/falconindy
+[@frenck]: https://github.com/frenck
+[@funkybunch]: https://github.com/funkybunch
+[@hexEF]: https://github.com/hexEF
+[@jbouwh]: https://github.com/jbouwh
+[@joostlek]: https://github.com/joostlek
+[@jpbede]: https://github.com/jpbede
+[@jvits227]: https://github.com/jvits227
+[@krmarien]: https://github.com/krmarien
+[@ludeeus]: https://github.com/ludeeus
+[@luuquangvu]: https://github.com/luuquangvu
+[@mib1185]: https://github.com/mib1185
+[@starkillerOG]: https://github.com/starkillerOG
+[@thecode]: https://github.com/thecode
+[@tl-sl]: https://github.com/tl-sl
+[@zerzhang]: https://github.com/zerzhang
+[@zweckj]: https://github.com/zweckj
+
+### 2025.7.3 - July 18
+
+- Handle connection issues after websocket reconnected in homematicip_cloud ([@hahn-th] - [#147731])
+- Fix Shelly `n_current` sensor removal condition ([@bieniu] - [#148740])
+- Bump pySmartThings to 3.2.8 ([@joostlek] - [#148761])
+- Bump Tesla Fleet API to 1.2.2 ([@Bre77] - [#148776])
+- Use ffmpeg for generic cameras in go2rtc ([@edenhaus] - [#148818])
+- Add guard to prevent exception in Sonos Favorites ([@PeteRager] - [#148854])
+- Fix button platform parent class in Teslemetry ([@Bre77] - [#148863])
+- Bump pyenphase to 2.2.2 ([@catsmanac] - [#148870])
+- Bump gios to version 6.1.1 ([@bieniu] - [#148414])
+- Bump `gios` to version 6.1.2 ([@bieniu] - [#148884])
+- Bump async-upnp-client to 0.45.0 ([@StevenLooman] - [#148961])
+- Pass Syncthru entry to coordinator ([@joostlek] - [#148974])
+- Update frontend to 20250702.3 ([@bramkragten] - [#148994])
+- Bump PySwitchbot to 0.68.2 ([@bdraco] - [#148996])
+- Ignore MQTT sensor unit of measurement if it is an empty string ([@jbouwh] - [#149006])
+- Bump aioamazondevices to 3.5.0 ([@chemelli74] - [#149011])
+
+[#147533]: https://github.com/home-assistant/core/pull/147533
+[#147731]: https://github.com/home-assistant/core/pull/147731
+[#148171]: https://github.com/home-assistant/core/pull/148171
+[#148414]: https://github.com/home-assistant/core/pull/148414
+[#148725]: https://github.com/home-assistant/core/pull/148725
+[#148740]: https://github.com/home-assistant/core/pull/148740
+[#148761]: https://github.com/home-assistant/core/pull/148761
+[#148776]: https://github.com/home-assistant/core/pull/148776
+[#148818]: https://github.com/home-assistant/core/pull/148818
+[#148854]: https://github.com/home-assistant/core/pull/148854
+[#148863]: https://github.com/home-assistant/core/pull/148863
+[#148870]: https://github.com/home-assistant/core/pull/148870
+[#148884]: https://github.com/home-assistant/core/pull/148884
+[#148961]: https://github.com/home-assistant/core/pull/148961
+[#148974]: https://github.com/home-assistant/core/pull/148974
+[#148994]: https://github.com/home-assistant/core/pull/148994
+[#148996]: https://github.com/home-assistant/core/pull/148996
+[#149006]: https://github.com/home-assistant/core/pull/149006
+[#149011]: https://github.com/home-assistant/core/pull/149011
+[@Bre77]: https://github.com/Bre77
+[@PeteRager]: https://github.com/PeteRager
+[@StevenLooman]: https://github.com/StevenLooman
+[@bdraco]: https://github.com/bdraco
+[@bieniu]: https://github.com/bieniu
+[@bramkragten]: https://github.com/bramkragten
+[@catsmanac]: https://github.com/catsmanac
+[@chemelli74]: https://github.com/chemelli74
+[@edenhaus]: https://github.com/edenhaus
+[@frenck]: https://github.com/frenck
+[@hahn-th]: https://github.com/hahn-th
+[@jbouwh]: https://github.com/jbouwh
+[@joostlek]: https://github.com/joostlek
+
+### 2025.7.4 - July 28
+
+- Keep entities of dead Z-Wave devices available ([@AlCalzone] - [#148611])
+- Fix warning about failure to get action during setup phase ([@mback2k] - [#148923])
+- Fix a bug in rainbird device migration that results in additional devices ([@allenporter] - [#149078])
+- Fix multiple webhook secrets for Telegram bot ([@hanwg] - [#149103])
+- Bump pyschlage to 2025.7.2 ([@dknowles2] - [#149148])
+- Fix Matter light get brightness ([@jvmahon] - [#149186])
+- Fix brightness_step and brightness_step_pct via lifx.set_state ([@Djelibeybi] - [#149217])
+- Add Z-Wave USB migration confirm step ([@MartinHjelmare] - [#149243])
+- Add fan off mode to the supported fan modes to fujitsu_fglair ([@crevetor] - [#149277])
+- Update Tesla OAuth Server in Tesla Fleet ([@Bre77] - [#149280])
+- Update slixmpp to 1.10.0 ([@gaaf] - [#149374])
+- Bump aioamazondevices to 3.5.1 ([@chemelli74] - [#149385])
+- Bump pysuezV2 to 2.0.7 ([@jb101010-2] - [#149436])
+- Bump habiticalib to v0.4.1 ([@tr4nt0r] - [#149523])
+
+[#147533]: https://github.com/home-assistant/core/pull/147533
+[#148171]: https://github.com/home-assistant/core/pull/148171
+[#148611]: https://github.com/home-assistant/core/pull/148611
+[#148725]: https://github.com/home-assistant/core/pull/148725
+[#148923]: https://github.com/home-assistant/core/pull/148923
+[#149024]: https://github.com/home-assistant/core/pull/149024
+[#149078]: https://github.com/home-assistant/core/pull/149078
+[#149103]: https://github.com/home-assistant/core/pull/149103
+[#149148]: https://github.com/home-assistant/core/pull/149148
+[#149186]: https://github.com/home-assistant/core/pull/149186
+[#149217]: https://github.com/home-assistant/core/pull/149217
+[#149243]: https://github.com/home-assistant/core/pull/149243
+[#149277]: https://github.com/home-assistant/core/pull/149277
+[#149280]: https://github.com/home-assistant/core/pull/149280
+[#149374]: https://github.com/home-assistant/core/pull/149374
+[#149385]: https://github.com/home-assistant/core/pull/149385
+[#149436]: https://github.com/home-assistant/core/pull/149436
+[#149523]: https://github.com/home-assistant/core/pull/149523
+[@AlCalzone]: https://github.com/AlCalzone
+[@Bre77]: https://github.com/Bre77
+[@Djelibeybi]: https://github.com/Djelibeybi
+[@MartinHjelmare]: https://github.com/MartinHjelmare
+[@allenporter]: https://github.com/allenporter
+[@chemelli74]: https://github.com/chemelli74
+[@crevetor]: https://github.com/crevetor
+[@dknowles2]: https://github.com/dknowles2
+[@frenck]: https://github.com/frenck
+[@gaaf]: https://github.com/gaaf
+[@hanwg]: https://github.com/hanwg
+[@jb101010-2]: https://github.com/jb101010-2
+[@jvmahon]: https://github.com/jvmahon
+[@mback2k]: https://github.com/mback2k
+[@tr4nt0r]: https://github.com/tr4nt0r
+
## Need help? Join the community!
Home Assistant has a great community of users who are all more than willing
diff --git a/source/_posts/2025-07-03-nuki-joins-works-with-home-assistant.markdown b/source/_posts/2025-07-03-nuki-joins-works-with-home-assistant.markdown
new file mode 100644
index 00000000000..5e1f9bb44e9
--- /dev/null
+++ b/source/_posts/2025-07-03-nuki-joins-works-with-home-assistant.markdown
@@ -0,0 +1,70 @@
+---
+layout: post
+title: "Nuki joins Works with Home Assistant"
+description: "Three new lock types are joining, all certified by our team to provide the best experience possible with Home Assistant"
+date: 2025-07-03 00:00:01
+date_formatted: "July 3, 2025"
+author: Miranda Bishop
+comments: true
+categories: Works-with-Home-Assistant
+og_image: /images/blog/2025-07-nuki/art.jpg
+---
+
+
+
+We're thrilled to welcome [Nuki](https://nuki.io/) to the [Works with Home Assistant](https://works-with.home-assistant.io/) program! Nuki creates some slick-looking smart locks that you can fit to most doors (or even on top of existing locks). They are constantly pioneering new and exciting features, while also using the open standards we support. Nuki is today bringing three different lock types to the program, all certified by our team to provide the best experience possible with Home Assistant.
+
+## Unlocking their origin
+
+Nuki started just over 10 years ago, with their first smart lock that was called the 'magic black box'. It was this award-winning design that evolved into the sleek Nuki Smart Locks that are available today. Keeping everything in the family, the brand was started by brothers Martin and Jürgen. Frustrated with the hassle of carrying a door key in their sports kit, the brothers launched a successful Kickstarter and have been innovating ever since. They design their smart locks in Austria and manufacture them in Europe. Their locks are available across Europe, and in early July, they launched the Nuki Smart Lock in the U.S.
+
+Nuki devices are certified for use with the [Home Assistant Matter integration](/integrations/matter/), which is now [officially certified](/blog/2025/03/10/matter-certification/). Like all 'Works with' certified devices, Nuki locks prioritize local control, so you can manage your day-to-day home security without relying on a cloud connection.
+
+
+
"Joining the 'Works with Home Assistant' program is a logical step for us. We believe strongly in the power of open ecosystems and giving control to our customers. Home Assistant represents a vibrant community dedicated to innovation and customization, and we are thrilled to align our products with this vision. This integration ensures our customers can build the smart home they want, with the products they trust. The 'Works with Home Assistant' certification provides customers with the confidence that Nuki's products have been tested for compatibility and offer a smooth integration experience."
+- Matthias Kerstner, Head of Product at Nuki.
+
+
+## Devices
+
+
This lock is turning heads faster than it turns bolts
+
+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.
+
+Our team has been busy testing the Nuki locks for some time and has certified the following Matter-over-Thread enabled devices. It's important to note that to set up the lock, calibrate it, and activate Matter you will need to use the Nuki app. However, there is no hard requirement for a cloud account or account registration in order to use these locks. Once the device is active and connected via Matter, you can manage it purely through Home Assistant, and can even delete the app.
+
+- [Nuki Smart Lock Go](https://nuki.io/en-uk/products/smart-lock-go)
+- [Nuki Smart Lock Pro](https://nuki.io/en-uk/products/smart-lock-pro-5th-gen)
+- [Nuki Smart Lock Ultra](https://nuki.io/en-uk/products/smart-lock-ultra)
+
+## Insane speeds, literally
+
+The devices certified include two cylindrical models, the Nuki Smart Lock Pro and the Nuki Smart Lock Ultra, which both feature a brushless motor and three speed settings. The speediest of these is called the 'Insane' setting. This ultra-fast setting is ideal for those in a hurry, but you can also pick from 'standard' or 'gentle' to move at a more leisurely pace. The gentle setting is also perfect for quieter unlocking, so you're not disturbing others if you're coming home after a night shift or an early morning jog.
+
+We love that the cylindrical devices come with a rechargeable battery to reduce e-waste. Each cylindrical lock comes with both white and black band options, so you can match your existing hardware or your home's style. The Nuki Smart Lock Pro can retrofit over a current lock, whereas the Nuki Smart Lock Ultra comes with its own cylinder.
+
+If you're looking for a solid entry-level choice instead, the Nuki Smart Lock Go is a great option, which uses four AA batteries. Both the Smart Lock Go and Smart Lock Pro can be installed in under five minutes, with no drilling or special tools required, which may mean even if you're renting you could install a smart lock. Works with Home Assistant is all about providing more choice to the community, and Nuki is expanding the smart lock offerings.
+
+## A keyless future
+
+All of the models listed work locally, as this is a requirement of the 'Works with' program so that you can ensure you feel safe and secure in your smart home. However, some users may wish to access these devices remotely too, allowing you to unlock the door for guests, contractors, family, or friends. If you're looking for remote access, this can either be provided by the Nuki App, or via your Home Assistant system with something like [Home Assistant Cloud](/cloud/) (which supports the development of Home Assistant but also helps bring more 'Works with' partners to the program 🤝).
+
+We're really excited to have Nuki join our certified devices, and see the use cases the community will come up with to integrate their smart locks into the rest of their smart home.
+
+### FAQ ON WORKS WITH HOME ASSISTANT
+
+***Q: If I have a device that is not listed under 'Works with Home Assistant' does this mean it's not supported?***
+
+A: Most Nuki locks will work via Matter with Home Assistant and we have even tried out a couple of older locks with good results. However, we have only officially tested and certified the devices listed above. If there is any other device missing from this list it just means that it hasn't gone through testing with our team or doesn't fit the requirements of the program. It might function well, and may be added to the testing schedule later down the road, or it might work under a different connectivity type that we don't currently test under the program.
+
+***Q: Ok, so what's the point of the Works with program?***
+
+A: It highlights the devices we know work well with Home Assistant and the brands that make a long-term commitment to keeping support for these devices going. We look for brands that will bring their key functionality into Home Assistant, operate locally without the need for cloud logins, and continue to do so long-term.
+
+***Q: How were these devices tested?***
+
+A: All devices in this list were tested using a standard Home Assistant Yellow with the built-in Thread border router and our [certified Matter Integration](/integrations/matter/). If you have another hub, border router setup, or integration, that's not a problem. We test against these as they are the most effective way for our team to certify within our ecosystem.
+
+***Q: Will you be adding more Nuki devices to the program?***
+
+A: All of the locks Nuki currently sells are now represented here in the 'Works with' program. We're thrilled to foster a close relationship with the team at Nuki to work together on any upcoming releases or add in further products that are not yet listed here.
diff --git a/source/_posts/2025-07-15-zooz-joins-works-with-home-assistant.markdown b/source/_posts/2025-07-15-zooz-joins-works-with-home-assistant.markdown
new file mode 100644
index 00000000000..934a4b6b3ed
--- /dev/null
+++ b/source/_posts/2025-07-15-zooz-joins-works-with-home-assistant.markdown
@@ -0,0 +1,124 @@
+---
+layout: post
+title: "Zooz joins Works with Home Assistant"
+description: "With a big selection of Z-Wave devices, which support Long-Range in select regions, opening up a lot of new options for your smart home."
+date: 2025-07-15 00:00:01
+date_formatted: "July 15, 2025"
+author: Miranda Bishop
+comments: true
+categories: Works-with-Home-Assistant
+og_image: /images/blog/2025-07-zooz/art.jpg
+---
+
+
+
+Our [Works with Home Assistant](https://works-with.home-assistant.io/) program is expanding once again, and this time we’re excited to announce Zooz is joining us! We have tested many new devices of all different types, ensuring they provide the best experience possible with Home Assistant. As well as classic staples for the smart home, they also bring some very cool flood protection devices to help safeguard your home.
+
+These will be the first certified [Z-Wave](/integrations/zwave_js/) devices added to the program in some time, and are just part of the exciting future the Home Assistant community and Zooz see for this smart home protocol.
+
+## Zooz zooms in
+
+Zooz started out not as a manufacturer, but as a retailer of smart devices. They focused so much on customer support that they soon realized they could do a better job than manufacturers already in the market, and so turned instead to creating their own products. They focus on Z-Wave for its interoperability and security, and they include easy-to-understand installation guides with these devices. They also have a wide knowledge base on their website and a very responsive support team.
+
+As Z-Wave experts, they’re members of the Z-Wave Alliance (where [Paulus is also a member](/blog/2024/09/24/we-are-joining-the-z-wave-alliance-board/) as the voice of the open source community). While Zooz is based in the USA, many of their products are available worldwide.
+
+## It takes Zooz
+
+Zooz has really embraced the Home Assistant community. Agnes, their VP of Brand and Partnership Support, recently spoke to the team over at the Home Assistant podcast about their startup journey. She also came along to our Community Day in Brooklyn, hosted by our very own Product Lead, [Madelena](https://github.com/madelena). It’s awesome to see manufacturers get out and connect with our community members.
+
+
+
+
+
"Zooz has been contributing quality hardware to the smart home community for over 10 years now and our biggest takeaway is that thoughtful integration is key for our customers. We recognize that our devices are part of an ecosystem and that's why we are so excited to partner with Home Assistant, a platform we highly respect for its commitment to making products work together seamlessly. I especially appreciate how quickly Home Assistant embraced Z-Wave Long Range and how easy it is to set up Z-Wave on a brand new system thanks to hardware like Home Assistant Green. We look forward to connecting with the Home Assistant community, learning together, and creating new devices driven by your feedback."
+- Agnes Lorenz, VP, Brand and Partnership Support, Zooz.
+
+
+## Devices
+
+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.
+
+Zooz has had a large group of devices certified, one of the largest number of devices we’ve ever certified for a launch into the program. Kudos to the foundation team, and Zooz for making such a great variety of new devices available to our community.
+
+**Leak Protection**
+
+[ZAC36 Titan Water Valve Actuator](https://www.getzooz.com/zooz-zac36-titan-water-valve-actuator/)
+
+**Plugs**
+
+[ZEN04 Smart Plug](https://www.getzooz.com/zooz-zen04-smart-plug/)
+
+[ZEN05 Outdoor Plug](https://www.getzooz.com/zooz-zen05-outdoor-smart-plug/)
+
+**Relays**
+
+[ZEN16 Multi Relay](https://www.getzooz.com/zooz-zen16-multirelay/)
+
+[ZEN51 Dry Contact Relay](https://www.getzooz.com/zooz-zen51-dry-contact-relay/)
+
+[ZEN52 Double Relay](https://www.getzooz.com/zooz-zen52-double-relay/)
+
+[ZEN53 DC Motor Controller](https://www.getzooz.com/zooz-zen53-dc-motor-controller/)
+
+**Lighting Switches**
+
+[ZEN30 Double Switch](https://www.getzooz.com/zooz-zen30-double-switch/)
+
+[ZEN32 Scene Controller](https://www.getzooz.com/zooz-zen32-scene-controller/)
+
+[ZEN71 On Off Switch](https://www.getzooz.com/zooz-zen71-on-off-switch/)
+
+[ZEN72 Dimmer](https://www.getzooz.com/zooz-zen72-dimmer/)
+
+[ZEN74 Toggle Dimmer](https://www.getzooz.com/zooz-zen74-s2-toggle-dimmer/)
+
+[ZEN76 S2 On Off Switch](https://www.getzooz.com/zooz-zen76-s2-700-series-switch/)
+
+[ZEN77 S2 Dimmer](https://www.getzooz.com/zooz-zen77-s2-dimmer/)
+
+**Sensors**
+
+[ZSE11 Q Sensor (4in1)](https://www.getzooz.com/zooz-zse11-q-sensor/)
+
+[ZSE18 Motion Sensor](https://www.getzooz.com/zooz-zse18-s2-motion-sensor/)
+
+[ZSE41 Open / Close XS Sensor](https://www.getzooz.com/zooz-zse41-open-close-xs-sensor/)
+
+[ZSE42 Water Leak XS Sensor](https://www.getzooz.com/zooz-zse42-water-leak-xs-sensor/)
+
+[ZSE43 Tilt Shock XS Sensor](https://www.getzooz.com/zooz-zse43-tilt-shock-xs-sensor/)
+
+[ZSE44 Temperature Humidity XS Sensor](https://www.getzooz.com/zooz-zse44-temperature-humidity-xs-sensor/)
+
+[ZSE70 Outdoor Motion Sensor](https://www.getzooz.com/zse70-outdoor-motion-sensor/)
+
+## Frequencies and firmware
+
+If you’re based in North America, all new devices will come with Z-Wave Long Range (ZWLR) as standard. If you are based elsewhere, like in Europe, Long Range won’t be enabled quite yet. The reason is that even though the Z-Wave Long Range protocol has been available for some time in North America, it was only released in Europe in April 2025, as certification took a bit longer. The nice thing about Zooz’s North American 700 series and European 800 series Z-Wave, is that ZWLR can be enabled via an over-the-air (OTA) firmware update, so hopefully everyone will be taking part in the Z-Wave Long Range revolution soon. Watch this space for a not-so-secret Home Assistant Z-Wave hardware announcement coming your way…
+
+Z-Wave Long Range opens up a whole new world of options and makes for an even more flexible smart home. Maybe you have a large backyard, or an awkwardly shaped long, but narrow home that is hard to get other protocols to cover adequately. Or perhaps you have devices that are just too far away for other protocols. A common example is wanting a way to get notified when the mailbox at the front of your driveway is opened or closed.
+
+Many of the certified devices can function outdoors or be purchased with accessories to make them waterproof. Speaking on a personal note, we had a leak in our garage a year or so ago after some bad weather. Other protocols couldn’t reach that far, and we had no way to be notified. I cannot wait for an easy way to be notified across that bigger distance, and avoid all the unpleasant clean-up.
+
+It’s great to read stories on social media or our forums where smart home devices have kicked in and saved the day, like getting that all-important notification or cutting off the water supply with something like Zooz’s valve actuator.
+
+
+
+Z-Wave, like other open standards we support, works locally, and all of the devices listed above will work locally, without the need for any extra cloud connection or apps. Remember, if you’re also looking for remote access to make sure you don’t miss any critical notifications while you’re away from home, an easy way to get this set up is to subscribe to [Home Assistant Cloud](/cloud/). Not only will this help you monitor your smart home remotely, but you’ll also be supporting the development of Home Assistant.
+
+## FAQs
+
+**Q: If I have a device that is not listed under "Works with Home Assistant" does this mean it’s not supported?**
+
+A: No! It just means that it hasn’t gone through a testing schedule with our team or doesn’t fit the requirements of the program. It might function perfectly well, but be added to the testing schedule later down the road, or it might work under a different connectivity type that we don’t currently test under the program.
+
+**Q: OK, so what’s the point of the Works with program?**
+
+A: It highlights the devices we know work well with Home Assistant and the brands that make a long-term commitment to keeping support for these devices going. The certification agreement specifies that the devices must have the expected functionality within Home Assistant, operate locally without the need for cloud, and will continue to do so long-term.
+
+**Q: How were these devices tested?**
+
+A: All devices in this list were tested using a standard HA Green Hub with our Z-Wave Integration. If you have another hub integration that’s not a problem, but we test against these as they are the most effective way for our team to certify within our ecosystem.
+
+**Q: Will you be adding more Zooz devices to the program?**
+
+A: Absolutely! We’re thrilled to foster a close relationship with the team at Zooz to work together on any upcoming releases or add in further products that are not yet listed here.
diff --git a/source/_posts/2025-07-23-companion-app-for-android.markdown b/source/_posts/2025-07-23-companion-app-for-android.markdown
new file mode 100644
index 00000000000..b0c251c7aa6
--- /dev/null
+++ b/source/_posts/2025-07-23-companion-app-for-android.markdown
@@ -0,0 +1,105 @@
+---
+layout: post
+title: "Companion app for Android: It’s been a while"
+description: "The app will now have a dedicated developer. We recap the two years of development and the future of the app."
+date: 2025-07-23 00:00:01
+date_formatted: "July 23, 2025"
+author: Timothy Nibeaudeau
+comments: true
+categories: Android
+og_image: /images/blog/2025-07-android-companion/art.png
+---
+
+
+
+The Home Assistant companion app for Android just keeps getting better with every release, and recently, it gained some dedicated support to help accelerate its development. Several months ago, I (Timothy Nibeaudeau, also known as [@TimoPtr](https://github.com/TimoPtr)) joined the Open Home Foundation as our dedicated Android developer 🎉.
+
+It’s been [over two years](/blog/2023/03/30/android-20233/), and hundreds of thousands of installs, since we’ve published a dedicated update for our community on the development of the app, and I’d like to give you a quick update on recent improvements and what’s coming next.
+
+## Behind the Screens
+
+In the beginning, all of Home Assistant’s official [companion apps](https://companion.home-assistant.io/) were developed by the community in their spare time, with many still being part-time projects. It’s incredible the work they put into building these apps. This gives you not just the ability to view your Home Assistant instance on the go (or around the house) and takes advantage of many of the sensors available on the device while providing rich notifications to users.
+
+
Very impressive growth in installs over the years!
+
+The Android app alone has seen over [2,700](https://github.com/home-assistant/android) contributions! It's a lot of work keeping up with Android versions, new capabilities of Home Assistant, and bug fixes. This app doesn’t just support Android phones and tablets but also devices they connect to, specifically Android Auto, Android Automotive, and Wear OS.
+
+### Progress in the millions
+
+They did all this work while reaching nearly **1.5 million installs**, with over 6 million total installs over the years. There are 400,000 daily active users and 1 million monthly active users. The phone app also has a very nice **4.3-star rating** on the [Play Store](https://play.google.com/store/apps/details?id=io.homeassistant.companion.android) and **2,800 stars** on [GitHub](https://github.com/home-assistant/android) 🤩. This feedback really helps us improve.
+
+It's been over a year and a half since the Apple companion apps gained a full-time developer with the addition of the amazing [Bruno Pantaleão](/blog/2023/12/27/companion-app-for-ios-202312-lets-go/) 😎. Around the same time as Bruno was hired, we began looking for an Android developer, and let's say that took a little longer.
+
+My name is Timothy Nibeaudeau, and as mentioned at the start, I’m your new dedicated Android engineer. As someone who has been using Home Assistant since 2018, I’m passionate about open source and smart home technology. I’ve been working in software development for nearly a decade, developing apps for all sorts of projects from medical-grade IoT products to smart toothbrushes 🪥.
+
+I am committed to bringing my talents to the project, but I cannot do it alone. The community is what makes Home Assistant special, and together, we can achieve even more. Specifically, I’d like to thank [@dshokouhi](https://github.com/dshokouhi), [@jpelgrom](https://github.com/jpelgrom), and [@JBassett](https://github.com/JBassett) for their years of work making this app what it is today!
+
+I’d also like to thank you! Your support (by subscribing to [Home Assistant Cloud](/cloud/) and buying [official hardware](https://www.nabucasa.com/#:~:text=the%20first%20boot.-,Official%20Home%20Assistant%20hardware,-Get%20the%20best)) allows the [Open Home Foundation](https://www.openhomefoundation.org/) to hire dedicated developers. Dedicated developers keep development focused, helping the community to work together in delivering the feature they're passionate about.
+
+## Since our last blog
+
+
+
+Like I said at the top, it's been a long time (over two years 🫢) since we’ve published a blog highlighting the improvements made to the Android app. You’ve probably been enjoying these new features for some time, but in case you missed it, here are some of the biggest improvements made by the community over that time.
+
+- Health Connect sensors linked to your Android phone have been added, including heart rate, fitness data, and glucose levels (as always, you have complete control over what you share with your Home Assistant instance, and that data stays local).
+
+- By working with Android [natively](/blog/2023/07/20/year-of-the-voice-chapter-3/#native-assist-on-android), Assist can now replace your phone’s (or Wear OS devices') assistant.
+
+- You can now set the Home Assistant app as your device's default launcher, which is great for wall panel setups.
+
+- We’ve updated our widgets to support some of the new features, like To-do lists.
+
+- Wear OS has had its Tile capabilities improved and a new thermostat tile was added.
+
+- There are now more Android Auto sensors, like speed and remaining range.
+
+- A simpler way to connect Wi-Fi compatible devices to your home network (such as the Home Assistant Voice Preview Edition) using [Improv Wi-Fi](https://www.improv-wifi.com/) over Bluetooth (an open standard for connecting devices to Wi-Fi using Bluetooth, built by the Open Home Foundation).
+
+- The Z-Wave device onboarding experience has been improved with the addition of a QR code scanner.
+
+- We’ve also improved the speed and stability of the app.
+
+- It’s now easier than ever for new contributors to jump in and start helping with the app (much more on that below 👇).
+
+For a full list of the app's capabilities, check out our [breakdown of the companion apps from the companion documentation](https://companion.home-assistant.io/docs/core/).
+
+## What’s next for our Android app
+
+In our latest update of the Android app [2025.7.1](https://github.com/home-assistant/android/releases/tag/2025.7.1), we’ve added a couple of useful features. Including a new basic invite flow, which will be shared between Android and iOS, adding a good layer of consistency between our most-used companion apps. The idea is to make it much more seamless to add new users or set up new devices (no need to type the URL in your Android Automotive device!).
+
+We’ve also made [My Links](https://my.home-assistant.io/) work better. If you’re unfamiliar with My Links, they’re those cool links ([that anyone can make](https://my.home-assistant.io/create-link/)) that bring you right to an integration, blueprint, add-on, or settings page. They have always worked great on desktop, but up until recently, they were a bit clunky to use on mobile. Now you can get to the link's destination with a single click.
+
+Android has many different screen sizes and layouts, and we’re working to better leverage them with edge-to-edge support. Our recent update has edge-to-edge working on Android native UI elements like the settings page, and we’re looking to implement them elsewhere in future updates so we can make the most of your screen real estate.
+
+## Important changes for Android users
+
+
A huge percentage of our users are on pretty new versions of Android, but we want to support as many older devices as possible.
+
+One significant change on the horizon is ending support for Android 5.0 and 5.1 (also known as Android Lollipop, released in 2014… it had a good run 🫡). [Google has announced](https://developer.android.com/jetpack/androidx/versions/all-channel#:~:text=Note%3A%20Starting%20in%20June%202025%2C%20new%20releases%20of%20many%20AndroidX%20libraries%20previously%20targeting%20minSdk%2021%20will%20be%20updated%20to%20require%20minSdk%2023.%20Some%20libraries%20won%27t%20be%20re%2Dreleased%20and%20will%20therefore%20continue%20to%20support%20minSdk%2021.) that starting in June 2025, many AndroidX libraries will require a minimum of Android 6.0 (API 23). Google has already updated [Firebase Cloud Messaging](https://firebase.google.com/support/release-notes/android#messaging_v25-0-0) to require this as well. This means we will need to stop supporting Android 5.0 and 5.1 (API 21 and 22) to keep up with new features and security updates. Less than 0.3% of installs are on Android versions below API 23 (Android 6.0), and we always work to keep older devices working, but sometimes our hand is forced. If you are using an older device, the app will not be removed, but you will not receive new updates once we make this change. We plan to make one final release for these older versions before support ends. This release is expected before the end of the summer, so you will have the latest updates available for your device before we move on.
+
+## Let’s work together
+
+We want to make it easier for you to contribute, whether you are a seasoned developer or just getting started. This includes making the contribution journey smoother and giving people an easy place to start. We’ve even compiled a list of [“first issues” to tackle for prospective developers](https://github.com/home-assistant/android/contribute) looking to help out. We’ve started work on dedicated [Android developer documentation](https://developers.home-assistant.io/docs/android), which will give in-depth information about the inner workings of this app.
+
+We’ve made many behind-the-scenes changes to improve the developer experience (defining best practices, linters for faster/automated feedback, and continuous integration for quicker feedback on PRs). Our focus is always on improving stability, reducing crash rates, and catching issues early. One example of this is our new fail-fast [approach](https://developers.home-assistant.io/docs/android/best_practices/?_highlight=failfa#fail-fast), which has already helped us catch and fix issues early.
+
+We want more Android native/exclusive features while also balancing the need to keep parity between the Android and iOS companion apps (the iOS app is excellent, and each app’s community is learning so much from each other).
+
+### How you can help
+
+The companion app for Android is a community effort, and your help makes a real difference. Here is how you can get involved:
+
+- [Join the beta program](https://play.google.com/apps/testing/io.homeassistant.companion.android) to test new features.
+
+- [Suggest a feature](https://community.home-assistant.io/c/feature-requests/13) and share your ideas.
+
+- Help triage issues on [GitHub](https://github.com/home-assistant/android/issues), [Discord](https://discord.com/channels/330944238910963714/1284965926336335993), or the [Home Assistant forum](https://community.home-assistant.io/tag/android).
+
+- Join the Android Project [thread](https://discord.com/channels/330944238910963714/1346948551892009101) on Discord. (Head to _Channels & Roles_ and select “I want to contribute developer skills!” to assign yourself the Developer role if you can’t see the thread.)
+
+- [Submit issues](https://github.com/home-assistant/android/issues), review pull requests, [start your first pull request](https://github.com/home-assistant/android/issues?q=is%3Aissue+state%3Aopen+label%3A%22good+first+issue%22), and ask questions — your feedback is valuable.
+
+- Help us [translate the app](https://developers.home-assistant.io/docs/translations).
+
+Thanks again for [making all this possible](/cloud/). I look forward to your help making this app even more amazing!
diff --git a/source/_posts/2025-07-28-shelly-joins-works-with-home-assistant.markdown b/source/_posts/2025-07-28-shelly-joins-works-with-home-assistant.markdown
new file mode 100644
index 00000000000..81c6de2a7bd
--- /dev/null
+++ b/source/_posts/2025-07-28-shelly-joins-works-with-home-assistant.markdown
@@ -0,0 +1,84 @@
+---
+layout: post
+title: "Shelly joins Works with Home Assistant"
+description: "With a great selection of switches and relays built for Z-Wave."
+date: 2025-07-29 00:00:01
+date_formatted: "July 29, 2025"
+author: Miranda Bishop
+comments: true
+categories: Works-with-Home-Assistant
+og_image: /images/blog/2025-07-shelly/art.jpg
+---
+
+
+
+We’re excited to welcome [Shelly](https://www.shelly.com/) to the [Works with Home Assistant](https://works-with.home-assistant.io/) program! Shelly is very well-established in both our ecosystem and the smart home world, so it’s great to formally certify a selection of their Z-Wave devices.
+
+Their retrofit smart switches and relays are amazing for turning all sorts of _dumb_ devices, like light fixtures or ceiling fans, into devices you can easily control in _smart_ new ways. Also, being Works with certified means they have been thoroughly tested, ensuring they give the best possible experience with Home Assistant.
+
+The variety of complex settings and functionality, like energy monitoring, makes them popular with our community doing advanced smart retrofits, like connecting an old garage door or motorized shutters. These are perfect for keeping non-smart devices out of the landfill and working for years to come.
+
+
+## From A to Z-Wave
+
+Shelly, originally launched in Bulgaria in 2017, has been a mainstay in our community for some years. They became known initially for their WiFi smart switches and relays that could be easily used locally, but now offer a wide range of smart devices and ways to connect them. For this first round of Works with Home Assistant certified products, the focus is firmly on the [Z-Wave](/integrations/zwave_js/) lines.
+
+ If you’re not familiar with Z-Wave, it’s a well-established low-powered wireless technology designed with the smart home in mind. It uses an entirely different bit of radio spectrum than WiFi, meaning it has less chance of experiencing interference. This spectrum makes it better at getting through thick walls and communicating over longer distances — with the recent [Long Range](https://z-wavealliance.org/what-is-z-wave-long-range-how-does-it-differ-from-z-wave/) iteration of the standard, they can [communicate even further](/blog/2024/05/08/zwave-is-not-dead/#range-testing-our-z-wave-stick-prototype).
+
+Given our focus on local control, items that work on Z-Wave are ideal if you want to avoid the cloud. Home Assistant will act as your Z-Wave controller using the [Z-Wave JS add-on](https://github.com/hassio-addons/addon-zwave-js-ui) (another awesome Open Home Foundation project). So, all you need is a Z-Wave adapter to use alongside these devices. _If you haven’t purchased one yet, you might want to wait before hitting that buy button_ 😉.
+
+Shelly shares our focus on interoperability, with items using a variety of protocols, while being available worldwide. These items are also super helpful for the energy-conscious. They have low power consumption, power metering, and can easily blend in with your current home decor, as they sit in the wall behind your existing switches.
+
+
Mini? This thing is microscopic!
+
+## Getting Involved
+
+We’ve been lucky enough to meet the Shelly team on several occasions, and they were kind enough to showcase [how the Las Vegas Mob Museum uses Shelly and Home Assistant](https://www.youtube.com/live/o4Vctz1_KYE?t=6897s) during our annual ‘State of the Open Home’ event. In May, they went one step further and hosted one of our [Community Days](/blog/2025/06/24/community-day-2025-wrap-up/) in South Florida. It’s really exciting to see that partners who join the ‘Works with’ program don’t just see it as a badge to stick on a box, but a real chance to engage with, and contribute to, this amazing community.
+
+
+
"Many of our users already rely on Home Assistant to power their smart homes, and we’ve seen firsthand how important local control, privacy, and flexibility are to them. By joining the Works with Home Assistant program, we’re reinforcing our commitment to open, reliable smart home solutions. With the upcoming launch of our Shelly Wave Long Range devices—offering wireless coverage of up to 1 kilometer — we’re pushing the boundaries of what smart home technology can do. Combined with Home Assistant’s powerful platform, this will be a market-leading solution, capable of covering use cases no other ecosystem today can reach. Together, we’re building the future of smart homes: open, powerful, and ready for real-world demands."
+- Leon Kralj, CTO at Shelly
+
+
+
+## Devices
+
+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.
+
+**What devices have been certified?**
+
+- [Shelly Wave PM Mini](https://www.shelly.com/products/shelly-qubino-wave-pm-mini)
+
+- [Shelly Wave i4](https://www.shelly.com/products/shelly-qubino-wave-i4)
+
+- [Shelly Wave 1PM Mini](https://www.shelly.com/products/shelly-qubino-wave-1pm-mini)
+
+- [Shelly Wave 2PM](https://www.shelly.com/products/shelly-qubino-wave-2pm)
+
+- [Shelly Wave Pro 1PM](https://www.shelly.com/products/shelly-wave-pro-1-pm)
+
+Whilst the Shelly Wave Pro 1PM sits in an electrical box, the remaining devices sit behind a standard plug, switch or device. This means they are a super cost-effective way to retrofit devices, which in turn reduces e-waste. The Minis are very small (duh), and so should fit in most tight places around the home, even with low-profile installations. The Shelly Wave 1PM Mini is the world’s smallest Z-Wave smart switch. In some areas of the world, you may need professional installation by a qualified electrician, so be sure to check your region's regulations. If you’re a confident DIYer, Shelly has a lot of [helpful guides](https://kb.shelly.cloud/knowledge-base/installation-guides) on their site to walk you through installing it yourself.
+
+## The first of many waves
+
+These devices are the first from Shelly to join the program, but certainly won’t be the last, as we look forward to many exciting developments with Z-Wave Long Range. Keep your eyes peeled for our upcoming hardware announcement that will work perfectly with our Z-Wave partners.
+
+Thanks again for your support (by subscribing to [Home Assistant Cloud](/cloud/) and [buying official hardware](https://www.nabucasa.com/#:~:text=the%20first%20boot.-,Official%20Home%20Assistant%20hardware,-Get%20the%20best)), which allows the Open Home Foundation to build these partnerships and certify new devices to join Works with Home Assistant.
+
+### FAQs
+
+**Q: If I have a device that is not listed under ‘Works with Home Assistant does this mean it’s not supported?**
+
+A: No! It just means that it hasn’t gone through a testing schedule with our team yet or doesn’t fit the requirements of the program. It might function well but be added to the testing schedule later down the road, or it might work under a different connectivity type that we don’t currently test under the program. It may also have a feature missing in Home Assistant that we’re working to add.
+
+**Q: Ok, so what’s the point of the Works with program?**
+
+A: It highlights the devices we know work well with Home Assistant and the brands that make a long-term commitment to keeping support for these devices going. The certification agreement specifies that the devices must work well within Home Assistant, operate locally without the need for cloud and will continue to do so long-term.
+
+**Q: How were these devices tested?**
+
+A: All devices in this list were tested using a standard HA Green Hub, a Z-Wave adapter and with our [Z Wave integration](/integrations/zwave_js/). If you have another hub / adapter / integration that’s not a problem but we test against these as they are the most effective way for our team to certify within our ecosystem.
+
+**Q: Will you be adding more Shelly devices to the program?**
+
+A: Absolutely. Shelly has a huge number of product lines and will be expanding their Z-Wave Long Range list. We’re sure they’ll keep our testers busy with a steady stream of devices to add.
diff --git a/source/_redirects b/source/_redirects
index 3954492584e..96b72be8366 100644
--- a/source/_redirects
+++ b/source/_redirects
@@ -15,7 +15,7 @@ layout: null
/suggest-community-highlight https://docs.google.com/forms/d/e/1FAIpQLSd9VWPeVM0xg0swWL6kT3wkQUKt8vWsTL5WtPO95LAy-0cYZw/viewform
/get-blueprints https://community.home-assistant.io/c/blueprints-exchange/53
/merch https://home-assistant-store.creator-spring.com
-/feature-requests https://community.home-assistant.io/c/feature-requests
+/feature-requests https://github.com/orgs/home-assistant/discussions
/issues https://github.com/home-assistant/core/issues
/community https://community.home-assistant.io/
/voice /voice_control/builtin_sentences/
diff --git a/source/changelogs/core-2025.7.markdown b/source/changelogs/core-2025.7.markdown
index ef2faabf63f..b1d60c334bc 100644
--- a/source/changelogs/core-2025.7.markdown
+++ b/source/changelogs/core-2025.7.markdown
@@ -546,6 +546,390 @@ For a summary in a more readable format:
- Bump aioamazondevices to 3.1.19 ([@chemelli74] - [#147462])
- Bump plugwise to v1.7.6 ([@bouwew] - [#147508])
- Add support for condition platforms to provide multiple conditions ([@emontnemery] - [#147376])
+- Fix playing TTS and local media source over DLNA ([@kepler] - [#134903])
+- Fixed issue when tests (should) fail in Smarla ([@rlint-explicatis] - [#146102])
+- Create a new client session for air-Q to fix cookie polution ([@Sibgatulin] - [#147027])
+- Fix Telegram bot default target when sending messages ([@hanwg] - [#147470])
+- Fixes in Google AI TTS ([@tronikos] - [#147501])
+- Set end date for when allowing unique id collisions in config entries ([@emontnemery] - [#147516])
+- Improve config flow strings for Alexa Devices ([@chemelli74] - [#147523])
+- Bump dependency on pyW215 for DLink integration to 0.8.0 ([@andersfugmann] - [#147534])
+- Fix wind direction state class sensor for AEMET ([@luca-angemi] - [#147535])
+- Show current Lametric version if there is no newer version ([@joostlek] - [#147538])
+- Add action exceptions to Alexa Devices ([@chemelli74] - [#147546])
+- Fix unload for Alexa Devices ([@chemelli74] - [#147548])
+- Use default title for migrated Google Generative AI entries ([@tronikos] - [#147551])
+- Include subentries in Google Generative AI diagnostics ([@tronikos] - [#147558])
+- Bump zwave-js-server-python to 0.65.0 ([@MindFreeze] - [#147561])
+- Refactor in Google AI TTS in preparation for STT ([@tronikos] - [#147562])
+- Fix sending commands to Matter vacuum ([@marcelveldt] - [#147567])
+- Remove obsolete routing info when migrating a Z-Wave network ([@MindFreeze] - [#147568])
+- Hide unnamed paths when selecting a USB Z-Wave adapter ([@MindFreeze] - [#147571])
+- Set right model in OpenAI conversation ([@joostlek] - [#147575])
+- Do not make the favorite button unavailable when no content playing on a Music Assistant player ([@marcelveldt] - [#147579])
+- Set Google AI model as device model ([@joostlek] - [#147582])
+- Add default conversation name for OpenAI integration ([@joostlek] - [#147597])
+- Add default title to migrated Claude entry ([@joostlek] - [#147598])
+- Add default title to migrated Ollama entry ([@joostlek] - [#147599])
+- Update frontend to 20250626.0 ([@bramkragten] - [#147601])
+- Remove default icon for wind direction sensor for Buienradar ([@luca-angemi] - [#147603])
+- Improve explanation on how to get API token in Telegram ([@joostlek] - [#147605])
+- Fix asset url in Habitica integration ([@tr4nt0r] - [#147612])
+- Hide Telegram bot proxy URL behind section ([@joostlek] - [#147613])
+- Fix meaters not being added after a reload ([@joostlek] - [#147614])
+- Make entities unavailable when machine is physically off in lamarzocco ([@zweckj] - [#147426])
+- Allow setup of Zigbee/Thread for ZBT-1 and Yellow without internet access ([@puddly] - [#147549])
+- Do not factory reset old Z-Wave controller during migration ([@MindFreeze] - [#147576])
+- Fix Telegram bot yaml import for webhooks containing None value for URL ([@hanwg] - [#147586])
+- Fix config schema to make credentials optional in NUT flows ([@mib1185] - [#147593])
+- Add Diagnostics to PlayStation Network ([@JackJPowell] - [#147607])
+- Make sure Google Generative AI integration migration is clean ([@joostlek] - [#147625])
+- Make sure OpenAI integration migration is clean ([@joostlek] - [#147627])
+- Make sure Anthropic integration migration is clean ([@joostlek] - [#147629])
+- Make sure Ollama integration migration is clean ([@joostlek] - [#147630])
+- Bump pynecil to v4.1.1 ([@tr4nt0r] - [#147648])
+- Clarify descriptions of `subaru.unlock_specific_door` action ([@NoRi2909] - [#147655])
+- Z-WaveJS config flow: Change keys question ([@MindFreeze] - [#147518])
+- Add previously missing state classes to dsmr sensors ([@bajansen] - [#147633])
+- Remove dweet.io integration ([@tr4nt0r] - [#147645])
+- Fix energy history in Teslemetry ([@Bre77] - [#147646])
+- Respect availability of parent class in Husqvarna Automower ([@Thomas55555] - [#147649])
+- Make jellyfin not single config entry ([@zweckj] - [#147656])
+- Bump jellyfin-apiclient-python to 1.11.0 ([@zweckj] - [#147658])
+- Fix: Unhandled NoneType sessions in jellyfin ([@zweckj] - [#147659])
+- Fix Shelly entity removal ([@thecode] - [#147665])
+- Update frontend to 20250627.0 ([@piitaya] - [#147668])
+- Fix sentence-casing and spacing of button in `thermopro` ([@NoRi2909] - [#147671])
+- Bump aiosomecomfort to 0.0.33 ([@mkmer] - [#147673])
+- Add codeowner for Telegram bot ([@hanwg] - [#147680])
+- Bump aioamazondevices to 3.1.22 ([@chemelli74] - [#147681])
+- Bump vulcan-api to 2.4.2 ([@Antoni-Czaplicki] - [#146857])
+- Add lock models to switchbot cloud ([@XiaoLing-git] - [#147569])
+- Move MQTT device sw and hw version to collapsed section in subentry flow ([@jbouwh] - [#147685])
+- Fix Shelly Block entity removal ([@thecode] - [#147694])
+- Bump pytibber to 0.31.6 ([@Danielhiversen] - [#147703])
+- Reduce idle timeout of HLS stream to conserve camera battery life ([@starkillerOG] - [#147728])
+- Fix error if cover position is not available or unknown ([@mback2k] - [#147732])
+- bump pypaperless to 4.1.1 ([@fvgarrel] - [#147735])
+- Improve rest error logging ([@bdraco] - [#147736])
+- Person ble_trackers for non-home zones not processed correctly ([@PeteRager] - [#138475])
+- Populate hvac_modes list in opentherm_gw ([@mvn23] - [#142074])
+- Bump aioshelly to 13.7.1 ([@thecode] - [#146221])
+- Fixed pushbullet handling of fields longer than 255 characters ([@eseverson] - [#146993])
+- Wallbox Integration, Reduce API impact by limiting the amount of API calls made ([@hesselonline] - [#147618])
+- Update pywmspro to 0.3.0 to wait for short-lived actions ([@mback2k] - [#147679])
+- Fix Telegram bot proxy URL not initialized when creating a new bot ([@hanwg] - [#147707])
+- Preserve httpx boolean behavior in REST integration after aiohttp conversion ([@bdraco] - [#147738])
+- Fix sensor displaying unknown when getting readings from heat meters in ista EcoTrend ([@tr4nt0r] - [#147741])
+- Move the async_reload on updates in async_setup_entry in Google Generative AI ([@tronikos] - [#147748])
+- Fix Vesync set_percentage error ([@cdnninja] - [#147751])
+- Use media selector for Assist Satellite actions ([@balloob] - [#147767])
+- Honeywell: Don't use shared session ([@mkmer] - [#147772])
+- Bump reolink_aio to 0.14.2 ([@starkillerOG] - [#147797])
+- Await firmware installation task when flashing ZBT-1/Yellow firmware ([@puddly] - [#147824])
+- Fix wrong state in Husqvarna Automower ([@Thomas55555] - [#146075])
+- Fix Meteo france Ciel clair condition mapping ([@piitaya] - [#146965])
+- Catch access denied errors in webdav and display proper message ([@jpbede] - [#147093])
+- Include chat ID in Telegram bot subentry title ([@hanwg] - [#147643])
+- Add more mac address prefixes for discovery to PlayStation Network ([@tr4nt0r] - [#147739])
+- fix state_class for water used today sensor ([@bob-laz] - [#147787])
+- Bump Nettigo Air Monitor backend library to version 5.0.0 ([@bieniu] - [#147812])
+- fix: Create new aiohttp session with DummyCookieJar ([@micha91] - [#147827])
+- Fix invalid configuration of MQTT device QoS option in subentry flow ([@jbouwh] - [#147837])
+- Implement suggested_display_precision for ESPHome ([@jesserockz] - [#147849])
+- Correct Google generative AI config entry migration ([@emontnemery] - [#147856])
+- Correct anthropic config entry migration ([@emontnemery] - [#147857])
+- Correct ollama config entry migration ([@emontnemery] - [#147858])
+- Correct openai conversation config entry migration ([@emontnemery] - [#147859])
+- Initialize EsphomeEntity._has_state ([@emontnemery] - [#147877])
+- Update frontend to 20250701.0 ([@piitaya] - [#147879])
+- Fix station name sensor for metoffice ([@avee87] - [#145500])
+- Bump VoIP utils to 0.3.3 ([@jaminh] - [#147880])
+- Bump Music Assistant Client to 1.2.3 ([@marcelveldt] - [#147885])
+- Bump aioamazondevices to 3.2.1 ([@chemelli74] - [#147912])
+- Manager wrong country selection in Alexa Devices ([@chemelli74] - [#147914])
+- Swap the Models label for the model name not it's display name, ([@IvanLH] - [#147918])
+- Bump bluetooth-data-tools to 1.28.2 ([@bdraco] - [#147920])
+- SMA add DHCP strictness ([@erwindouna] - [#145753])
+- UnifiProtect Change log level from debug to error for connection exceptions in ProtectFlowHandler ([@RaHehl] - [#147730])
+- Skip processing request body for HTTP HEAD requests ([@AudunVN] - [#147899])
+- Open repair issue when outbound WebSocket is enabled for Shelly non-sleeping RPC device ([@bieniu] - [#147901])
+- Bump thermopro-ble to 0.13.1 ([@h3ss] - [#147924])
+- Handle additional errors in Nord Pool ([@gjohansson-ST] - [#147937])
+- Bump deebot-client to 13.5.0 ([@edenhaus] - [#147938])
+- Split Ollama entity ([@balloob] - [#147769])
+- Ollama: Migrate pick model to subentry ([@balloob] - [#147944])
+- Update frontend to 20250702.0 ([@bramkragten] - [#147952])
+- Bump aioamazondevices to 3.2.2 ([@chemelli74] - [#147953])
+- Z-Wave JS: rename controller to adapter according to term decision ([@c0ffeeca7] - [#147955])
+
+## Release 2025.7.1 - July 4
+
+- Set timeout for remote calendar ([@Thomas55555] - [#147024])
+- Fix missing port in samsungtv ([@epenet] - [#147962])
+- Bump ZHA to 0.0.62 ([@puddly] - [#147966])
+- Bump aiounifi to v84 ([@Kane610] - [#147987])
+- Fix state being incorrectly reported in some situations on Music Assistant players ([@marcelveldt] - [#147997])
+- Bump hass-nabucasa from 0.104.0 to 0.105.0 ([@ludeeus] - [#148040])
+- Fix Telegram bots using plain text parser failing to load on restart ([@hanwg] - [#148050])
+- Bump pyenphase to 2.2.0 ([@catsmanac] - [#148070])
+- Cancel enphase mac verification on unload. ([@catsmanac] - [#148072])
+- Bump aioamazondevices to 3.2.3 ([@chemelli74] - [#148082])
+- Update frontend to 20250702.1 ([@bramkragten] - [#148131])
+- [ci] Fix typing issue with aiohttp and aiosignal ([@cdce8p] - [#148141])
+- Bump venstarcolortouch to 0.21 ([@mlfreeman2] - [#148152])
+
+[#147024]: https://github.com/home-assistant/core/pull/147024
+[#147533]: https://github.com/home-assistant/core/pull/147533
+[#147962]: https://github.com/home-assistant/core/pull/147962
+[#147966]: https://github.com/home-assistant/core/pull/147966
+[#147987]: https://github.com/home-assistant/core/pull/147987
+[#147997]: https://github.com/home-assistant/core/pull/147997
+[#148040]: https://github.com/home-assistant/core/pull/148040
+[#148050]: https://github.com/home-assistant/core/pull/148050
+[#148070]: https://github.com/home-assistant/core/pull/148070
+[#148072]: https://github.com/home-assistant/core/pull/148072
+[#148082]: https://github.com/home-assistant/core/pull/148082
+[#148131]: https://github.com/home-assistant/core/pull/148131
+[#148141]: https://github.com/home-assistant/core/pull/148141
+[#148152]: https://github.com/home-assistant/core/pull/148152
+[@Kane610]: https://github.com/Kane610
+[@Thomas55555]: https://github.com/Thomas55555
+[@bramkragten]: https://github.com/bramkragten
+[@catsmanac]: https://github.com/catsmanac
+[@cdce8p]: https://github.com/cdce8p
+[@chemelli74]: https://github.com/chemelli74
+[@epenet]: https://github.com/epenet
+[@frenck]: https://github.com/frenck
+[@hanwg]: https://github.com/hanwg
+[@ludeeus]: https://github.com/ludeeus
+[@marcelveldt]: https://github.com/marcelveldt
+[@mlfreeman2]: https://github.com/mlfreeman2
+[@puddly]: https://github.com/puddly
+
+## Release 2025.7.2 - July 14
+
+- Squeezebox: Fix track selection in media browser ([@Hypfer] - [#147185])
+- Squeezebox: Fix tracks not having thumbnails ([@Hypfer] - [#147187])
+- Bump pysmlight to v0.2.7 ([@tl-sl] - [#148101])
+- Fix REST sensor charset handling to respect Content-Type header ([@bdraco] - [#148223])
+- Fix UTF-8 encoding for REST basic authentication ([@bdraco] - [#148225])
+- Bump pylamarzocco to 2.0.10 ([@zweckj] - [#148233])
+- Bump sharkiq to 1.1.1 ([@funkybunch] - [#148244])
+- bump motionblinds to 0.6.29 ([@starkillerOG] - [#148265])
+- Bump aiowebostv to 0.7.4 ([@thecode] - [#148273])
+- Bump `gios` to version 6.1.0 ([@bieniu] - [#148274])
+- Restore httpx compatibility for non-primitive REST query parameters ([@bdraco] - [#148286])
+- Bump pyenphase to 2.2.1 ([@catsmanac] - [#148292])
+- Add lamp states to smartthings selector ([@jvits227] - [#148302])
+- Fix Switchbot cloud plug mini current unit Issue ([@XiaoLing-git] - [#148314])
+- Bump pyswitchbot to 0.68.1 ([@zerzhang] - [#148335])
+- Handle binary coils with non default mappings in nibe heatpump ([@elupus] - [#148354])
+- Bump aioamazondevices to 3.2.8 ([@chemelli74] - [#148365])
+- Create own clientsession for lamarzocco ([@zweckj] - [#148385])
+- Bump pylamarzocco to 2.0.11 ([@zweckj] - [#148386])
+- Bump pySmartThings to 3.2.7 ([@joostlek] - [#148394])
+- Bump uiprotect to version 7.14.2 ([@RaHehl] - [#148453])
+- Bump hass-nabucasa from 0.105.0 to 0.106.0 ([@ludeeus] - [#148473])
+- Revert "Deprecate hddtemp" ([@edenhaus] - [#148482])
+- Fix entity_id should be based on object_id the first time an entity is added ([@jbouwh] - [#148484])
+- Bump aioimmich to 0.10.2 ([@mib1185] - [#148503])
+- Add workaround for sub units without main device in AVM Fritz!SmartHome ([@mib1185] - [#148507])
+- Add Home Connect resume command button when an appliance is paused ([@Diegorro98] - [#148512])
+- Use the link to the issue instead of creating new issues at Home Connect ([@Diegorro98] - [#148523])
+- Ensure response is fully read to prevent premature connection closure in rest command ([@jpbede] - [#148532])
+- Fix for Renson set Breeze fan speed ([@krmarien] - [#148537])
+- Remove vg argument from miele auth flow ([@astrandb] - [#148541])
+- Bump aiohttp to 3.12.14 ([@bdraco] - [#148565])
+- Update frontend to 20250702.2 ([@bramkragten] - [#148573])
+- Fix Google Cloud 504 Deadline Exceeded ([@luuquangvu] - [#148589])
+- Fix - only enable AlexaModeController if at least one mode is offered ([@jbouwh] - [#148614])
+- snoo: use correct value for right safety clip binary sensor ([@falconindy] - [#148647])
+- Bump nyt_games to 0.5.0 ([@hexEF] - [#148654])
+- Fix Charge Cable binary sensor in Teslemetry ([@Bre77] - [#148675])
+- Bump PyViCare to 2.50.0 ([@CFenner] - [#148679])
+- Fix hide empty sections in mqtt subentry flows ([@jbouwh] - [#148692])
+- Bump aioshelly to 13.7.2 ([@thecode] - [#148706])
+- Bump aioamazondevices to 3.2.10 ([@chemelli74] - [#148709])
+
+[#147185]: https://github.com/home-assistant/core/pull/147185
+[#147187]: https://github.com/home-assistant/core/pull/147187
+[#147533]: https://github.com/home-assistant/core/pull/147533
+[#148101]: https://github.com/home-assistant/core/pull/148101
+[#148171]: https://github.com/home-assistant/core/pull/148171
+[#148223]: https://github.com/home-assistant/core/pull/148223
+[#148225]: https://github.com/home-assistant/core/pull/148225
+[#148233]: https://github.com/home-assistant/core/pull/148233
+[#148244]: https://github.com/home-assistant/core/pull/148244
+[#148265]: https://github.com/home-assistant/core/pull/148265
+[#148273]: https://github.com/home-assistant/core/pull/148273
+[#148274]: https://github.com/home-assistant/core/pull/148274
+[#148286]: https://github.com/home-assistant/core/pull/148286
+[#148292]: https://github.com/home-assistant/core/pull/148292
+[#148302]: https://github.com/home-assistant/core/pull/148302
+[#148314]: https://github.com/home-assistant/core/pull/148314
+[#148335]: https://github.com/home-assistant/core/pull/148335
+[#148354]: https://github.com/home-assistant/core/pull/148354
+[#148365]: https://github.com/home-assistant/core/pull/148365
+[#148385]: https://github.com/home-assistant/core/pull/148385
+[#148386]: https://github.com/home-assistant/core/pull/148386
+[#148394]: https://github.com/home-assistant/core/pull/148394
+[#148453]: https://github.com/home-assistant/core/pull/148453
+[#148473]: https://github.com/home-assistant/core/pull/148473
+[#148482]: https://github.com/home-assistant/core/pull/148482
+[#148484]: https://github.com/home-assistant/core/pull/148484
+[#148503]: https://github.com/home-assistant/core/pull/148503
+[#148507]: https://github.com/home-assistant/core/pull/148507
+[#148512]: https://github.com/home-assistant/core/pull/148512
+[#148523]: https://github.com/home-assistant/core/pull/148523
+[#148532]: https://github.com/home-assistant/core/pull/148532
+[#148537]: https://github.com/home-assistant/core/pull/148537
+[#148541]: https://github.com/home-assistant/core/pull/148541
+[#148565]: https://github.com/home-assistant/core/pull/148565
+[#148573]: https://github.com/home-assistant/core/pull/148573
+[#148589]: https://github.com/home-assistant/core/pull/148589
+[#148614]: https://github.com/home-assistant/core/pull/148614
+[#148647]: https://github.com/home-assistant/core/pull/148647
+[#148654]: https://github.com/home-assistant/core/pull/148654
+[#148675]: https://github.com/home-assistant/core/pull/148675
+[#148679]: https://github.com/home-assistant/core/pull/148679
+[#148692]: https://github.com/home-assistant/core/pull/148692
+[#148706]: https://github.com/home-assistant/core/pull/148706
+[#148709]: https://github.com/home-assistant/core/pull/148709
+[@Bre77]: https://github.com/Bre77
+[@CFenner]: https://github.com/CFenner
+[@Diegorro98]: https://github.com/Diegorro98
+[@Hypfer]: https://github.com/Hypfer
+[@RaHehl]: https://github.com/RaHehl
+[@XiaoLing-git]: https://github.com/XiaoLing-git
+[@astrandb]: https://github.com/astrandb
+[@bdraco]: https://github.com/bdraco
+[@bieniu]: https://github.com/bieniu
+[@bramkragten]: https://github.com/bramkragten
+[@catsmanac]: https://github.com/catsmanac
+[@chemelli74]: https://github.com/chemelli74
+[@edenhaus]: https://github.com/edenhaus
+[@elupus]: https://github.com/elupus
+[@falconindy]: https://github.com/falconindy
+[@frenck]: https://github.com/frenck
+[@funkybunch]: https://github.com/funkybunch
+[@hexEF]: https://github.com/hexEF
+[@jbouwh]: https://github.com/jbouwh
+[@joostlek]: https://github.com/joostlek
+[@jpbede]: https://github.com/jpbede
+[@jvits227]: https://github.com/jvits227
+[@krmarien]: https://github.com/krmarien
+[@ludeeus]: https://github.com/ludeeus
+[@luuquangvu]: https://github.com/luuquangvu
+[@mib1185]: https://github.com/mib1185
+[@starkillerOG]: https://github.com/starkillerOG
+[@thecode]: https://github.com/thecode
+[@tl-sl]: https://github.com/tl-sl
+[@zerzhang]: https://github.com/zerzhang
+[@zweckj]: https://github.com/zweckj
+
+## Release 2025.7.3 - July 18
+
+- Handle connection issues after websocket reconnected in homematicip_cloud ([@hahn-th] - [#147731])
+- Fix Shelly `n_current` sensor removal condition ([@bieniu] - [#148740])
+- Bump pySmartThings to 3.2.8 ([@joostlek] - [#148761])
+- Bump Tesla Fleet API to 1.2.2 ([@Bre77] - [#148776])
+- Use ffmpeg for generic cameras in go2rtc ([@edenhaus] - [#148818])
+- Add guard to prevent exception in Sonos Favorites ([@PeteRager] - [#148854])
+- Fix button platform parent class in Teslemetry ([@Bre77] - [#148863])
+- Bump pyenphase to 2.2.2 ([@catsmanac] - [#148870])
+- Bump gios to version 6.1.1 ([@bieniu] - [#148414])
+- Bump `gios` to version 6.1.2 ([@bieniu] - [#148884])
+- Bump async-upnp-client to 0.45.0 ([@StevenLooman] - [#148961])
+- Pass Syncthru entry to coordinator ([@joostlek] - [#148974])
+- Update frontend to 20250702.3 ([@bramkragten] - [#148994])
+- Bump PySwitchbot to 0.68.2 ([@bdraco] - [#148996])
+- Ignore MQTT sensor unit of measurement if it is an empty string ([@jbouwh] - [#149006])
+- Bump aioamazondevices to 3.5.0 ([@chemelli74] - [#149011])
+
+[#147533]: https://github.com/home-assistant/core/pull/147533
+[#147731]: https://github.com/home-assistant/core/pull/147731
+[#148171]: https://github.com/home-assistant/core/pull/148171
+[#148414]: https://github.com/home-assistant/core/pull/148414
+[#148725]: https://github.com/home-assistant/core/pull/148725
+[#148740]: https://github.com/home-assistant/core/pull/148740
+[#148761]: https://github.com/home-assistant/core/pull/148761
+[#148776]: https://github.com/home-assistant/core/pull/148776
+[#148818]: https://github.com/home-assistant/core/pull/148818
+[#148854]: https://github.com/home-assistant/core/pull/148854
+[#148863]: https://github.com/home-assistant/core/pull/148863
+[#148870]: https://github.com/home-assistant/core/pull/148870
+[#148884]: https://github.com/home-assistant/core/pull/148884
+[#148961]: https://github.com/home-assistant/core/pull/148961
+[#148974]: https://github.com/home-assistant/core/pull/148974
+[#148994]: https://github.com/home-assistant/core/pull/148994
+[#148996]: https://github.com/home-assistant/core/pull/148996
+[#149006]: https://github.com/home-assistant/core/pull/149006
+[#149011]: https://github.com/home-assistant/core/pull/149011
+[@Bre77]: https://github.com/Bre77
+[@PeteRager]: https://github.com/PeteRager
+[@StevenLooman]: https://github.com/StevenLooman
+[@bdraco]: https://github.com/bdraco
+[@bieniu]: https://github.com/bieniu
+[@bramkragten]: https://github.com/bramkragten
+[@catsmanac]: https://github.com/catsmanac
+[@chemelli74]: https://github.com/chemelli74
+[@edenhaus]: https://github.com/edenhaus
+[@frenck]: https://github.com/frenck
+[@hahn-th]: https://github.com/hahn-th
+[@jbouwh]: https://github.com/jbouwh
+[@joostlek]: https://github.com/joostlek
+
+## Release 2025.7.4 - July 28
+
+- Keep entities of dead Z-Wave devices available ([@AlCalzone] - [#148611])
+- Fix warning about failure to get action during setup phase ([@mback2k] - [#148923])
+- Fix a bug in rainbird device migration that results in additional devices ([@allenporter] - [#149078])
+- Fix multiple webhook secrets for Telegram bot ([@hanwg] - [#149103])
+- Bump pyschlage to 2025.7.2 ([@dknowles2] - [#149148])
+- Fix Matter light get brightness ([@jvmahon] - [#149186])
+- Fix brightness_step and brightness_step_pct via lifx.set_state ([@Djelibeybi] - [#149217])
+- Add Z-Wave USB migration confirm step ([@MartinHjelmare] - [#149243])
+- Add fan off mode to the supported fan modes to fujitsu_fglair ([@crevetor] - [#149277])
+- Update Tesla OAuth Server in Tesla Fleet ([@Bre77] - [#149280])
+- Update slixmpp to 1.10.0 ([@gaaf] - [#149374])
+- Bump aioamazondevices to 3.5.1 ([@chemelli74] - [#149385])
+- Bump pysuezV2 to 2.0.7 ([@jb101010-2] - [#149436])
+- Bump habiticalib to v0.4.1 ([@tr4nt0r] - [#149523])
+
+[#147533]: https://github.com/home-assistant/core/pull/147533
+[#148171]: https://github.com/home-assistant/core/pull/148171
+[#148611]: https://github.com/home-assistant/core/pull/148611
+[#148725]: https://github.com/home-assistant/core/pull/148725
+[#148923]: https://github.com/home-assistant/core/pull/148923
+[#149024]: https://github.com/home-assistant/core/pull/149024
+[#149078]: https://github.com/home-assistant/core/pull/149078
+[#149103]: https://github.com/home-assistant/core/pull/149103
+[#149148]: https://github.com/home-assistant/core/pull/149148
+[#149186]: https://github.com/home-assistant/core/pull/149186
+[#149217]: https://github.com/home-assistant/core/pull/149217
+[#149243]: https://github.com/home-assistant/core/pull/149243
+[#149277]: https://github.com/home-assistant/core/pull/149277
+[#149280]: https://github.com/home-assistant/core/pull/149280
+[#149374]: https://github.com/home-assistant/core/pull/149374
+[#149385]: https://github.com/home-assistant/core/pull/149385
+[#149436]: https://github.com/home-assistant/core/pull/149436
+[#149523]: https://github.com/home-assistant/core/pull/149523
+[@AlCalzone]: https://github.com/AlCalzone
+[@Bre77]: https://github.com/Bre77
+[@Djelibeybi]: https://github.com/Djelibeybi
+[@MartinHjelmare]: https://github.com/MartinHjelmare
+[@allenporter]: https://github.com/allenporter
+[@chemelli74]: https://github.com/chemelli74
+[@crevetor]: https://github.com/crevetor
+[@dknowles2]: https://github.com/dknowles2
+[@frenck]: https://github.com/frenck
+[@gaaf]: https://github.com/gaaf
+[@hanwg]: https://github.com/hanwg
+[@jb101010-2]: https://github.com/jb101010-2
+[@jvmahon]: https://github.com/jvmahon
+[@mback2k]: https://github.com/mback2k
+[@tr4nt0r]: https://github.com/tr4nt0r
[#125870]: https://github.com/home-assistant/core/pull/125870
[#126009]: https://github.com/home-assistant/core/pull/126009
@@ -556,6 +940,8 @@ For a summary in a more readable format:
[#131703]: https://github.com/home-assistant/core/pull/131703
[#133901]: https://github.com/home-assistant/core/pull/133901
[#134326]: https://github.com/home-assistant/core/pull/134326
+[#134903]: https://github.com/home-assistant/core/pull/134903
+[#138475]: https://github.com/home-assistant/core/pull/138475
[#139334]: https://github.com/home-assistant/core/pull/139334
[#139726]: https://github.com/home-assistant/core/pull/139726
[#140574]: https://github.com/home-assistant/core/pull/140574
@@ -563,6 +949,7 @@ For a summary in a more readable format:
[#141533]: https://github.com/home-assistant/core/pull/141533
[#141563]: https://github.com/home-assistant/core/pull/141563
[#141873]: https://github.com/home-assistant/core/pull/141873
+[#142074]: https://github.com/home-assistant/core/pull/142074
[#142171]: https://github.com/home-assistant/core/pull/142171
[#142288]: https://github.com/home-assistant/core/pull/142288
[#142695]: https://github.com/home-assistant/core/pull/142695
@@ -586,6 +973,7 @@ For a summary in a more readable format:
[#145461]: https://github.com/home-assistant/core/pull/145461
[#145485]: https://github.com/home-assistant/core/pull/145485
[#145497]: https://github.com/home-assistant/core/pull/145497
+[#145500]: https://github.com/home-assistant/core/pull/145500
[#145512]: https://github.com/home-assistant/core/pull/145512
[#145515]: https://github.com/home-assistant/core/pull/145515
[#145527]: https://github.com/home-assistant/core/pull/145527
@@ -617,6 +1005,7 @@ For a summary in a more readable format:
[#145743]: https://github.com/home-assistant/core/pull/145743
[#145746]: https://github.com/home-assistant/core/pull/145746
[#145747]: https://github.com/home-assistant/core/pull/145747
+[#145753]: https://github.com/home-assistant/core/pull/145753
[#145764]: https://github.com/home-assistant/core/pull/145764
[#145766]: https://github.com/home-assistant/core/pull/145766
[#145773]: https://github.com/home-assistant/core/pull/145773
@@ -692,6 +1081,7 @@ For a summary in a more readable format:
[#146063]: https://github.com/home-assistant/core/pull/146063
[#146065]: https://github.com/home-assistant/core/pull/146065
[#146069]: https://github.com/home-assistant/core/pull/146069
+[#146075]: https://github.com/home-assistant/core/pull/146075
[#146076]: https://github.com/home-assistant/core/pull/146076
[#146077]: https://github.com/home-assistant/core/pull/146077
[#146085]: https://github.com/home-assistant/core/pull/146085
@@ -701,6 +1091,7 @@ For a summary in a more readable format:
[#146094]: https://github.com/home-assistant/core/pull/146094
[#146095]: https://github.com/home-assistant/core/pull/146095
[#146098]: https://github.com/home-assistant/core/pull/146098
+[#146102]: https://github.com/home-assistant/core/pull/146102
[#146104]: https://github.com/home-assistant/core/pull/146104
[#146114]: https://github.com/home-assistant/core/pull/146114
[#146124]: https://github.com/home-assistant/core/pull/146124
@@ -723,6 +1114,7 @@ For a summary in a more readable format:
[#146205]: https://github.com/home-assistant/core/pull/146205
[#146206]: https://github.com/home-assistant/core/pull/146206
[#146211]: https://github.com/home-assistant/core/pull/146211
+[#146221]: https://github.com/home-assistant/core/pull/146221
[#146235]: https://github.com/home-assistant/core/pull/146235
[#146236]: https://github.com/home-assistant/core/pull/146236
[#146237]: https://github.com/home-assistant/core/pull/146237
@@ -853,6 +1245,7 @@ For a summary in a more readable format:
[#146837]: https://github.com/home-assistant/core/pull/146837
[#146838]: https://github.com/home-assistant/core/pull/146838
[#146842]: https://github.com/home-assistant/core/pull/146842
+[#146857]: https://github.com/home-assistant/core/pull/146857
[#146860]: https://github.com/home-assistant/core/pull/146860
[#146863]: https://github.com/home-assistant/core/pull/146863
[#146897]: https://github.com/home-assistant/core/pull/146897
@@ -882,6 +1275,7 @@ For a summary in a more readable format:
[#146956]: https://github.com/home-assistant/core/pull/146956
[#146958]: https://github.com/home-assistant/core/pull/146958
[#146961]: https://github.com/home-assistant/core/pull/146961
+[#146965]: https://github.com/home-assistant/core/pull/146965
[#146966]: https://github.com/home-assistant/core/pull/146966
[#146967]: https://github.com/home-assistant/core/pull/146967
[#146969]: https://github.com/home-assistant/core/pull/146969
@@ -896,9 +1290,11 @@ For a summary in a more readable format:
[#146987]: https://github.com/home-assistant/core/pull/146987
[#146988]: https://github.com/home-assistant/core/pull/146988
[#146991]: https://github.com/home-assistant/core/pull/146991
+[#146993]: https://github.com/home-assistant/core/pull/146993
[#147020]: https://github.com/home-assistant/core/pull/147020
[#147021]: https://github.com/home-assistant/core/pull/147021
[#147023]: https://github.com/home-assistant/core/pull/147023
+[#147027]: https://github.com/home-assistant/core/pull/147027
[#147036]: https://github.com/home-assistant/core/pull/147036
[#147039]: https://github.com/home-assistant/core/pull/147039
[#147041]: https://github.com/home-assistant/core/pull/147041
@@ -916,6 +1312,7 @@ For a summary in a more readable format:
[#147087]: https://github.com/home-assistant/core/pull/147087
[#147090]: https://github.com/home-assistant/core/pull/147090
[#147092]: https://github.com/home-assistant/core/pull/147092
+[#147093]: https://github.com/home-assistant/core/pull/147093
[#147094]: https://github.com/home-assistant/core/pull/147094
[#147095]: https://github.com/home-assistant/core/pull/147095
[#147096]: https://github.com/home-assistant/core/pull/147096
@@ -1038,6 +1435,7 @@ For a summary in a more readable format:
[#147421]: https://github.com/home-assistant/core/pull/147421
[#147422]: https://github.com/home-assistant/core/pull/147422
[#147424]: https://github.com/home-assistant/core/pull/147424
+[#147426]: https://github.com/home-assistant/core/pull/147426
[#147429]: https://github.com/home-assistant/core/pull/147429
[#147430]: https://github.com/home-assistant/core/pull/147430
[#147435]: https://github.com/home-assistant/core/pull/147435
@@ -1057,6 +1455,7 @@ For a summary in a more readable format:
[#147462]: https://github.com/home-assistant/core/pull/147462
[#147466]: https://github.com/home-assistant/core/pull/147466
[#147469]: https://github.com/home-assistant/core/pull/147469
+[#147470]: https://github.com/home-assistant/core/pull/147470
[#147471]: https://github.com/home-assistant/core/pull/147471
[#147472]: https://github.com/home-assistant/core/pull/147472
[#147474]: https://github.com/home-assistant/core/pull/147474
@@ -1076,23 +1475,129 @@ For a summary in a more readable format:
[#147496]: https://github.com/home-assistant/core/pull/147496
[#147498]: https://github.com/home-assistant/core/pull/147498
[#147499]: https://github.com/home-assistant/core/pull/147499
+[#147501]: https://github.com/home-assistant/core/pull/147501
[#147503]: https://github.com/home-assistant/core/pull/147503
[#147506]: https://github.com/home-assistant/core/pull/147506
[#147508]: https://github.com/home-assistant/core/pull/147508
[#147510]: https://github.com/home-assistant/core/pull/147510
+[#147516]: https://github.com/home-assistant/core/pull/147516
[#147517]: https://github.com/home-assistant/core/pull/147517
+[#147518]: https://github.com/home-assistant/core/pull/147518
[#147521]: https://github.com/home-assistant/core/pull/147521
+[#147523]: https://github.com/home-assistant/core/pull/147523
+[#147533]: https://github.com/home-assistant/core/pull/147533
+[#147534]: https://github.com/home-assistant/core/pull/147534
+[#147535]: https://github.com/home-assistant/core/pull/147535
+[#147538]: https://github.com/home-assistant/core/pull/147538
+[#147546]: https://github.com/home-assistant/core/pull/147546
+[#147548]: https://github.com/home-assistant/core/pull/147548
+[#147549]: https://github.com/home-assistant/core/pull/147549
+[#147551]: https://github.com/home-assistant/core/pull/147551
+[#147558]: https://github.com/home-assistant/core/pull/147558
+[#147561]: https://github.com/home-assistant/core/pull/147561
+[#147562]: https://github.com/home-assistant/core/pull/147562
+[#147567]: https://github.com/home-assistant/core/pull/147567
+[#147568]: https://github.com/home-assistant/core/pull/147568
+[#147569]: https://github.com/home-assistant/core/pull/147569
+[#147571]: https://github.com/home-assistant/core/pull/147571
+[#147575]: https://github.com/home-assistant/core/pull/147575
+[#147576]: https://github.com/home-assistant/core/pull/147576
+[#147579]: https://github.com/home-assistant/core/pull/147579
+[#147582]: https://github.com/home-assistant/core/pull/147582
+[#147586]: https://github.com/home-assistant/core/pull/147586
+[#147593]: https://github.com/home-assistant/core/pull/147593
+[#147597]: https://github.com/home-assistant/core/pull/147597
+[#147598]: https://github.com/home-assistant/core/pull/147598
+[#147599]: https://github.com/home-assistant/core/pull/147599
+[#147601]: https://github.com/home-assistant/core/pull/147601
+[#147603]: https://github.com/home-assistant/core/pull/147603
+[#147605]: https://github.com/home-assistant/core/pull/147605
+[#147607]: https://github.com/home-assistant/core/pull/147607
+[#147612]: https://github.com/home-assistant/core/pull/147612
+[#147613]: https://github.com/home-assistant/core/pull/147613
+[#147614]: https://github.com/home-assistant/core/pull/147614
+[#147618]: https://github.com/home-assistant/core/pull/147618
+[#147625]: https://github.com/home-assistant/core/pull/147625
+[#147627]: https://github.com/home-assistant/core/pull/147627
+[#147629]: https://github.com/home-assistant/core/pull/147629
+[#147630]: https://github.com/home-assistant/core/pull/147630
+[#147633]: https://github.com/home-assistant/core/pull/147633
+[#147643]: https://github.com/home-assistant/core/pull/147643
+[#147645]: https://github.com/home-assistant/core/pull/147645
+[#147646]: https://github.com/home-assistant/core/pull/147646
+[#147648]: https://github.com/home-assistant/core/pull/147648
+[#147649]: https://github.com/home-assistant/core/pull/147649
+[#147655]: https://github.com/home-assistant/core/pull/147655
+[#147656]: https://github.com/home-assistant/core/pull/147656
+[#147658]: https://github.com/home-assistant/core/pull/147658
+[#147659]: https://github.com/home-assistant/core/pull/147659
+[#147665]: https://github.com/home-assistant/core/pull/147665
+[#147668]: https://github.com/home-assistant/core/pull/147668
+[#147671]: https://github.com/home-assistant/core/pull/147671
+[#147673]: https://github.com/home-assistant/core/pull/147673
+[#147679]: https://github.com/home-assistant/core/pull/147679
+[#147680]: https://github.com/home-assistant/core/pull/147680
+[#147681]: https://github.com/home-assistant/core/pull/147681
+[#147685]: https://github.com/home-assistant/core/pull/147685
+[#147694]: https://github.com/home-assistant/core/pull/147694
+[#147703]: https://github.com/home-assistant/core/pull/147703
+[#147707]: https://github.com/home-assistant/core/pull/147707
+[#147728]: https://github.com/home-assistant/core/pull/147728
+[#147730]: https://github.com/home-assistant/core/pull/147730
+[#147732]: https://github.com/home-assistant/core/pull/147732
+[#147735]: https://github.com/home-assistant/core/pull/147735
+[#147736]: https://github.com/home-assistant/core/pull/147736
+[#147738]: https://github.com/home-assistant/core/pull/147738
+[#147739]: https://github.com/home-assistant/core/pull/147739
+[#147741]: https://github.com/home-assistant/core/pull/147741
+[#147748]: https://github.com/home-assistant/core/pull/147748
+[#147751]: https://github.com/home-assistant/core/pull/147751
+[#147767]: https://github.com/home-assistant/core/pull/147767
+[#147769]: https://github.com/home-assistant/core/pull/147769
+[#147772]: https://github.com/home-assistant/core/pull/147772
+[#147787]: https://github.com/home-assistant/core/pull/147787
+[#147797]: https://github.com/home-assistant/core/pull/147797
+[#147812]: https://github.com/home-assistant/core/pull/147812
+[#147824]: https://github.com/home-assistant/core/pull/147824
+[#147827]: https://github.com/home-assistant/core/pull/147827
+[#147837]: https://github.com/home-assistant/core/pull/147837
+[#147849]: https://github.com/home-assistant/core/pull/147849
+[#147856]: https://github.com/home-assistant/core/pull/147856
+[#147857]: https://github.com/home-assistant/core/pull/147857
+[#147858]: https://github.com/home-assistant/core/pull/147858
+[#147859]: https://github.com/home-assistant/core/pull/147859
+[#147877]: https://github.com/home-assistant/core/pull/147877
+[#147879]: https://github.com/home-assistant/core/pull/147879
+[#147880]: https://github.com/home-assistant/core/pull/147880
+[#147885]: https://github.com/home-assistant/core/pull/147885
+[#147899]: https://github.com/home-assistant/core/pull/147899
+[#147901]: https://github.com/home-assistant/core/pull/147901
+[#147912]: https://github.com/home-assistant/core/pull/147912
+[#147914]: https://github.com/home-assistant/core/pull/147914
+[#147918]: https://github.com/home-assistant/core/pull/147918
+[#147920]: https://github.com/home-assistant/core/pull/147920
+[#147924]: https://github.com/home-assistant/core/pull/147924
+[#147937]: https://github.com/home-assistant/core/pull/147937
+[#147938]: https://github.com/home-assistant/core/pull/147938
+[#147944]: https://github.com/home-assistant/core/pull/147944
+[#147952]: https://github.com/home-assistant/core/pull/147952
+[#147953]: https://github.com/home-assistant/core/pull/147953
+[#147955]: https://github.com/home-assistant/core/pull/147955
+[@Antoni-Czaplicki]: https://github.com/Antoni-Czaplicki
+[@AudunVN]: https://github.com/AudunVN
[@Bidski]: https://github.com/Bidski
[@Bre77]: https://github.com/Bre77
[@Chupaka]: https://github.com/Chupaka
[@CubeZ2mDeveloper]: https://github.com/CubeZ2mDeveloper
[@DCSBL]: https://github.com/DCSBL
+[@Danielhiversen]: https://github.com/Danielhiversen
[@DeerMaximum]: https://github.com/DeerMaximum
[@Diegorro98]: https://github.com/Diegorro98
[@Foscam-wangzhengyu]: https://github.com/Foscam-wangzhengyu
[@GrandMoff100]: https://github.com/GrandMoff100
[@HarvsG]: https://github.com/HarvsG
[@Imeon-Energy]: https://github.com/Imeon-Energy
+[@IvanLH]: https://github.com/IvanLH
[@JackJPowell]: https://github.com/JackJPowell
[@LG-ThinQ-Integration]: https://github.com/LG-ThinQ-Integration
[@LaStrada]: https://github.com/LaStrada
@@ -1103,6 +1608,7 @@ For a summary in a more readable format:
[@NoRi2909]: https://github.com/NoRi2909
[@PeteRager]: https://github.com/PeteRager
[@Petro31]: https://github.com/Petro31
+[@RaHehl]: https://github.com/RaHehl
[@Shulyaka]: https://github.com/Shulyaka
[@Shutgun]: https://github.com/Shutgun
[@Sibgatulin]: https://github.com/Sibgatulin
@@ -1116,16 +1622,22 @@ For a summary in a more readable format:
[@agners]: https://github.com/agners
[@alengwenus]: https://github.com/alengwenus
[@allenporter]: https://github.com/allenporter
+[@andersfugmann]: https://github.com/andersfugmann
[@arturpragacz]: https://github.com/arturpragacz
[@astrandb]: https://github.com/astrandb
+[@avee87]: https://github.com/avee87
[@aviadlevy]: https://github.com/aviadlevy
+[@bajansen]: https://github.com/bajansen
[@balloob]: https://github.com/balloob
[@bdraco]: https://github.com/bdraco
[@bieniu]: https://github.com/bieniu
+[@bob-laz]: https://github.com/bob-laz
[@bouwew]: https://github.com/bouwew
[@bramkragten]: https://github.com/bramkragten
+[@c0ffeeca7]: https://github.com/c0ffeeca7
[@catsmanac]: https://github.com/catsmanac
[@cdce8p]: https://github.com/cdce8p
+[@cdnninja]: https://github.com/cdnninja
[@chemelli74]: https://github.com/chemelli74
[@christopherboyd]: https://github.com/christopherboyd
[@crug80]: https://github.com/crug80
@@ -1134,6 +1646,7 @@ For a summary in a more readable format:
[@emontnemery]: https://github.com/emontnemery
[@epenet]: https://github.com/epenet
[@erwindouna]: https://github.com/erwindouna
+[@eseverson]: https://github.com/eseverson
[@etiennec78]: https://github.com/etiennec78
[@farmio]: https://github.com/farmio
[@foxel]: https://github.com/foxel
@@ -1141,13 +1654,18 @@ For a summary in a more readable format:
[@fvgarrel]: https://github.com/fvgarrel
[@g-kiss]: https://github.com/g-kiss
[@gjohansson-ST]: https://github.com/gjohansson-ST
+[@h3ss]: https://github.com/h3ss
[@hahn-th]: https://github.com/hahn-th
[@hanwg]: https://github.com/hanwg
+[@hesselonline]: https://github.com/hesselonline
+[@jaminh]: https://github.com/jaminh
[@jbouwh]: https://github.com/jbouwh
+[@jesserockz]: https://github.com/jesserockz
[@joostlek]: https://github.com/joostlek
[@jpbede]: https://github.com/jpbede
[@jpelgrom]: https://github.com/jpelgrom
[@karwosts]: https://github.com/karwosts
+[@kepler]: https://github.com/kepler
[@klejejs]: https://github.com/klejejs
[@lanthaler]: https://github.com/lanthaler
[@lboue]: https://github.com/lboue
@@ -1159,11 +1677,15 @@ For a summary in a more readable format:
[@markhannon]: https://github.com/markhannon
[@matrixd2]: https://github.com/matrixd2
[@maximvelichko]: https://github.com/maximvelichko
+[@mback2k]: https://github.com/mback2k
[@mbo18]: https://github.com/mbo18
[@mib1185]: https://github.com/mib1185
+[@micha91]: https://github.com/micha91
[@michaelheyman]: https://github.com/michaelheyman
[@mikey0000]: https://github.com/mikey0000
+[@mkmer]: https://github.com/mkmer
[@mswilson]: https://github.com/mswilson
+[@mvn23]: https://github.com/mvn23
[@natekspencer]: https://github.com/natekspencer
[@natepugh]: https://github.com/natepugh
[@noahhusby]: https://github.com/noahhusby
@@ -1183,6 +1705,7 @@ For a summary in a more readable format:
[@srescio]: https://github.com/srescio
[@starkillerOG]: https://github.com/starkillerOG
[@synesthesiam]: https://github.com/synesthesiam
+[@thecode]: https://github.com/thecode
[@thomasddn]: https://github.com/thomasddn
[@tl-sl]: https://github.com/tl-sl
[@tr4nt0r]: https://github.com/tr4nt0r
diff --git a/source/getting-started/onboarding_dashboard.markdown b/source/getting-started/onboarding_dashboard.markdown
index 922ddde4c36..82b703c6649 100644
--- a/source/getting-started/onboarding_dashboard.markdown
+++ b/source/getting-started/onboarding_dashboard.markdown
@@ -122,7 +122,7 @@ In the following steps, we will create a new dashboard and edit some card settin
12. Now let's delete the other weather card.
- In the top right corner, select the pencil.

- - On the card, select the three-dot menu and select **Delete**.
+ - On the card, select the three dots {% icon "mdi:dots-vertical" %} menu and select **Delete**.

13. Finally, we want to move the weather card to the top left corner.
- On the bottom of the card, select the number or use the minus button to enter `1`.
diff --git a/source/images/blog/2025-07-android-companion/android-distribution.png b/source/images/blog/2025-07-android-companion/android-distribution.png
new file mode 100644
index 00000000000..b60595218cf
Binary files /dev/null and b/source/images/blog/2025-07-android-companion/android-distribution.png differ
diff --git a/source/images/blog/2025-07-android-companion/art.png b/source/images/blog/2025-07-android-companion/art.png
new file mode 100644
index 00000000000..c90427715ad
Binary files /dev/null and b/source/images/blog/2025-07-android-companion/art.png differ
diff --git a/source/images/blog/2025-07-android-companion/download-growth.png b/source/images/blog/2025-07-android-companion/download-growth.png
new file mode 100644
index 00000000000..36bd9307804
Binary files /dev/null and b/source/images/blog/2025-07-android-companion/download-growth.png differ
diff --git a/source/images/blog/2025-07-android-companion/playstore-cards.jpg b/source/images/blog/2025-07-android-companion/playstore-cards.jpg
new file mode 100644
index 00000000000..ce28b5b8d11
Binary files /dev/null and b/source/images/blog/2025-07-android-companion/playstore-cards.jpg differ
diff --git a/source/images/blog/2025-07-nuki/art.jpg b/source/images/blog/2025-07-nuki/art.jpg
new file mode 100644
index 00000000000..b44575aac72
Binary files /dev/null and b/source/images/blog/2025-07-nuki/art.jpg differ
diff --git a/source/images/blog/2025-07-nuki/lock.jpg b/source/images/blog/2025-07-nuki/lock.jpg
new file mode 100644
index 00000000000..1dfe9eebb35
Binary files /dev/null and b/source/images/blog/2025-07-nuki/lock.jpg differ
diff --git a/source/images/blog/2025-07-shelly/art.jpg b/source/images/blog/2025-07-shelly/art.jpg
new file mode 100644
index 00000000000..3f5cff029be
Binary files /dev/null and b/source/images/blog/2025-07-shelly/art.jpg differ
diff --git a/source/images/blog/2025-07-shelly/pm-mini.webp b/source/images/blog/2025-07-shelly/pm-mini.webp
new file mode 100644
index 00000000000..f8fda0395ac
Binary files /dev/null and b/source/images/blog/2025-07-shelly/pm-mini.webp differ
diff --git a/source/images/blog/2025-07-zooz/art.jpg b/source/images/blog/2025-07-zooz/art.jpg
new file mode 100644
index 00000000000..61980ba8490
Binary files /dev/null and b/source/images/blog/2025-07-zooz/art.jpg differ
diff --git a/source/images/integrations/enphase_envoy/enphase_envoy_inverter_device.png b/source/images/integrations/enphase_envoy/enphase_envoy_inverter_device.png
index a0a018ee236..71c8a7d0622 100644
Binary files a/source/images/integrations/enphase_envoy/enphase_envoy_inverter_device.png and b/source/images/integrations/enphase_envoy/enphase_envoy_inverter_device.png differ
diff --git a/source/images/voice-pe/local-cloud/ha-instance.svg b/source/images/voice-pe/local-cloud/ha-instance.svg
new file mode 100644
index 00000000000..4f9318a15b8
--- /dev/null
+++ b/source/images/voice-pe/local-cloud/ha-instance.svg
@@ -0,0 +1,4 @@
+
diff --git a/source/images/voice-pe/local-cloud/house.svg b/source/images/voice-pe/local-cloud/house.svg
index e3f47d124a1..05e9c629d9a 100644
--- a/source/images/voice-pe/local-cloud/house.svg
+++ b/source/images/voice-pe/local-cloud/house.svg
@@ -1,3 +1,9 @@
-
@@ -217,7 +219,8 @@ frontpage_image: /images/frontpage/voice-pe-frontpage.jpg
alt="Front view of the Voice Preview Edition showing the speaker holes">
Buy now
- * Recommended MSRP. Prices differ between regions due to varying local market costs and conditions, and subject to individual retailers.
+ * Recommended MSRP. Prices differ between regions due to varying local market costs and conditions,
+ and subject to individual retailers.
You do not need Home Assistant Cloud. However, if you are running less powerful hardware, like
- Home Assistant Green or a Raspberry Pi 4, we believe this provides the best experience. By doing
- so, you can leverage our cloud for speech processing, ensuring superior accuracy and faster
- performance not possible on your low-powered device.
-
Additionally, some languages have poor or
- non-existent support by the local speech-to-text software we leverage (OpenAI’s Whisper), but
- are well-supported by the speech processing used by Home Assistant Cloud.
+
You do not need Home Assistant Cloud. However, for some languages, we believe that Home Assistant
+ Cloud provides the best experience. There are languages that are not supported by the local
+ speech-to-text models we leverage (either our focused local Speech-to-Phrase model, or the fully
+ local Whisper by OpenAI), but are well-supported by the speech processing used by Home Assistant
+ Cloud.
Yes, Home Assistant can be configured to use any speech-to-text integration that supports the
- Wyoming protocol. Currently, the only locally-run speech-to-text add-on available for Home
- Assistant users is OpenAI’s Whisper. This has mixed results, missing languages, and is
- hardware-intensive.
-
That led us to build an alternative - Rhasspy Speech can run locally and
- accurately on lower-power hardware, though this does not provide full speech-to-text
- capabilities. Based on the Rhasspy project, it is able to create local speech-to-text models,
- but is limited to predefined sentences aimed at controlling your home, and will not be able to
- process general speech. For instance, it could turn on a device, but will not be able to add
- something to your shopping list. We expect to share the first version of Rhasspy Speech during
- the next Voice livestream in 2025.
+ Wyoming protocol. The most commonly used fully local speech-to-text add-on available for Home
+ Assistant users is OpenAI’s Whisper. This has mixed results; specifically, it lacks support for
+ some languages and is hardware-intensive.
+
Our alternative speech-to-text model, Speech-To-Phrase, can run locally and accurately on
+ lower-power hardware, though this does not provide full speech-to-text capabilities. Based on the
+ Rhasspy project,
+ it is able to create focused local speech-to-text models, limited to predefined sentences aimed at
+ controlling your home, but not able to process general speech. For instance, it could turn on a
+ device, but would not be able to add something to your shopping list.
+