');
// Create a table for the data to be ingested into (replace the name and copy inserted *name* for later use)
diff --git a/source/_integrations/azure_storage.markdown b/source/_integrations/azure_storage.markdown
index cc367a13522..95e95eff20d 100644
--- a/source/_integrations/azure_storage.markdown
+++ b/source/_integrations/azure_storage.markdown
@@ -45,3 +45,15 @@ This integration follows standard integration removal. No extra steps are requir
Check that your storage account allows [`Shared Key` access](https://learn.microsoft.com/en-us/azure/storage/common/shared-key-authorization-prevent?tabs=portal#remediate-authorization-via-shared-key).
{% enddetails %}
+
+{% details "DNS Error" %}
+
+You may encounter a `aiodns.error.DNSError: (4, 'Domain name not found')` error.
+
+To resolve this:
+
+1. Navigate to **Settings → System → Network → DNS Servers** in Home Assistant
+2. Manually set fallback DNS servers to `1.1.1.1` (Cloudflare) and `8.8.8.8` (Google) (or any other that you prefer). This allows Home Assistant to resolve Azure domain names successfully.
+3. Restart Home Assistant to propagate the new settings.
+
+{% enddetails %}
diff --git a/source/_integrations/backblaze_b2.markdown b/source/_integrations/backblaze_b2.markdown
new file mode 100644
index 00000000000..f73bc2a34a4
--- /dev/null
+++ b/source/_integrations/backblaze_b2.markdown
@@ -0,0 +1,83 @@
+---
+title: Backblaze B2
+description: Instructions on how to setup a Backblaze B2 bucket to be used as a backup location.
+ha_release: 2025.12
+ha_category:
+ - Backup
+ha_iot_class: Cloud Push
+ha_config_flow: true
+ha_domain: backblaze_b2
+ha_codeowners:
+ - '@ElCruncharino'
+ - '@hugo-vrijswijk'
+ha_integration_type: service
+ha_quality_scale: bronze
+---
+
+The **Backblaze** {% term integration %} enables you to use a [Backblaze B2](https://www.backblaze.com/cloud-storage) bucket as a backup location in Home Assistant.
+
+## Prerequisites
+
+This integration requires an existing B2 bucket and an application key that has access to that bucket. It is recommended to create a key that only has access to the required bucket and prefix (if desired).
+
+{% details "Create a new B2 bucket" %}
+
+1. Log in to the [Backblaze Console](https://secure.backblaze.com/b2_buckets.htm).
+2. [Create a bucket](https://www.backblaze.com/docs/cloud-storage-create-and-manage-buckets).
+ - Choose a unique **bucket name** (such as, `home-assistant-backups-123456`).
+ - Make a note of the bucket name — you’ll need it later.
+3. Adjust the settings:
+ - **Set bucket to private**: Enabled by default, recommended.
+ - **Encryption**: This enables Backblaze's server-side encryption. This is separate from the Home Assistant backup encryption. This is optional. If Home Assistant backups are configured to use encryption, you can disable this.
+
+{% enddetails %}
+
+{% details "Create an application key" %}
+
+To create an application key that can access the bucket:
+
+1. Go to [**Application Keys**](https://secure.backblaze.com/app_keys.htm) in the sidebar.
+2. [Create a new application key](https://www.backblaze.com/docs/cloud-storage-create-and-manage-app-keys).
+ - Use a name like `home-assistant-backup`.
+ - Limit access to the bucket by selecting it from the **Choose a bucket** dropdown.
+ - The type of access should be **Read and Write**.
+ - **Allow List All Bucket Names** can be left unchecked.
+ - Optionally, you can limit the key to a specific prefix (such as `home-assistant-backups`) if you want to save backups in a specific folder within the bucket.
+3. Save the **Key ID** and **Application Key**. You'll need these when setting up the Backblaze integration in Home Assistant.
+
+{% enddetails %}
+
+{% note %}
+
+By limiting credentials to a specific bucket, you reduce risk and help keep your Backblaze account secure.
+
+{% endnote %}
+
+{% include integrations/config_flow.md %}
+
+{% configuration_basic %}
+Key ID:
+ description: "The access key ID for your Backblaze account."
+Application Key:
+ description: "The application key for your Backblaze account."
+Bucket Name:
+ description: "Bucket name to store the backups. Bucket must already exist and be writable by the provided credentials."
+Prefix:
+ description: "Optional prefix for the backups. This is useful if you want to store backups in a specific folder within the bucket."
+{% endconfiguration_basic %}
+
+## Troubleshooting
+
+### Expired keys
+
+If the application key expires, you will need to create a new one and update the integration in Home Assistant.
+
+### Files are being overwritten due to non-unique bucket prefix
+
+If you set a prefix, all backups will be stored under that prefix in the bucket. Ensure that the prefix is unique to avoid overwriting other files. Changing the prefix will not move existing backups.
+
+## 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/bayesian.markdown b/source/_integrations/bayesian.markdown
index 99a9ae732fd..e8d7fabc05d 100644
--- a/source/_integrations/bayesian.markdown
+++ b/source/_integrations/bayesian.markdown
@@ -19,22 +19,14 @@ related:
ha_config_flow: true
---
-A `Bayesian` helper is a virtual binary sensor that determines its state based on the combination of multiple other sensors using probabilistic methods.
+A `Bayesian` sensor is a virtual binary sensor that determines its state by combining the states of other sensors using probability.
This approach enables the detection of complex events that are not directly or easily measurable, such as cooking, showering, being in bed, or starting a morning routine. Additionally, it can improve confidence and reliability in measurable events where sensors may be unreliable, such as some presence detectors.
-Bayesian works by applying [Bayes' rule](https://en.wikipedia.org/wiki/Bayes%27_theorem). It estimates the likelihood that a specific event is occurring based on the combination of the states of 'observed' sensors and a baseline, (`prior`) probability. When the calculated probability - known as a 'posterior' - exceeds the defined `probability_threshold`, the `bayesian` sensor will turn `on`; otherwise, it will be `off`.
+Bayesian works by applying [Bayes' rule](https://en.wikipedia.org/wiki/Bayes%27_theorem). It estimates the likelihood that a specific event is occurring based on the combination of a baseline probability - known as a 'prior' - and the states of 'observed' sensors and. When the calculated probability - known as a 'posterior' - exceeds the defined `probability_threshold`, the `bayesian` sensor will turn `on`; otherwise, it will be `off`.
Both UI and YAML setups are supported, importantly YAML uses probabilities of `0` to `1` whereas the UI uses percentages, `0` to `100`.
-## Theory
-
-A fundamental concept in Bayes' Rule is the distinction between the probability of an *event given an observation* and the probability of an *observation given an event*. These two probabilities are not interchangeable and must be considered separately. While they may be similar in some cases — for example, when motion sensors are accurate, the probability that someone is in the room *given* that motion is detected is often close to the probability that motion is detected *given* someone is in the room.
-
-Now consider the above, but in a home that has cats. The probability that the room is human-occupied *given* that motion detected may be quite low (e.g. 20%, p=0.2) if the room is popular with the cats. However, the probability that motion is detected *given* that it is occupied by a human is high (e.g 95%, p = 0.95) if our motion sensor is accurate. Said succinctly, not all motion is human, but all humans move.
-
-When configuring these conditional probabilities, define the probability of the sensor observation (e.g motion detected) *given* the thing you are trying to estimate (e.g human-occupancy of the room).
-
{% include integrations/config_flow.md %}
Once you have created a Bayesian helper, you can add and edit 'observations' here:
@@ -121,6 +113,14 @@ observations:
type: float
{% endconfiguration %}
+## Theory
+
+A fundamental concept in Bayes' Rule is the distinction between the probability of an *event given an observation* and the probability of an *observation given an event*. These two probabilities are not interchangeable and must be considered separately. While they may be similar in some cases — for example, when motion sensors are accurate, the probability that someone is in the room *given* that motion is detected is often close to the probability that motion is detected *given* someone is in the room.
+
+Now consider the above, but in a home that has cats. The probability that the room is human-occupied *given* that motion detected may be quite low (e.g. 20%, p=0.2) if the room is popular with the cats. However, the probability that motion is detected *given* that it is occupied by a human is high (e.g 95%, p = 0.95) if our motion sensor is accurate. Said succinctly, not all motion is human, but all humans move.
+
+When configuring these conditional probabilities, define the probability of the sensor observation (e.g motion detected) *given* the thing you are trying to estimate (e.g human-occupancy of the room).
+
## Estimating probabilities
1. Avoid `0` and `1`; these will mess with the odds and are rarely true—sensors fail.
@@ -134,11 +134,11 @@ observations:
## Full examples
-These are a number of worked examples which you may find helpful for each of the state types.
+These are a number of worked examples which you may find helpful for each of the observation types. Whilst these are YAML examples, UI configurations work in the same way, except that probabilities are expressed in percentages.
### State
-The following is an example for the `state` observation platform.
+The following is an example that only uses observations which test for exact matches of the `state` of entities.
```yaml
# Example configuration.yaml entry
@@ -178,7 +178,7 @@ binary_sensor:
### Numeric State
-Next up an example which targets the `numeric_state` observation platform,
+Next up is an example which uses the `numeric_state` - testing if the state of a numeric entity falls within a specified range,
as seen in the configuration it requires `below` and/or `above` instead of `to_state`.
```yaml
@@ -198,7 +198,7 @@ binary_sensor:
### Template
-Here's an example for `template` observation platform, as seen in the configuration it requires `value_template`. This template will evaluate to true if the device tracker `device_tracker.paulus` shows `not_home` and it last changed its status more than 5 minutes ago.
+Here's an example for `template` observations, as seen in the configuration it requires `value_template`. This template will evaluate to true if the device tracker `device_tracker.paulus` has not been seen in the last 5 minutes.
{% raw %}
diff --git a/source/_integrations/blue_current.markdown b/source/_integrations/blue_current.markdown
index 83e167f302e..52856bc183f 100644
--- a/source/_integrations/blue_current.markdown
+++ b/source/_integrations/blue_current.markdown
@@ -80,11 +80,23 @@ The Blue Current integration provides the following buttons:
- Reboot
- Stop charge session
+## Actions
+The following actions are provided by the Blue Current integration:
+
+### Action start_charge_session
+
+Starts a new charge session. When no charging card ID is provided, no charging card will be used.
+
+| Data attribute | Optional | Description |
+| -------------- | -------- | ----------- |
+| `device_id` | no | Charge point device ID |
+| `charging_card_id` | yes | Charging card ID that will be used to start a charge session. |
+
## Switch
The Blue Current integration provides the following switches:
-- Toggle Plug & Charge
+- 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.
diff --git a/source/_integrations/bluetooth.markdown b/source/_integrations/bluetooth.markdown
index 20de2169e5c..2be0db583fb 100644
--- a/source/_integrations/bluetooth.markdown
+++ b/source/_integrations/bluetooth.markdown
@@ -53,22 +53,50 @@ For Bluetooth to function on Linux systems:
### Additional requirements by install method
-- Home Assistant Operating System: Upgrade to Home Assistant OS version 9.0 or later.
-- Home Assistant Container: The host system must run BlueZ, and the D-Bus socket must be accessible to Home Assistant **inside** the container.
+- Home Assistant Operating System: Upgrade to Home Assistant OS version 9.0 or later. All Bluetooth requirements are automatically configured.
+- Home Assistant Container: The host system must run BlueZ, and the D-Bus socket must be accessible to Home Assistant **inside** the container. Additional configuration is required (see below).
### Additional details for Container
-{% details "Making the DBus socket available in the Docker container" %}
+{% details "Container configuration for Bluetooth" %}
-For most systems, the Dbus socket is in `/run/dbus`. The socket must be available in the container for Home Assistant to be able to connect to Dbus and access the Bluetooth adapter. When starting with `docker run`, this can be accomplished by adding `-v /run/dbus:/run/dbus:ro` to the command. If the Dbus socket is in `/var/run/dbus` on the host system, use `-v /var/run/dbus:/run/dbus:ro` instead.
+{% note %}
+You only need these configuration steps for Home Assistant Container installations. Home Assistant Operating System automatically handles all Bluetooth configuration.
+{% endnote %}
-If you are using Docker Compose, add something like the following (adjust as necessary) to your `volumes` section:
+Home Assistant Container requires specific configuration to access Bluetooth adapters.
-```dockerfile
+**Required capabilities:**
+
+Add the following Linux capabilities to your container configuration to enable full Bluetooth management:
+
+**Docker Compose:**
+```yaml
+cap_add:
+ - NET_ADMIN
+ - NET_RAW
volumes:
- /run/dbus:/run/dbus:ro
```
+**Docker run:**
+```bash
+docker run --cap-add=NET_ADMIN --cap-add=NET_RAW -v /run/dbus:/run/dbus:ro ...
+```
+
+**D-Bus socket:**
+
+For most systems, the D-Bus socket is in `/run/dbus`. You need to make the socket available in the container for Home Assistant to connect to D-Bus and access the Bluetooth adapter. If the D-Bus socket is in `/var/run/dbus` on your host system, use `-v /var/run/dbus:/run/dbus:ro` instead.
+
+**What happens without these capabilities:**
+
+If `NET_ADMIN` and `NET_RAW` capabilities are missing:
+- Your Bluetooth will operate in a degraded mode with limited functionality
+- Automatic adapter recovery is unavailable - your adapters cannot be reset when they stop responding
+- Connection parameters and management API commands will fail
+- Raw advertising data will be missing, causing unreliable updates for your devices
+- An error will appear in your logs: "Missing required permissions for Bluetooth management"
+
{% enddetails %}
{% details "Switching from dbus-daemon to dbus-broker" %}
@@ -411,7 +439,7 @@ The following integrations are automatically discovered by the Bluetooth integra
- [Probe Plus](/integrations/probe_plus/)
- [Qingping](/integrations/qingping/)
- [RAPT Bluetooth](/integrations/rapt_ble/)
- - [RuuviTag BLE](/integrations/ruuvitag_ble/)
+ - [Ruuvi BLE](/integrations/ruuvitag_ble/)
- [Sensirion BLE](/integrations/sensirion_ble/)
- [SensorPro](/integrations/sensorpro/)
- [SensorPush](/integrations/sensorpush/)
diff --git a/source/_integrations/brother.markdown b/source/_integrations/brother.markdown
index c22238b306e..7a7019b4dba 100644
--- a/source/_integrations/brother.markdown
+++ b/source/_integrations/brother.markdown
@@ -21,6 +21,24 @@ The **Brother Printer** {% term integration %} allows you to read current data f
It usually provides information about the device's state, the left amount of ink or toner and the remaining lifetime of the drum or other parts of the printer.
The integration monitors every supported part.
+## Prerequisites
+
+- To enable SNMP, navigate to the printer's web interface (for example: `http://192.168.5.6`) and turn it on under **Network** > **Protocol** > **SNMP**.
+- For some models, access to the web interface is password-protected.
+ - For some printers, the default password is printed on a sticker on the back of the printer, preceded by **Pwd**.
+ - If the printer does not have a password on the sticker, the default password is `initpass`.
+
+- For some Brother devices, **SNMPv3 read-write access and v1/v2c read-only access** is the option required (under advanced settings).
+
+
+
+## Unsupported devices
+
+The following devices are not supported by the integration:
+
+- MFC-8660DN
+- MFC-8860DN
+
{% include integrations/config_flow.md %}
{% configuration_basic %}
@@ -34,21 +52,98 @@ Type of the printer:
description: "Brother printer type: ink or laser."
{% endconfiguration_basic %}
+## Supported functionality
+
+The Brother integration provides the following entities.
+
+### Sensors
+
+- **Belt unit remaining lifetime**
+ - **Description**: Remaining lifetime percentage of the belt unit
+- **Black drum page counter**
+ - **Description**: Total number of pages printed with the black drum
+- **Black drum remaining lifetime**
+ - **Description**: Remaining lifetime percentage of the black drum
+- **Black drum remaining pages**
+ - **Description**: Estimated number of pages remaining for the black drum
+- **Black ink remaining**
+ - **Description**: Percentage of black ink remaining
+- **Black toner remaining**
+ - **Description**: Percentage of black toner remaining
+- **B/W pages**
+ - **Description**: Total number of black and white pages printed
+- **Color pages**
+ - **Description**: Total number of color pages printed
+- **Cyan drum page counter**
+ - **Description**: Total number of pages printed with the cyan drum
+- **Cyan drum remaining lifetime**
+ - **Description**: Remaining lifetime percentage of the cyan drum
+- **Cyan drum remaining pages**
+ - **Description**: Estimated number of pages remaining for the cyan drum
+- **Cyan ink remaining**
+ - **Description**: Percentage of cyan ink remaining
+- **Cyan toner remaining**
+ - **Description**: Percentage of cyan toner remaining
+- **Drum page counter**
+ - **Description**: Total number of pages printed using the main drum
+- **Drum remaining lifetime**
+ - **Description**: Remaining lifetime percentage of the main drum
+- **Drum remaining pages**
+ - **Description**: Estimated number of pages remaining for the main drum
+- **Duplex unit page counter**
+ - **Description**: Total number of pages printed using the duplex unit
+- **Fuser remaining lifetime**
+ - **Description**: Remaining lifetime percentage of the fuser unit
+- **Laser remaining lifetime**
+ - **Description**: Remaining lifetime percentage of the laser unit
+- **Last restart**
+ - **Description**: Date and time of the last printer restart
+ - **Remarks**: This entity is disabled by default
+- **Magenta drum page counter**
+ - **Description**: Total number of pages printed with the magenta drum
+- **Magenta drum remaining lifetime**
+ - **Description**: Remaining lifetime percentage of the magenta drum
+- **Magenta drum remaining pages**
+ - **Description**: Estimated number of pages remaining for the magenta drum
+- **Magenta ink remaining**
+ - **Description**: Percentage of magenta ink remaining
+- **Magenta toner remaining**
+ - **Description**: Percentage of magenta toner remaining
+- **Page counter**
+ - **Description**: Total number of pages printed by the printer
+- **PF Kit 1 remaining lifetime**
+ - **Description**: Remaining lifetime percentage of paper feed kit 1
+- **PF Kit MP remaining lifetime**
+ - **Description**: Remaining lifetime percentage of multipurpose tray feed kit
+- **Status**
+ - **Description**: Current printer status or condition
+- **Yellow drum page counter**
+ - **Description**: Total number of pages printed with the yellow drum
+- **Yellow drum remaining lifetime**
+ - **Description**: Remaining lifetime percentage of the yellow drum
+- **Yellow drum remaining pages**
+ - **Description**: Estimated number of pages remaining for the yellow drum
+- **Yellow ink remaining**
+ - **Description**: Percentage of yellow ink remaining
+- **Yellow toner remaining**
+ - **Description**: Percentage of yellow toner remaining
+
{% note %}
-Some very old Brother printers use different data format and these models are not supported. The integration will show information about that during configuration.
+Not all printer models support all the listed entities, the set of entities is tailored to a specific printer model.
{% endnote %}
-## Configuring the printer
+## Data updates
-To enable SNMP, navigate to the printer's web interface (for example: `http://192.168.5.6`) and turn it on under Network / Protocol / SNMP. For some models, access to the web interface is password-protected. For some printers, the default password is printed on a sticker on the back of the printer, preceded by "Pwd:". If the printer does not have a password on the sticker, the default password is "initpass".
+By default, the integration {% term polling polls %} data from the device every 30 seconds.
-For some Brother devices, `SNMPv3 read-write access and v1/v2c read-only access` is the option required (under advanced settings).
+## Possible use-cases
-
+- Monitor printer status and send notifications when paper jams or other unexpected events occur.
-## Sensor example
+## Examples
-You can configure Home Assistant to alert you when the printer jams or runs out of paper as follows. First, add the following to {% term "`configuration.yaml`" %} under the `template:` section (Note: replace `sensor.hl_l2340d_status` with the actual name of your sensor):
+You can configure Home Assistant to alert you when the printer jams or runs out of paper as follows. First, add the following to {% term "`configuration.yaml`" %} under the `template:` section.
+Replace `sensor.hl_l2340d_status` with the actual name of your sensor.
{% raw %}
@@ -90,3 +185,30 @@ Then, add this under the `alert:` section:
The above will send an alert for paper jam or out of paper whenever the condition is detected, assuming you have the Home Assistant app configured on your phone so that alerts can be sent directly to it. If you don't use the Home Assistant app, you will need to set up a different notifier.
Change `my_phone_notify` to the actual notifier you are using.
+
+## Known limitations
+
+- Some very old Brother printers use a different data format. Those models are not supported. The integration will show information about that during configuration.
+
+## Troubleshooting
+
+### Printer is unavailable after changing SNMP community
+
+After changing the SNMP community in the printer configuration, you need to reconfigure the device in Home Assistant. To do this:
+
+1. Go to {% my integrations title="**Settings** > **Devices & services**" %}.
+2. Select **Brother Printer**.
+3. Click {% icon "mdi:dots-vertical" %}.
+4. Select **Reconfigure**.
+
+### Integration reports problems with communication or data updating
+
+1. Check if the printer is online and available on the local network.
+2. Check in the printer's web interface if SNMP is enabled.
+3. In the printer's web interface, verify that **SNMPv3 read/write access and v1/v2c read-only access** is enabled, if available.
+
+## 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/bthome.markdown b/source/_integrations/bthome.markdown
index b095d9dab21..7be4a294fc3 100644
--- a/source/_integrations/bthome.markdown
+++ b/source/_integrations/bthome.markdown
@@ -28,4 +28,4 @@ BTHome is an energy effective but flexible BLE format to broadcast data with Blu
## Bindkey
-When using encryption for your BTHome sensor, you will be prompted to enter your 32 character hexadecimal (16 bytes) encryption key. This key is called the bindkey. More information about the bindkey can be found in the [specifications](https://bthome.io/#encryption).
+When using encryption for your BTHome sensor, you will be prompted to enter your 32 character hexadecimal (16 bytes) encryption key. This key is called the bindkey. More information about the bindkey can be found in the [specifications](https://bthome.io/encryption).
diff --git a/source/_integrations/cambridge_audio.markdown b/source/_integrations/cambridge_audio.markdown
index 3f153d385d6..437be502602 100644
--- a/source/_integrations/cambridge_audio.markdown
+++ b/source/_integrations/cambridge_audio.markdown
@@ -28,10 +28,12 @@ The integration automatically discovers all enabled zones and sources. Each zone
This integration allows you to connect the following devices:
+- Cambridge Audio Evo One
- Cambridge Audio Evo 75
- Cambridge Audio Evo 150
- Cambridge Audio CXN
- Cambridge Audio CXN (v2)
+- Cambridge Audio CXN100
- Cambridge Audio CXR120
- Cambridge Audio CXR200
- Cambridge Audio 851N
diff --git a/source/_integrations/climate.mqtt.markdown b/source/_integrations/climate.mqtt.markdown
index 209a900ce53..cbbcbaecdeb 100644
--- a/source/_integrations/climate.mqtt.markdown
+++ b/source/_integrations/climate.mqtt.markdown
@@ -201,7 +201,7 @@ json_attributes_topic:
required: false
type: string
max_humidity:
- description: The minimum target humidity percentage that can be set.
+ description: The maximum target humidity percentage that can be set.
required: false
type: float
default: 99
@@ -210,7 +210,7 @@ max_temp:
type: float
required: false
min_humidity:
- description: The maximum target humidity percentage that can be set.
+ description: The minimum target humidity percentage that can be set.
required: false
type: float
default: 30
diff --git a/source/_integrations/comelit.markdown b/source/_integrations/comelit.markdown
index 1ba6d2ad627..d4f2a5abedf 100644
--- a/source/_integrations/comelit.markdown
+++ b/source/_integrations/comelit.markdown
@@ -26,7 +26,7 @@ ha_platforms:
- sensor
- switch
ha_integration_type: hub
-ha_quality_scale: silver
+ha_quality_scale: platinum
---
The **Comelit SimpleHome** {% term integration %} allows you to control your [Comelit home automation devices](https://comelitgroup.it/installatore/offerta/home-building-automation/).
diff --git a/source/_integrations/command_line.markdown b/source/_integrations/command_line.markdown
index 387ddcc3b66..8ee6b1dd0b4 100644
--- a/source/_integrations/command_line.markdown
+++ b/source/_integrations/command_line.markdown
@@ -547,32 +547,6 @@ command_line:
```
{% endraw%}
-### Monitoring failed login attempts on Home Assistant
-
-If you'd like to know how many failed login attempts are made to Home Assistant, add the following to your {% term "`configuration.yaml`" %} file:
-
-{% raw %}
-```yaml
-# Example configuration.yaml entry
-command_line:
- - sensor:
- name: Badlogin
- command: "grep -c 'Login attempt' /home/hass/.homeassistant/home-assistant.log"
-```
-{% endraw%}
-
-Make sure to configure the [Logger integration](/integrations/logger) to monitor the [HTTP integration](/integrations/http/) at least the `warning` level.
-
-{% raw %}
-```yaml
-# Example working logger settings that works
-logger:
- default: critical
- logs:
- homeassistant.components.http: warning
-```
-{% endraw%}
-
### Details about the upstream Home Assistant release
You can see directly in the frontend (**Developer tools** -> **About**) what release of Home Assistant you are running. The Home Assistant releases are available on the [Python Package Index](https://pypi.python.org/pypi). This makes it possible to get the current release.
diff --git a/source/_integrations/compit.markdown b/source/_integrations/compit.markdown
new file mode 100644
index 00000000000..e586751b75c
--- /dev/null
+++ b/source/_integrations/compit.markdown
@@ -0,0 +1,71 @@
+---
+title: Compit
+description: Instructions on how to integrate Compit devices within Home Assistant.
+ha_category:
+ - Climate
+ha_release: '2025.10'
+ha_iot_class: Cloud Polling
+ha_config_flow: true
+ha_codeowners:
+ - '@Przemko92'
+ha_domain: compit
+ha_platforms:
+ - climate
+ha_integration_type: hub
+ha_quality_scale: bronze
+---
+
+The Compit {% term integration %} allows you to integrate air conditioning, ventilation, and heating controllers with Home Assistant. You need a Compit iNext account, which you can set up at [inext.compit.pl](https://inext.compit.pl).
+
+## Prerequisites
+
+1. Create an account on [inext.compit.pl](https://inext.compit.pl).
+2. Configure your Compit devices in your account.
+
+{% include integrations/config_flow.md %}
+
+{% configuration_basic %}
+Username:
+ description: "The username of your Compit iNext account."
+Password:
+ description: "The password of your Compit iNext account."
+{% endconfiguration_basic %}
+
+## Supported devices
+
+This integration supports most of Compit device models across thermostats, controllers, and sensors.
+
+### Thermostats
+
+- [Nano Color](https://compit.pl/produkty/termostaty-pokojowe/8-termostat-pokojowy-nano-color.html?ic=1) – Room thermostat
+- [Nano Color 2](https://compit.pl/produkty/termostaty-pokojowe/88-termostat-pokojowy-nano-color-2.html?ic=1) – Room thermostat
+- [Nano One](https://compit.pl/produkty/termostaty-pokojowe/24-termostat-pokojowy-nano-one.html?ic=1) – Room thermostat
+
+### Controllers
+
+- [AF-1](https://compit.pl/produkty/osprzet/91-af-1.html?ic=1) – Anti-freeze system
+- [BioMax742](https://compit.pl/dokumenty-do-pobrania/sterowniki-do-kot%C5%82%C3%B2w-dokumenty-do-pobrania/category/50-sterownik-kot%C5%82a-pelletowego-biomax-742.html?download=90:sterownik-kot%C5%82a-pelletowego-biomax-742-wersja-u7) – Pellet boiler controller
+- [BioMax775](https://compit.pl/dokumenty-do-pobrania/sterowniki-do-kot%C5%82%C3%B3w-dokumenty-do-pobrania/category/126-sterownik-kotla-pelletowego-biomax-775.html?download=313:sterownik-kotla-pelletowego-biomax-775-wersja-7), BioMax772 – Pellet boiler controllers
+- [BWC310](https://compit.pl/produkty/sterowniki-ogrzewania-podlogowego/40-sterownik-ogrzewania-podlogowego-l2.html?ic=1) – Mixing valve controller
+- [COMBO](https://compit.pl/produkty/osprzet/92-combo.html?ic=1) – Combo module
+- [EL750](https://compit.pl/produkty/sterowniki-do-kotlow/73-sterownik-kotla-elektrycznego-el750-1.html?ic=1) – Electric boiler controller
+- [L2](https://compit.pl/produkty/sterowniki-ogrzewania-podlogowego/40-sterownik-ogrzewania-podlogowego-l2.html?ic=1) – Floor heating controller
+- [R350.CWU](https://compit.pl/produkty/sterowniki-uniwerslane/78-sterownik-do-podgrzewania-wody-r350-cwu.html?ic=1) – Universal controller
+- [R350 T3](https://compit.pl/produkty/sterowniki-instalacji/42-dwustopniowy-sterownik-temperatury-regulator-pi-regulator-krokowy-sterowanie-3-punktowe-r350-07.html?ic=1) – Universal controller
+- [R350.M](https://compit.pl/produkty/sterowniki-uniwerslane/85-pogodowy-regulator-temperatury-obiegu-grzewczego-z-mieszaczem-r350m.html?ic=1) – Universal controller
+- [R470](https://compit.pl/produkty/sterowniki-pomp-ciepla/10-sterownik-pompy-ciepla-r470-one.html?ic=1), R480 – Heat pump controllers
+- [R490](https://compit.pl/produkty/sterowniki-pomp-ciepla/12-sterownik-pompy-ciepla-r490-one.html?ic=1) – Heat pump controller
+- [R770RS](https://compit.pl/produkty/sterowniki-do-kotlow/83-pogodowy-regulator-kotla-retortowego-i-instalacji-grzewczej-r771-2.html?ic=1), [R771RS](https://compit.pl/produkty/sterowniki-do-kotlow/83-pogodowy-regulator-kotla-retortowego-i-instalacji-grzewczej-r771-2.html?ic=1) – Boiler controllers
+- [R810](https://compit.pl/produkty/sterowniki-instalacji/43-pogodowy-regulator-temperatury-obiegu-grzewczego-r810.html?ic=1) – Heating circuit controller
+- [R900](https://compit.pl/produkty/sterowniki-pomp-ciepla/89-r900.html?ic=1) – Heat pump controller
+
+### Sensors
+
+- [SHC](https://compit.pl/produkty/osprzet/67-czujnik-stezenia-dwutlenku-wegla-wilgotnosci-i-temperatury-w-pomieszczeniach-shc.html?ic=1) – CO₂, humidity, and temperature sensor
+- [SPM](https://compit.pl/produkty/osprzet/87-czujnik-jakosci-powietrza-spm.html?ic=1) – Air quality sensor
+
+## 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/config.markdown b/source/_integrations/config.markdown
index 421c7f57200..2f675a299b9 100644
--- a/source/_integrations/config.markdown
+++ b/source/_integrations/config.markdown
@@ -16,55 +16,52 @@ related:
title: Configuration file
---
-The `config` integration is designed to display panels in the frontend to configure and manage parts of Home Assistant.
+The `config` integration is designed to display the **Settings** panels in the frontend to configure and manage parts of Home Assistant.
-This integration is by default enabled, unless you've disabled or removed the [`default_config:`](/integrations/default_config/) line from your {% term "`configuration.yaml`" %} file. If that is the case, the following example shows you how to enable this integration manually:
+The `config` integration is an internal integration and is enabled by default.
-```yaml
-# Example configuration.yaml entry
-config:
-```
+The **Settings** menu provides access to the following panels:
-### Integrations
+### Home Assistant Cloud
-This section enables you to manage integrations for devices such as Philips Hue and Sonos from within Home Assistant.
+Enables you to connect to [Home Assistant Cloud](https://support.nabucasa.com/hc/en-us/articles/26260474250269-List-of-Home-Assistant-Cloud-features) to use features such as secure remote access, voice assistants, or cloud storage for backups.
-### Users
+### Devices & services
-This section enables you to manage your Home Assistant users.
+Enables you to manage integrations for devices such as Philips Hue and Sonos from within Home Assistant.
-### General
+### Automation & Scenes
-This section enables you to manage the name, location, and unit system of your Home Assistant installation.
+Enables you to create and modify automations, scenes, scripts, and blueprints from within Home Assistant.
-### Server control
+### Areas, labels & zones
-This section enables you to control Home Assistant from within Home Assistant. Check your configuration, reload the core, groups, scripts, automations, and the Home Assistant process itself with a single mouse click.
+Enables you to organize entities according to physical or conceptual areas of your home.
-
-
-
+### Add-ons
-### Persons
+Enables you to install and use additional standalone third-party software packages. Add-ons can only be installed on Home Assistant OS.
-This section enables you to associate users with their device tracker entities using the person integration.
+### Dashboards
-### Entities
+Enables you to add new [dashboards](/dashboards) and manage existing ones.
-This section enables you to override the name, change the entity ID or disable an entity in Home Assistant.
+### Voice assistants
-### Areas
+Enables you to create and manage [voice assistants](/voice_control/).
-This section enables you to organize entities to physical areas of your home.
+### Tags
-### Automation
+Allows you to set up NFC tags and QR codes.
-This section enables you to create and modify automations from within Home Assistant, without needing to write out the YAML code.
+### People
-### Script
+Allows you to manage who can access Home Assistant and what rights they have to configure it.
-Similar to the automation editor, this section enables you to create and modify scripts from within Home Assistant, without needing to write out the YAML code.
+### System
-### Customizations
+Allows you to define things like time zone and location of your system but also to view logs, create backups, or add external network storage.
-This section enables you to customize entities within Home Assistant. Use this to set friendly names, change icons, and modify other attributes.
+### About
+
+Allows you to view the {% my info title="version information" %}.
\ No newline at end of file
diff --git a/source/_integrations/control4.markdown b/source/_integrations/control4.markdown
index 0332d6c21dc..ea7d7b78370 100644
--- a/source/_integrations/control4.markdown
+++ b/source/_integrations/control4.markdown
@@ -3,6 +3,7 @@ title: Control4
description: Instructions on adding a Control4 system to Home Assistant.
ha_release: '0.114'
ha_category:
+ - Climate
- Light
- Media Player
ha_iot_class: Local Polling
@@ -12,12 +13,13 @@ ha_codeowners:
ha_domain: control4
ha_ssdp: true
ha_platforms:
+ - climate
- light
- media_player
ha_integration_type: integration
---
-The **Control4** {% term integration %} allows you to control and monitor lights and Room Media from your local Control4 system. Your Control4 controller must be running OS 3.0+.
+The **Control4** {% term integration %} allows you to control and monitor lights, Room Media, and climate devices from your local Control4 system. Your Control4 controller must be running OS 3.0+.
## Prerequisites
diff --git a/source/_integrations/conversation.markdown b/source/_integrations/conversation.markdown
index 8e563b76c69..30d875aa8ae 100644
--- a/source/_integrations/conversation.markdown
+++ b/source/_integrations/conversation.markdown
@@ -8,11 +8,12 @@ ha_quality_scale: internal
ha_codeowners:
- '@home-assistant/core'
- '@synesthesiam'
+ - '@arturpragacz'
ha_domain: conversation
-ha_integration_type: system
+ha_integration_type: entity
---
-The **Conversation** {% term integration %} allows you to converse with Home Assistant. You can either converse by pressing the microphone in the frontend (supported browsers only (no iOS)) or by calling the `conversation/process` action with the transcribed text.
+The **Conversation** {% term integration %} allows you to converse with Home Assistant. You can either converse by pressing the microphone in the frontend (supported browsers only (no iOS)) or by calling the `conversation.process` action with the transcribed text.
diff --git a/source/_integrations/cosori.markdown b/source/_integrations/cosori.markdown
new file mode 100644
index 00000000000..26f0b067776
--- /dev/null
+++ b/source/_integrations/cosori.markdown
@@ -0,0 +1,36 @@
+---
+title: Cosori
+description: Connect and control your Cosori devices using the VeSync integration
+ha_category:
+ - Fan
+ - Light
+ - Number
+ - Switch
+ha_release: 2025.12
+ha_domain: cosori
+ha_integration_type: virtual
+ha_supporting_domain: vesync
+ha_supporting_integration: VeSync
+ha_codeowners:
+ - '@markperdue'
+ - '@webdjoe'
+ - '@thegardenmonkey'
+ - '@cdnninja'
+ - '@iprak'
+ - '@sapuseven'
+ha_config_flow: true
+ha_platforms:
+ - binary_sensor
+ - diagnostics
+ - fan
+ - humidifier
+ - light
+ - number
+ - select
+ - sensor
+ - switch
+ - update
+ha_iot_class: Cloud Polling
+---
+
+{% include integrations/supported_brand.md %}
diff --git a/source/_integrations/cync.markdown b/source/_integrations/cync.markdown
new file mode 100644
index 00000000000..618386c3272
--- /dev/null
+++ b/source/_integrations/cync.markdown
@@ -0,0 +1,63 @@
+---
+title: Cync
+description: Instructions on how to integrate Cync devices into Home Assistant.
+ha_release: '2025.10'
+ha_iot_class: Cloud Push
+ha_category:
+ - light
+ha_codeowners:
+ - '@Kinachi249'
+ha_domain: cync
+ha_integration_type: hub
+ha_platforms:
+ - light
+ha_quality_scale: bronze
+ha_config_flow: true
+---
+
+The **Cync** {% term integration %} is used to integrate with smart devices sold by [GE Lighting](https://www.gelighting.com/). Cync, formerly known as "C by GE", is the name given to GE Lighting's line of smart devices.
+
+## Prerequisites
+
+- A Cync account is required to use this integration.
+- Any device you wish to add to Home Assistant must first be set up via the Cync app.
+- At least one Wi-Fi connected device is required to be set up in your Cync account.
+ - Older, Bluetooth-only Cync devices may not be recognized by the integration without a Cync bridge device.
+
+{% include integrations/config_flow.md %}
+
+{% configuration_basic %}
+Email:
+ description: Your Cync account's email address
+Password:
+ description: Your Cync account's password
+{% endconfiguration_basic %}
+
+## Supported functionality
+
+The **Cync** integration provides the following entities.
+
+### Lights
+
+- Supported operations:
+ - On/Off
+ - Brightness*
+ - Color temperature*
+ - RGB color*
+
+*If supported by device.
+
+## Known limitations
+
+- The following lighting features are not yet supported:
+ - Dynamic effects
+ - Light shows
+ - Music shows
+ - LED strip segment control
+- Cync servers only allow one instance of your account to connect at a time. If you open the Cync app while Home Assistant is running, the integration will briefly lose its connection. It will automatically reconnect after a 10 second waiting period.
+
+## Removing the integration
+
+This integration follows standard integration removal.
+
+{% include integrations/remove_device_service.md %}
diff --git a/source/_integrations/daikin.markdown b/source/_integrations/daikin.markdown
index e3df334a558..eb00e424fd6 100644
--- a/source/_integrations/daikin.markdown
+++ b/source/_integrations/daikin.markdown
@@ -20,12 +20,6 @@ ha_platforms:
ha_integration_type: integration
---
-{% warning %}
-
-Daikin has removed their local API in newer products. They offer a Onecta cloud API for controlling Daikin devices through the cloud, see the [Daikin Europe Developer Portal](https://developer.cloud.daikineurope.com) for more details. This affects units fitted with the BRP069C4x wifi adapter. Units listed under Supported Hardware below continue to have access to local control. Additionally the older but commonly available BRP072A42 adapter can be fitted to most if not all newer units for access to local control.
-
-{% endwarning %}
-
The **Daikin** {% term integration %} integrates Daikin air conditioning systems into Home Assistant.
There is currently support for the following device types within Home Assistant:
@@ -40,20 +34,16 @@ There is currently support for the following device types within Home Assistant:
- The Australian version of the Daikin Wifi Controller Unit BRP072A42, which is operated by the [Daikin Mobile Controller (iOS)](https://itunes.apple.com/au/app/daikin-mobile-controller/id917168708?mt=8) ([Android](https://play.google.com/store/apps/details?id=ao.daikin.remoapp)) application. Confirmed working on a Daikin Cora Series Reverse Cycle Split System Air Conditioner 2.5kW Cooling FTXM25QVMA with operation mode, temp, fan swing (3d, horizontal, vertical).
- BRP072Cxx based units (including Zena devices)*.
- The United States version of the Wifi Controller Unit (BRP072A43), which is powered by the [Daikin Comfort Control](https://play.google.com/store/apps/details?id=us.daikin.comfortcontrols) application. Confirmed working on a Daikin Wall Units FTXS09LVJU, FTXS15LVJU, FTXS18LVJU and a Floor Unit FVXS15NVJU with operation mode, temp, fan swing (3d, horizontal, vertical).
+- BRP069C4x/BRP084Cxx units using firmware 2.8.0 was added in HA 2025.9.
- The Australian version of the Daikin Wifi Controller for **AirBase** units (BRP15B61), which is operated by the [Daikin Airbase](https://play.google.com/store/apps/details?id=au.com.daikin.airbase) application.
- **SKYFi** based units, which is operated by the SKYFi application*.
-{% note %}
-
-- BRP072Cxx adapters require an API key to be entered, which is labelled "KEY" on the device sticker alongside SSID, MAC, and S/N. Password should be left blank.
-- SKYFi-based units require a password to be entered. API key should be left blank.
-- Other models are auto-detected and the API key and password fields must be left blank.
-- BRP084Cxx firmware update from 1.19.0 to 2.8.0 breaks local API there is however ongoing work in fixing local API support again.
-
-{% endnote %}
+If your unit is not in the list above there is another option, to buy and install an [ESP32-Faikin](https://github.com/revk/ESP32-Faikin).
{% include integrations/config_flow.md %}
+If your device is set up with password, use the password. If it has an API key, use the API key. In all other cases, leave the fields blank.
+
{% note %}
If your Daikin unit does not reside in the same network as your Home Assistant instance, i.e. your network is segmented, note that a couple of UDP connections are made during discovery:
diff --git a/source/_integrations/datadog.markdown b/source/_integrations/datadog.markdown
index d117330ba35..3c7a71c8850 100644
--- a/source/_integrations/datadog.markdown
+++ b/source/_integrations/datadog.markdown
@@ -22,7 +22,7 @@ Datadog allows you to analyze, monitor, cross-reference and alert upon your data
-The integration also sends events from the logbook into Datadog, allowing you to correlate these events with your data.
+The integration also sends events from activity tracking into Datadog, allowing you to correlate these events with your data.
diff --git a/source/_integrations/default_config.markdown b/source/_integrations/default_config.markdown
index 7e07591bc9d..73db690e03e 100644
--- a/source/_integrations/default_config.markdown
+++ b/source/_integrations/default_config.markdown
@@ -16,6 +16,7 @@ This {% term integration %} is a meta-component and configures a default set of
- [Assist pipeline](/integrations/assist_pipeline/) (`assist_pipeline`)
- [Backup](/integrations/backup/) (`backup`)
- [Bluetooth](/integrations/bluetooth/) (`bluetooth`)
+- [Cloud](/integrations/cloud/) (`cloud`)
- [Configuration](/integrations/config/) (`config`)
- [Conversation](/integrations/conversation/) (`conversation`)
- [DHCP discovery](/integrations/dhcp/) (`dhcp`)
@@ -25,13 +26,14 @@ This {% term integration %} is a meta-component and configures a default set of
- [Home Assistant Alerts](/integrations/homeassistant_alerts) (`homeassistant_alerts`)
- [Home Assistant Cloud](/integrations/cloud/) (`cloud`)
- [Image upload](/integrations/image_upload/) (`image_upload`)
-- [Logbook](/integrations/logbook/) (`logbook`)
+- [Activity](/integrations/logbook/) (`logbook`)
- [Media source](/integrations/media_source/) (`media_source`)
- [Mobile app support](/integrations/mobile_app/) (`mobile_app`)
- [My Home Assistant](/integrations/my/) (`my`)
- [Simple Service Discovery Protocol (SSDP)](/integrations/ssdp/) (`ssdp`)
- [Stream](/integrations/stream/) (`stream`)
- [Sun](/integrations/sun/) (`sun`)
+- [Usage Prediction](/integrations/usage_prediction/) (`usage_prediction`)
- [USB](/integrations/usb/) (`usb`)
- [Webhooks](/integrations/webhook) (`webhook`)
- [Zero-configuration networking (zeroconf)](/integrations/zeroconf/) (`zeroconf`)
diff --git a/source/_integrations/denonavr.markdown b/source/_integrations/denonavr.markdown
index 3358698ca3e..cc502f650bb 100644
--- a/source/_integrations/denonavr.markdown
+++ b/source/_integrations/denonavr.markdown
@@ -80,6 +80,7 @@ Known supported devices:
- Denon AVR-S960H
- Denon AVR-S970H
- Denon DN-500AV
+- Denon DRA-N5
- Denon DRA-800H
- Marantz AV7702
- Marantz AV7703
@@ -112,6 +113,7 @@ Known supported devices:
- Marantz NR1604
- Marantz NR1606
- Marantz NR1607
+- Marantz NR1609
- Marantz NR1710
- Marantz NR1711
- Other Denon AVR receivers (untested)
diff --git a/source/_integrations/derivative.markdown b/source/_integrations/derivative.markdown
index 909ba0029a6..db71ba433f1 100644
--- a/source/_integrations/derivative.markdown
+++ b/source/_integrations/derivative.markdown
@@ -15,8 +15,10 @@ ha_codeowners:
ha_domain: derivative
ha_config_flow: true
ha_platforms:
+ - diagnostics
- sensor
ha_integration_type: helper
+ha_quality_scale: internal
---
The derivative ([Wikipedia](https://en.wikipedia.org/wiki/Derivative)) integration creates a sensor that estimates the derivative of the
diff --git a/source/_integrations/downloader.markdown b/source/_integrations/downloader.markdown
index 2b2639d9f41..d1cb0976141 100644
--- a/source/_integrations/downloader.markdown
+++ b/source/_integrations/downloader.markdown
@@ -8,7 +8,7 @@ ha_quality_scale: internal
ha_domain: downloader
ha_codeowners:
- '@erwindouna'
-ha_integration_type: integration
+ha_integration_type: service
ha_config_flow: true
---
diff --git a/source/_integrations/droplet.markdown b/source/_integrations/droplet.markdown
index 182c20492c7..0a551b42152 100644
--- a/source/_integrations/droplet.markdown
+++ b/source/_integrations/droplet.markdown
@@ -4,14 +4,14 @@ description: Instructions on how to setup Droplet in Home Assistant.
ha_category:
- Sensor
ha_config_flow: true
-ha_release: "2025.10"
+ha_release: '2025.10'
ha_iot_class: Local Push
ha_codeowners:
- '@sarahseidman'
-ha_domain: droplet
+ha_domain: droplet
ha_platforms:
- sensor
-ha_integration_type: device
+ha_integration_type: integration
ha_zeroconf: true
ha_quality_scale: bronze
---
@@ -70,3 +70,13 @@ This integration follows standard integration removal process.
{% include integrations/remove_device_service.md %}
4. To prevent Droplet from showing up as a discovered device after its removal, disable the local API in the Droplet app under **Settings** > **Smart Home Integrations** > **Home Assistant**.
+
+## FAQ & Troubleshooting
+
+### Q: Why does Droplet’s volume sensor sometimes show negative values?
+
+**A**: The volume reported by Droplet over local API is point-to-point, meaning that each new value represents the difference in volume recorded since this data was last sent. Even when you’re not using appliances in your home, there can still be activity in your pipes. Droplet tries to be very accurate and is sensitive to small flows, which can include water sloshing back and forth, or slight movement as a result of pressure differences. Small negative values are to be expected, and are reported so that cumulative statistics reported in Home Assistant (or other consumers of the API) can be fully accurate.
+
+### Q: Why is my Droplet failing to authenticate with Home Assistant?
+
+**A**: If your Droplet is failing to authenticate, try waiting 1-2 minutes after enabling Home Assistant or regenerating the code in the Droplet app. It may take a moment for the Droplet to be ready to accept connections.
diff --git a/source/_integrations/dsmr_reader.markdown b/source/_integrations/dsmr_reader.markdown
index e91215d9fd2..c21309ce551 100644
--- a/source/_integrations/dsmr_reader.markdown
+++ b/source/_integrations/dsmr_reader.markdown
@@ -16,7 +16,7 @@ ha_domain: dsmr_reader
ha_platforms:
- diagnostics
- sensor
-ha_integration_type: integration
+ha_integration_type: device
---
The `dsmr_reader` sensor integration allows you to easily add all sensors that [DSMR Reader](https://dsmr-reader.readthedocs.io/en/latest/) (Dutch Smart Meter Requirements Reader) exposes to MQTT. It adds a separate sensor for every field in the MQTT topics which is named `sensor_dsmr_`.
diff --git a/source/_integrations/eafm.markdown b/source/_integrations/eafm.markdown
index 6e9e99e0d32..f0ef9be88c1 100644
--- a/source/_integrations/eafm.markdown
+++ b/source/_integrations/eafm.markdown
@@ -1,27 +1,31 @@
----
-title: UK Environment Agency Flood Monitoring
-description: Monitor nearby water levels and be prepared for flooding with the UK Environment Agency API integration.
-ha_category:
- - Sensor
-ha_release: 0.115
-ha_iot_class: Cloud Polling
-ha_config_flow: true
-ha_codeowners:
- - '@Jc2k'
----
-
-The `eafm` integration offers integration with the [UK Environment Agency Flood Monitoring](https://environment.data.gov.uk/flood-monitoring/doc/reference) API to provide sensors for nearby water levels. Combined with Home Assistant notifications, you could give yourself a warning if a nearby river was likely to flood your local cycle path or the only road out of your village.
-
-{% important %}
-
-The UK Environment Agency Flood Monitoring only provides data for England - Northern Ireland, Scotland and Wales have their own flood agencies.
-
-{% endimportant %}
-
-## Configuration
-
-Home Assistant offers the flood monitoring integration through **Settings** -> **Devices & services** -> **Environment Agency Flood Gauges**.
-
-You will be prompted to select a monitoring station. You can find the name of nearby monitoring stations on the Flood information service [website](https://check-for-flooding.service.gov.uk/river-and-sea-levels).
-
-Sensors for that monitoring station should then appear in your Home Assistant instance.
+---
+title: Environment Agency Flood Gauges
+description: Monitor nearby water levels and be prepared for flooding with the UK Environment Agency API integration.
+ha_category:
+ - Sensor
+ha_release: 0.115
+ha_iot_class: Cloud Polling
+ha_config_flow: true
+ha_codeowners:
+ - '@Jc2k'
+ha_domain: eafm
+ha_platforms:
+ - sensor
+ha_integration_type: integration
+---
+
+The `eafm` integration offers integration with the [UK Environment Agency Flood Monitoring](https://environment.data.gov.uk/flood-monitoring/doc/reference) API to provide sensors for nearby water levels. Combined with Home Assistant notifications, you could give yourself a warning if a nearby river was likely to flood your local cycle path or the only road out of your village.
+
+{% important %}
+
+The UK Environment Agency Flood Monitoring only provides data for England - Northern Ireland, Scotland and Wales have their own flood agencies.
+
+{% endimportant %}
+
+## Configuration
+
+Home Assistant offers the flood monitoring integration through **Settings** -> **Devices & services** -> **Environment Agency Flood Gauges**.
+
+You will be prompted to select a monitoring station. You can find the name of nearby monitoring stations on the Flood information service [website](https://check-for-flooding.service.gov.uk/river-and-sea-levels).
+
+Sensors for that monitoring station should then appear in your Home Assistant instance.
diff --git a/source/_integrations/ecobee.markdown b/source/_integrations/ecobee.markdown
index d90c107318c..2a09c066c02 100644
--- a/source/_integrations/ecobee.markdown
+++ b/source/_integrations/ecobee.markdown
@@ -260,7 +260,7 @@ Enable/disable Smart Home/Away and Follow Me modes.
### Service `ecobee.set_sensors_in_climate`
-Set which sensors are active on a termostat for a specific climate program.
+Set which sensors are active on a thermostat for a specific climate program.
| Service data attribute | Optional | Description |
| ---------------------- | -------- | --------------------------------------------------------------------------------------------------------------------------------------------------- |
diff --git a/source/_integrations/ecovacs.markdown b/source/_integrations/ecovacs.markdown
index b65028c7a8b..7885ee1b5c9 100644
--- a/source/_integrations/ecovacs.markdown
+++ b/source/_integrations/ecovacs.markdown
@@ -25,15 +25,19 @@ ha_platforms:
- sensor
- switch
- vacuum
-ha_integration_type: integration
+ha_integration_type: hub
---
-The `ecovacs` {% term integration %} is the main integration to integrate [Ecovacs](https://www.ecovacs.com) (Deebot) vacuums and mowers. You will need your Ecovacs account information (username, password) to discover and control vacuums and mowers in your account.
+The `ecovacs` {% term integration %} is the main integration to integrate [Ecovacs](https://www.ecovacs.com) (Deebot) vacuums and mowers.
-{% include integrations/config_flow.md %}
+## Prerequisites
+
+You will need your Ecovacs account information (username, password) to discover and control vacuums and mowers in your account.
Additional note: There are some issues during the password encoding. Using some special characters (e.g., `-`) in your password does not work.
+{% include integrations/config_flow.md %}
+
With `advanced_mode` enabled, users can use their self-hosted instance over the cloud servers. Self-hosting comes with some requirements and limitations. See [Self-hosted configuration](#self-hosted-configuration) for additional details.
## Provided entities
@@ -58,10 +62,13 @@ Additionally, **depending on your model**, the integration provides the followin
- `Clean count`: Set the number of times to clean the area.
- `Cut direction`: Set the mower cutting direction (from 0 to 180 degrees).
- `Volume`: Set the volume.
+ - `Water level`: Set a precise water level used during cleaning with the mop.
- **Select**:
- - `Water amount`: Specify the water amount used during cleaning with the mop.
+ - `Active map`: Select the active map. The ID will be shown when the map has no name.
+ - `Water level`: Choose from predefined water levels used during cleaning with the mop.
- `Work mode`: Specify the mode, how the bot should clean.
- **Sensor**:
+ - `Auto-empty frequency`: The frequency of emptying the bot dust bin during cleaning.
- `Error`: The error code and a description of the error. `0` means no error. Disabled by default.
- `Lifespan`: For each supported component, an entity with the remaining lifespan will be created.
- `Network`: The following network related entities will be created. All disabled by default.
@@ -78,6 +85,7 @@ Additionally, **depending on your model**, the integration provides the followin
- `Time`: The total cleaning time
- **Switch**:
- `Advanced mode`: Enable advanced mode. Disabled by default.
+ - `Border spin`: Enable border spin, which means the bot will tilt to reach corners during mopping. Present on bots without an extendable mop. Disabled by default.
- `Border switch`: Enable border switch. Disabled by default.
- `Carpet auto fan speed boost`: Enable maximum fan speed if a carpet is detected. Disabled by default.
- `Child lock`: Enable child lock. Disabled by default.
@@ -211,3 +219,9 @@ In any case, when reporting an issue, please enable [debug logging](/docs/config
Because Ecovacs doesn't provide a public documentation about their APIs, the support of devices is based on reverse engineering of the communication of the device. This reverse engineering can only be done by persons, who are in possession of such a device and the knowledge how to do the reverse engineering. Therefore the support of devices heavily depends on contributions from the community.
If your device is not supported, please request for help or contribute on your own the support of your device directly to the [`deebot_client`](https://github.com/DeebotUniverse/client.py) library.
+
+## Removing the integration
+
+This integration follows standard integration removal.
+
+{% include integrations/remove_device_service.md %}
diff --git a/source/_integrations/ekeybionyx.markdown b/source/_integrations/ekeybionyx.markdown
new file mode 100644
index 00000000000..1e65ad5154b
--- /dev/null
+++ b/source/_integrations/ekeybionyx.markdown
@@ -0,0 +1,54 @@
+---
+title: ekey bionyx
+description: Instructions on how to integrate ekey bionyx devices into Home Assistant.
+ha_category:
+ - Event
+ha_release: '2025.10'
+ha_iot_class: Local Push
+ha_config_flow: true
+ha_domain: ekeybionyx
+ha_codeowners:
+ - '@richardpolzer'
+ha_platforms:
+ - event
+ha_integration_type: integration
+ha_quality_scale: bronze
+---
+
+The **ekey bionyx** {% term integration %} allows Home Assistant to receive events from your [ekey fingerprint reader](https://www.ekey.net).
+
+## Prerequisites
+
+- The **ekey bionyx** app.
+- The ekey device needs to be set up in **plus mode** in the app.
+- The ekey bionyx Third-Party API needs to be enabled in the app.
+
+
+
+{% include integrations/config_flow.md %}
+
+{% tip %}
+Prefer using local IPs when setting up the {% term integration %} instead of domain names because the events will be more responsive.
+{% endtip %}
+
+Once the {% term integration %} is added, open the ekey app and assign events to the fingers you wish to use as triggers.
+
+## Supported functionality
+
+The **ekey bionyx** {% term integration %} provides the following entities.
+
+### Events
+
+The functions defined during setup are represented in Home Assistant as events. You can use these events as triggers in automations.
+
+## Limitations
+
+- The ekey {% term integration %} allows only five functions per ekey system.
+- You cannot link multiple Home Assistant instances to the same ekey system.
+
+## Removing the integration
+
+Based on the limited lifetime of the token, you have two options for cleanly resetting the connection to Home Assistant:
+
+- Delete the {% term integration %} in Home Assistant, set it up again (triggering the deletion process), and abort when you are in the step of naming the functions.
+- Delete the {% term integration %} in Home Assistant, then disable and re-enable the Third-Party API in the ekey app (this resets all functions and webhooks, even outside of Home Assistant).
diff --git a/source/_integrations/elevenlabs.markdown b/source/_integrations/elevenlabs.markdown
index 02bdedc78c5..75625246d20 100644
--- a/source/_integrations/elevenlabs.markdown
+++ b/source/_integrations/elevenlabs.markdown
@@ -7,6 +7,7 @@ ha_release: 2024.8
ha_iot_class: Cloud Polling
ha_domain: elevenlabs
ha_platforms:
+ - stt
- tts
ha_config_flow: true
ha_integration_type: service
@@ -14,22 +15,35 @@ ha_codeowners:
- '@sorgfresser'
---
-The **ElevenLabs** text-to-speech {% term integrations %} adds support for [ElevenLabs](https://elevenlabs.io/) as text-to-speech to read a text with natural sounding voices.
+The **ElevenLabs** {% term integrations %} adds support for [ElevenLabs](https://elevenlabs.io/) as text-to-speech to read a text with natural sounding voices and speech-to-text to convert speech into text.
## Prerequisites
- You need an ElevenLabs account to use this integration. A free account suffices for basic usage.
- For custom voices or more quota you need a subscription.
- You need your API key from the ElevenLabs website.
+- Your API key requires the following permissions:
+ - Text to Speech
+ - Speech to Text
+ - Voices (Read only)
+ - Models (Read only)
{% include integrations/config_flow.md %}
+### Text-to-speech
+
For an overview of which languages can be used, check the [complete list of supported languages](https://elevenlabs.io/languages).
For a description of which voices are available for use, check your VoiceLab voices.
To see the available models and their benefits, check the [models documentation](https://elevenlabs.io/docs/speech-synthesis/models).
+### Speech-to-text
+
+An overview of supported languages is available at [complete list of supported languages](https://elevenlabs.io/docs/capabilities/speech-to-text#supported-languages).
+
+List of models and their capabilities can be determined at [models documentation](https://elevenlabs.io/docs/capabilities/speech-to-text#models).
+
## Action speak
The `tts.speak` action is the modern way to use TTS. Add the `speak` action, select the entity for your ElevenLabs TTS (it's named ElevenLabs by default), select the media player entity or group to send the TTS audio to, and enter the message to speak.
@@ -61,14 +75,25 @@ voice:
required: false
type: string
model:
- description: "Model ID for the model to use. Will override the default model of the entity!"
+ description: "Model ID for the text-to-speech model to use. Will override the default model of the entity!"
required: false
type: string
+Speech-to-text model:
+ description: "Model ID for the speech-to-text model to use. Will override the default model of the entity!"
+ required: false
+ type: string
+Auto-detect language:
+ description: "Should speech-to-text auto-detect the language spoken, overrides the language selected in voice assistant!"
+ required: false
+ type: boolean
+ default: false
{% endconfiguration %}
For more information about using text-to-speech with Home Assistant and more details on all the options it provides, see the [TTS documentation](/integrations/tts/).
+For more information about using speech-to-text with Home Assistant and more details on all the options it provides, see the [STT documentation](/integrations/stt/).
+
## Removing the integration
This integration follows standard integration removal. No extra steps are required.
diff --git a/source/_integrations/eltako.markdown b/source/_integrations/eltako.markdown
new file mode 100644
index 00000000000..8531fc46393
--- /dev/null
+++ b/source/_integrations/eltako.markdown
@@ -0,0 +1,29 @@
+---
+title: Eltako
+description: Connect and control your Eltako Matter devices using the Matter integration
+ha_release: '2025.10'
+ha_iot_class: Local Push
+ha_category:
+ - Switch
+ha_domain: eltako
+ha_integration_type: brand
+works_with:
+ - matter
+ha_platforms:
+ - switch
+ha_iot_standard: matter
+ha_brand: true
+---
+
+
+{% include integrations/wwha.md url="https://www.eltako.com" name="Eltako" %}
+
+## Supported devices
+
+The following devices are supported:
+
+- [Universal dimming actuator EUD62NPN-IPM](https://www.eltako.com/en/catalog/products/1238/eud62npn-ipm110-240v)
+- [Universal dimming actuator EUD64NPN-IPM](https://www.eltako.com/en/catalog/products/1761/eud64npn-ipm)
+- [Impulse switch ESR64PF-IPM](https://www.eltako.com/en/catalog/products/1760/esr64pf-ipm)
+- [Impulse switch ESR64NP-IPM](https://www.eltako.com/en/catalog/products/1759/esr64np-ipm)
+- [Shading actuator ESB64NP-IPM](https://www.eltako.com/en/catalog/products/1792/esb64np-ipm)
diff --git a/source/_integrations/enmax.markdown b/source/_integrations/enmax.markdown
deleted file mode 100644
index 574e872d759..00000000000
--- a/source/_integrations/enmax.markdown
+++ /dev/null
@@ -1,24 +0,0 @@
----
-title: Enmax Energy
-description: Get energy usage from Enmax Energy using the Opower integration
-ha_category:
- - Energy
- - Sensor
-ha_release: 2023.8
-ha_domain: enmax
-ha_integration_type: virtual
-ha_supporting_domain: opower
-ha_supporting_integration: Opower
-ha_codeowners:
- - '@tronikos'
-ha_config_flow: true
-ha_platforms:
- - sensor
-ha_iot_class: Cloud Polling
----
-
-{% include integrations/supported_brand.md %}
-
-## Limitations
-
-Unlike other utilities that use the [{{ page.ha_supporting_integration }}](/integrations/{{ page.ha_supporting_domain }}) integration, {{ name }} only publishes monthly data.
diff --git a/source/_integrations/enocean.markdown b/source/_integrations/enocean.markdown
index 16722a07b6d..c365708a609 100644
--- a/source/_integrations/enocean.markdown
+++ b/source/_integrations/enocean.markdown
@@ -9,8 +9,6 @@ ha_category:
- Switch
ha_release: 0.21
ha_iot_class: Local Push
-ha_codeowners:
- - '@bdurrer'
ha_domain: enocean
ha_config_flow: true
ha_platforms:
diff --git a/source/_integrations/enphase_envoy.markdown b/source/_integrations/enphase_envoy.markdown
index b643b642961..d09c2972a5b 100644
--- a/source/_integrations/enphase_envoy.markdown
+++ b/source/_integrations/enphase_envoy.markdown
@@ -11,7 +11,6 @@ ha_config_flow: true
ha_codeowners:
- '@bdraco'
- '@cgarwood'
- - '@joostlek'
- '@catsmanac'
ha_platforms:
- binary_sensor
@@ -28,6 +27,8 @@ The **Enphase Envoy** {% term integration %} is used to integrate with the [Enph
## Supported devices
+The actual model and installed components will determine the available [capabilities](#capabilities) and which data can be provided to the [Energy dashboard](#energy-dashboard). The Envoy firmware has [known issues](#known-issues-and-limitations) that may come and go as versions change.
+
This integration works with:
- Older and newer Envoy models that only have production metrics (such as Envoy-R (LCD), Envoy-S (not metered))
@@ -236,7 +237,7 @@ For storage CT energy entities refer to [battery sensor](#aggregated-iq-battery-
### Grid sensor entities
-When the Envoy Metered is equipped with a [net-consumption CT](#current-transformers), entities for Grid import and export are available.
+When the Envoy Metered is equipped with a [net-consumption CT](#current-transformers), entities for Grid import and export are available. See Limitations, [Grid Import/Export values incorrect](#grid-importexport-values-incorrect) when using these.
- **Envoy SN Current net power consumption**: Current power exchange from (positive) / to (negative) the grid in W, default display in kW.
- **Envoy SN Lifetime net energy consumption**: Lifetime energy consumed / imported from the grid in Wh, default display in MWh.
@@ -248,7 +249,7 @@ When used with [multiphase CT phase data](#ct-aggregate-and-phase-data), disable
#### Grid Balanced import/export sensor entities
-When the Envoy Metered is equipped with a [total-consumption CT](#current-transformers) instead of a [net-consumption CT](#current-transformers), no individual entities for Grid import and export are available, as these are not measured. Instead, the balance (difference) of grid import and export is available in a single entity, disabled by default, enable as desired.
+When the Envoy Metered is equipped with either a [total-consumption CT](#current-transformers) or a [net-consumption CT](#current-transformers), the balance of grid import and export is available as well. The balanced power and energy entities are disabled by default, enable these as desired.
- **Envoy SN balanced net power consumption**: Current power exchange from (positive) / to (negative) the grid in W, default display in kW.
(This is the same value as [Envoy SN Current net power consumption](#grid-sensor-entities) when using a net-consumption CT.)
@@ -416,12 +417,17 @@ The IQ Meter Collar has the net-consumption CT integrated. The CT data is report
#### Collar status entities
-- **Collar SN Grid state**: Grid connection status, on_grid / off_grid / synchronizing / manual override active.
-- **Collar SN MID State**: Status of enphase Microgrid Interconnection Device, open / close.
+- **Collar SN Admin state**: Collar admin status, on grid / off grid.
+- **Collar SN Grid state**: Grid connection status, on grid / off grid / synchronizing to grid / manual override active.
+- **Collar SN MID State**: Status of enphase Microgrid Interconnection Device, open / closed.
- **Collar SN Temperature**: Current temperature in degrees C or F, based on your localization.
- **Collar SN Last reported**: Time when Envoy received last update from the collar device.
- **Collar SN Communicating**: Communication status of the collar, Connected / Disconnected. This is a diagnostics entity.
+{% note %}
+Practical use learned that "Grid state" does not seem to reflect actual grid state changes. Off/On grid state rather seems to be reflected in Admin state values on grid / off grid. Be aware when using these entities. With time, more accurate details for these Collar entities may become available.
+{% endnote %}
+
### C6 Combiner Controller data
The Enphase C6 combiner controller (C6CC) provides some status information to the Envoy which are available in entities.
@@ -478,55 +484,24 @@ For **Solar production**, use the **Envoy SN
### Electricity grid
-Whether there is data available to use with the electricity grid depends on the installed CT, if any. Also, see Limitations, [Balancing grid meter](#balancing-grid-meter).
+Whether there is data available to use with the electricity grid depends on the installed CT, if any. Also, see Limitations, [Grid Import/Export values incorrect](#grid-importexport-values-incorrect) and [Balancing grid meter](#balancing-grid-meter).
#### Electricity grid with net-consumption CT
-With a [net-consumption CT](#grid-sensor-entities) installed, both grid consumption and return to grid data is available.
+With a [net-consumption CT](#grid-sensor-entities) installed, both grid consumption and return to grid data is available. (Also, see [Limitations](#grid-importexport-values-incorrect))
- For **Grid consumption**, use the **Envoy SN Lifetime net energy consumption** entity.
- For **Return to grid**, use the **Envoy SN Lifetime net energy production** entity.
-#### Electricity grid with total-consumption CT
+#### Electricity grid with balanced consumption entities
-With a [total-consumption CT](#grid-balanced-importexport-sensor-entities) installed, only the balanced grid import-export value is available. This value is not suited for direct use with the energy dashboard. It will require some templating to split the value into an import and export value.
+With a [total-consumption CT](#grid-balanced-importexport-sensor-entities) or a [net-consumption CT](#grid-sensor-entities) installed, the balanced grid import-export energy value is available. This value is not suited for direct use with the energy dashboard. It will require some templating to split the value into an import and export value.
-{% details "Concept to split balanced Grid value into individual import-export values" %}
+To split the balanced energy value **Envoy SN Lifetime balanced net energy consumption** into import-export values, a sensor [blueprint template](/integrations/template/#using-blueprints) named [`Filter positive or negative value changes in a sensor entity`](https://community.home-assistant.io/t/filter-positive-or-negative-value-changes-in-a-sensor-entity/943919/1) is available in the community blueprints exchange.
-The concept is to track value changes of the **Envoy SN Lifetime balanced net energy consumption** entity, add positive changes to a grid_import entity and add negative changes to a grid_export entity.
+Import the blueprint using the **import blueprint to** button. This will install the blueprint as `/config/blueprints/template/catsmanac/Filter_positive_or_negative_value_changes_in_sensor_entity.yaml`. Use the directions and templates in the blueprint exchange topic to implement such a split.
-{% raw %}
-
-```yaml
-
-- trigger:
- - platform: state
- entity_id: sensor.envoy_sn_lifetime_balanced_net_energy_consumption
-
- sensor:
- - name: "Grid import"
- unique_id: calculated_envoy_grid_import
- unit_of_measurement: "Wh"
- state: "{{ this.state | int(0) + ([0, (trigger.to_state.state | int(0) - trigger.from_state.state | int(0))] | max) }}"
- device_class: energy
- state_class: total_increasing
- - name: "Grid export"
- unique_id: calculated_envoy_grid_export
- unit_of_measurement: "Wh"
- state: "{{ this.state | int(0) - ([0, (trigger.to_state.state | int(0) - trigger.from_state.state | int(0))] | min) }}"
- device_class: energy
- state_class: total_increasing
-```
-
-{% endraw %}
-
-The above example does not address handling `unavailable` or `unknown` states, value changes over Home Assistant outages nor changing UOM to a preferred one. Examples for these exist in various community topics.
-
-{% tip %}
-Alternatively, this can be done by splitting the **Envoy SN balanced net power consumption** into power import and export and two Riemann sum integral helpers to calculate energy from the power values.
-{% endtip %}
-
-{% enddetails %}
+Alternatively, creating 2 split energy sensors can be done by splitting the **Envoy SN balanced net power consumption** into power import and export using [filter range](/integrations/filter/#range) helpers. These are then the source for two Riemann sum integral helpers to calculate energy from the power values.
### Home battery storage
@@ -545,77 +520,19 @@ Without a [storage CT](#aggregated-iq-battery-sensor-entities) installed, only t
##### Home battery storage data using battery power
-Battery power is the current power flow in or out of an individual battery. Using the summed Power values of all batteries, the result needs to be split in 2 entities, representing total power in and power out. Next, each entity needs to be integrated into energy, using two Riemann sum integral helpers. The resulting data can be used for Energy going into the battery and Energy coming out of the battery.
+Battery power is the current power flow in or out of an individual battery. Using the summed Power values of all batteries, the result needs to be split in 2 entities, representing total power in and power out.
-{% details "Concept to split Battery power value into individual import-export power values" %}
+This can be done using the [filter range](/integrations/filter/#range) helper. Next, each entity needs to be integrated into energy, using two Riemann sum integral helpers. The resulting data can be used for Energy going into the battery and Energy coming out of the battery.
-The concept is to first sum all battery Power values using a combine state helper. Then track value changes of the summed value entity, add positive changes to a battery_charge power entity and add negative changes to a battery_discharge power entity.
-
-{% raw %}
-
-```yaml
-
-- trigger:
- - platform: state
- entity_id: sensor.envoy_sn_summed_battery_power_entity
-
- sensor:
- - name: "Battery charge power"
- unique_id: calculated_envoy_battery_charge_power
- unit_of_measurement: "W"
- state: "{{ this.state | int(0) + ([0, (trigger.to_state.state | int(0) - trigger.from_state.state | int(0))] | max) }}"
- device_class: power
- state_class: measurement
- - name: "Battery discharge power"
- unique_id: calculated_envoy_battery_discharge_power
- unit_of_measurement: "W"
- state: "{{ this.state | int(0) - ([0, (trigger.to_state.state | int(0) - trigger.from_state.state | int(0))] | min) }}"
- device_class: power
- state_class: measurement
-```
-
-{% endraw %}
-
-The above example does not address handling `unavailable` or `unknown` states, value changes over Home Assistant outages nor conversion losses.
-
-{% enddetails %}
+If desired, this can also be done in a similar way for individual batteries.
##### Home battery storage data on the available battery energy
Changes in the Available battery energy are a result from Energy going in or out of the battery. Splitting these energy changes into 2 entities, one tracking positive changes, one the negative changes, results in data that can be used for Energy going into the battery and Energy coming out off the battery. This method does not account for conversion losses as Energy content changes do not exactly match actual energy flow in and out of the battery.
-{% details "Concept to split Available battery energy value into individual import-export values" %}
+To split the changes in Available battery energy into charge-discharge values, a sensor [blueprint template](/integrations/template/#using-blueprints) named [`Filter positive or negative value changes in a sensor entity`](https://community.home-assistant.io/t/filter-positive-or-negative-value-changes-in-a-sensor-entity/943919/1) is available in the community blueprints exchange.
-The concept is to track value changes of the **Envoy SN Available battery energy** entity, add positive changes to a battery_charge entity and add negative changes to a battery_discharge entity.
-
-{% raw %}
-
-```yaml
-
-- trigger:
- - platform: state
- entity_id: sensor.envoy_sn_available_battery_energy
-
- sensor:
- - name: "Battery charge"
- unique_id: calculated_envoy_battery_charge
- unit_of_measurement: "Wh"
- state: "{{ this.state | int(0) + ([0, (trigger.to_state.state | int(0) - trigger.from_state.state | int(0))] | max }}"
- device_class: energy
- state_class: total_increasing
- - name: "Battery discharge"
- unique_id: calculated_envoy_battery_discharge
- unit_of_measurement: "Wh"
- state: "{{ this.state | int(0) - ([0, (trigger.to_state.state | int(0) - trigger.from_state.state | int(0))] | min }}"
- device_class: energy
- state_class: total_increasing
-```
-
-{% endraw %}
-
-The above example does not address handling `unavailable` or `unknown` states, value changes over Home Assistant outages nor conversion losses.
-
-{% enddetails %}
+Import the blueprint using the **import blueprint to** button. This will install the blueprint as `/config/blueprints/template/catsmanac/Filter_positive_or_negative_value_changes_in_sensor_entity.yaml`. Use the directions and templates in the blueprint exchange topic to implement such a split using the **Envoy SN available battery energy** entity as source entity. Add positive changes to a battery_charge entity and add negative changes to a battery_discharge entity.
### Individual devices
@@ -706,7 +623,7 @@ data:
Technically `select.first`, `select.last`, `select.previous`, `select.next` are available as well, but as there's no logical sequence in the values to select, their use is not advocated.
{% endnote %}
-## Know issues and limitations
+## Known issues and limitations
### Firmware changes
@@ -724,17 +641,15 @@ Until a resolution is found, you must use the Enphase App to control these featu
### Late reset
-When using Envoy Metered with CT, not all firmware versions reset 'Energy production today' at midnight. Delays of up to 15 minutes have been reported. In this case, best use a utility meter with the `Lifetime energy production` entity for daily reporting.
+Not all firmware versions reset `Energy production today` or `Energy consumption today`, `Energy production last seven days` and `Energy consumption last seven days` at midnight. A 1 hour delay is reported. In this case, best use a utility meter with the 'Lifetime' entity for daily reporting. This seems to be daylight savings time change related and surfaced in recent firmware versions. Some older firmware versions would reset up to 15 minutes late, even outside daylight saving periods.
### Energy incorrect
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` 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.
+- not all firmware versions report `Energy production today` and/or `Energy consumption today` correctly. Zero data, changes to a lower value and unexpected spikes have been reported. Enphase reportedly indicated it is an issue in summing phase values to aggregated data. In this case, either use individual phase data or 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. Enphase reportedly indicated it is an issue in summing phase values to aggregated data. In this case, use the individual phase data.
+- `Energy production today` and `Energy consumption today` have been reported not to reset to zero. 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.
{% details "History examples for Today's energy production value not resetting to zero" %}
@@ -749,6 +664,14 @@ When using Envoy Metered with CT
{% enddetails %}
+These issues may result in log entries like:
+
+```txt
+Entity sensor.envoy_123456789012_energy_consumption_today from integration enphase_envoy has state class total_increasing, but its state is not strictly increasing. Triggered by state 12.345 (12.543) with last_updated set to 2025-09-05T18:00:23.432536+00:00. Please create a bug report at ...
+```
+
+If these entries occur frequently and are a nuisance then disable the entity. It's data is at best doubtful.
+
### Lifetime reset
Envoy Metered without installed CT, running older firmware versions, reportedly resets **Lifetime energy production** to 0 when reaching 1.2 MWh. For use with the energy dashboard, the reset is not an issue. In a recent firmware version 8.x.x the reset is solved, but results in a one-time step change to the full lifetime value. This has impact on the energy dashboard, it can be solved by setting the statistics value for that moment to 0 in [Developer Tools: Statistics](/docs/tools/dev-tools/#statistics-tab)
@@ -764,7 +687,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 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.
+The envoy, as of 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.
{% details "History example for Envoy Lifetime energy production value decrease" %}
@@ -776,6 +699,10 @@ The example below shows decreases when multiple inverters reach a 1.2 MWh lifeti
{% enddetails %}
+To correct for this issue, a sensor [blueprint template](/integrations/template/#using-blueprints) named [`Correct Envoy lifetime production energy`](https://community.home-assistant.io/t/correct-envoy-lifetime-production-energy/942918/1) is available in the community blueprints exchange.
+
+Import the blueprint using the **import blueprint to** button. This will install the blueprint as `/config/blueprints/template/marcelhoogantink/correct_envoy_lifetime_production_energy.yaml`. Use the templates shown in the blueprint exchange to implement an entity with a corrected lifetime value.
+
### 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.
@@ -788,6 +715,10 @@ If you are not seeing [inverters](#sensor-entities) detail data, verify if you h
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.
+### Grid Import/Export values incorrect
+
+Envoy Metered with a net-consumption CT measures current and energy exchange between switchboard and grid. Mismatches with other grid-meters and/or the Enphase web-site have been reported. It's not clear if this is related to a recent firmware version or longer existing. When using these values best validate if they are correct in your specific case.
+
### Balancing grid meter
In multiphase installations with batteries, in countries with phase-balancing grid meters, the battery will export to the grid on one phase the amount it lacks on another phase. This other phase pulls the missing amount from the grid, as if it is using the grid as a 'transport' between phases. Since the grid meter will balance the amount imported and exported on the two phases, the net result is zero. The Envoy multiphase net-consumption CTs, however, will report the amounts on both phases, resulting in too high export on one and too high import on the other. One may consider using the `lifetime balanced net energy consumption` which is the sum of grid import and export to eliminate this effect. This would require some templating to split these values into import and export values. Alternatively, use the `current net power consumption` or `balanced net power consumption` with a Riemann integral sum helper.
@@ -802,6 +733,14 @@ If you experience periodic connection issues, ensure the Envoy is connected to o
The **CT active flag count** value shows the number of CT status flags that are raised. In a normal state, the value of **CT active flag count** is zero. If the value is non-zero, consult the [diagnostic](#diagnostics) report of the Envoy and look for `raw_data` - `/ivp/meters` - `statusFlags` for set flags, one or more from (`production-imbalance` | `negative-production` | `power-on-unused-phase` | `negative-total-consumption`). Their somewhat descriptive names may be an indication of installation issues.
+### Log entry for state is not strictly increasing
+
+The log shows an entry like below for energy consumption today or energy production today. See the [energy incorrect](#energy-incorrect) topic for a description of this issue.
+
+```txt
+Entity sensor.envoy_123456789012_energy_consumption_today from integration enphase_envoy has state class total_increasing, but its state is not strictly increasing. Triggered by state 12.345 (12.543) with last_updated set to 2025-09-05T18:00:23.432536+00:00. Please create a bug report at ...
+```
+
### Debug logs and diagnostics
This integration provides debug log and {% term diagnostics %} report as described in the [Home Assistant troubleshooting pages](/docs/configuration/troubleshooting/#debug-logs-and-diagnostics).
diff --git a/source/_integrations/environment_canada.markdown b/source/_integrations/environment_canada.markdown
index 3b9d38910d2..1dc79ed8abe 100644
--- a/source/_integrations/environment_canada.markdown
+++ b/source/_integrations/environment_canada.markdown
@@ -26,21 +26,24 @@ The **Environment Canada** {% term integration %} provides meteorological data f
## Location selection
-The integration automatically determines the closest weather station based on the latitude and longitude specified. If integration-specific coordinates are not provided, the coordinates configured for Home Assistant are used.
+Choose your weather location using either:
-You can also specify a weather station to use by providing an identification code of the form `AB/s0000123`, based on those listed in [this CSV file](https://dd.weather.gc.ca/citypage_weather/docs/site_list_towns_en.csv).
+- Station selector: Select a station location from a dropdown of all Environment Canada weather stations.
+- Coordinates: Provide latitude and longitude to automatically find the nearest station (defaults to your Home Assistant location).
## Entities
-The integration will create the entities listed below. Some of the entities are disabled by default and can be enabled via the integration's Entities page.
+The integration will create the entities listed below.
### Weather
- Current conditions, daily forecast, and hourly forecast
-### Camera
+### Radar map (Camera)
-- Loop of radar imagery from the last 3 hours (disabled by default). Also, by default, this entity uses the radar rain layer from 1 April to 30 November and the snow layer from 1 December to 31 March. The rain/snow layer can be changed using the action described below.
+- Loop of radar imagery from the last 3 hours.
+- This entity is disabled by default can be enabled in the entry's settings dialog.
+- By default, this entity uses the radar rain layer from 1 April to 30 November and the snow layer from 1 December to 31 March. The rain/snow layer can be changed using the action described below.
### Sensors
@@ -48,13 +51,13 @@ The integration will create the entities listed below. Some of the entities are
- Current condition
- Forecast summary
-- [Icon code](https://dd.weather.gc.ca/citypage_weather/docs/Current_Conditions_Icons-Icones_conditions_actuelles.pdf) of current condition
+- [Icon code](https://dd.weather.gc.ca/today/citypage_weather/docs/Current_Conditions_Icons-Icones_conditions_actuelles.pdf) of current condition
- Barometric pressure
- Pressure tendency
- Humidity
- Visibility
- UV index
-- Air quality (AQHI)
+- Air quality health index (AQHI)
#### Temperature
@@ -75,7 +78,6 @@ The integration will create the entities listed below. Some of the entities are
#### Precipitation
- Probability of precipitation
-- Precipitation yesterday
#### Alerts
@@ -103,7 +105,7 @@ The first course of action should be to check if there are known problems with t
### Sensor `unavailable` or `unknown`
-Not all weather stations provide a complete set of weather/sensor data. The data that is retrieved by this integration can be found [here](https://dd.weather.gc.ca/citypage_weather/xml/). Browsing the XML data for your station will help you to understand what data is (un)available.
+Not all weather stations provide a complete set of weather/sensor data. The data that is retrieved by this integration can be found [here](https://dd.weather.gc.ca/today/citypage_weather/). Browsing the XML data for your station will help you to understand what data is (un)available.
## Template sensors
diff --git a/source/_integrations/event.markdown b/source/_integrations/event.markdown
index ab51a6093a5..af40de462ac 100644
--- a/source/_integrations/event.markdown
+++ b/source/_integrations/event.markdown
@@ -118,7 +118,16 @@ This section shows a similar example to the example automation shown above in YA
- Type `event` and select your button entity.
- **Important**: Leave the other fields **empty**.

-4. Define the condition when something should happen.
+4. Prevent the automation from running on unavailable or unknown states.
+ - Under **Conditions**, select **Add building block**, then, select **Not**.
+ - Inside the **Not** block, select **Add condition**, then, select **Entity** > **State**.
+ - Type `event` and select your button event entity.
+ - Under **State**, select **Unavailable**.
+ - **Important**: Leave the other fields **empty**.
+ - Add another condition inside the **Not** block, but this time select **Unknown** as the state.
+ - **Note** Alternatively, instead of conditions this can be done using the `not_state` attribute of the state trigger, in YAML.
+ 
+5. Define the condition when something should happen.
- Under **Then do**, select **Add action**.
- Type `choose` and select **Add condition**.
- Select **Entity** > **State** and select your button event entity from the list.
@@ -126,12 +135,12 @@ This section shows a similar example to the example automation shown above in YA
- Under **State**, select the state change you want to act as trigger, for example **Pressed once**.
- **Pressed once** is the event type. But the state of this event is the timestamp of when the button was pressed. This is why we automate on the state change so that it is triggered every time the button is pressed.

-5. Define what should happen when your automation is triggered (when the button is pressed, for example).
+6. Define what should happen when your automation is triggered (when the button is pressed, for example).
- Select **Add action** and define your action.
-6. Repeat these steps for each event type you want to monitor.
+7. Repeat these steps for each event type you want to monitor.
- In this example, we want to do something else when the button was pressed twice.

-7. **Save** the automation.
+8. **Save** the automation.
## Device class
diff --git a/source/_integrations/evil_genius_labs.markdown b/source/_integrations/evil_genius_labs.markdown
index 254441c24b1..c3374c4ffec 100644
--- a/source/_integrations/evil_genius_labs.markdown
+++ b/source/_integrations/evil_genius_labs.markdown
@@ -6,8 +6,6 @@ ha_category:
ha_iot_class: Local Polling
ha_release: '2021.12'
ha_config_flow: true
-ha_codeowners:
- - '@balloob'
ha_domain: evil_genius_labs
ha_platforms:
- diagnostics
diff --git a/source/_integrations/fastdotcom.markdown b/source/_integrations/fastdotcom.markdown
index eba9e112c08..4718214357e 100644
--- a/source/_integrations/fastdotcom.markdown
+++ b/source/_integrations/fastdotcom.markdown
@@ -14,7 +14,7 @@ ha_domain: fastdotcom
ha_platforms:
- diagnostics
- sensor
-ha_integration_type: integration
+ha_integration_type: service
---
The `fastdotcom` integration uses the [Fast.com](https://fast.com/) web service to measure network bandwidth performance.
diff --git a/source/_integrations/feedreader.markdown b/source/_integrations/feedreader.markdown
index 3f8fee4603d..68822e09cfd 100644
--- a/source/_integrations/feedreader.markdown
+++ b/source/_integrations/feedreader.markdown
@@ -10,7 +10,7 @@ ha_domain: feedreader
ha_config_flow: true
ha_platforms:
- event
-ha_integration_type: integration
+ha_integration_type: service
related:
- docs: /common-tasks/general/#defining-a-custom-polling-interval
title: Defining a custom polling interval
diff --git a/source/_integrations/file.markdown b/source/_integrations/file.markdown
index 942d315b0c2..a2f8fc90b29 100644
--- a/source/_integrations/file.markdown
+++ b/source/_integrations/file.markdown
@@ -21,9 +21,57 @@ ha_config_flow: true
---
The File integration allows storing notifications in a file or setting up a sensor based on a file's content.
+
+This integration is enabled by default, unless you've disabled or removed the [`default_config:`](/integrations/default_config/) line from your configuration. If that is the case, the following example shows you how to enable this integration manually:
+
+```yaml
+# Basic configuration.yaml entry
+file:
+```
{% include integrations/config_flow.md %}
+## Action: Read file
+
+The `file.read_file` action reads a file and returns the data in a response.
+
+| Data attribute | Optional | Description |
+| -------------- | -------- | ----------- |
+| `file_name` | No | The path of the file and name to read. Files should be UTF-8 encoded. Example: `config/www/myfile.yaml` |
+| `file_encoding`| No | The content type of the file (`JSON` or `YAML`). Example: `YAML` |
+
+> **Note:** The file paths should be relative to the Home Assistant configuration directory.
+
+> **Note:** File paths must be added to [allowlist_external_dirs](/integrations/homeassistant/#allowlist_external_dirs) in your {% term "`configuration.yaml`" %}.
+
+The action returns a dictionary with a data element containing the parsed content from the file.
+
+Example, read a JSON file out of the `www` directory.
+```yaml
+ - action: file.read_file
+ data:
+ file_name: config/www/myfile.json
+ file_encoding: JSON
+ response_variable: file_content
+```
+
+Contents of myfile.json
+
+```json
+{
+ "latitude": 32.87336,
+ "longitude": -117.22743,
+ "gps_accuracy": 1.2
+}
+```
+Response:
+```yaml
+data:
+ latitude: 32.87336
+ longitude: -117.22743
+ gps_accuracy: 1.2
+```
+
## Notifications
Make sure that the file you want to use is added to the [allowlist_external_dirs](https://www.home-assistant.io/integrations/homeassistant/#allowlist_external_dirs). The file will be created if it doesn't exist, but make sure the folder exists. Add the path of your [configuration](/docs/configuration/) folder (for example, `/config/file_notifications`) to save the file there. Setting `timestamp` to `true` adds a timestamp to every logged entry.
diff --git a/source/_integrations/fing.markdown b/source/_integrations/fing.markdown
new file mode 100644
index 00000000000..3d181d3568f
--- /dev/null
+++ b/source/_integrations/fing.markdown
@@ -0,0 +1,42 @@
+---
+title: Fing
+description: Instructions on integrating your Fing Agent with Home Assistant
+ha_release: '2025.11'
+ha_category:
+ - Presence detection
+ha_platforms:
+ - device_tracker
+ha_iot_class: Local Polling
+ha_config_flow: true
+ha_codeowners:
+ - '@Lorenzo-Gasparini'
+ha_domain: fing
+ha_integration_type: integration
+ha_quality_scale: bronze
+---
+
+The **Fing** {% term integration %} allows Home Assistant to retrieve detailed information about the devices on your local network. [Fing](https://www.fing.com/) helps home users and IT professionals monitor, protect, and understand their networks with intuitive tools that make connectivity management simple and effective.
+By connecting through the [Local API](https://www.fing.com/developers/local-api/), Fing automatically builds and synchronizes an inventory of devices to detect online presence and trigger automations.
+
+## Prerequisites
+
+- Ensure that the [Local API](https://www.fing.com/developers/local-api/) is enabled on your Fing Agent ([Fing Agent](https://www.fing.com/agent/), Fingbox, or [Fing Desktop](https://www.fing.com/desktop/)).
+- You will need your Fing Agent’s IP address, port, and API key to complete the setup.
+
+{% include integrations/config_flow.md %}
+
+## Troubleshooting
+
+If you experience issues with the **Fing integration**, try the following:
+
+- Confirm that the Fing Agent is running and reachable on your network.
+- Verify that the configured IP address and port in Home Assistant match your Fing Agent’s actual settings.
+- Make sure your Local API version is **1.1.0** or newer.
+
+## Removing the integration
+
+You can remove this integration following the standard Home Assistant procedure.
+
+{% include integrations/remove_device_service.md %}
+
+Once the integration is deleted, you may also disable the Fing Local API on your network if you no longer plan to use it.
diff --git a/source/_integrations/firefly_iii.markdown b/source/_integrations/firefly_iii.markdown
new file mode 100644
index 00000000000..b1195eae584
--- /dev/null
+++ b/source/_integrations/firefly_iii.markdown
@@ -0,0 +1,49 @@
+---
+title: Firefly III
+description: Instructions on how to integrate Firefly III with Home Assistant.
+ha_category:
+ - Sensor
+ha_release: '2025.11'
+ha_iot_class: Local Polling
+ha_codeowners:
+ - '@erwindouna'
+ha_domain: firefly_iii
+ha_config_flow: true
+ha_platforms:
+ - diagnostics
+ - sensor
+ha_integration_type: integration
+ha_quality_scale: bronze
+---
+
+The Firefly III {% term integration %} is used as an interface to the [Firefly III API](https://api-docs.firefly-iii.org/).
+Firefly III is a free open-source personal finance manager. It contains a full transaction management system, budgets, categories and reports. You can easily import transactions via the diverse options Firefly III offers. It even contains a rule engine to automate and help organize your bookkeeping.
+
+## Prerequisites
+
+Before you can configure Firefly III within Home Assistant, you need a few things:
+
+- Have Firefly III installed and a user with administrator rights
+- An access token.
+
+Create a Firefly III Personal Access Token by following these steps:
+
+1. Log in to your Firefly III instance.
+2. To create an access token, follow the steps in the [Firefly III documentation](https://docs.firefly-iii.org/how-to/firefly-iii/features/api/#personal-access-tokens).
+3. Copy the generated Access Token and store it somewhere safe, you will need it in the next steps.
+
+{% include integrations/config_flow.md %}
+
+## Supported functionality
+
+There is currently support for the following device types within Home Assistant:
+
+- Sensors - for monitoring the accounts, categories and their balances.
+
+## Removing the integration
+
+This integration follows standard integration removal.
+
+{% include integrations/remove_device_service.md %}
+
+After removing the integration, consider deleting the Firefly III access token.
diff --git a/source/_integrations/flick_electric.markdown b/source/_integrations/flick_electric.markdown
deleted file mode 100644
index 5ba112959c1..00000000000
--- a/source/_integrations/flick_electric.markdown
+++ /dev/null
@@ -1,124 +0,0 @@
----
-title: Flick Electric
-description: Instructions on how to set up the Flick Electric Pricing sensor in Home Assistant.
-ha_category:
- - Energy
-ha_release: '0.110'
-ha_iot_class: Cloud Polling
-ha_codeowners:
- - '@ZephireNZ'
-ha_domain: flick_electric
-ha_config_flow: true
-ha_platforms:
- - sensor
-ha_integration_type: service
----
-
-[Flick Electric Co](https://www.flickelectric.co.nz/) is a power company in New Zealand, based around a transparent pricing model where each component of pricing is provided. This integration uses the mobile app's API from Flick Electric Co to get the current power price as well as each of the components price.
-
-{% include integrations/config_flow.md %}
-
-{% configuration_basic %}
-Username:
- description: "Username used to log into Flick Electric."
-Password:
- description: "Password used to log into Flick Electric."
-Client ID:
- description: "Client ID to authenticate (see below note)."
-Client Secret:
- description: "Client Secret to authenticate (see below note)."
-Account:
- description: "Address of the account to add (required when user has multiple active accounts)."
-{% endconfiguration_basic %}
-
-{% note %}
-
-For most users, Client ID/Secret can be left blank.
-
-Home Assistant by default uses the client ID and secret from the Flick Electric mobile app at the time of release.
-
-If this stops working, you can find the new ones by using a MITM proxy with the mobile app. The app will call `https://api.flick.energy/identity/oauth/token` with the `client_id` and `client_secret`.
-
-{% endnote %}
-
-## Supported functionality
-
-The integration provides a `sensor` entity with the power price for the current time interval.
-
-The attributes of the entity have a breakdown of the pricing components, such as `generation` and `network` charges.
-
-{% note %}
-
-The power price shown is in cents, and is *excluding GST*. You can customize this by creating a template sensor:
-
-1. Go to
-{% my helpers title="**Settings** > **Devices** & **Services** > **Helpers**" %} and click the add button;
-2. Choose the **{% my config_flow_start domain="template" title="Template" %}** option
-3. Select **Add a template sensor**.
-
-{% raw %}
-
-To add GST:
-
-- **State template**: `{{ states.sensor.flick_power_price * 1.15 }}`
-- **Unit of measurement**: `¢/kWh`
-
-To convert to dollars:
-
-- **State template**: `{{ states.sensor.flick_power_price / 100 }}`
-- **Unit of measurement**: `$/kWh`
-
-{% endraw %}
-
-{% endnote %}
-
-## Use cases
-
-This integration can be used as part of an automation, for example to turn on/off appliances automatically.
-
-## Example automations
-
-{% details "Turn off the heat pump when price is above 40¢/kWH" %}
-
-{% raw %}
-
-```yaml
-alias: "Turn off expensive heat pump"
-description: "Turn off the heat pump when price is above 40¢/kWH"
-triggers:
- - trigger: numeric_state
- entity_id: sensor.flick_power_price
- above: 40
-actions:
- - action: climate.turn_off
- target:
- entity_id: climate.heat_pump
- data: {}
-```
-
-{% endraw %}
-{% enddetails %}
-
-## Data updates
-
-The integration will {% term polling poll %} the Flick Electric API every 5 minutes to check for the current power price. You can also use the `homeassistant.update_entity` action to trigger a refresh on-demand.
-
-## Removing the integration
-
-This integration follows standard integration removal, no extra steps are required.
-
-{% include integrations/remove_device_service.md %}
-
-## Troubleshooting
-
-{% details "Cannot get pricing for this account. Please check user permissions" %}
-
-API is unable to find pricing for the selected account. Check with Flick Electric to ensure that your user is configured correctly.
-
-{% enddetails %}
-
-{% details "No services are active on this Flick account" %}
-
-Only active accounts are supported by this integration. If your account is active but is not able to be selected, check with Flick Electric to ensure that it is showing as active in their system.
-
-{% enddetails %}
diff --git a/source/_integrations/foscam.markdown b/source/_integrations/foscam.markdown
index 15adefb0343..9f198006cfe 100644
--- a/source/_integrations/foscam.markdown
+++ b/source/_integrations/foscam.markdown
@@ -6,7 +6,7 @@ ha_category:
ha_iot_class: Local Polling
ha_release: 0.7.3
ha_codeowners:
- - '@krmarien'
+ - '@Foscam-wangzhengyu'
ha_domain: foscam
ha_config_flow: true
ha_platforms:
@@ -224,4 +224,4 @@ elements:
### Extra CGI Commands
-Foscam Webcams which support CGI Commands can be controlled by Home Assistant ([Source](https://www.foscam.es/descarga/Foscam-IPCamera-CGI-User-Guide-AllPlatforms-2015.11.06.pdf)).
+Foscam Webcams which support CGI Commands can be controlled by Home Assistant ([Source](https://community.jeedom.com/uploads/short-url/2A5aSBcCyoVZOdpiFC8HRDAOxqG.pdf)).
diff --git a/source/_integrations/frankever.markdown b/source/_integrations/frankever.markdown
index 1e1cef23da4..bb82d5a5d9d 100644
--- a/source/_integrations/frankever.markdown
+++ b/source/_integrations/frankever.markdown
@@ -21,7 +21,6 @@ ha_integration_type: virtual
ha_supporting_domain: shelly
ha_supporting_integration: Shelly
ha_codeowners:
- - '@balloob'
- '@bieniu'
- '@thecode'
- '@chemelli74'
diff --git a/source/_integrations/freedompro.markdown b/source/_integrations/freedompro.markdown
index 16230374a21..e7cff0b211b 100644
--- a/source/_integrations/freedompro.markdown
+++ b/source/_integrations/freedompro.markdown
@@ -42,7 +42,7 @@ You will need to obtain an API key from Freedompro's app to use this integration
2. Register and create your first home.
3. Make sure you have at least one accessory paired with the Freedompro Cloud before starting integration.
4. Switch to the **Profile** tab (bottom right corner).
-5. Scroll down to the **Developper tools** and tap **Api Key**.
+5. Scroll down to the **Developer tools** and tap **Api Key**.
6. Generate an API key.
{% include integrations/config_flow.md %}
diff --git a/source/_integrations/fritz.markdown b/source/_integrations/fritz.markdown
index 0e87f70a2eb..7ea25859bbe 100644
--- a/source/_integrations/fritz.markdown
+++ b/source/_integrations/fritz.markdown
@@ -25,7 +25,7 @@ ha_platforms:
- switch
- update
ha_ssdp: true
-ha_integration_type: integration
+ha_integration_type: hub
related:
- docs: /common-tasks/general/#enabling-or-disabling-entities
title: Enabling or disabling entities
@@ -47,6 +47,8 @@ There is support for the following platform types within Home Assistant:
{% important %}
Both the TR-064 (_Permit access for apps_) and UPnP (_Transmit status information over UPnP_) protocol needs to be enabled in the FRITZ!Box under **Home Network** > **Network** > **Network settings** > **Access Settings in the Home Network** for Home Assistant to login and read device info.
+
+To use the [dial](#action-dial) action, the click to dial service of the FRITZ!Box must also be enabled under **Telephony** > **Calls** > **Click to Dial**.
{% endimportant %}
### Username
@@ -91,7 +93,10 @@ This integration fetches the data every 30 seconds from the FRITZ!Box router.
## Actions
-Available {% term actions %}: `set_guest_wifi_password`
+Available {% term actions %}:
+
+- `set_guest_wifi_password`
+- `dial`
### Action `set_guest_wifi_password`
@@ -103,6 +108,16 @@ Set a new password for the guest wifi. The password Length must be between 8 and
| `password` | no | New password for the guest wifi (_will be auto-generated if not defined_) |
| `length` | no | Length of the auto-generated password. (_default 12_) |
+### Action `dial`
+
+Makes the FRITZ!Box dial a phone number.
+
+| Data attribute | Required | Description |
+| --- | --- | --- |
+| `device_id` | yes | Only act on a specific router |
+| `number` | yes | The phone number to dial |
+| `max_ring_seconds` | yes | The maximum number of seconds to ring after dialing. Note that the actual ring duration might be shorter depending on the receiver's phone settings. (_default 15 seconds_) |
+
## Additional information
### Parental control switches
diff --git a/source/_integrations/fritzbox.markdown b/source/_integrations/fritzbox.markdown
index 04467907ed5..2bedfc71409 100644
--- a/source/_integrations/fritzbox.markdown
+++ b/source/_integrations/fritzbox.markdown
@@ -28,7 +28,7 @@ ha_codeowners:
ha_integration_type: hub
---
-The FRITZ!SmartHome integration for Home Assistant allows you to integrate [FRITZ! 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_).
+The FRITZ!SmartHome integration for Home Assistant allows you to integrate [FRITZ! Smart Home](https://fritz.com/en/collections/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
@@ -56,7 +56,7 @@ The FRITZ!SmartHome integration for Home Assistant allows you to integrate [FRIT
## 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 FRITZ!SmartHome integration.
+Please note that in a [mesh](https://fritz.com/en/apps/knowledge-base/FRITZ-Box-7590/3329_Mesh-with-FRITZ/) setup, only the FRITZ!Box with the mesh master role should be added with the FRITZ!SmartHome integration.
### Username
@@ -111,7 +111,7 @@ Shutter drivers like the [Homepilot RolloTron DECT 1213][rademacher_rollotron_de
### Templates
-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.
+Self defined [templates](https://fritz.com/en/apps/knowledge-base/FRITZ-Box-7590/3708_Creating-a-template-and-scene-for-smart-home-devices) 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
@@ -132,6 +132,7 @@ Further there are additional {% term sensor %} and {% term binary_sensor "binary
- Next Scheduled Temperature
- Open window detected
- Summer mode
+- Temperature
### Other devices
@@ -147,15 +148,15 @@ The availability of these {% term sensor %} and {% term binary_sensor "binary se
- Open window detected
- Temperature
-[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
+[fritzbox_5590_fiber]: https://fritz.com/en/products/fritz-box-5590-fiber-20002981
+[fritzbox_7590_ax]: https://fritz.com/en/products/fritz-box-7590-ax-20002998
+[fritzbox_7530_ax]: https://fritz.com/en/products/fritz-box-7530-ax-20002930
+[fritzdect_200]: https://fritz.com/en/products/fritz-dect-200-20002572
+[fritzdect_210]: https://fritz.com/en/products/fritz-dect-210-20002723
+[fritzdect_302]: https://fritz.com/en/products/fritz-smart-thermo-302-20003120
+[fritzdect_350]: https://fritz.com/en/products/fritz-dect-440-20002905
+[fritzdect_440]: https://fritz.com/en/products/fritz-smart-control-350-20003119
+[fritz_smart_gateway]: https://fritz.com/en/products/fritz-smart-gateway-20003012
[rademacher_rollotron_dect_1213]: https://www.rademacher.de/shop/rollladen-sonnenschutz/elektrischer-gurtwickler/rollotron-dect-1213
## Troubleshooting
diff --git a/source/_integrations/garadget.markdown b/source/_integrations/garadget.markdown
index 7578cf44eda..353fece165e 100644
--- a/source/_integrations/garadget.markdown
+++ b/source/_integrations/garadget.markdown
@@ -115,7 +115,7 @@ customize:
{% endraw %}
-Some of the Garadget sensors can create a lot of clutter in the logbook. Use this section of code in your{% term "`configuration.yaml`" %} to exclude those entries.
+Some of the Garadget sensors can create a lot of clutter in the **Activity** section. Use this section of code in your{% term "`configuration.yaml`" %} to exclude those entries.
```yaml
logbook:
diff --git a/source/_integrations/generic_thermostat.markdown b/source/_integrations/generic_thermostat.markdown
index 41a0114eab8..016f9fdfb0f 100644
--- a/source/_integrations/generic_thermostat.markdown
+++ b/source/_integrations/generic_thermostat.markdown
@@ -14,6 +14,7 @@ related:
- docs: /docs/configuration/
title: Configuration file
ha_config_flow: true
+ha_quality_scale: internal
---
The `generic_thermostat` climate {% term integration %} is a thermostat implemented in Home Assistant. It uses a sensor and a switch connected to a heater or air conditioning under the hood. When in heater mode, if the measured temperature is cooler than the target temperature, the heater will be turned on and turned off when the required temperature is reached. When in air conditioning mode, if the measured temperature is hotter than the target temperature, the air conditioning will be turned on and turned off when required temperature is reached. One Generic Thermostat entity can only control one switch. If you need to activate two switches, one for a heater and one for an air conditioner, you will need two Generic Thermostat entities.
diff --git a/source/_integrations/gios.markdown b/source/_integrations/gios.markdown
index fe712f2b20d..ca06ca8ad40 100644
--- a/source/_integrations/gios.markdown
+++ b/source/_integrations/gios.markdown
@@ -25,3 +25,9 @@ Measuring station:
Name:
description: "Service name in Home Assistant, by default, this is the name of your Home Assistant instance. For example `Home`."
{% 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/github.markdown b/source/_integrations/github.markdown
index d71970070b5..254398cda21 100644
--- a/source/_integrations/github.markdown
+++ b/source/_integrations/github.markdown
@@ -16,7 +16,7 @@ ha_codeowners:
ha_integration_type: integration
---
-The GitHub integration allows you to monitor your favorite [GitHub](https://github.com/) repositories.
+The GitHub integration allows you to monitor your favorite [GitHub](https://github.com/) public repositories.
{% include integrations/config_flow.md %}
diff --git a/source/_integrations/go2rtc.markdown b/source/_integrations/go2rtc.markdown
index 63eb269eb75..a6e4693d3f9 100644
--- a/source/_integrations/go2rtc.markdown
+++ b/source/_integrations/go2rtc.markdown
@@ -17,7 +17,7 @@ ha_quality_scale: internal
go2rtc is an open source project providing a camera streaming application that supports formats such as RTSP, WebRTC, HomeKit, FFmpeg, RTMP. The **go2rtc** {% term integration %} connects to a go2rtc instance and provides a WebRTC proxy for all your cameras. To learn more about go2rtc, refer to the [project's GitHub page](https://github.com/AlexxIT/go2rtc/).
-If you are using the [`default_config`](/integrations/default_config/) and run Home Assistant using one of the following installation methods, the go2rtc integration will be set up automatically and you don't need to do anything:
+If you are using the [`default_config`](/integrations/default_config/) and run Home Assistant using one of the following installation types, the go2rtc integration will be set up automatically and you don't need to do anything:
- {% term "Home Assistant Operating System" %}
- {% term "Home Assistant Supervised" %}
diff --git a/source/_integrations/google_assistant.markdown b/source/_integrations/google_assistant.markdown
index 605d8ccd503..2533dccb394 100644
--- a/source/_integrations/google_assistant.markdown
+++ b/source/_integrations/google_assistant.markdown
@@ -256,14 +256,14 @@ Currently, the following domains are available to be used with Google Assistant,
- group (on/off)
- humidifier (humidity setting/on/off/mode)
- input_boolean (on/off)
-- input_button
+- input_button (scene)
- input_select (option/setting/mode/value)
- light (on/off/brightness/rgb color/color temp)
- lawn_mower (dock/start/pause)
- lock
- media_player (on/off/set volume (via set volume)/source (via set input source)/control playback)
-- scene (on)
-- script (on)
+- scene
+- script (scene)
- select
- sensor (temperature setting for temperature sensors and humidity setting for humidity sensors)
- switch (on/off)
diff --git a/source/_integrations/google_assistant_sdk.markdown b/source/_integrations/google_assistant_sdk.markdown
index 5c93b5ff3b6..249ead00aec 100644
--- a/source/_integrations/google_assistant_sdk.markdown
+++ b/source/_integrations/google_assistant_sdk.markdown
@@ -11,6 +11,7 @@ ha_domain: google_assistant_sdk
ha_codeowners:
- '@tronikos'
ha_integration_type: service
+ha_quality_scale: gold
ha_platforms:
- diagnostics
- notify
@@ -130,6 +131,8 @@ If you have an error with your credentials you can delete them in the [Applicati
If commands don't work try removing superfluous words such as "the". E.g. "play rain sounds on bedroom speaker" instead of "play rain sounds on the bedroom speaker".
+If commands to a specific device (like streaming a camera to a Google TV) fail, you may need to enable "Personal Results" on that device itself. For example, on a Google TV or Chromecast with Google TV, this setting may be located under `Settings > Privacy > Google Assistant > Personal Results`. This may be required in addition to enabling it in the Google Home app.
+
If broadcasting doesn't work, make sure: the speakers aren't in do not disturb mode, the Home Assistant server is in the same network as the speakers.
The easiest way to check if the integration is working is to check [My Google Activity](https://myactivity.google.com/myactivity) for the issued commands and their responses.
@@ -157,7 +160,7 @@ You can use the `google_assistant_sdk.send_text_command` action to send commands
| Data attribute | Optional | Description |
| ---------------------- | -------- | ----------- |
| `command` | no | Command(s) to send to Google Assistant. |
-| `media_player` | yes | Name(s) of media player entities to play response on |
+| `media_player` | yes | Name(s) of media player entities to play the Google Assistant's audio response on. This does **not** target the device for the command itself. |
Examples:
@@ -168,13 +171,23 @@ data:
```
```yaml
-# Say a joke on the living room speaker
+# Say a joke on the living room speaker. The `media_player` entity receives the audio response.
action: google_assistant_sdk.send_text_command
data:
command: "tell me a joke"
media_player: media_player.living_room_speaker
```
+```yaml
+# Stream a camera to a Chromecast-enabled TV or display.
+# The target device ("living room tv") must be part of the command itself.
+action: google_assistant_sdk.send_text_command
+data:
+ command: "show the front door camera on the living room tv"
+```
+
+Note: To control a specific device, like streaming a camera to a TV, you must include the device's name (as known by Google Assistant) in the text `command`. The `media_player` parameter is only used for playing back Google Assistant's audio response and will not direct the video stream.
+
You can send multiple commands in the same conversation context which is useful to unlock doors or open covers that need a PIN. Example:
```yaml
diff --git a/source/_integrations/google_generative_ai_conversation.markdown b/source/_integrations/google_generative_ai_conversation.markdown
index 79838cefcea..b55b644e16e 100644
--- a/source/_integrations/google_generative_ai_conversation.markdown
+++ b/source/_integrations/google_generative_ai_conversation.markdown
@@ -2,6 +2,7 @@
title: Google Gemini
description: Instructions on how to integrate Google Gemini as a conversation agent
ha_category:
+ - AI
- Speech-to-text
- Text-to-speech
- Voice
diff --git a/source/_integrations/google_sheets.markdown b/source/_integrations/google_sheets.markdown
index 46bc8ef141a..13e072b3f55 100644
--- a/source/_integrations/google_sheets.markdown
+++ b/source/_integrations/google_sheets.markdown
@@ -55,6 +55,7 @@ You can use the `google_sheets.append_sheet` action to add rows of data to the S
| ---------------------- | -------- | ----------- | --------|
| `config_entry` | no | Config entry to use. |
| `worksheet` | yes | Name of the worksheet. Defaults to the first one in the document. | Sheet1 |
+| `add_created_column` | yes | Add `created` column containing date-time to the data being appended. Defaults to True. | True |
| `data` | no | Data to be appended to the worksheet. This puts the data on new rows, one value per column. | {"hello": world, "cool": True, "count": 5} |
{% raw %}
@@ -65,6 +66,7 @@ action: google_sheets.append_sheet
data:
config_entry: 1b4a46c6cba0677bbfb5a8c53e8618b0
worksheet: "Car Charging"
+ add_created_column: false
data:
Date: "{{ now().strftime('%-d-%b-%y') }}"
KWh: "{{ states('input_number.car_charging_kwh')|float(0) }}"
@@ -85,3 +87,44 @@ data:
{% endraw %}
{% enddetails %}
+
+
+### Action: Get sheet
+
+You can use the `google_sheets.get_sheet` action to retrieve rows of [data] (/docs/scripts/perform-actions#use-templates-to-handle-response-data) from a Sheets document.
+
+{% details "Create event action details" %}
+
+| Data attribute | Optional | Description | Example |
+| ---------------------- | -------- | ----------- | --------|
+| `config_entry` | no | Config entry to use. |
+| `worksheet` | yes | Name of the worksheet. Defaults to the first one in the document. | Sheet1 |
+| `rows` | no | Maximum number of rows from the end of the worksheet to return. | 2 |
+
+{% raw %}
+
+```yaml
+# Example action
+action: google_sheets.get_sheet
+data:
+ config_entry: 1b4a46c6cba0677bbfb5a8c53e8618b0
+ worksheet: "Car Charging"
+ rows: 2
+```
+
+{% endraw %}
+
+{% enddetails %}
+
+
+{% details "Example action response" %}
+
+```yaml
+range:
+ - - 04/07/2024
+ - 9 Kw
+ - - 05/07/2024
+ - 8 Kw
+```
+
+{% enddetails %}
diff --git a/source/_integrations/google_weather.markdown b/source/_integrations/google_weather.markdown
new file mode 100644
index 00000000000..9c85f27877b
--- /dev/null
+++ b/source/_integrations/google_weather.markdown
@@ -0,0 +1,54 @@
+---
+title: Google Weather
+description: Instructions on how to integrate Google Weather within Home Assistant.
+ha_category:
+ - Weather
+ha_release: 2025.12
+ha_iot_class: Cloud Polling
+ha_config_flow: true
+ha_domain: google_weather
+ha_codeowners:
+ - '@tronikos'
+ha_integration_type: service
+ha_quality_scale: bronze
+ha_platforms:
+ - weather
+---
+
+This {% term integration %} uses [Google Weather](https://developers.google.com/maps/documentation/weather) as a source for weather data for your location.
+
+## Prerequisites
+
+You need an API key. Follow instructions [in the Google developer documentation](https://developers.google.com/maps/documentation/weather/get-api-key) for creating an API key.
+
+{% note %}
+For pricing refer to the [billing section in the Google developer documentation](https://developers.google.com/maps/documentation/weather/usage-and-billing).
+
+It is free as long as you stay under 10,000 requests per month.
+{% endnote %}
+
+{% include integrations/config_flow.md %}
+
+## Data updates
+
+The integration fetches:
+
+- current weather conditions every 15 minutes
+- daily weather forecast for the next 10 days every 1 hour
+- hourly weather forecast for the next 24 hours every 1 hour
+
+This results in 4,464 requests per month, meaning you could have up to 2 locations and still stay under the 10,000 free usage cap.
+
+## Known limitations
+
+- Weather forecast information isn't currently available in South Korea and Japan. Refer to the [Google Help Center](https://support.google.com/websearch/answer/13687874).
+
+
+## Troubleshooting
+
+- [Enable debug logging](https://www.home-assistant.io/docs/configuration/troubleshooting/#debug-logs-and-diagnostics) and attach logs before opening an issue.
+
+
+## Removing the integration
+
+{% include integrations/remove_device_service.md %}
diff --git a/source/_integrations/group.markdown b/source/_integrations/group.markdown
index f5bbc6936f4..666c3ff5ed1 100644
--- a/source/_integrations/group.markdown
+++ b/source/_integrations/group.markdown
@@ -15,6 +15,7 @@ ha_category:
- Organization
- Sensor
- Switch
+ - Valve
ha_release: pre 0.7
ha_iot_class: Calculated
ha_quality_scale: internal
@@ -34,6 +35,7 @@ ha_platforms:
- notify
- sensor
- switch
+ - valve
ha_integration_type: helper
---
@@ -46,16 +48,17 @@ The following entities can be grouped:
- [binary sensor (binary sensors)](/integrations/binary_sensor/)
- [button (buttons)](/integrations/button/)
- [cover (covers)](/integrations/cover/)
-- [fan (fans)](/integrations/fan/)
-- [switch (switches)](/integrations/switch/)
-- [lock (locks)](/integrations/lock/)
-- [light (lights)](/integrations/light/)
- [event (events)](/integrations/event/)
+- [fan (fans)](/integrations/fan/)
+- [input_number (input_numbers)](/integrations/input_number/)
+- [light (lights)](/integrations/light/)
+- [lock (locks)](/integrations/lock/)
- [media player (media players)](/integrations/media_player/)
- [notify (notifications)](/integrations/notify/)
-- [sensor (sensors)](/integrations/sensor/)
- [number (numbers)](/integrations/number/)
-- [input_number (input_numbers)](/integrations/input_number/)
+- [sensor (sensors)](/integrations/sensor/)
+- [switch (switches)](/integrations/switch/)
+- [valve (valves)](/integrations/valve/)
{% include integrations/config_flow.md %}
@@ -82,6 +85,10 @@ Binary sensor, light, and switch groups allow you set the "All entities" option.
- Otherwise, the group state is `off` if at least one group member is `off`.
- Otherwise, the group state is `on`.
+{% note %}
+For light groups using HS color mode: When a light group contains two or more lights, whose colors are evenly spaced (180° apart for two, 120° apart for three, etc.), the light group's average color *may* default to either 0° (red) or 180° (light blue). This occurs because averaging opposite hues on the color wheel can mathematically result in unexpected colors due to how hue values wrap around. To avoid this, consider using RGB color mode for your lights, or avoid grouping lights with perfectly opposite colors.
+{% endnote %}
+
### Button groups
The group state is the last time the grouped button was pressed.
@@ -89,8 +96,8 @@ The group state is the last time the grouped button was pressed.
- The group state is `unavailable` if all group members are `unavailable`.
- Otherwise, the group state is the last time the grouped button was pressed.
-### Cover groups
-In short, when any group member entity is `open`, the group will also be `open`. A complete overview of how cover groups behave:
+### Cover and valve groups
+In short, when any group member entity is `open`, the group will also be `open`. A complete overview of how cover and valve groups behave:
- The group state is `unavailable` if all group members are `unavailable`.
- Otherwise, the group state is `unknown` if all group members are `unknown` or `unavailable`.
@@ -145,8 +152,15 @@ In short, when any group member entity is `unlocked`, the group will also be `un
- The group state is combined / calculated based on `type` selected to determine the minimum, maximum, latest (last), mean, median, range, product, standard deviation, or sum of the collected states.
- Members can be any `sensor`, `number` or `input_number` holding numeric states.
-- The group state is `unavailable` if all group members are `unavailable`.
-- If `ignore_non_numeric` is `false` then group state will be `unavailable` if one member is `unavailable` or does not have a numeric state.
+- States which are missing from the state machine do not make the state `unavailable` or `unknown`.
+- The group state is `unavailable` if no group member has a numeric state.
+- The configuration variable `ignore_non_numeric` controls the behavior of the group when the group is not `unavailable`:
+ - When set to `false` (the default), the group state is calculated as follows:
+ - if all members have a numeric state: calculated according to the `type`
+ - otherwise: set to `unknown`
+ - When set to `true`, the group state is calculated as follows:
+ - if at least one member has a numeric state: calculated according to the `type`
+ - otherwise: and set to `unknown`
## Managing groups
@@ -298,6 +312,18 @@ switch:
- switch.soundbar
```
+Example YAML configuration of a valve group:
+
+```yaml
+# Example configuration.yaml entry
+valve:
+ - platform: group
+ name: "Garden Valves"
+ entities:
+ - valve.front_garden
+ - valve.back_garden
+```
+
{% configuration %}
entities:
description: A list of entities to be included in the group.
@@ -321,7 +347,7 @@ type:
type: string
required: true
ignore_non_numeric:
- description: Only available for `sensor` group. Set this to `true` if the group state should ignore sensors with non numeric values.
+ description: Only available for `sensor` group. Controls how the [state is calculated when group members have non-numeric state](#sensor-number-and-input_number-groups).
type: boolean
required: false
default: false
diff --git a/source/_integrations/growatt_server.markdown b/source/_integrations/growatt_server.markdown
index 619cd891d6e..85798f4e9a1 100644
--- a/source/_integrations/growatt_server.markdown
+++ b/source/_integrations/growatt_server.markdown
@@ -8,21 +8,43 @@ ha_release: 0.99
ha_iot_class: Cloud Polling
ha_domain: growatt_server
ha_platforms:
+ - number
- sensor
+ - switch
ha_config_flow: true
ha_integration_type: integration
+ha_codeowners:
+ - '@johanzander'
---
-This sensor is designed to gather data from Growatt inverters, offering users a choice of various alternative endpoint servers during setup. Available options include:
+The Growatt integration allows you to retrieve data from Growatt inverters. During setup, you can choose from various regional endpoint servers:
-- For users in China, the Chinese server at https://openapi-cn.growatt.com/.
-- For users in North America, the North American server at https://openapi-us.growatt.com/.
-- For users in other regions, a general server at https://openapi.growatt.com/.
-- Additionally, the SMTEN server at http://server.smten.com/ serves as another alternative.
+- For users in China: https://openapi-cn.growatt.com/
+- For users in North America: https://openapi-us.growatt.com/
+- For users in other regions: https://openapi.growatt.com/
+- SMTEN server: http://server.smten.com/
-Users keen to explore all current supported servers and configuration possibilities can do so by integrating this feature in Home Assistant. This integration ensures global users can select the optimal server for their Growatt inverters, boosting both the efficiency and dependability of data collection.
+Selecting the appropriate server for your region improves the reliability and performance of data collection.
-Once integrated, the sensor logs into the user's Growatt account and accesses the first "Plant." It then retrieves the inverters associated with this plant and generates sensors for these inverters, as well as overall plant sensors.
+Once integrated, the sensor logs into your Growatt account and retrieves your plants. If you have multiple plants, you can select which one to integrate. The integration then retrieves the inverters associated with the selected plant and generates sensors for these inverters, as well as overall plant sensors.
+
+## Authentication
+
+The integration supports two authentication methods:
+
+- **Username and password**: Use your Growatt account credentials to authenticate.
+- **API token**: Use an API token for more secure and stable authentication using the official Growatt API (only MIN/TLX inverters currently supported).
+
+### Obtaining an API token
+
+To obtain an API token for your Growatt account:
+
+1. Log in to your Growatt account on the [Growatt server](https://server.growatt.com/).
+2. Navigate to **Settings** > **Account Management** > **API Key**.
+3. Generate or retrieve your API token.
+4. Use this token during the integration setup in Home Assistant.
+
+Using an API token is recommended for MIN/TLX inverters as it uses the official Growatt V1 API, which offers better stability, support and feature growth.
## Prerequisites
@@ -30,3 +52,27 @@ Once integrated, the sensor logs into the user's Growatt account and accesses th
- Login credentials to that Growatt account, you will need them during setup of the integration
{% include integrations/config_flow.md %}
+
+## Inverter controls
+
+When using API token authentication with MIN/TLX inverters, the integration provides additional control entities:
+
+{% important %}
+These controls directly modify your inverter's operational settings. Only change these values if you understand their impact on your system. Incorrect settings may damage your battery, reduce system efficiency, or void your warranty. Use at your own risk.
+{% endimportant %}
+
+### Numbers
+
+- **Charge power**
+ - **Description**: Set the charge power as a percentage (0-100%)
+- **Charge stop SOC**
+ - **Description**: Set the state of charge at which charging should stop (0-100%)
+- **Discharge power**
+ - **Description**: Set the discharge power as a percentage (0-100%)
+- **Discharge stop SOC**
+ - **Description**: Set the state of charge percentage at which discharging should stop (0-100%)
+
+### Switches
+
+- **AC charge**
+ - **Description**: Enable or disable AC charging
diff --git a/source/_integrations/habitica.markdown b/source/_integrations/habitica.markdown
index 797c14dd712..bf1577ed6ba 100644
--- a/source/_integrations/habitica.markdown
+++ b/source/_integrations/habitica.markdown
@@ -15,13 +15,14 @@ ha_platforms:
- calendar
- diagnostics
- image
+ - notify
- sensor
- switch
- todo
ha_codeowners:
- '@tr4nt0r'
ha_config_flow: true
-ha_integration_type: integration
+ha_integration_type: service
related:
- docs: /integrations/todo
title: To-do list integration documentation
@@ -99,6 +100,7 @@ Verify SSL certificate:
- **Quest scrolls**: Displays the total number of quest scrolls in your inventory. A list of each quest scroll and its quantity is provided in the sensor's attributes.
- **Pending damage**: Total damage accumulated during the day by completing your tasks. The quest boss is then attacked for this amount at the end of the day.
- **Pending quest items**: Quest items found during the day when completing tasks. The total is counted towards the quest objective at the end of the day.
+- **Last check-in**: Last time a user checked in.
## Binary sensors
@@ -161,6 +163,11 @@ If you've unlocked the class system, button controls for casting player and part
- **Rest in the Inn**: When enabled, allows your character to rest in the inn in Habitica, pausing damage dealt from dailies and quest bosses.
+## Notifier
+
+- **Party chat**: Sends a message to your party's group chat.
+- **Private message**: Sends a private message to an individual party member. A separate notify entity is created for each member of your party.
+
## Party
If you’re part of a party, the integration creates a device with these entities.
@@ -181,6 +188,17 @@ Certain entities are only available depending on whether you are in a boss quest
{% endnote %}
+### Keep an eye on your team mates
+
+You can add members of your party to Home Assistant, so you can keep an eye on your mates health and other key stats. To add a party member, go to {% my integration domain="habitica" title="**Settings** > **Devices & services** > **Habitica**" %} and select **{% icon "mdi:plus" %} Add party member**.
+
+When you add someone, Home Assistant creates a new entry with the following entities:
+
+- **Sensors**: Class, display name, health, mana, max. mana, experience, next level, strength, intelligence, constitution, and perception.
+- **Image**: Avatar
+
+For details about each of these entities, see the descriptions above under [**Sensors**](#sensors) and [**Image**](#image).
+
## Actions
### Action `habitica.cast_skill`
@@ -380,6 +398,7 @@ Updates a specific to-do for the selected Habitica character.
| `remove_checklist_item` | yes | Remove items from a to-do's checklist. |
| `score_checklist_item` | yes | Mark items from a to-do's checklist as completed. |
| `unscore_checklist_item` | yes | Undo completion of items of a to-do's checklist. |
+| `collapse_checklist` | yes | Whether the checklist is displayed as collapsed or expanded. |
| `priority` | yes | Update the difficulty of a to-do. Valid values: `trivial`, `easy`, `medium`, `hard` |
| `date` | yes | The to-do's due date. |
| `clear_date` | yes | Remove the due date from a to-do. |
@@ -400,6 +419,7 @@ Creates a to-do for the selected Habitica character.
| `name` | no | The title for the Habitica to-do. |
| `notes` | yes | The notes for the Habitica to-do. |
| `add_checklist_item` | yes | The items to add to the to-do's checklist. |
+| `collapse_checklist` | yes | Whether the checklist is displayed as collapsed or expanded. |
| `priority` | yes | The difficulty of the to-do. Valid values: `trivial`, `easy`, `medium`, `hard` |
| `date` | yes | The to-do's due date. |
| `reminder` | yes | Add reminders to a Habitica to-do. |
@@ -420,6 +440,7 @@ Updates a specific daily for the selected Habitica character.
| `remove_checklist_item` | yes | Remove items from a daily's checklist. |
| `score_checklist_item` | yes | Mark items from a daily's checklist as completed. |
| `unscore_checklist_item` | yes | Undo completion of items of a daily's checklist. |
+| `collapse_checklist` | yes | Whether the checklist is displayed as collapsed or expanded. |
| `priority` | yes | Update the difficulty of a daily. Valid values: `trivial`, `easy`, `medium`, `hard` |
| `start_date` | yes | Defines when the daily task becomes active and specifies the exact weekday or day of the month it repeats on. |
| `frequency` | yes | The repetition interval of a daily. Valid values: `daily`, `weekly`, `monthly`, `yearly`. |
@@ -444,7 +465,8 @@ Creates a daily for the selected Habitica character.
| `name` | no | The title for the Habitica daily. |
| `notes` | yes | The new notes for the Habitica daily. |
| `add_checklist_item` | yes | The items to add to the daily's checklist. |
-| `priority` | yes | The difficulty of a daily. Valid values: `trivial`, `easy`, `medium`, `hard` |
+| `collapse_checklist` | yes | Whether the checklist is displayed as collapsed or expanded. |
+| `priority` | yes | The difficulty of a daily. Valid values: `trivial`, `easy`, `medium`, `hard` |
| `start_date` | yes | The date when the daily becomes active and specifies the exact weekday or day of the month it repeats on. |
| `frequency` | yes | The repetition interval of a daily. Valid values: `daily`, `weekly`, `monthly`, `yearly`. |
| `every_x` | yes | The number of intervals (`days`, `weeks`, `months`, or `years`) after which the daily repeats, based on the chosen repetition interval. A value of 0 makes the daily inactive (a *Gray Daily*). |
@@ -576,7 +598,8 @@ actions:
## Data updates
-This integration retrieves data from Habitica every 60 seconds to ensure timely updates.
+This integration syncs with Habitica every 60 seconds to keep your own data up to date.
+Party data, including any party members you’ve added as sub-entries, is refreshed every 15 minutes.
## Known limitations
diff --git a/source/_integrations/hassio.markdown b/source/_integrations/hassio.markdown
index 1ec9a25437d..21f2625cf54 100644
--- a/source/_integrations/hassio.markdown
+++ b/source/_integrations/hassio.markdown
@@ -5,6 +5,7 @@ ha_category:
- Backup
- Binary sensor
- Sensor
+ - Switch
- Update
ha_iot_class: Local Polling
ha_release: 0.42
@@ -15,6 +16,7 @@ ha_platforms:
- binary_sensor
- diagnostics
- sensor
+ - switch
- update
ha_codeowners:
- '@home-assistant/supervisor'
@@ -71,19 +73,33 @@ For Home Assistant Host, the following sensors are available:
For each installed add-on Supervisor provides following binary sensors:
-(These entities are disabled by default and must be reenabled to appear)
+(These entities are disabled by default and must be re-enabled to appear)
| Sensor | Enabled by default | Description |
| ------- | ------------------ | ----------- |
| Update Available | no | Whether there is an update available for this add-on (This is deprecated, use the Update entities instead.)
| Running | no | Whether the add-on is running or not.
+For each network storage Supervisor provides following binary sensors:
+
+| Sensor | Enabled by default | Description |
+| ------- | ------------------ | ----------- |
+| Connected | no | Whether the network storage is connected and working properly.
+
For Home Assistant OS Supervisor provides following binary sensors:
| Sensor | Enabled by default | Description |
| ------- | ------------------ | ----------- |
| Update Available | no | Whether there is an update available for OS
+## Switch entities
+
+For each installed add-on, the following switch is available:
+
+| Switch | Enabled by default | Description |
+| ------- | ------------------ | ----------- |
+| Running | no | Shows whether the add-on is running or not, and allows you to start or stop the add-on depending on its current state. |
+
## Update entities
For all your installed add-ons, Home Assistant Core, Home Assistant Supervisor, and for the Home Assistant Operating System (if you are running that), this integration will provide [update](/integrations/update) entities that provide information about pending updates, and will allow you to update to them.
diff --git a/source/_integrations/here_travel_time.markdown b/source/_integrations/here_travel_time.markdown
index d92d04c9235..2cfe4880fe0 100644
--- a/source/_integrations/here_travel_time.markdown
+++ b/source/_integrations/here_travel_time.markdown
@@ -91,3 +91,9 @@ automation:
target:
entity_id: sensor.morning_commute
```
+
+For more detailed steps on how to define a custom polling interval, follow the procedure below.
+
+### Defining a custom polling interval
+
+{% include common-tasks/define_custom_polling.md %}
diff --git a/source/_integrations/history_stats.markdown b/source/_integrations/history_stats.markdown
index 80e2ffb01ee..691fc2693fc 100644
--- a/source/_integrations/history_stats.markdown
+++ b/source/_integrations/history_stats.markdown
@@ -11,6 +11,7 @@ ha_quality_scale: internal
ha_domain: history_stats
ha_config_flow: true
ha_platforms:
+ - diagnostics
- sensor
ha_integration_type: helper
related:
diff --git a/source/_integrations/hive.markdown b/source/_integrations/hive.markdown
index e35a5797f86..a385b9510bf 100644
--- a/source/_integrations/hive.markdown
+++ b/source/_integrations/hive.markdown
@@ -2,7 +2,6 @@
title: Hive
description: Instructions on how to integrate Hive devices with Home Assistant.
ha_category:
- - Alarm
- Binary sensor
- Climate
- Hub
@@ -17,7 +16,6 @@ ha_codeowners:
- '@KJonline'
ha_domain: hive
ha_platforms:
- - alarm_control_panel
- binary_sensor
- climate
- light
@@ -32,12 +30,11 @@ ha_homekit: true
The Hive integration for Home Assistant allows you to interact with supported devices and services offered by
[hivehome.com](https://www.hivehome.com)
-{% note %}
-Please note that Hive shut down its North American Servers on November 30th, 2021.
-Read more about this in their [shutdown notice](https://www.hivehome.com/us/support).
-{% endnote %}
+This Hive integration uses the same username and password you use on the [Hive website](https://sso.hivehome.com) to configure it within Home Assistant. 2FA authentication must be enabled to use this integration. Once configured, Home Assistant will detect and add all Hive devices, including support for multi-zone heating.
-This Hive integration uses the same username and password you use on the [Hive website](https://sso.hivehome.com) to configure it within Home Assistant, 2FA authentication must be enabled to use this integration. Once configured Home Assistant will detect and add all Hive devices, including support for multi-zone heating.
+{% note %}
+Please note that the credentials used must be for the Hive account owner. Shared accounts or secondary users will not work with this integration.
+{% endnote %}
{% include integrations/config_flow.md %}
@@ -121,14 +118,6 @@ script:
## Platforms
-### Alarm control panel
-
-The `hive` alarm control panel integration integrates your Hive alarm into Home Assistant.
-
-The platform supports the following Hive devices:
-
-- Hive Home Shield
-
### Binary sensor
The `hive` binary sensor integration integrates your Hive sensors into Home Assistant.
diff --git a/source/_integrations/home_connect.markdown b/source/_integrations/home_connect.markdown
index d5a9c17d590..4ab073a016b 100644
--- a/source/_integrations/home_connect.markdown
+++ b/source/_integrations/home_connect.markdown
@@ -28,7 +28,6 @@ ha_platforms:
- select
- sensor
- switch
- - time
ha_integration_type: integration
ha_zeroconf: true
ha_dhcp: true
@@ -501,6 +500,22 @@ Both entities can use these options, but the availability of these will depend o
- **Silent**: `consumer_products_cleaning_robot_enum_type_cleaning_modes_silent`
- **Standard**: `consumer_products_cleaning_robot_enum_type_cleaning_modes_standard`
- **Power**: `consumer_products_cleaning_robot_enum_type_cleaning_modes_power`
+ - **Intelligent mode**: `consumer_products_cleaning_robot_enum_type_cleaning_mode_intelligent_mode`
+ - **Vacuum only**: `consumer_products_cleaning_robot_enum_type_cleaning_mode_vacuum_only`
+ - **Mop only**: `consumer_products_cleaning_robot_enum_type_cleaning_mode_mop_only`
+ - **Vacuum and mop**: `consumer_products_cleaning_robot_enum_type_cleaning_mode_vacuum_and_mop`
+ - **Mop after vacuum**: `consumer_products_cleaning_robot_enum_type_cleaning_mode_mop_after_vacuum`
+
+
+- **Suction power**:
+ - **Description**: Defines the suction power.
+ - **Availability**: Cleaning robot
+ -
+ Options: (click to view)
+
+ - **Silent**: `consumer_products_cleaning_robot_enum_type_suction_power_silent`
+ - **Standard**: `consumer_products_cleaning_robot_enum_type_suction_power_standard`
+ - **Max**: `consumer_products_cleaning_robot_enum_type_suction_power_max`
- **Bean amount**:
@@ -1033,6 +1048,7 @@ Starts or selects a program. If the `program` attribute is not set, this action
| `program` | yes | Program to select. If set, it will start or select a program depending on `affects_to`. |
| `consumer_products_cleaning_robot_option_reference_map_id` | yes | Defines which reference map is to be used. |
| `consumer_products_cleaning_robot_option_cleaning_mode` | yes | Defines the favoured cleaning mode. |
+| `consumer_products_cleaning_robot_option_suction_power` | yes | Defines the suction power. |
| `consumer_products_coffee_maker_option_bean_amount` | yes | Describes the amount of coffee beans used in a coffee machine program. |
| `consumer_products_coffee_maker_option_fill_quantity` | yes | Describes the amount of water (in ml) used in a coffee machine program. |
| `consumer_products_coffee_maker_option_coffee_temperature` | yes | Describes the coffee temperature used in a coffee machine program. |
diff --git a/source/_integrations/homeassistant_connect_zbt2.markdown b/source/_integrations/homeassistant_connect_zbt2.markdown
index ab8b7899a33..5bef7bbac65 100644
--- a/source/_integrations/homeassistant_connect_zbt2.markdown
+++ b/source/_integrations/homeassistant_connect_zbt2.markdown
@@ -11,7 +11,10 @@ ha_domain: homeassistant_connect_zbt2
ha_integration_type: hardware
ha_config_flow: true
ha_platforms:
+ - switch
- update
+published: false
+ha_quality_scale: bronze
---
The Home Assistant Connect ZBT-2 integration provides hardware information for the hardware configuration page.
diff --git a/source/_integrations/homeassistant_hardware.markdown b/source/_integrations/homeassistant_hardware.markdown
index 64de73a9bab..177e3b5b63e 100644
--- a/source/_integrations/homeassistant_hardware.markdown
+++ b/source/_integrations/homeassistant_hardware.markdown
@@ -10,6 +10,7 @@ ha_codeowners:
ha_domain: homeassistant_hardware
ha_integration_type: system
ha_platforms:
+ - switch
- update
---
diff --git a/source/_integrations/homeassistant_sky_connect.markdown b/source/_integrations/homeassistant_sky_connect.markdown
index 3ff12af5b9e..b7357ab2b34 100644
--- a/source/_integrations/homeassistant_sky_connect.markdown
+++ b/source/_integrations/homeassistant_sky_connect.markdown
@@ -11,6 +11,7 @@ ha_domain: homeassistant_sky_connect
ha_integration_type: hardware
ha_config_flow: true
ha_platforms:
+ - switch
- update
---
diff --git a/source/_integrations/homeassistant_yellow.markdown b/source/_integrations/homeassistant_yellow.markdown
index 7c415916989..24edb604022 100644
--- a/source/_integrations/homeassistant_yellow.markdown
+++ b/source/_integrations/homeassistant_yellow.markdown
@@ -10,6 +10,7 @@ ha_codeowners:
ha_domain: homeassistant_yellow
ha_integration_type: hardware
ha_platforms:
+ - switch
- update
---
diff --git a/source/_integrations/homee.markdown b/source/_integrations/homee.markdown
index 0e2ba87673e..4703f12998a 100644
--- a/source/_integrations/homee.markdown
+++ b/source/_integrations/homee.markdown
@@ -1,6 +1,6 @@
---
-title: Homee
-description: Instructions on how to setup Homee devices in Home Assistant.
+title: homee
+description: Instructions on how to setup homee devices in Home Assistant.
ha_category:
- Alarm
- Binary sensor
@@ -44,17 +44,17 @@ ha_integration_type: hub
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.
+[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.
## Prerequisites
-You need to create a new user in your Homee app. Create a user that is only used by Home Assistant. For security reasons, it's recommended to:
+You need to create a new user in your homee app. Create a user that is only used by Home Assistant. For security reasons, it's recommended to:
- Use a strong, unique password.
- Restrict the user's permissions for what you want to do from Home Assistant.
- Do not use this account for any other purpose.
-1. In your Homee app, in the top-left corner, tap the menu button.
+1. In your homee app, in the top-left corner, tap the menu button.
2. On the top right of the opening menu, tap the gear {% icon "mdi:gear-outline" %} icon.
3. Choose **Manage users**.
4. Choose **Add user** and configure the desired values.
@@ -63,7 +63,7 @@ You need to create a new user in your Homee app. Create a user that is only used
{% configuration_basic %}
Host:
- description: The IP Address of your Homee.
+ description: The IP Address of your homee.
User:
description: The username you chose in the Prerequisites.
Password:
@@ -71,11 +71,11 @@ Password:
{% endconfiguration_basic %}
Available devices will automatically show up in your Home Assistant installation.
-New devices added to Homee will be automatically discovered after a restart of Home Assistant. This restart is only required when adding new devices, not for state updates of existing devices.
+New devices added to homee will be automatically discovered after a restart of Home Assistant. This restart is only required when adding new devices, not for state updates of existing devices.
## Limitations
-Changed values are reported from Homee in defined time intervals and not always in realtime. For example, while a cover moves, the position is updated only every few seconds and intermediate states may be missed by Home Assistant.
+Changed values are reported from homee in defined time intervals and not always in realtime. For example, while a cover moves, the position is updated only every few seconds and intermediate states may be missed by Home Assistant.
## Troubleshooting
@@ -83,7 +83,7 @@ First, see the general [Home Assistant troubleshooting guide](/docs/configuratio
The **homee** integration supports [debug logs and diagnostics](/docs/configuration/troubleshooting/#debug-logs-and-diagnostics).
-### Homee device not working as expected
+### homee device not working as expected
Make sure, the {% term device %} works as expected in homee.
If a homee device shows up in Home Assistant, but does not work as expected or is missing {% term entities %}, open a [report](https://github.com/home-assistant/core/issues) and attach error logs and the device's {% term diagnostics %} data.
@@ -105,6 +105,6 @@ This integration supports reconfiguration, allowing you to change the IP address
## Removing the integration
-This integration follows standard integration removal, and once the integration is removed, you can also remove the dedicated user from your Homee.
+This integration follows standard integration removal, and once the integration is removed, you can also remove the dedicated user from your homee.
{% include integrations/remove_device_service.md %}
diff --git a/source/_integrations/homematicip_cloud.markdown b/source/_integrations/homematicip_cloud.markdown
index ecc0344f7c1..ae13f998d8b 100644
--- a/source/_integrations/homematicip_cloud.markdown
+++ b/source/_integrations/homematicip_cloud.markdown
@@ -139,7 +139,7 @@ Currently, the **HmIP-DLD** can only be used in Home Assistant without a PIN. En
- homematicip_cloud.climate
- Climate group (*HmIP-HeatingGroup*)
- This includes temperature/humidity measures for climate devices of a room delivered by:
- - Wall-mounted thermostat (*HmIP-WTH, HmIP-WTH-2, HmIP-WTH-B*)
+ - Wall-mounted thermostat (*HmIP-WTH, HmIP-WTH-2, HmIP-WTH-B, HmIP-WTH-1*)
- Brand Wall-mounted thermostat (*HmIP-BWTH, HmIP-BWTH-24*)
- Radiator thermostat (*HmIP-eTRV, HmIP-eTRV-2, HmIP-eTRV-C*) - should also work with (*HmIP-eTRV-2-UK, HmIP-eTRV-2-B, HmIP-eTRV-2-B1*)
- Temperature and humidity sensor (*HmIP-STH*)
diff --git a/source/_integrations/html5.markdown b/source/_integrations/html5.markdown
index 1dd12fb130c..539598fd606 100644
--- a/source/_integrations/html5.markdown
+++ b/source/_integrations/html5.markdown
@@ -28,6 +28,7 @@ HTML5 push notifications **do not** work on iOS versions below 16.4.
The `html5` platform can only function if all of the following requirements are met:
- You are using Chrome and/or Firefox on any desktop platform, ChromeOS or Android. Or you added your Home Assistant instance to your home screen on iOS 16.4 or higher.
+- On Brave desktop, you have gone into Brave Privacy Settings by going to `brave://settings/privacy` in your address bar or **Settings > Privacy and Security** and made sure the **Use Google services for push messaging** option is turned on.
- Your Home Assistant instance is accessible from outside your network over HTTPS or can perform an alternative [Domain Name Verification Method](https://support.google.com/webmasters/answer/9008080#domain_name_verification) on the domain used by Home Assistant.
- If using a proxy, HTTP basic authentication must be disabled to register or deregister push notifications. It can be re-enabled afterwards.
- You have configured SSL/TLS for your Home Assistant. It doesn't need to be configured in Home Assistant though, e.g., you can be running NGINX in front of Home Assistant and this will still work. The certificate must be trustworthy (i.e., not self-signed).
@@ -191,13 +192,13 @@ During the lifespan of a single push notification, Home Assistant will emit a fe
Common event payload parameters are:
-| Parameter | Description |
-| --------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| `action` | The `action` key that you set when sending the notification of the action clicked. Only appears in the `clicked` event. |
+| Parameter | Description |
+| --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
+| `action` | The `action` key that you set when sending the notification of the action clicked. Only appears in the `clicked` event. |
| `data` | The data dictionary you originally passed in the notify payload, minus any parameters that were added to the HTML5 notification (`actions`, `badge`, `body`, `dir`, `icon`, `image`, `lang`, `renotify`, `requireInteraction`, `tag`, `timestamp`, `vibrate`, `silent`). |
-| `tag` | The unique identifier of the notification. Can be overridden when sending a notification to allow for replacing existing notifications. |
-| `target` | The target that this notification callback describes. |
-| `type` | The type of event callback received. Can be `received`, `clicked` or `closed`. |
+| `tag` | The unique identifier of the notification. Can be overridden when sending a notification to allow for replacing existing notifications. |
+| `target` | The target that this notification callback describes. |
+| `type` | The type of event callback received. Can be `received`, `clicked` or `closed`. |
You can use the `target` parameter to write automations against a single `target`. For more granularity, use `action` and `target` together to write automations which will do specific things based on what target clicked an action.
diff --git a/source/_integrations/hue.markdown b/source/_integrations/hue.markdown
index ed661f822a8..96efeca2100 100644
--- a/source/_integrations/hue.markdown
+++ b/source/_integrations/hue.markdown
@@ -9,7 +9,6 @@ featured: true
ha_release: '0.60'
ha_config_flow: true
ha_codeowners:
- - '@balloob'
- '@marcelveldt'
ha_domain: hue
ha_homekit: true
@@ -74,7 +73,7 @@ At the time of writing, there's a limitation on the Hue API that each device can
Philips/Signify released a new version of their Hue bridge (square shape) and their legacy/V1 bridge (round shape) is now end of life and no longer supported by them. Home Assistant will continue to support the V1 Hue bridge as long as it is technically possible, although with a few limitations:
-- Scene entities are not automatically created for V1 bridges. To activate a Hue scene on a V1 bridge from Home Assistant we provide an action to active it the Hue scene by name.
+- Scene entities are not automatically created for V1 bridges. To activate a Hue scene on a V1 bridge from Home Assistant there is an action to do so by name.
- State updates for devices/entities on a V1 bridges are not received instantly but polled on interval.
- Light entities for Hue rooms are not automatically created for V1 bridges, you can opt-in for creating entities for rooms within the Integration's options.
diff --git a/source/_integrations/husqvarna_automower.markdown b/source/_integrations/husqvarna_automower.markdown
index 94d62a26684..71cba90722d 100644
--- a/source/_integrations/husqvarna_automower.markdown
+++ b/source/_integrations/husqvarna_automower.markdown
@@ -29,7 +29,7 @@ ha_platforms:
- select
- sensor
- switch
-ha_integration_type: integration
+ha_integration_type: hub
ha_domain: husqvarna_automower
ha_quality_scale: silver
---
@@ -177,6 +177,7 @@ The integration will create the following sensors:
- Error. For example: *Mower tilted*, *outside geofence*.
- Downtime (if available)
- Inactive reason (if available). For example: *Searching for satellites* or *planning*.
+- Remaining charging time
- 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 4490f72f11b..6b250d16ba3 100644
--- a/source/_integrations/huum.markdown
+++ b/source/_integrations/huum.markdown
@@ -56,4 +56,3 @@ The climate entity controls the sauna heater and offers the following capabiliti
### Number
- **Humidity**: Control steamer duty cycle (0-10) to adjust sauna humidity.
-
diff --git a/source/_integrations/imap.markdown b/source/_integrations/imap.markdown
index 41352d3be0c..292c48e0847 100644
--- a/source/_integrations/imap.markdown
+++ b/source/_integrations/imap.markdown
@@ -128,6 +128,8 @@ custom:
description: Holds the result of the custom event data [template](/docs/configuration/templating). All attributes are available as a variable in the template.
initial:
description: Returns `True` if this is the initial event for the last message received. When a message within the search scope is removed and the last message received has not been changed, then an `imap_content` event is generated and the `initial` property is set to `False`. Note that if no `Message-ID` header was set on the triggering email, the `initial` property will always be set to `True`.
+parts:
+ description: Returns a dictionary with the available parts in a multipart message. The keys of the dictionary can be used to pass via the `part` option to the `fetch` action to allow you to receive the content of a specific part of the message.
uid:
description: Latest `uid` of the message.
{% endconfiguration_basic %}
@@ -173,19 +175,112 @@ template:
### Actions for post-processing
-The IMAP integration has some actions for post-pressing email messages. The actions are intended to be used in automations as actions after an "imap_content" event. The actions take the IMAP `entry_id` and the `uid` of the message's event data. You can use a template for the `entry_id` and the `uid`. When the action is set up as a trigger action, you can easily select the correct entry from the UI. You will find the `entry_id` in YAML mode. It is highly recommended you filter the events by the `entry_id`.
+The IMAP integration has some actions for post-pressing email messages. The actions are intended to be used in automations as actions after an "imap_content" event. The actions require the IMAP `entry_id` and the `uid` of the message's event data. You can use a template for the `entry_id` and the `uid`. When the action is set up as a trigger action, you can easily select the correct entry from the UI. You will find the `entry_id` in YAML mode. It is highly recommended you filter the events by the `entry_id`.
-Available actions are:
+#### Action `seen` - Mark the message as seen
-- `seen`: Mark the message as seen.
-- `move`: Move the message to a `target_folder` and optionally mark the message `seen`.
-- `delete`: Delete the message.
-- `fetch`: Fetch the content of a message. Returns a dictionary containing `"text"`, `"subject"`, `"sender"` and `"uid""`. This allows to fetch and process the complete message text, not limited by size.
+| Data attribute | Type | Optional | Description |
+| -- | -- | -- | -- |
+| `entry_id` | string | no | The IMAP config entry ID. |
+| `uid` | string | no | The `uid` of the message to be marked as "seen". To be found in the message's event data. |
+
+#### Action `move` - Move the IMAP message
+
+| Data attribute | Type | Optional | Description |
+| -- | -- | -- | -- |
+| `entry_id` | string | no | The IMAP config entry ID. |
+| `uid` | string | no | The `uid` of the message to be marked as seen. To be found in the message's event data. |
+| `target_folder` | string | no | The name of the target folder, for example `INBOX.Trash` where the message should be moved to. |
+| `seen` | boolean | yes | If set to `true` this will mark the message as "seen". |
+
+#### Action `delete` - Delete the IMAP message
+
+| Data attribute | Type | Optional | Description |
+| -- | -- | -- | -- |
+| `entry_id` | string | no | The IMAP config entry ID. |
+| `uid` | string | no | The `uid` of the message to be deleted. To be found in the message's event data. |
{% caution %}
-When these actions are used in an automation, make sure the right triggers and filtering are set up. When messages are deleted, they cannot be recovered. When multiple IMAP entries are set up, make sure the messages are filtered by the `entry_id` as well to ensure the correct messages are processed. Do not use these actions unless you know what you are doing.
+When these actions are used in an automation, make sure the right triggers and filtering are set up. When messages are deleted or modified, they cannot be recovered. When multiple IMAP entries are set up, make sure the messages are filtered by the `entry_id` as well to ensure the correct messages are processed. Do not use these actions unless you know what you are doing.
{% endcaution %}
+#### Action `fetch` - Fetch the an IMAP message
+
+Fetches the text body and retrieves metadata about the parts inside the IMAP message.
+
+| Data attribute | Type | Optional | Description |
+| -- | -- | -- | -- |
+| `entry_id` | string | no | The IMAP config entry ID. |
+| `uid` | string | no | The `uid` of the message to be marked as seen. To be found in the message's event data. |
+
+##### Return values for the `fetch` action
+
+{% configuration_basic %}
+text:
+ description: The plain text version of the fetched email.
+subject:
+ description: The subject of the fetched email.
+sender:
+ description: The sender's email address of the fetched email.
+uid:
+ description: The UID of the message.
+parts:
+ description: Contains a dictionary with metadata about the available parts in the message in case of a multipart message. This allows to fetch and process the complete message text message part, not limited by size.
+ type: map
+ keys:
+ content_type:
+ description: The MIME content type of the message part, for example "image/jpeg"
+ content_transfer_encoding:
+ description: The encoding of returned message part.
+ filename:
+ description: The file name of the message. The file name is only available if it is available.
+{% endconfiguration_basic %}
+
+##### Example of `parts` data in the return variable for a multipart message:
+
+```json
+{
+ "0,0": {
+ "content_type": "text/plain",
+ "content_transfer_encoding": "7bit"
+ },
+ "0,1": {
+ "content_type": "text/html",
+ "content_transfer_encoding": "7bit"
+ },
+ "1": {
+ "content_type": "text/plain",
+ "filename": "Text attachment content.txt",
+ "content_transfer_encoding": "base64"
+ },
+}
+```
+
+#### Action `fetch_part` - Fetch a part or attachement from an IMAP message
+
+| Data attribute | Type | Optional | Description |
+| -- | -- | -- | -- |
+| `entry_id` | string | no | The IMAP config entry ID. |
+| `uid` | string | no | The `uid` of the message to be marked as seen. To be found in the message's event data. |
+| `part` | string | no | The index of the message part that is to be returned. Use the `part` info in the message's event data or from the `fetch` action, to receive the available parts. |
+
+##### Return values for the `fetch_part` action
+
+{% configuration_basic %}
+part_data:
+ description: The encoded data of the fetched message part.
+content_type:
+ description: The MIME content type of the message part, for example "image/jpeg".
+content_transfer_encoding:
+ description: The encoding of the data in `part_data`.
+file_name:
+ description: The filename of the message part, in case the part is added as an attachment. Will be `null` if no filename is set.
+uid:
+ description: The UID of the message.
+part:
+ description: The part index.
+{% endconfiguration_basic %}
+
## Example - post-processing
The example below filters the event trigger by `entry_id`, fetches the message and stores it in `message_text`. It then marks the message in the event as seen and finally, it adds a notification with the subject of the message. The `seen` action `entry_id` can be a template or literal string. In UI mode you can select the desired entry from a list as well.
@@ -220,6 +315,44 @@ actions:
{% endraw %}
+In case you want want to process a message part, use the `fetch_part` action, and specify the `part` option.
+
+{% raw %}
+
+```yaml
+alias: "imap fetch and seen example"
+description: "Fetch and mark an incoming message as seen"
+triggers:
+ - trigger: event
+ event_type: imap_content
+ event_data:
+ entry_id: 91fadb3617c5a3ea692aeb62d92aa869
+conditions:
+ - condition: template
+ value_template: "{{ trigger.event.data['sender'] == 'info@example.com' }}"
+ - condition: template
+ value_template: "{{ trigger.event.data['parts'].get('1') }}"
+ - condition: template
+ value_template: "{{ trigger.event.data['parts']['1'].get('content_type') == 'text/plain' }}"
+actions:
+ - action: imap.fetch_part
+ data:
+ entry: 91fadb3617c5a3ea692aeb62d92aa869
+ uid: "{{ trigger.event.data['uid'] }}"
+ part: "1"
+ response_variable: message_text
+ - action: imap.seen
+ data:
+ entry: 91fadb3617c5a3ea692aeb62d92aa869
+ uid: "{{ trigger.event.data['uid'] }}"
+ - action: persistent_notification.create
+ data:
+ message: "{{ message_text['part_data'] | base64_decode }}"
+```
+
+{% endraw %}
+
+
## Example - keyword spotting
The following example shows the usage of the IMAP email content sensor to scan the subject of an email for text, in this case, an email from the APC SmartConnect service, which tells whether the UPS is running on battery or not.
diff --git a/source/_integrations/imeon_inverter.markdown b/source/_integrations/imeon_inverter.markdown
index 0b7fbe1a1c0..c915c0c69e8 100644
--- a/source/_integrations/imeon_inverter.markdown
+++ b/source/_integrations/imeon_inverter.markdown
@@ -16,8 +16,8 @@ related:
ha_integration_type: device
ha_quality_scale: bronze
ha_platforms:
- - sensor
- select
+ - sensor
ha_ssdp: true
---
@@ -27,7 +27,7 @@ The Imeon Energy Inverter {% term integrations %} will poll an [Imeon](https://i
- The Imeon inverter must be connected to the local network.
- [OS One](https://imeon-energy.com/os-one/) version must be **1.8.1.4** or higher.
-- *ModuleAPI* application must be activated on the OS One pannel of your Imeon inverter.
+- *ModuleAPI* application must be activated on the OS One panel of your Imeon inverter.
- To do so, connect to **OS One** > **Applications** and by hovering over *ModuleAPI*, select **Activate**.
{% include integrations/config_flow.md %}
@@ -155,6 +155,13 @@ This document provides an overview of the sensors available in the Imeon Inverte
| `energy_battery_stored` | Energy stored in battery today. | Wh |
| `energy_battery_consumed` | Energy consumed from battery today. | Wh |
+### Forecast
+
+| Sensor key | Description | Unit |
+| ------------------------------- | ------------------------------------------------------- | ---- |
+| `forecast_cons_remaining_today` | Forecast of the remaining energy consumption for today. | Wh |
+| `forecast_prod_remaining_today` | Forecast of the remaining energy production for today. | Wh |
+
## Troubleshooting
### What is my domain name?
diff --git a/source/_integrations/imgw_pib.markdown b/source/_integrations/imgw_pib.markdown
index e7ff8557d59..51c6465d5f9 100644
--- a/source/_integrations/imgw_pib.markdown
+++ b/source/_integrations/imgw_pib.markdown
@@ -13,7 +13,7 @@ ha_platforms:
- diagnostics
- sensor
ha_integration_type: integration
-ha_quality_scale: silver
+ha_quality_scale: platinum
---
IMGW-PIB {% term integration %} uses hydrological data from [Institute of Meteorology and Water Management - National Research Institute](https://hydro.imgw.pl) to present information about rivers and water reservoirs in Poland.
@@ -25,17 +25,60 @@ Hydrological station:
description: "Select a hydrological station from the list of available stations."
{% endconfiguration_basic %}
-## Sensors
-
-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
This integration follows standard integration removal, no extra steps are required.
{% include integrations/remove_device_service.md %}
+
+## Supported functionality
+
+The IMGW-PIB integration provides the following entities.
+
+### Sensors
+
+- **Water level**
+ - **Description**: Water level in the river or reservoir at the measurement point
+- **Water flow**
+ - **Description**: River water flow at the measurement point
+ - **Remarks**: Not available for all hydrological stations
+- **Water temperature**
+ - **Description**: Water temperature in the river or reservoir at the measurement point
+ - **Remarks**: Not available for all hydrological stations
+- **Hydrological alert**
+ - **Description**: Provides information on hydrological alerts for a given river or reservoir
+
+## Data updates
+
+By default, the integration {% term polling polls %} data from the IMGW-PIB API every 30 minutes.
+
+## Possible use-cases
+
+- Monitor hydrological alerts to protect your family and property from floods.
+- Monitor river water levels to gain long-term insight into climate change in your area.
+
+## Examples
+
+### Create a hydrological alert notification
+
+This automation will create a persistent notification with the content and probability of a hydrological alert:
+
+```yaml
+automation:
+ - alias: Hydrological alert
+ triggers:
+ - trigger: state
+ entity_id:
+ - sensor.warta_oborniki_hydrological_alert
+ from: no_alert
+ actions:
+ - action: persistent_notification.create
+ data:
+ title: Hydrological alert!
+ message: "{{ trigger.to_state.state }}, probability {{ trigger.to_state.attributes.probability }}%"
+```
+
+## Known limitations
+
+- The integration provides data for hydrological stations available through the public IMGW-PIB API. Some hydrological stations are not available in this data and therefore the integration does not support them.
+- Not all hydrological stations provide all data, so the set of entities for individual stations may differ.
diff --git a/source/_integrations/immich.markdown b/source/_integrations/immich.markdown
index e6a5007dcd0..b1c284ee424 100644
--- a/source/_integrations/immich.markdown
+++ b/source/_integrations/immich.markdown
@@ -16,7 +16,7 @@ ha_platforms:
- update
ha_codeowners:
- '@mib1185'
-ha_integration_type: integration
+ha_integration_type: service
ha_quality_scale: silver
---
diff --git a/source/_integrations/inels.markdown b/source/_integrations/inels.markdown
new file mode 100644
index 00000000000..a5e7663a993
--- /dev/null
+++ b/source/_integrations/inels.markdown
@@ -0,0 +1,48 @@
+---
+title: iNELS
+description: Instructions on how to integrate iNELS with Home Assistant.
+ha_category:
+ - Switch
+ha_release: 2025.11
+ha_iot_class: Local Push
+ha_config_flow: true
+ha_codeowners:
+ - '@epdevlab'
+ha_domain: inels
+ha_platforms:
+ - switch
+ha_integration_type: integration
+ha_quality_scale: bronze
+---
+
+The **iNELS** {% term integration %} allows you to control and monitor the devices connected to your control units ([BUS](https://www.elkoep.com/wired) or [eLAN](https://www.elkoep.com/wireless)).
+
+There is currently support for the following device types within Home Assistant:
+
+- Switch
+
+## Prerequisites
+
+- MQTT broker.
+- eLAN devices flashed with version `mqtt_1.0` or later.
+- BUS devices flashed with version `mqtt_1.0` or later.
+- See the [Wiki page](https://wiki.inels.com/) for instructions on how to configure the control units.
+
+{% include integrations/config_flow.md %}
+
+## Removing the integration
+
+This integration follows standard integration removal.
+
+{% include integrations/remove_device_service.md %}
+
+### To remove a setting from eLANRF
+
+1. Launch the **IDM** application.
+2. Select **Configuration of the central unit** from the menu.
+3. Select **MQTT settings** then choose **Not Connect** in the mode options and click **Save to CU**.
+
+### To remove a setting from CU3
+
+1. Open the eLANRF **web** interface.
+2. Go to **Settings** and disable MQTT under **MQTT connection**.
diff --git a/source/_integrations/intent_script.markdown b/source/_integrations/intent_script.markdown
index ef332fb75ad..12e7b1f47bb 100644
--- a/source/_integrations/intent_script.markdown
+++ b/source/_integrations/intent_script.markdown
@@ -124,3 +124,13 @@ intent_script:
```
{% endraw %}
+
+## Actions
+
+Available actions: `reload`.
+
+### Action `intent_script.reload`
+
+Reloads the intent script from the YAML-configuration, as a quicker alternative to restarting Home Assistant.
+
+This action takes no data attributes.
diff --git a/source/_integrations/iometer.markdown b/source/_integrations/iometer.markdown
index 48c0a772d47..823848c804c 100644
--- a/source/_integrations/iometer.markdown
+++ b/source/_integrations/iometer.markdown
@@ -6,7 +6,7 @@ ha_category:
- Energy
- Sensor
ha_codeowners:
- - '@MaestroOnICe'
+ - '@jukrebs'
ha_quality_scale: bronze
ha_domain: iometer
ha_integration_type: device
diff --git a/source/_integrations/irm_kmi.markdown b/source/_integrations/irm_kmi.markdown
new file mode 100644
index 00000000000..715250c47d6
--- /dev/null
+++ b/source/_integrations/irm_kmi.markdown
@@ -0,0 +1,61 @@
+---
+title: IRM KMI Weather Belgium
+description: Instructions on how to integrate IRM KMI weather within Home Assistant.
+ha_release: '2025.10'
+ha_iot_class: Cloud Polling
+ha_config_flow: true
+ha_codeowners:
+ - '@jdejaegh'
+ha_domain: irm_kmi
+ha_integration_type: service
+related:
+ - url: https://community.home-assistant.io/t/belgium-weather-provider-irm-kmi-meteo-be/660421
+ title: Community forum thread
+ha_category: []
+ha_quality_scale: bronze
+ha_platforms:
+ - weather
+---
+
+The **Royal Meteorological Institute of Belgium** {% term integration %} integrates the weather data from [IRM KMI (meteo.be)](https://www.meteo.be) with Home Assistant.
+
+Although the provider is Belgian, the data is available for Belgium 🇧🇪, Luxembourg 🇱🇺, and The Netherlands 🇳🇱.
+
+The data provided by this integration is retrieved from their [mobile application](https://www.meteo.be/en/info/faq/products-services/the-rmi-weather-app).
+
+
+{% include integrations/config_flow.md %}
+
+{% configuration_basic %}
+Location:
+ description: "The location for which you want to get weather data."
+{% endconfiguration_basic %}
+
+{% include integrations/option_flow.md %}
+
+{% configuration_basic %}
+Language:
+ description: "Override the Home Assistant language for the textual weather forecast. Useful if your Home Assistant language is not supported by the Royal Meteorological Institute of Belgium."
+{% endconfiguration_basic %}
+
+## Supported features
+
+The integration provides a weather entity along with [weather forecast services](https://www.home-assistant.io/integrations/weather/#action-weatherget_forecasts).
+
+## Limitations
+
+1. The weather provider sometimes uses two weather conditions for the same day (see below). When this is the case, only the first weather condition is taken into account in this integration.
+
+2. The trends for 14 days are not shown.
+
+3. The provider only has data for Belgium, Luxembourg and The Netherlands.
+
+## Data updates
+
+The integration {% term polling polls %} weather data every 7 minutes by default.
+
+## Removing the integration
+
+This integration follows standard integration removal.
+
+{% include integrations/remove_device_service.md %}
diff --git a/source/_integrations/iron_os.markdown b/source/_integrations/iron_os.markdown
index 48187360a84..d81646e61aa 100644
--- a/source/_integrations/iron_os.markdown
+++ b/source/_integrations/iron_os.markdown
@@ -15,7 +15,7 @@ ha_config_flow: true
ha_codeowners:
- '@tr4nt0r'
ha_domain: iron_os
-ha_integration_type: integration
+ha_integration_type: device
ha_platforms:
- binary_sensor
- button
diff --git a/source/_integrations/knx.markdown b/source/_integrations/knx.markdown
index d32cd601775..ed987e802bb 100644
--- a/source/_integrations/knx.markdown
+++ b/source/_integrations/knx.markdown
@@ -602,7 +602,7 @@ knx:
# time and date exposures
- type: time
address: "0/0/1"
- # entitiy exposures
+ # entity exposures
- type: temperature
entity_id: sensor.owm_temperature
address: "0/0/2"
@@ -690,7 +690,6 @@ Binary sensors are read-only entities. To write to the KNX bus, configure a [KNX
Binary sensor entities can be created from the frontend in the KNX panel or via YAML.
-
{% details "Configuration of KNX binary sensor entities via YAML" %}
```yaml
@@ -855,6 +854,10 @@ entity_category:
The KNX climate platform is used as an interface to KNX thermostats and room controllers.
+Climate entities can be created from the frontend in the KNX panel or via YAML.
+
+{% details "Configuration of KNX climate entities via YAML" %}
+
To use your KNX thermostats in your installation, add the following lines to your top level [KNX Integration](/integrations/knx) configuration key in {% term "`configuration.yaml`" %}:
```yaml
@@ -1138,6 +1141,8 @@ entity_category:
default: None
{% endconfiguration %}
+{% enddetails %}
+
## Cover
The KNX cover platform is used as an interface to KNX covers.
@@ -1150,7 +1155,6 @@ Home Assistant will, by default, `close` a cover by moving it in the `DOWN` dire
Cover entities can be created from the frontend in the KNX panel or via YAML.
-
{% details "Configuration of KNX cover entities via YAML" %}
To use your KNX covers in your installation, add the following lines to your top level [KNX Integration](/integrations/knx) configuration key in your {% term "`configuration.yaml`" %}:
@@ -1443,7 +1447,6 @@ The KNX light integration is used as an interface to control KNX actuators for l
Light entities can be created from the frontend in the KNX panel or via YAML.
-
{% details "Configuration of KNX light entities via YAML" %}
{% configuration %}
@@ -2196,7 +2199,6 @@ Switch entities can be created from the frontend in the KNX panel or via YAML.
Switch entities without a `state_address` will restore their last known state after Home Assistant was restarted.
Switches that have a `state_address` configured request their current state from the KNX bus.
-
{% details "Configuration of KNX switch entities via YAML" %}
```yaml
diff --git a/source/_integrations/konnected.markdown b/source/_integrations/konnected.markdown
index f134fa62e1e..b3888e83a76 100644
--- a/source/_integrations/konnected.markdown
+++ b/source/_integrations/konnected.markdown
@@ -1,5 +1,5 @@
---
-title: Konnected.io
+title: Konnected.io (Legacy)
description: Connect wired alarm sensors and siren using the NodeMCU based Konnected Alarm Panel
ha_category:
- Alarm
@@ -148,7 +148,7 @@ devices:
type: list
keys:
id:
- description: The MAC address (Konnected Alarm Panel) or Device ID (Konnected Alarm Panel Pro) of the Konnected device. MAC addresses must be formatted with colons/punctuation removed, for example, `68c63a8bcd53`. You can usually find the mac address in your router's client list. Or, check the `home-assistant.log` for log messages from automatically discovered devices. Device ID can be found on the device Status Page which is accessible via the Konnected Mobile App.
+ description: The MAC address (Konnected Alarm Panel) or Device ID (Konnected Alarm Panel Pro) of the Konnected device. MAC addresses must be formatted with colons/punctuation removed, for example, `68c63a8bcd53`. You can usually find the mac address in your router's client list. Or, check [the Home Assistant logs](/integrations/logger/#viewing-logs) for log messages from automatically discovered devices. Device ID can be found on the device Status Page which is accessible via the Konnected Mobile App.
required: true
type: string
binary_sensors:
diff --git a/source/_integrations/konnected_esphome.markdown b/source/_integrations/konnected_esphome.markdown
new file mode 100644
index 00000000000..bb585ccc5fb
--- /dev/null
+++ b/source/_integrations/konnected_esphome.markdown
@@ -0,0 +1,61 @@
+---
+title: Konnected
+description: Connect and control your Konnected devices using the ESPHome integration
+ha_release: 0.85
+ha_category:
+ - Alarm
+ - DIY
+ - Update
+ha_domain: konnected_esphome
+ha_integration_type: virtual
+ha_supporting_domain: esphome
+ha_supporting_integration: ESPHome
+works_with:
+ - local
+ha_codeowners:
+ - '@jesserockz'
+ - '@kbx81'
+ - '@bdraco'
+ha_config_flow: true
+ha_platforms:
+ - alarm_control_panel
+ - assist_satellite
+ - binary_sensor
+ - button
+ - camera
+ - climate
+ - cover
+ - date
+ - datetime
+ - diagnostics
+ - event
+ - fan
+ - light
+ - lock
+ - media_player
+ - number
+ - select
+ - sensor
+ - switch
+ - text
+ - time
+ - update
+ - valve
+ha_iot_class: Local Push
+ha_dhcp: true
+ha_zeroconf: true
+---
+
+[Konnected](https://konnected.io/) is a member of the Made for ESPHome program.
+
+Konnected devices work locally and integrate seamlessly with the [ESPHome](/integrations/esphome/) {% term integration %} in Home Assistant. As all connectivity is done locally, status updates and device control from Home Assistant happen instantly.
+
+{% include integrations/supported_brand.md %}
+
+## Supported devices
+
+The following devices are known to be supported by the integration. They are certified under the [Works with Home Assistant](https://partner.home-assistant.io/) program.
+
+- [Konnected Smart Garage Door Opener blaQ](https://konnected.io/products/smart-garage-door-opener-blaq-myq-alternative)
+- [Konnected Smart Garage Door Opener White (v2)](https://konnected.io/products/smart-garage-door-opener)
+- [Konnected Alarm Panel Pro](https://konnected.io/collections/smart-alarm-panels)
diff --git a/source/_integrations/kostal_plenticore.markdown b/source/_integrations/kostal_plenticore.markdown
index 77d03ec191f..3f7195e612f 100644
--- a/source/_integrations/kostal_plenticore.markdown
+++ b/source/_integrations/kostal_plenticore.markdown
@@ -159,22 +159,24 @@ The following sensors can be used in the [energy dashboard](/docs/energy/):
Some of the energy is measured on the DC side and some on the AC side, so the values may differ slightly due to losses between DC and AC.
{% endnote %}
-### Settings Sensors
+### Configuration entities
-The following sensors are available in the library:
+The following entities are available for device configuration:
-| Name | Unit | RW | Description |
-|-------------------------|------|----|:--------------|
-| Battery Dynamic SoC | | RW | Dynamic SoC. |
-| Battery Smart Control | | RW | Enable smart battery control |
-| Battery Strategy | | RW | Battery strategy. |
-| Shadow Management | | RW | PV string shadow management. |
+| Name | Unit | Domain | Description |
+|------------------------------|------|--------|:--------------|
+| Battery min home consumption | W | Number | Min. home consumption power for battery |
+| Battery min Soc | % | Number | Min. SoC of battery |
+| Battery dynamic SoC | | Select | Dynamic SoC |
+| Battery smart control | | Switch | Enable smart battery control |
+| Battery strategy | | Switch | Battery strategy |
+| Shadow management | | Switch | PV string shadow management |
If you use installer access to connect, you also have access to the following sensors:
-| Name | Unit | RW | Description |
-|-------------------------|------|----|:--------------|
-| Battery Manual Charge | | RW | Force the battery to charge. |
+| Name | Unit | Domain | Description |
+|-------------------------|------|--------|:--------------|
+| Battery manual charge | | Switch | Force the battery to charge from AC |
{% note %}
Setting values change less often, therefore these sensors are only polled every 5 minutes.
@@ -186,27 +188,31 @@ This sensor is on by default, which maps to the "Automatically" mode in the Kost
Turning this sensor off maps to the "Automatically economical" mode. Consequently, the inverter controls the battery charging automatically but switches the battery off when there is insufficient PV energy to charge the battery for longer periods. This mode is recommended for regions with a lot of snowfall.
-#### Battery Smart Control
+#### Battery smart control
-The Battery Smart Control sensor appears as a select field labeled "Battery Charging / Usage Mode" with three options:
+The battery smart control sensor appears as a select field labeled "battery charging / usage mode" with three options:
- **None**: the battery is loaded immediately when there is PV energy spare.
- **Battery:SmartBatteryControl:Enable**: the battery loading optimizes grid feed-in and battery loading. This setting is recommended when the grid feed-in is limited to, for example, 70% of the Plenticore Plus peak power.
- **Battery:TimeControl:Enable**: battery charging/discharging can be configured flexibly at different times (tariff periods). Detailed settings must be done on the web frontend of the Kostal Plenticore Plus inverter. This option activates the time-controlled battery usage mode.
-#### Battery Manual Charge
+#### Battery manual charge
-The Battery Manual Charge sensor allows you to force charge the battery to 100%, regardless of PV generation or home usage.
+The battery manual charge sensor allows you to force charge the battery to 100%, regardless of PV generation or home usage.
This setting is available when using installer access and should therefore only be used with the same caution as using installer access.
More on [Installer Access](#installer-access)
+#### Shadow management
+
+The shadow management switches are created automatically based on which DC strings are supported.
+
## Number
The following Number entities are available. The values could also be change from Home Assistant.
| Name | Unit | RW | Description |
|-------------------------|------|----|:--------------|
-| Battery min Home Consumption | W | RW | Min. home consumption power for battery. |
+| Battery min home Ccnsumption | W | RW | Min. home consumption power for battery. |
| Battery min SoC | % | RW | Min. SoC of battery. |
## Diagnostics
@@ -215,4 +221,4 @@ The following diagnostic sensors are available.
| Name | Data Type | Description |
|-------------------------|-----------|:-------------------------------------------|
-| Active Errors | Integer | Count of currently active errors. |
+| Active errors | Integer | Count of currently active errors. |
diff --git a/source/_integrations/kraken.markdown b/source/_integrations/kraken.markdown
index 557293f4a8b..dc4589e579f 100644
--- a/source/_integrations/kraken.markdown
+++ b/source/_integrations/kraken.markdown
@@ -16,7 +16,7 @@ ha_integration_type: integration
---
The Kraken integration allows you to monitor exchange rates on [kraken.com](https://www.kraken.com/).
-For a list of tradable asset pairs check [this kraken support article](https://support.kraken.com/hc/articles/201893658-Currency-pairs-available-for-trading-on-Kraken).
+For a list of tradable asset pairs check [this kraken support article](https://support.kraken.com/articles/kraken-markets).
{% include integrations/config_flow.md %}
diff --git a/source/_integrations/lacrosse.markdown b/source/_integrations/lacrosse.markdown
index 035e3e8abf8..ed41835874b 100644
--- a/source/_integrations/lacrosse.markdown
+++ b/source/_integrations/lacrosse.markdown
@@ -37,7 +37,7 @@ Or, when using Docker containers:
docker exec -it pylacrosse -d /dev/ttyUSB0 scan
```
-If you are using the Home Assistant OS or Supervised installation method, these
+If you are using the Home Assistant OS or Supervised installation types, these
methods are not available for you. The use of an additional computer to figure
out the ID is advised.
diff --git a/source/_integrations/lcn.markdown b/source/_integrations/lcn.markdown
index 3850726630d..507b882d3e9 100644
--- a/source/_integrations/lcn.markdown
+++ b/source/_integrations/lcn.markdown
@@ -80,7 +80,7 @@ They are ideal to be used in automation scripts or for the `template` platforms.
{% endnote %}
-## Setting up devices and entites
+## Setting up devices and entities
The `lcn` hardware modules and groups are represented by Home Assistant *devices*. The periphery of each `lcn` module is represented by Home Assistant *entities*. Peripheries are, for example, the output ports, relays, and variables of a module. Refer to the description of each [platform](#platforms) to learn about which entity should be used for which periphery.
diff --git a/source/_integrations/letpot.markdown b/source/_integrations/letpot.markdown
index ae130d278fd..57982860dd6 100644
--- a/source/_integrations/letpot.markdown
+++ b/source/_integrations/letpot.markdown
@@ -3,6 +3,7 @@ title: LetPot
description: Instructions on how to integrate LetPot hydroponic gardens into Home Assistant.
ha_category:
- Binary sensor
+ - Number
- Select
- Sensor
- Switch
@@ -16,11 +17,12 @@ ha_domain: letpot
ha_integration_type: hub
ha_platforms:
- binary_sensor
+ - number
- select
- sensor
- switch
- time
-ha_quality_scale: bronze
+ha_quality_scale: silver
---
The **LetPot** {% term integration %} allows you to integrate your [LetPot](https://letpot.com/) hydroponic gardens/systems into Home Assistant.
@@ -41,8 +43,6 @@ To use this integration, you must first create a LetPot account and connect your
{% include integrations/config_flow.md %}
-### Configuration parameters
-
{% configuration_basic %}
Email:
description: "The email address of your LetPot account."
@@ -56,11 +56,9 @@ Password:
## Supported functionality
-### Entities
+The **LetPot** integration provides the following entities.
-The LetPot integration provides the following entities.
-
-#### Binary sensors
+### Binary sensors
- **Pump**: Indicates if the water pump is running (on) or idle (off). Updates may be delayed by the device until another entity updates.
- Available for LetPot Air devices, and other device models which report this value.
@@ -81,7 +79,15 @@ Additionally, binary sensors for possible issues are available:
Binary sensors for issues are disabled by default. If you want to use them, you need to enable them first. See the [enabling or disabling entities](/common-tasks/general/#enabling-or-disabling-entities) documentation for information on how to do this.
{% endimportant %}
-#### Selects
+### Numbers
+
+- **Plants age**: The number of days the plants in the hydroponic garden have been growing/since planting. This value is automatically updated by the device while the **Power** switch is on. Edit the value to restart the counter or use your own logic.
+
+For LetPot Max devices, the following number is also available:
+
+- **Light brightness**: Set the built-in light brightness level. Accepted values are 1 (lowest) to 8 (highest).
+
+### Selects
- **Light mode**: Set the built-in light mode to fruits/flowers (red and white LEDs enabled) or veggies/herbs (red, white and blue LEDs enabled).
@@ -92,14 +98,14 @@ Depending on device support, more selects are available:
- **Temperature unit on display**: Set the temperature unit for the temperature shown on the device's display.
- Available for LetPot Max devices, excluding devices with a serial number starting with `LPH63`.
-#### Sensors
+### Sensors
For LetPot Max devices, the following sensors are available:
- **Temperature**: Ambient temperature measured by the device.
- **Water level**: Percentage of the water tank filled with water. The official app will display 0-30% as "Low", 30-90% as "Medium", and 90% or more as "High".
-#### Switches
+### Switches
- **Power**: Main switch to turn on/off the device. Device features (like the built-in light and pump) will only operate when the power is on.
- **Pump cycling**: Turn on/off cycling of the water pump. When on, the pump will run intermittently (controlled by the device), which can be tracked using the **Pump** binary sensor.
@@ -112,7 +118,7 @@ For LetPot Max devices, the following switch is also available:
- **Auto mode**: Turn on/off auto mode, which automatically adds water and nutrients to the garden when needed.
-#### Times
+### Times
- **Light on**: Time when the built-in light turns on.
- **Light off**: Time when the built-in light turns off.
@@ -125,7 +131,7 @@ When **Light on** and **Light off** are set to the same time, the built-in light
## Data updates
-The integration receives updates when the device state changes, enabling immediate updates of the data in Home Assistant.
+The integration receives push updates when the device state changes, enabling immediate updates of the data in Home Assistant.
## Removing the integration
diff --git a/source/_integrations/level.markdown b/source/_integrations/level.markdown
new file mode 100644
index 00000000000..981c1d69c20
--- /dev/null
+++ b/source/_integrations/level.markdown
@@ -0,0 +1,23 @@
+---
+title: Level
+description: Connect and control your Level Matter devices using the Matter integration
+ha_release: '2025.10'
+ha_iot_class: Local Push
+ha_category:
+ - Lock
+ha_domain: level
+ha_integration_type: brand
+ha_platforms:
+ - lock
+ha_iot_standard: matter
+ha_brand: true
+---
+
+[Level](https://level.co/) is committed to making sure their products are up-to-date and ready to use in Home Assistant.
+
+Level 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.
+
+{% my add_matter_device badge domain=page.ha_domain %}
+
+[Learn more about Matter in Home Assistant.](/integrations/matter/)
+
diff --git a/source/_integrations/lg_thinq.markdown b/source/_integrations/lg_thinq.markdown
index fb76e8a2eed..42bfa250048 100644
--- a/source/_integrations/lg_thinq.markdown
+++ b/source/_integrations/lg_thinq.markdown
@@ -45,6 +45,7 @@ The **LG ThinQ** integration allows you to connect LG ThinQ devices to Home Assi
- **All device control rights**
- **All device event subscription rights**
- **All device push notification permissions**
+ - **Permission to inquiry device energy consumption**
4. Select **CREATE TOKEN**.
5. Once all the steps are completed, you will see that a **PAT** has been generated.
@@ -92,6 +93,19 @@ Support LG Appliances as follows:
- Wine Cellar
- Ventilator
+## Data updates
+
+- Status: Events are sent when the device's status is changed.
+- Status(legacy old model): Events are sent every 5 minutes because device status changes cannot be aggregated in real time.
+- Energy consumption: Aggregated usage data up to yesterday is updated every morning.
+
+## Energy consumption
+
+Support historical energy consumption sensors for individual devices
+- Energy last month (Wh): Energy usage last month.
+- Energy this month (Wh): Energy usage this month.
+- Energy yesterday (Wh): Energy usage yesterday.
+
## Platforms
LG ThinQ represents devices as a set of properties. And these are mapped to entities in Home Assistant.
diff --git a/source/_integrations/libre_hardware_monitor.markdown b/source/_integrations/libre_hardware_monitor.markdown
index db972d532da..45b94c80eca 100644
--- a/source/_integrations/libre_hardware_monitor.markdown
+++ b/source/_integrations/libre_hardware_monitor.markdown
@@ -3,16 +3,16 @@ title: Libre Hardware Monitor
description: Instructions on how to integrate Libre Hardware Monitor within Home Assistant.
ha_category:
- System monitor
-ha_release: "2025.10"
+ha_release: '2025.10'
ha_config_flow: true
ha_codeowners:
- '@Sab44'
ha_iot_class: Local Polling
-ha_domain: librehardwaremonitor
+ha_domain: libre_hardware_monitor
ha_platforms:
- sensor
ha_integration_type: integration
-ha_quality_scale: bronze
+ha_quality_scale: silver
---
The **Libre Hardware Monitor** {% term integration %} uses your [Libre Hardware Monitor](https://github.com/LibreHardwareMonitor/LibreHardwareMonitor) installation as a source for sensors to display that system information in Home Assistant.
diff --git a/source/_integrations/lightwave.markdown b/source/_integrations/lightwave.markdown
index bd12fd656a7..6b4aed5c041 100644
--- a/source/_integrations/lightwave.markdown
+++ b/source/_integrations/lightwave.markdown
@@ -20,9 +20,11 @@ related:
ha_quality_scale: legacy
---
-The `lightwave` {% term integration %} links Home Assistant with your Lightwave WiFi link for controlling Lightwave lights, switches and TRVs.
+The `lightwave` {% term integration %} links Home Assistant with your Lightwave Connect Series WiFi link for controlling Lightwave lights, switches and TRVs.
+
+This {% term integration %} is for Connect Series WiFi links and does not support Smart Series devices, for more information see [Smart and Connect Series](https://support.lightwaverf.com/knowledge/about-smart-and-connect-series).
+
-This integration uses the official API published by Lightwave on their website [https://api.lightwaverf.com/](https://api.lightwaverf.com/).
To add your Lightwave devices into your Home Assistant installation, add the following to your {% term "`configuration.yaml`" %} file.
{% include integrations/restart_ha_after_config_inclusion.md %}
@@ -114,7 +116,7 @@ The first use of a light or switch will try to register with your Lightwave WiFi
Lightwave Thermostatic Radiator Values (TRV) are supported.
Earlier integrations required a proxy - See [LWProxy](https://github.com/ColinRobbins/Homeassistant-Lightwave-TRV).
-This capabilty is still supported, but no longer required.
+This capability is still supported, but no longer required.
```yaml
# Example TRV configuration.yaml for TRVs
diff --git a/source/_integrations/linkedgo.markdown b/source/_integrations/linkedgo.markdown
index ecbda40c290..6f7f4c1aa95 100644
--- a/source/_integrations/linkedgo.markdown
+++ b/source/_integrations/linkedgo.markdown
@@ -21,7 +21,6 @@ ha_integration_type: virtual
ha_supporting_domain: shelly
ha_supporting_integration: Shelly
ha_codeowners:
- - '@balloob'
- '@bieniu'
- '@thecode'
- '@chemelli74'
diff --git a/source/_integrations/litterrobot.markdown b/source/_integrations/litterrobot.markdown
index d707b8247e2..555225b3d92 100644
--- a/source/_integrations/litterrobot.markdown
+++ b/source/_integrations/litterrobot.markdown
@@ -37,6 +37,13 @@ Before using this integration, you’ll need a Whisker account and a Wi-Fi-enabl
{% include integrations/config_flow.md %}
+{% configuration_basic %}
+Username:
+ description: "The email address of your Whisker account."
+Password:
+ description: "The password of your Whisker account."
+{% endconfiguration_basic %}
+
## Entities
### Litter-Robot
@@ -44,7 +51,7 @@ Before using this integration, you’ll need a Whisker account and a Wi-Fi-enabl
| Entity | Domain | Description |
| ----------------------------- | --------------- | ----------------------------------------------------------------------------------------------------------- |
| Litter box | `vacuum` | Main entity that represents a Litter-Robot unit. |
-| Night light mode | `switch` | When turned on, automatically turns on the night light in darker settings. |
+| Night light mode | `switch` | When turned on, automatically turns on the night light in darker settings, only for Litter-Robot 3. |
| Panel lockout | `switch` | When turned on, disables the buttons on the unit to prevent changes to settings. |
| Last seen | `sensor` | Displays the time the unit was last seen / reported an update. |
| Litter level | `sensor` | Displays the litter level, only for Litter-Robot 4. |
diff --git a/source/_integrations/livisi.markdown b/source/_integrations/livisi.markdown
index 6ec35438dd4..77bb642baf6 100644
--- a/source/_integrations/livisi.markdown
+++ b/source/_integrations/livisi.markdown
@@ -30,7 +30,7 @@ The following devices are currently supported by this integration:
- Wall Switches (ISS, ISS2)
- Window-Door Sensor (WDS)
-## Prequisites
+## Prerequisites
This integration communicates with the local version of LIVISI SmartHome only.
diff --git a/source/_integrations/logbook.markdown b/source/_integrations/logbook.markdown
index 5bc5ec44057..d8254d43328 100644
--- a/source/_integrations/logbook.markdown
+++ b/source/_integrations/logbook.markdown
@@ -1,6 +1,6 @@
---
-title: Logbook
-description: Instructions on how to enable the logbook integration for Home Assistant.
+title: Activity
+description: Instructions on how to enable the activity integration for Home Assistant.
ha_category:
- History
ha_release: 0.7
@@ -14,14 +14,14 @@ related:
title: Configuration file
---
-
+
-The logbook {% term integration %} provides a different perspective on the history of your
+The activity {% term integration %} provides a different perspective on the history of your
house by showing all the changes that happened to your house in reverse
chronological order. It depends on
the [`recorder`](/integrations/recorder/) integration for storing the data. This means that if the
[`recorder`](/integrations/recorder/) integration is set up to use e.g., MySQL or
-PostgreSQL as data store, the `logbook` integration does not use the default
+PostgreSQL as data store, the `activity` integration does not use the default
SQLite database to store data.
This integration is by default enabled, unless you've disabled or removed the [`default_config:`](/integrations/default_config/) line from your {% term "`configuration.yaml`" %} file. If that is the case, the following example shows you how to enable this integration manually, by adding it to your {% term "`configuration.yaml`" %} file:
@@ -33,44 +33,44 @@ logbook:
{% configuration %}
exclude:
- description: "Configure which integrations should **not** create logbook entries. ([Configure Filter](#configure-filter))"
+ description: "Configure which integrations should **not** should not track activity. ([Configure Filter](#configure-filter))"
required: false
type: map
keys:
entities:
- description: The list of entity ids to be excluded from creating logbook entries.
+ description: The list of entity ids to be excluded from tracking activity.
required: false
type: list
entity_globs:
- description: Exclude all entities matching a listed pattern from creating logbook entries (e.g., `sensor.weather_*`).
+ description: Exclude all entities matching a listed pattern from tracking activity (e.g., `sensor.weather_*`).
required: false
type: list
domains:
- description: The list of domains to be excluded from creating logbook entries.
+ description: The list of domains to be excluded from tracking activity.
required: false
type: list
include:
- description: Configure which integrations should create logbook entries. ([Configure Filter](#configure-filter))
+ description: Configure which integrations should tracking activity. ([Configure Filter](#configure-filter))
required: false
type: map
keys:
entities:
- description: The list of entity ids to be included in creating logbook entries.
+ description: The list of entity ids to be included when tracking activity.
required: false
type: list
entity_globs:
- description: Include all entities matching a listed pattern when creating logbook entries (e.g., `sensor.weather_*`).
+ description: Include all entities matching a listed pattern when tracking activity (e.g., `sensor.weather_*`).
required: false
type: list
domains:
- description: The list of domains to be included in creating logbook entries.
+ description: The list of domains to be included when tracking activity.
required: false
type: list
{% endconfiguration %}
## Configure filter
-By default, the logbook will use the same filter as the recorder. To limit which entities are being exposed to `Logbook`, you can use the `include` and `exclude` parameters.
+By default, the activity will use the same filter as the recorder. To limit which entities are being exposed to `Logbook`, you can use the `include` and `exclude` parameters.
```yaml
# Example filter to include specified domains and exclude specified entities
@@ -90,11 +90,11 @@ logbook:
### Common filtering examples
-If you want to exclude messages of some entities or domains from the logbook
+If you want to exclude messages of some entities or domains from activity tracking,
just add the `exclude` parameter like:
```yaml
-# Example of excluding domains and entities from the logbook
+# Example of excluding domains and entities from activity tracking (formerly called logbook)
logbook:
exclude:
entities:
@@ -106,11 +106,11 @@ logbook:
- sun
```
-In case you just want to see messages from some specific entities or domains use
+In case you just want to see messages from some specific entities or domains, use
the `include` configuration:
```yaml
-# Example to show how to include only the listed domains and entities in the logbook
+# Example to show how to only track the activity of the listed domains and entities
logbook:
include:
domains:
@@ -120,11 +120,11 @@ logbook:
```
You can also use the `include` list and filter out some entities or domains with
-an `exclude` list. Usually this makes sense if you define domains on the include
+an `exclude` list. Usually, this makes sense if you define domains on the include
side and filter out some specific entities.
```yaml
-# Example of combining include and exclude configurations
+# Example of combining include and exclude configurations for activity tracking
logbook:
include:
domains:
@@ -142,13 +142,13 @@ logbook:
### Exclude events
If you have `sensor.date` to show the current date in the UI,
-but you do not want a logbook entry for that sensor every day it can be excluded.
-To exclude these entities just add them to the `exclude` > `entities` list in
-the configuration of the logbook.
+but you do not want activity tracking for that sensor every day, it can be excluded.
+To exclude these entities, just add them to the `exclude` > `entities` list in
+the configuration of the activity tracking.
-To exclude all events from a whole domain add it to the `exclude` > `domain`
-list. For instance you use the `sun` domain only to trigger automations on the
-`azimuth` attribute, then you possible are not interested in the logbook entries
+To exclude all events from a whole domain, add it to the `exclude` > `domain`
+list. For instance, if you use the `sun` domain only to trigger automations on the
+`azimuth` attribute, then you are possibly not interested in activity tracking
for sun rise and sun set.
Excluded entities still take up space in the database. It may be advisable to
@@ -156,14 +156,14 @@ exclude them in `recorder` instead.
### Custom entries
-It is possible to add custom entries to the logbook by using the script
+It is possible to add custom entries to activity tracking by using the script
integration to fire an event.
```yaml
# Example configuration.yaml entry
script:
add_logbook_entry:
- alias: "Add Logbook"
+ alias: "Add activity"
sequence:
- action: logbook.log
data:
@@ -176,9 +176,9 @@ script:
{% important %}
-When calling the `logbook.log` action without a `domain` or `entity_id`, entries will be added with the `logbook` domain. Ensure that the `logbook` domain is not filtered away if you want these entries to appear in your logbook.
+When calling the `logbook.log` action without a `domain` or `entity_id`, entries will be added with the `logbook` domain. Ensure that the `logbook` domain is not filtered away if you want these entries to appear in your **Activity** panel.
{% endimportant %}
{% note %}
-Sensor entities that have been assigned units (i.e., have a `unit_of_measurement` attribute) are assumed to change frequently and those sensors are automatically excluded from the logbook.
+Sensor entities that have been assigned units (for example, have a `unit_of_measurement` attribute) are assumed to change frequently and those sensors are automatically excluded from activity tracking.
{% endnote %}
diff --git a/source/_integrations/logger.markdown b/source/_integrations/logger.markdown
index 175d05596f4..3263aeb135a 100644
--- a/source/_integrations/logger.markdown
+++ b/source/_integrations/logger.markdown
@@ -171,12 +171,28 @@ data:
## Viewing logs
-The log information are stored in the
+The log information can be viewed and downloaded from {% my logs title="**Settings** > **System** > **Logs**" %}
+
+
+### Supervised installations
+
+On {% term "Home Assistant Supervisor" %} based installations, such as the
+{% term "Home Assistant Operating System" %} the logs can also be viewed
+by logging in through the [SSH add-on](/common-tasks/os/#installing-and-using-the-ssh-add-on) and running the following command:
+
+```bash
+ha core logs
+```
+
+### Non-Supervised installations
+
+For installations without the {% term "Home Assistant Supervisor" %}
+the log information is stored in the
[configuration directory](/docs/configuration/) as `home-assistant.log`
and you can read it with the command-line tool `cat` or follow it dynamically
with `tail -f`.
-You can use the example below, when logged in through the [SSH add-on](/addons/ssh/):
+You can use the example below, when logged in through the [SSH add-on](/common-tasks/os/#installing-and-using-the-ssh-add-on):
```bash
tail -f /config/home-assistant.log
diff --git a/source/_integrations/london_underground.markdown b/source/_integrations/london_underground.markdown
index 78a5bea5b37..0d61b24b035 100644
--- a/source/_integrations/london_underground.markdown
+++ b/source/_integrations/london_underground.markdown
@@ -8,51 +8,114 @@ ha_release: 0.49
ha_domain: london_underground
ha_platforms:
- sensor
-ha_integration_type: integration
+ha_integration_type: service
ha_codeowners:
- '@jpbede'
related:
- docs: /docs/configuration/
title: Configuration file
ha_quality_scale: legacy
+ha_config_flow: true
---
-The `london_underground` {% term integration %} will display the status of London underground lines, as well as the Overground and DLR.
+The `london_underground` {% term integration %} will display the status of London underground lines, as well as the overground lines and the DLR.
-To enable this {% term integration %}, add it to your {% term "`configuration.yaml`" %} file.
-{% include integrations/restart_ha_after_config_inclusion.md %}
+There 20 possible values that the line can report:
+- `Special Service`
+- `Closed`
+- `Suspended`
+- `Part Suspended`
+- `Planned Closure`
+- `Part Closure`
+- `Severe Delays`
+- `Reduced Service`
+- `Bus Service`
+- `Minor Delays`
+- `Good Service`
+- `Part Closed`
+- `Exit Only`
+- `No Step Free Access`
+- `Change of frequency`
+- `Diverted`
+- `Not Running`
+- `Issues Reported`
+- `No Issues`
+- `Information`
+- `No Service`
+
+Each line also has an associated `Description` attribute which describes any issues in free text - this can be helpful for notifying users.
+
+{% include integrations/config_flow.md %}
+
+{% configuration_basic %}
+line:
+ description: "A list of the lines to be monitored"
+{% endconfiguration_basic %}
+
+### Automation example:
+
+This automation triggers when the status of the Victoria line changes to something significant, and just before commutes are likely to begin. To avoid spam, it only runs if the commuter is at home in the morning or away from home in the evening.
+
+{% raw %}
```yaml
-# Example configuration.yaml entry
-sensor:
- - platform: london_underground
- line:
- - Bakerloo
- - Central
- - Circle
- - District
- - DLR
- - Elizabeth line
- - Hammersmith & City
- - Jubilee
- - Metropolitan
- - Northern
- - Piccadilly
- - Victoria
- - Waterloo & City
- - Liberty
- - Lioness
- - Mildmay
- - Suffragette
- - Weaver
- - Windrush
+alias: Notify Paulus if there are issues on the Victoria line
+mode: single
+triggers:
+ - entity_id:
+ - sensor.victoria
+ trigger: state
+ - at: "08:00:00"
+ trigger: time
+ - at: "16:30:00"
+ trigger: time
+conditions:
+ - condition: not
+ alias: If Victoria is NOT reporting minor delays or good service
+ conditions:
+ - condition: or
+ conditions:
+ - condition: state
+ entity_id: sensor.victoria
+ state: Good Service
+ - condition: state
+ entity_id: sensor.victoria
+ state: Minor Delays
+ - condition: state
+ entity_id: sensor.victoria
+ state: unavailable
+ - condition: state
+ entity_id: sensor.victoria
+ state: unknown
+ - condition: or
+ alias: If Paulus at Home in the morning OR away in the afternoon
+ conditions:
+ - condition: and
+ alias: If Paulus at home in the morning
+ conditions:
+ - condition: time
+ before: "14:00:00"
+ after: "07:00:00"
+ - condition: state
+ entity_id: person.paulus
+ state: home
+ - condition: and
+ alias: If Paulus away in the afternoon
+ conditions:
+ - condition: time
+ before: "19:00:00"
+ after: "13:00:00"
+ - condition: state
+ entity_id: person.paulus
+ state: home
+actions:
+ - data:
+ title: "{{'Victoria Line: ' + states.sensor.victoria.state}}"
+ message: "{{states.sensor.victoria.attributes.Description}}"
+ action: notify.mobile_app_pixel_7
+
```
-{% configuration %}
-line:
- description: Enter the name of at least one line.
- required: true
- type: list
-{% endconfiguration %}
+{% endraw %}
Powered by TfL Open Data [TFL](https://api.tfl.gov.uk/).
diff --git a/source/_integrations/lunatone.markdown b/source/_integrations/lunatone.markdown
new file mode 100644
index 00000000000..03b10419da1
--- /dev/null
+++ b/source/_integrations/lunatone.markdown
@@ -0,0 +1,53 @@
+---
+title: Lunatone
+description: Instructions on how to integrate Lunatone REST API devices with Home Assistant.
+ha_category:
+ - Hub
+ - Light
+ha_release: 2025.11
+ha_iot_class: Local Polling
+ha_codeowners:
+ - '@MoonDevLT'
+ha_domain: lunatone
+ha_config_flow: true
+ha_platforms:
+ - light
+ha_integration_type: hub
+ha_quality_scale: silver
+---
+
+The **Lunatone** {% term integration %} is used to integrate with the devices of [Lunatone](https://www.lunatone.com) that offer a REST API.
+
+## Supported devices
+
+Right now the following devices are supported:
+
+- [DALI-2 IoT Gateway (v1.14.1 or later)](https://www.lunatone.com/produkt/dali-2-iot-gateway/)
+- [DALI-2 IoT4 Gateway (v1.14.1 or later)](https://www.lunatone.com/produkt/dali-2-iot4-gateway/)
+- [DALI-2 Display 4'' (v1.14.1 or later)](https://www.lunatone.com/produkt/dali-2-display-4/)
+- [DALI-2 Display 7'' (v1.14.1 or later)](https://www.lunatone.com/produkt/dali-2-display-7/)
+
+There is currently support for the following device types within Home Assistant:
+
+- Lights
+
+## Prerequisites
+
+Before setting up the Lunatone integration, ensure you have:
+
+1. Your gateway device powered and connected to your network.
+2. The IP address or hostname of your device.
+
+{% include integrations/config_flow.md %}
+
+{% configuration_basic %}
+URL:
+ description: "The URL to your gateway device. For example: `http://10.0.0.131`"
+{% 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/manual.markdown b/source/_integrations/manual.markdown
index 3bf9a84598b..e8f98d91aee 100644
--- a/source/_integrations/manual.markdown
+++ b/source/_integrations/manual.markdown
@@ -101,6 +101,33 @@ armed_custom_bypass/armed_home/armed_away/armed_night/armed_vacation/disarmed/tr
type: integer
{% endconfiguration %}
+### Event: Manual alarm bad code attempt
+
+The `manual_alarm_bad_code_attempt` event is fired when an attempt to change the state of a manual alarm control panel (for example, arm or disarm) fails because an invalid code was entered.
+
+#### Event data
+
+- **entity_id** (string): The entity ID of the alarm control panel (for example, `alarm_control_panel.my_alarm`).
+- **target_state** (string): The attempted target state (for example, `disarmed`, `armed_away`, `armed_home`).
+- **user_id** (string): The user ID who initiated the service call (if available).
+
+Example automation trigger:
+
+```yaml
+automation:
+ - alias: "Notify on invalid manual alarm code attempt"
+ trigger:
+ - platform: event
+ event_type: manual_alarm_bad_code_attempt
+ action:
+ - service: notify.your_notification_service # Replace with your actual notification service
+ data:
+ message: >
+ Invalid alarm code attempt for {{ trigger.event.data.entity_id }}
+ by user ID {{ trigger.event.data.user_id }}
+ while attempting to set state {{ trigger.event.data.target_state }}.
+```
+
## State machine
The state machine of the manual alarm integration is complex but powerful. The
diff --git a/source/_integrations/mastodon.markdown b/source/_integrations/mastodon.markdown
index 2c147c59564..9a3a85c85de 100644
--- a/source/_integrations/mastodon.markdown
+++ b/source/_integrations/mastodon.markdown
@@ -62,6 +62,7 @@ Post a status to your Mastodon account
| `status` | No | The status text to post. |
| `visibility` | Yes | If not used, will default to account setting. `public`: post will be public, `unlisted`: post will be public but not appear on the public timeline, `private`: post will only be visible to followers, and `direct`: post will only be visible to mentioned users. |
| `content_warning` | Yes | Text will be shown as a warning before the text of the status. If not used, no warning will be displayed. |
+| `language` | Yes | The language of the post. If not used, the language that is set in the Mastodon account is used. |
| `media` | Yes | Attach an image or video to the post. |
| `media_description` | Yes | If an image or video is attached, will add a description for this media for people with visual impairments. |
| `media_warning` | Yes | If an image or video is attached, `True` will mark the media as sensitive. `False` is default. |
@@ -80,8 +81,9 @@ Example post action that will post a status using your account's default visibil
```yaml
- action: mastodon.post
- config_entry_id: YOUR_MASTODON_CONFIG_ENTITY_ID
- status: "A toot from Home Assistant"
+ data:
+ config_entry_id: YOUR_MASTODON_CONFIG_ENTITY_ID
+ status: "A toot from Home Assistant"
```
{% endraw %}
@@ -96,9 +98,10 @@ This will post a status to Mastodon, but visibility is marked as `private` so on
```yaml
- action: mastodon.post
- config_entry_id: YOUR_MASTODON_CONFIG_ENTITY_ID
- status: "A private toot from Home Assistant"
- visibility: private
+ data:
+ config_entry_id: YOUR_MASTODON_CONFIG_ENTITY_ID
+ status: "A private toot from Home Assistant"
+ visibility: private
```
{% endraw %}
@@ -113,9 +116,10 @@ This will post a status to Mastodon that includes an image.
```yaml
- action: mastodon.post
- config_entry_id: YOUR_MASTODON_CONFIG_ENTITY_ID
- status: "A media toot from Home Assistant"
- media: /config/www/funny_meme.png
+ data:
+ config_entry_id: YOUR_MASTODON_CONFIG_ENTITY_ID
+ status: "A media toot from Home Assistant"
+ media: /config/www/funny_meme.png
```
{% endraw %}
@@ -130,12 +134,13 @@ This will post a status to Mastodon that includes an image, with a description,
```yaml
- action: mastodon.post
- config_entry_id: YOUR_MASTODON_CONFIG_ENTITY_ID
- status: "A media toot from Home Assistant"
- visibility: unlisted
- media: /config/www/funny_meme.png
- media_description: "A funny meme"
- content_warning: "This might not be funny enough"
+ data:
+ config_entry_id: YOUR_MASTODON_CONFIG_ENTITY_ID
+ status: "A media toot from Home Assistant"
+ visibility: unlisted
+ media: /config/www/funny_meme.png
+ media_description: "A funny meme"
+ content_warning: "This might not be funny enough"
```
{% endraw %}
diff --git a/source/_integrations/matrix.markdown b/source/_integrations/matrix.markdown
index 82e14a85595..f86af7a8479 100644
--- a/source/_integrations/matrix.markdown
+++ b/source/_integrations/matrix.markdown
@@ -72,11 +72,15 @@ commands:
default: empty
keys:
word:
- description: "Specifies a word that the bot should listen for. If you specify 'my_command' here, the bot will react to any message starting with '!my_command'."
+ description: "Specifies a word that the bot should listen for. If you specify 'my_command' here, the bot will handle any message starting with '!my_command'."
required: false
type: string
expression:
- description: "Specifies a regular expression (in Python regexp syntax) that the bot should listen to. The bot will react to any message that matches the regular expression."
+ description: "Specifies a regular expression (in Python regexp syntax) that the bot should listen to. The bot will handle any message that matches the regular expression."
+ required: false
+ type: string
+ reaction:
+ description: "Specifies an emoji reaction that the bot should listen to. The bot will handle any message that is reacted to with this emoji."
required: false
type: string
name:
@@ -122,6 +126,8 @@ matrix:
- "#someothertest:matrix.org"
- expression: "My name is (?P.*)"
name: introduction
+ - reaction: 👍
+ name: thumbsup
notify:
- name: matrix_notify
@@ -129,7 +135,7 @@ notify:
default_room: "#hasstest:matrix.org"
automation:
- - alias: "React to !testword"
+ - alias: "Respond to !testword"
triggers:
- trigger: event
event_type: matrix_command
@@ -140,7 +146,7 @@ automation:
data:
message: "It looks like you wrote !testword"
- - alias: "React to an introduction"
+ - alias: "Respond to an introduction"
triggers:
- trigger: event
event_type: matrix_command
@@ -150,14 +156,41 @@ automation:
- action: notify.matrix_notify
data:
message: "Hello {{trigger.event.data.args['name']}}"
+
+ - alias: "Respond to a reaction in a thread"
+ triggers:
+ - trigger: event
+ event_type: matrix_command
+ event_data:
+ command: thumbsup
+ actions:
+ - action: notify.matrix_notify
+ data:
+ message: "I saw that {{trigger.event.data.args['reaction']}} -- glad you appreciated this!"
+ data:
+ thread_id: "{{trigger.event.data.thread_parent}}"
+
+ - alias: "React to a command"
+ triggers:
+ - trigger: event
+ event_type: matrix_command
+ event_data:
+ command: testword
+ actions:
+ - action: matrix.react
+ data:
+ reaction: "✅"
+ room: "{{trigger.event.data.room}}"
+ message_id: "{{trigger.event.data.event_id}}"
```
{% endraw %}
This configuration will:
-- Listen for "!testword" in the room "#someothertest:matrix.org" (and *only*) there. If such a message is encountered, it will answer with "It looks like you wrote !testword" into the "#hasstest:matrix.org" channel.
+- Listen for "!testword" in the room "#someothertest:matrix.org" (and *only*) there. If such a message is encountered, it will answer with "It looks like you wrote !testword" into the "#hasstest:matrix.org" channel and also place a ✅ reaction on the original message.
- Listen in both rooms for any message matching "My name is " and answer with "Hello " into "#hasstest:matrix.org".
+- Listen in both rooms for messages reacted to with 👍 and answer in a thread with "I saw that 👍 -- glad you appreciated this!"
## Notifications
@@ -189,7 +222,6 @@ The target room has to be precreated, the room id can be obtained from the rooms
To use notifications, please see the [getting started with automation page](/getting-started/automation/).
-
### Message formats
Matrix supports sending messages using a [limited HTML subset](https://spec.matrix.org/v1.2/client-server-api/#mroommessage-msgtypes). To specify the message format, add it in the notification `data`.
@@ -232,4 +264,113 @@ homeassistant:
allowlist_external_dirs:
- /tmp
```
+
{% endimportant %}
+
+### Replying in threads
+
+The `matrix_command` event will contain an `event_id` field that represents the message identifier for the received message.
+It will also contain a `thread_parent` field that contains the message identifier for the parent message of the thread.
+If the message was inside of a thread, `thread_parent` will be the identifier of the root message of the thread. If it
+is not inside of a thread, `thread_parent` will be the same as `event_id`.
+
+To reply inside of a thread, pass the correct message identifier of the root message into `data.thread_id` when sending
+a reply message. For example:
+
+{% raw %}
+
+```yaml
+action: notify.matrix_notify
+data:
+ message: "Reply message goes here"
+ data:
+ thread_id: "{{ trigger.event.data.thread_parent }}"
+```
+
+{% endraw %}
+
+## Actions
+
+The integration also provides the following actions:
+
+### Sending a message
+
+As an alternative to using the notify integration as described above, you may use `matrix.send_message` to send a
+message to a Matrix room.
+
+```yaml
+action: matrix.send_message
+data:
+ message: "My cool message"
+ target: "#hasstest:matrix.org"
+ data:
+ images:
+ - /path/to/picture.jpg
+ format: html
+ thread_id: "$-abcdeghij_klmnopqrstuvwxyz123"
+```
+
+- **Data attribute**: `message`
+ - **Description**: The message body to send
+ - **Optional**: No
+ - **Type**: String
+
+- **Data attribute**: `target`
+ - **Description**: The room to send the message to
+ - **Optional**: No
+ - **Type**: String
+
+- **Data attribute**: `data`
+ - **Description**: Additional options
+ - **Optional**: Yes
+ - **Type**: Map
+ - **Sub-attributes**:
+ - **Data attribute**: `images`
+ - **Description**: One or more image paths to attach to the message
+ - **Optional**: Yes
+ - **Type**: List of strings
+ - **Data attribute**: `format`
+ - **Description**: The format of the message. Must be either `text` or `html`
+ - **Optional**: Yes
+ - **Default**: `text`
+ - **Type**: String
+ - **Data attribute**: `thread_id`
+ - **Description**: The ID of the parent message to thread this reply under
+ - **Optional**: Yes
+ - **Type**: String
+
+### Reacting to messages
+
+To react to a message with an emoji reaction, use the `matrix.react` action:
+
+{% raw %}
+
+```yaml
+action: matrix.react
+data:
+ reaction: "✅"
+ room: "{{ trigger.event.data.room }}"
+ message_id: "{{ trigger.event.data.event_id }}"
+```
+
+{% endraw %}
+
+{% tip %}
+Reactions do not have to be an emoji. They can be any valid string. However, emoji are the typical/traditional use
+case.
+{% endtip %}
+
+- **Data attribute**: `reaction`
+ - **Description**: The reaction to send
+ - **Optional**: No
+ - **Type**: String
+
+- **Data attribute**: `room`
+ - **Description**: The room to send the reaction in
+ - **Optional**: No
+ - **Type**: String
+
+- **Data attribute**: `message_id`
+ - **Description**: The ID of the message to apply the reaction to
+ - **Optional**: No
+ - **Type**: String
diff --git a/source/_integrations/matter.markdown b/source/_integrations/matter.markdown
index 104db790dcd..0948ab2d20b 100644
--- a/source/_integrations/matter.markdown
+++ b/source/_integrations/matter.markdown
@@ -362,6 +362,22 @@ Notification of an OTA update for a Matter device
The Home Assistant Matter updates currently do not work for Thread devices on a Thread network with (any) Apple border routers. Typically you'll see "Target node did not process the update file" error instead. The Apple border routers do not forward the necessary mDNS packets which allow to discover the update provider on Home Assistant end. The Apple Home ecosystem might offer updates from their end as an alternative (e.g. for Eve devices).
{% endnote %}
+## Actions
+
+The Matter integration has the following actions:
+
+- `matter.water_heater_boost`
+
+### Action `matter.water_heater_boost`
+
+Enables water heater boost for a specific duration.
+
+| Data attribute | Optional | Description |
+|----------------------|----------|--------------------------------------------------------------------|
+| `duration` | No | Boost duration in seconds |
+| `emergency_boost` | Yes | Whether to enable emergency boost mode |
+| `temporary_setpoint` | Yes | Temporary setpoint temperature in Celsius during the boost period |
+
## Automate on a button press
You have a device that takes button presses as inputs (such as a Tuo Smart Button, VTM31SN dimmer by Inovelli, or the Matter Pushbutton Module by Innovation Matters) and now want to trigger an automation based on that button press. To learn how to create an automation triggered by a button press, refer to this [tutorial](/integrations/event/#automating-on-a-button-press).
diff --git a/source/_integrations/mcp_server.markdown b/source/_integrations/mcp_server.markdown
index 937b44650c5..3d4619ea866 100644
--- a/source/_integrations/mcp_server.markdown
+++ b/source/_integrations/mcp_server.markdown
@@ -23,7 +23,7 @@ Controlling Home Assistant is done by providing "
}
}
@@ -144,7 +151,9 @@ to allow Claude for Desktop to access Home Assistant using the SSE transport.
"Home Assistant": {
"command": "mcp-proxy",
"args": [
- "http://localhost:8123/mcp_server/sse"
+ "--transport=streamablehttp",
+ "--stateless",
+ "http://localhost:8123/api/mcp"
],
"env": {
"API_ACCESS_TOKEN": ""
@@ -227,9 +236,9 @@ To understand the root cause, first check debug logs on the client. For example
3. Select the `Home Assistant` MCP server.
4. Select **Open Logs Folder**.
5. View `mcp-server-Home Assistant.log`. These are known problems and their resolution:
- - `Client error '404 Not Found' for url 'http://localhost:8123/mcp_server/sse'`:
+ - `Client error '404 Not Found' for url 'http://localhost:8123/api/mcp'`:
this means the MCP Server integration is not configured in Home Assistant.
- - `Client error '401 Unauthorized' for url 'http://localhost:8123/mcp_server/sse'`:
+ - `Client error '401 Unauthorized' for url 'http://localhost:8123/api/mcp'`:
this means that the long live access token is not correct.
...
diff --git a/source/_integrations/mealie.markdown b/source/_integrations/mealie.markdown
index ac334a51e4a..db7c2c95467 100644
--- a/source/_integrations/mealie.markdown
+++ b/source/_integrations/mealie.markdown
@@ -17,11 +17,22 @@ ha_platforms:
- sensor
- todo
ha_integration_type: service
-ha_quality_scale: silver
+ha_quality_scale: platinum
---
[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.
+## Use cases
+
+- View your upcoming meal plans in the calendars.
+- Use automations or your voice assistant to add items to a shopping list.
+- Use [zone presence-detection](/getting-started/presence-detection/) to remind you when you approach a store that you have items on your shopping list to pick up.
+- Search for a recipe by ingredient.
+
+## Supported versions
+
+Mealie instances version 2 and later are supported.
+
## Prerequisites
You create your API token on your Mealie installation:
@@ -178,6 +189,16 @@ template:
{% enddetails %}
+## Known limitations
+
+- When editing a food item within the shopping list the item will be converted to a note style item.
+
+## Troubleshooting
+
+If you are using the Mealie add-on, use the direct URL with port number (default 9090) for the Mealie web page. Do not use the ingress URL that ends with /xxx_mealie.
+
+Before reporting an issue, enable [debug logging](/docs/configuration/troubleshooting/#debug-logs-and-diagnostics) and restart the integration. As soon as the issue re-occurs, stop the debug logging again (_download of debug log file will start automatically_). Further, _if still possible_, download the {% term diagnostics %} data. If you have collected the debug log and the diagnostics data, include them in the issue report.
+
## Removing the integration
This integration follows standard integration removal, once the integration is removed you can remove the API token (assuming it was only used by this integration) by going to your Account in the Mealie web interface, then to **Manage Your API Tokens** and deleting the token you created for Home Assistant.
diff --git a/source/_integrations/melcloud.markdown b/source/_integrations/melcloud.markdown
index 97bbbdb7f89..952a7fd7605 100644
--- a/source/_integrations/melcloud.markdown
+++ b/source/_integrations/melcloud.markdown
@@ -12,7 +12,7 @@ ha_platforms:
- diagnostics
- sensor
- water_heater
-ha_integration_type: integration
+ha_integration_type: device
ha_codeowners:
- '@erwindouna'
---
@@ -62,6 +62,7 @@ Swing mode can also be used to control vertical vane position.
The following attributes are available for `sensor` platform entities:
- Room temperature
+- Outside temperature
- Energy - The total consumed energy in kWh. **Not supported by all models.**
- Daily energy - Energy consumption within a 24h window in kWh. This reading resets at midnight on the timezone of the MELCloud service. The exact time needs to be determined by following the sensor value until a reset is detected.
diff --git a/source/_integrations/meteo_lt.markdown b/source/_integrations/meteo_lt.markdown
new file mode 100644
index 00000000000..74caf127a8e
--- /dev/null
+++ b/source/_integrations/meteo_lt.markdown
@@ -0,0 +1,75 @@
+---
+title: Meteo.lt
+description: Instructions on how to integrate Lithuanian Hydrometeorological Service (Meteo.lt) within Home Assistant.
+ha_release: 2025.11
+ha_iot_class: Cloud Polling
+ha_category:
+ - Weather
+ha_codeowners:
+ - '@xE1H'
+ha_config_flow: true
+ha_domain: meteo_lt
+ha_platforms:
+ - weather
+ha_integration_type: service
+ha_quality_scale: bronze
+---
+
+The **Meteo.lt** {% term integration %} uses meteorological data from the [Lithuanian Hydrometeorological Service](https://www.meteo.lt) (LHMT) to provide weather forecasts for locations in Lithuania. You can set up one or more locations via the user interface.
+
+The integration provides current weather conditions along with hourly and daily forecasts from official weather stations across Lithuania.
+
+## Supported functionality
+
+- Current weather conditions including temperature, humidity, pressure, and wind data
+- Hourly weather forecast for the next 24 hours
+- Daily weather forecast for the next 5 days
+- Weather station selection by coordinates or manual selection
+- Multiple location support
+
+## Prerequisites
+
+This integration requires an active internet connection to retrieve weather data from the Meteo.lt API.
+
+{% include integrations/config_flow.md %}
+
+## Weather platform
+
+The weather platform provides current conditions and forecasts that can be used with the weather dashboard card.
+
+### Current conditions
+
+The following current weather data is provided:
+
+- **Temperature** (°C): Current air temperature
+- **Apparent temperature** (°C): "Feels like" temperature
+- **Humidity** (%): Relative humidity
+- **Pressure** (hPa): Atmospheric pressure
+- **Wind speed** (m/s): Current wind speed
+- **Wind direction** (degrees): Wind direction in degrees
+- **Wind gust speed** (m/s): Maximum wind gust speed
+- **Cloud coverage** (%): Percentage of cloud cover
+- **Condition**: Weather condition (clear, cloudy, rainy, etc.)
+
+### Forecasts
+
+The integration supports two types of forecasts:
+
+- **Hourly forecast**: Available for the next 24 hours with detailed conditions including temperature, precipitation, wind, and cloud coverage.
+- **Daily forecast**: Available for the next 5 days, aggregated from hourly data showing daily high/low temperatures and midday conditions.
+
+## Data updates
+
+Weather data is automatically updated every 30 minutes from the Meteo.lt API.
+
+## Known limitations
+
+- Weather data is only available for locations within Lithuania
+- Historical weather data is not provided
+- Weather warnings and alerts are not currently supported
+
+## 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/meteoalarm.markdown b/source/_integrations/meteoalarm.markdown
index 141c9ed7190..44ac62f0acc 100644
--- a/source/_integrations/meteoalarm.markdown
+++ b/source/_integrations/meteoalarm.markdown
@@ -16,6 +16,8 @@ ha_quality_scale: legacy
The `MeteoAlarm` platform allows one to watch for weather alerts in Europe from [MeteoAlarm](https://www.meteoalarm.org) (EUMETNET). To use this binary sensor, you need the country and the province name from [MeteoAlarm](https://feeds.meteoalarm.org). Please note that it is crucial to write the country name exactly as it appears in the URL starting with https://feeds.meteoalarm.org/feeds/meteoalarm-legacy-atom-, including any hyphens used in the name. Failure to do so may result in errors or incorrect data.
+The name of the province can be found using the [MeteoAlarm EMMA_ID Region explorer tool](https://saratoga-weather.org/meteoalarm-map/)
+
The binary sensor state shows the warning message if applicable. The details are available as attribute.
## Configuration
diff --git a/source/_integrations/metoffice.markdown b/source/_integrations/metoffice.markdown
index 4c2896bd1ec..e5a1386eeaa 100644
--- a/source/_integrations/metoffice.markdown
+++ b/source/_integrations/metoffice.markdown
@@ -36,6 +36,7 @@ The available sensor entities:
- probability of precipitation
- station name
- temperature
+- pressure
- UV index
- visibility
- weather
diff --git a/source/_integrations/miele.markdown b/source/_integrations/miele.markdown
index d36e0dff915..1c8bf7666a8 100644
--- a/source/_integrations/miele.markdown
+++ b/source/_integrations/miele.markdown
@@ -27,9 +27,9 @@ ha_platforms:
- sensor
- switch
- vacuum
-ha_integration_type: integration
+ha_integration_type: hub
ha_zeroconf: true
-ha_quality_scale: bronze
+ha_quality_scale: platinum
---
The Miele {% term integrations %} allows users to integrate their home appliances using the [official 3rd party API](https://www.miele.com/developer).
@@ -158,6 +158,8 @@ Climate entities are used to control target temperatures in refrigerators, freez
- **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.
- **Start in**: Shows the number of minutes until a delayed program start, if configured.
+ - **Start**: Shows the date and time when the program starts. If you've set a delayed start, it shows when the appliance will actually begin the cycle.
+ - **Finish**: Shows the estimated date and time when the program will finish. If you've set a delayed start, it shows when the appliance is expected to complete the cycle, including the delay time.
- **Plate**: Four to six sensors that show the current state of hob heating plates. The status mimics the display on the actual hob. For example, 0 is off, 5 is approximately 50% power, and "B" is power boost. Plates can only be monitored from Home Assistant, not controlled.
{% enddetails %}
diff --git a/source/_integrations/modbus.markdown b/source/_integrations/modbus.markdown
index 7780962f166..e4c031a03f5 100644
--- a/source/_integrations/modbus.markdown
+++ b/source/_integrations/modbus.markdown
@@ -378,7 +378,7 @@ device_address:
unique_id:
description: "ID that uniquely identifies this entity.
Slaves will be given a unique_id of <>_<>.
- If two enities have the same unique ID, Home Assistant will raise an exception."
+ If two entities have the same unique ID, Home Assistant will raise an exception."
required: false
type: string
@@ -614,11 +614,36 @@ climates:
description: "Holding register."
input:
description: "Input register."
+ scale:
+ description: "Scale factor (`output` = `scale` * `value` + offset) for setting target and current temperature. Cannot be used together with `current_temp_scale` or `target_temp_scale."
+ required: false
+ type: float
+ default: 1
offset:
- description: "Final offset for current temperature (output = scale * value + offset)."
+ description: "Final offset for target and current temperature (`output` = `scale` * `value` + `offset). Cannot be used together with current_temp_offset or target_temp_offset`."
required: false
type: float
default: 0
+ current_temp_scale:
+ description: "Scale factor for current temperature (output = `current_temp_scale` * `value` + `current_temp_offset`). Cannot be used together with `scale`"
+ required: false
+ type: float
+ default: 1.0
+ current_temp_offset:
+ description: "Offset for current temperature (output` = current_temp_scale` * `value` + `current_temp_offset`). Cannot be used together with *offset*."
+ required: false
+ type: float
+ default: 0.0
+ target_temp_scale:
+ description: "Scale factor for target temperature (`output` = `target_temp_scale` * `value` + `target_temp_offset`). Cannot be used together with scale`."
+ required: false
+ type: float
+ default: 1.0
+ target_temp_offset:
+ description: "Offset for target temperature (`output` = `target_temp_scale` * `value` + `target_temp_offset`). Cannot be used together with offset`."
+ required: false
+ type: float
+ default: 0.0
target_temp_register:
description: "Register address for target temperature (Setpoint). Using a list, it is possible to define one register for each of the available HVAC Modes. The list has to have a fixed size of 7 registers corresponding to the 7 available HVAC Modes, as follows: Register **1: HVAC AUTO mode**; Register **2: HVAC Cool mode**; Register **3: HVAC Dry mode**; Register **4: HVAC Fan only mode**; Register **5: HVAC Heat mode**; Register **6: HVAC Heat Cool mode**; Register **7: HVAC OFF mode**. It is possible to set duplicated values for the modes where the devices don't have a related register."
required: true
@@ -628,11 +653,6 @@ climates:
required: false
type: boolean
default: false
- scale:
- description: "Scale factor (output = scale * value + offset) for setting target temperature."
- required: false
- type: float
- default: 1
structure:
description: "If `data_type: custom` is specified a double-quoted Python struct is expected,
to format the string to unpack the value. See Python documentation for details.
@@ -1461,7 +1481,7 @@ sensors:
required: false
type: integer
virtual_count:
- description: "Generates x+1 sensors (master + slaves), allowing read of multiple registers with a single read messsage."
+ description: "Generates x+1 sensors (master + slaves), allowing read of multiple registers with a single read message."
required: false
type: integer
state_class:
diff --git a/source/_integrations/mqtt.markdown b/source/_integrations/mqtt.markdown
index 618430e68d3..792d30a55a8 100644
--- a/source/_integrations/mqtt.markdown
+++ b/source/_integrations/mqtt.markdown
@@ -43,7 +43,7 @@ ha_platforms:
- vacuum
- valve
- water_heater
-ha_integration_type: integration
+ha_integration_type: service
ha_quality_scale: platinum
---
@@ -128,10 +128,14 @@ MQTT Devices and entities can be set up through [MQTT -discovery](#mqtt-discover
- [Climate (HVAC)](/integrations/climate.mqtt/)
- [Cover](/integrations/cover.mqtt/)
- [Fan](/integrations/fan.mqtt/)
+- [Image](/integrations/image.mqtt/)
- [Light](/integrations/light.mqtt/)
- [Lock](/integrations/lock.mqtt/)
- [Notify](/integrations/notify.mqtt/)
+- [Number](/integrations/number.mqtt/)
+- [Select](/integrations/select.mqtt/)
- [Sensor](/integrations/sensor.mqtt/)
+- [Siren](/integrations/siren.mqtt/)
- [Switch](/integrations/switch.mqtt/)
To add an MQTT device via a Subentry, follow these steps:
diff --git a/source/_integrations/music_assistant.markdown b/source/_integrations/music_assistant.markdown
index 31cd6b7decd..6990d4bc27a 100644
--- a/source/_integrations/music_assistant.markdown
+++ b/source/_integrations/music_assistant.markdown
@@ -18,6 +18,18 @@ ha_integration_type: integration
The **Music Assistant** (MA) {% term integration %} allows you to connect Home Assistant to a [Music Assistant Server](https://music-assistant.io/) (Required version 2.4 or later). Once configured, all [MA Players](https://music-assistant.io/player-support/) show up as Home Assistant [media player entities](/integrations/media_player/). Media players will allow you to control media playback and see the currently playing item.
+## Prerequisites
+
+Before installing this integration, ensure you have a running Music Assistant server. Instructions for installing the Music Assistant server are available in the [Music Assistant documentation](https://www.music-assistant.io/installation/)
+
+{% include integrations/config_flow.md %}
+
+### Manual configuration
+
+Under normal circumstances, Home Assistant automatically discovers your running Music Assistant server. If there is something special about the Home Assistant or Music Assistant setup (for example, the Music Assistant server is running as a remote Docker container) or discovery is not working, you can manually specify the URL to your Music Assistant server.
+
+## Supported functionality
+
There is currently support for the following Home Assistant Platforms:
- [Media player](#media-player-entities)
@@ -26,27 +38,19 @@ There is currently support for the following Home Assistant Platforms:
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:
+If using `media_player.play_media`, then note the `media_content_id` payload can be any of the following:
- The name of a track, artist, or album. For example, `Queen`.
- A track or album combined with the artist's name. For example, `Queen - Innuendo`.
- A streaming provider URI. For example, `spotify://artist/12345`.
- A streaming provider URL. For example, `https://open.spotify.com/track/31cWPvM99ZHxMl3mdgiw4I`.
-The `media_content_id` payload for `media_player.browse_media` must be a URI of the form `library://artist/1`, `library://album/20`, or `spotify://album/5zj4Ej0FrlJQaSo0d6cttH`. The type of item that the URI refers to must be an album or artist.
+If using `media_player.browse_media`, then the `media_content_id` payload must be a URI of the form `library://artist/1`, `library://album/20`, or `spotify://album/5zj4Ej0FrlJQaSo0d6cttH`. The type of item that the URI refers to must be an album or artist.
-These URIs can be obtained from, for example, the output of the `get_library` or `search` actions described below or the `media_player.browse_media` action from Home Assistant.
+These URIs can, for example, be obtained from the output of the `get_library` or `search` actions described below or the `media_player.browse_media` action from Home Assistant.
Streaming provider URLs can be obtained from the web interface of the provider.
-{% include integrations/config_flow.md %}
-
-### Manual configuration
-
-Under normal circumstances, Home Assistant automatically discovers your running Music Assistant Server. If there is something special about the Home Assistant or MA setup (for example, the MA server is running as a remote Docker container) or discovery is not working, you can manually specify the URL to your Music Assistant server. If the Music Assistant Server is not installed, then follow these [installation instructions](https://music-assistant.io/installation/).
-
-## Supported functionality
-
### Media player entities
The Music Assistant integration creates media player entities for all players and groups available in MA, including those imported from Home Assistant. This is needed to provide the full functionality Music Assistant has to offer. This full functionality includes transfer of the playing queue of music from one player to another, automatic pausing of playback during announcements, and richer options for selecting the media for playback. These entities will display media information, playback progress, and playback controls.
diff --git a/source/_integrations/mysensors.markdown b/source/_integrations/mysensors.markdown
index ab47931703f..64349db7692 100644
--- a/source/_integrations/mysensors.markdown
+++ b/source/_integrations/mysensors.markdown
@@ -785,7 +785,7 @@ void receive(const MyMessage &message)
last_dim=100;
}
- //Update constroller status
+ // Update controller status
send_status_message();
} else if ( message.type == V_PERCENTAGE ) {
@@ -794,14 +794,14 @@ void receive(const MyMessage &message)
if ( dim_value == 0 ) {
last_state = LIGHT_OFF;
- //Update constroller with dimmer value & status
+ // Update controller with dimmer value & status
send_dimmer_message();
send_status_message();
} else {
last_state = LIGHT_ON;
last_dim = dim_value;
- //Update constroller with dimmer value
+ // Update controller with dimmer value
send_dimmer_message();
}
diff --git a/source/_integrations/myuplink.markdown b/source/_integrations/myuplink.markdown
index 495f289d0aa..2c4724bed86 100644
--- a/source/_integrations/myuplink.markdown
+++ b/source/_integrations/myuplink.markdown
@@ -23,7 +23,7 @@ ha_platforms:
- sensor
- switch
- update
-ha_integration_type: integration
+ha_integration_type: hub
related:
- url: https://myuplink.com/
title: myUplink web portal
diff --git a/source/_integrations/nanoleaf.markdown b/source/_integrations/nanoleaf.markdown
index 3842aac7912..fd674abd30d 100644
--- a/source/_integrations/nanoleaf.markdown
+++ b/source/_integrations/nanoleaf.markdown
@@ -23,7 +23,7 @@ ha_ssdp: true
ha_integration_type: integration
---
-The Nanoleaf integration allows you to control and monitor Nanoleaf Light Panels, Canvas, Shapes, Elements, and Lines.
+The **Nanoleaf** {% term integration %} allows you to control and monitor Nanoleaf Light Panels, Canvas, Shapes, Elements, and Lines.
This integration does not support the Nanoleaf Remote and Essentials lights. Controlling Nanoleaf Essentials lights is possible over Thread and Bluetooth through the HomeKit Controller integration.
@@ -32,3 +32,9 @@ This integration does not support the Nanoleaf Remote and Essentials lights. Con
# Transition and brightness
When using a transition in an action (such as `light.turn_on`), the transition is only applied to brightness and does not apply to color. When an action has a transition set, but no brightness is included, the light will automatically transition to 100% brightness.
+
+## 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/nasweb.markdown b/source/_integrations/nasweb.markdown
index c06c375454f..6ec57818bad 100644
--- a/source/_integrations/nasweb.markdown
+++ b/source/_integrations/nasweb.markdown
@@ -2,6 +2,7 @@
title: NASweb
description: Integrate NASweb devices
ha_category:
+ - Alarm
- Sensor
- Switch
ha_release: '2024.12'
@@ -11,6 +12,7 @@ ha_iot_class: Local Push
ha_domain: nasweb
ha_config_flow: true
ha_platforms:
+ - alarm_control_panel
- sensor
- switch
ha_integration_type: hub
diff --git a/source/_integrations/nederlandse_spoorwegen.markdown b/source/_integrations/nederlandse_spoorwegen.markdown
index 398d8d98eb1..8adfd2d8af8 100644
--- a/source/_integrations/nederlandse_spoorwegen.markdown
+++ b/source/_integrations/nederlandse_spoorwegen.markdown
@@ -7,89 +7,66 @@ ha_iot_class: Cloud Polling
ha_release: 0.57
ha_codeowners:
- '@YarmoM'
+ - '@heindrichpaul'
ha_domain: nederlandse_spoorwegen
ha_platforms:
+ - binary_sensor
- sensor
-ha_integration_type: integration
-related:
- - docs: /docs/configuration/
- title: Configuration file
+ha_integration_type: service
ha_quality_scale: legacy
+ha_config_flow: true
---
-This {% term integration %} will provide you with time table information of the [Nederlandse Spoorwegen](https://www.ns.nl/) train service in the Netherlands.
+The **Nederlandse Spoorwegen (NS)** {% term integration %} provides real-time information about Dutch train schedules using the [NS API](https://apiportal.ns.nl/). This integration allows you to monitor departure times, delays, and travel information for your regular routes.
-To obtain an API key, create an account on the [NS API-Portaal](https://apiportal.ns.nl/) and obtain an API key for the `Reisinformatie` API which is part of the `Ns-App` product.
+## Prerequisites
-The `nederlandse_spoorwegen` {% term integration %} can be configured using your {% term "`configuration.yaml`" %} file.
-{% include integrations/restart_ha_after_config_inclusion.md %}
+To use this integration, you need an API key from the NS API Portal.
-```yaml
-# Example configuration.yaml entry
-sensor:
-- platform: nederlandse_spoorwegen
- api_key: NS_API_KEY
- routes:
- - name: Rotterdam-Amsterdam
- from: Rtd
- to: Asd
- - name: Groningen-Zwolle-Maastricht
- from: Gn
- to: Mt
- via: Zl
- - name: "AlmereBuiten-Duivendrecht-the-08h06m-train"
- from: Almb
- to: Dvd
- time: "08:06:00"
-```
+### Obtaining an API Key
-{% configuration %}
-api_key:
- description: The API key provided by the Nederlandse Spoorwegen.
- required: true
- type: string
-routes:
- description: List of travel routes.
- required: false
- type: list
- keys:
- name:
- description: Name of the route.
- required: true
- type: string
- from:
- description: The departure station.
- required: true
- type: string
- to:
- description: The arrival station.
- required: true
- type: string
- via:
- description: A station the route needs to pass through.
- required: false
- type: string
- time:
- description: Optional time to search for a specific train.
- required: false
- type: time
-{% endconfiguration %}
+1. Create an account on the [NS API Portal](https://apiportal.ns.nl/).
+2. Request an API key for the `Reisinformatie` API, which is part of the `Ns-App` product.
-### Station codes
+{% include integrations/config_flow.md %}
-Station codes must be used and can be looked up [here](https://nl.wikipedia.org/wiki/Lijst_van_spoorwegstations_in_Nederland).
+### Managing routes
-### Searching a specific train vs. the next train
+After adding the integration, you can manage your travel routes:
-The default behavior (without configuration variable `time`) gives you the information about the *next* train that fits the criteria (`from`, `to`, `via`).
-When using the configuration variable `time`, you can search for a specific train.
-This is convenient when searching for the next train doesn't give you enough time to base an automation on.
-E.g., when you normally take the 08h06m train and want to get information about this train, but there is another train
-that's departing just minutes before your train, your time window to warn you on a delay might be too small.
+1. Go to {% my integrations title="**Settings** > **Devices & services**" %}.
+2. Find the **Nederlandse Spoorwegen** integration.
+3. Click **Configure**.
+4. Add or remove routes as needed.
-Using `time` only updates the route sensor during a time window around the chosen time.
-Outside this window, the route sensor's state is `unknown`.
-The window is from half an hour before the chosen time until half an hour after the chosen time.
-In this way, you can have multiple routes with specific trains before hitting the FUP threshold for using NS API.
+The integration provides a station selector in the UI, so you don't need to manually look up station codes. Simply search for and select your departure and arrival stations from the dropdown menus during route configuration.
-The data are coming from [Nederlandse Spoorwegen](https://www.ns.nl/).
+## Searching for a specific train vs. the next train
+
+The default behavior (without specifying a time) gives you information about the *next* train that fits the criteria (from, to, via stations).
+
+When you specify a departure time during route configuration, you can search for a specific train. This is convenient when searching for the next train doesn't give you enough time to base an automation on. For example, when you normally take the 08:06 train and want to get information about this specific train, but there is another train departing just minutes before your train, your time window to warn you about a delay might be too small.
+
+Using a specific time only updates the route sensor during a time window around the chosen time. Outside this window, the route sensor's state is `unknown`. The window is from half an hour before the chosen time until half an hour after the chosen time. In this way, you can have multiple routes with specific trains before hitting the API usage limits.
+
+## Data source
+
+The data is provided by Nederlandse Spoorwegen through their official API, ensuring high-quality and up-to-date information about train schedules, delays, and service disruptions.
+
+## Troubleshooting
+
+### Authentication errors
+
+If you encounter authentication errors:
+
+- Verify your API key is correct.
+- Ensure your NS API subscription is active.
+- Check that you're using the correct API (Reisinformatie API).
+
+### Removing the integration
+
+This integration follows standard integration removal.
+
+{% include integrations/remove_device_service.md %}
+
+All entities and data associated with the integration will be removed.
diff --git a/source/_integrations/neff.markdown b/source/_integrations/neff.markdown
index 82506976177..81d99e1bd36 100644
--- a/source/_integrations/neff.markdown
+++ b/source/_integrations/neff.markdown
@@ -29,7 +29,6 @@ ha_platforms:
- select
- sensor
- switch
- - time
ha_iot_class: Cloud Push
ha_dhcp: true
ha_zeroconf: true
diff --git a/source/_integrations/neo.markdown b/source/_integrations/neo.markdown
new file mode 100644
index 00000000000..5e5379063c1
--- /dev/null
+++ b/source/_integrations/neo.markdown
@@ -0,0 +1,48 @@
+---
+title: Neo
+description: Connect and control your Neo devices using the Shelly integration
+ha_category:
+ - Binary sensor
+ - Climate
+ - Cover
+ - Energy
+ - Event
+ - Light
+ - Number
+ - Select
+ - Sensor
+ - Switch
+ - Text
+ - Update
+ - Valve
+ha_release: 0.115
+ha_domain: neo
+ha_integration_type: virtual
+ha_supporting_domain: shelly
+ha_supporting_integration: Shelly
+ha_codeowners:
+ - '@bieniu'
+ - '@thecode'
+ - '@chemelli74'
+ - '@bdraco'
+ha_config_flow: true
+ha_platforms:
+ - binary_sensor
+ - button
+ - climate
+ - cover
+ - diagnostics
+ - event
+ - light
+ - number
+ - select
+ - sensor
+ - switch
+ - text
+ - update
+ - valve
+ha_iot_class: Local Push
+ha_zeroconf: true
+---
+
+{% include integrations/supported_brand.md %}
diff --git a/source/_integrations/nextcloud.markdown b/source/_integrations/nextcloud.markdown
index 9be8ffc562b..8a61e3e5092 100644
--- a/source/_integrations/nextcloud.markdown
+++ b/source/_integrations/nextcloud.markdown
@@ -15,7 +15,7 @@ ha_platforms:
- binary_sensor
- sensor
- update
-ha_integration_type: integration
+ha_integration_type: service
---
The `nextcloud` integration pulls summary [Nextcloud](https://nextcloud.com/) information into Home Assistant.
diff --git a/source/_integrations/nextdns.markdown b/source/_integrations/nextdns.markdown
index 3b688730bad..bdb51125e3f 100644
--- a/source/_integrations/nextdns.markdown
+++ b/source/_integrations/nextdns.markdown
@@ -16,6 +16,7 @@ ha_platforms:
- sensor
- switch
ha_integration_type: service
+ha_quality_scale: platinum
---
NextDNS is a DNS service that protects from all kinds of security threats, blocks ADS and trackers on websites and in apps, and provides a safe and supervised Internet for kids — on all devices and on all networks. The NextDNS integration allows you to monitor NextDNS statistics and control its configuration.
@@ -38,3 +39,331 @@ Profile:
This integration follows standard integration removal, no extra steps are required.
{% include integrations/remove_device_service.md %}
+
+## Supported functionality
+
+The NextDNS integration provides the following entities.
+
+### Binary sensors
+
+- **Device connection status**
+ - **Description**: Indicates whether the Home Assistant server is using NextDNS for DNS queries
+- **Device profile connection status**
+ - **Description**: Indicates whether the Home Assistant server uses the configured NextDNS profile for DNS queries
+
+### Buttons
+
+- **Clear logs**
+ - **Description**: Triggers clearing DNS query logs on NextDNS servers
+
+### Sensors
+
+- **DNS queries**
+ - **Description**: Shows the total number of DNS queries
+- **DNS queries blocked**
+ - **Description**: Shows the number of blocked DNS queries
+- **DNS queries blocked ratio**
+ - **Description**: Shows the percentage of blocked DNS queries
+- **DNS-over-HTTP/3 queries**
+ - **Description**: Shows the number of DNS queries via DNS-over-HTTP/3
+ - **Remarks**: This entity is disabled by default
+- **DNS-over-HTTP/3 queries ratio**
+ - **Description**: Shows the percentage of DNS queries via DNS-over-HTTP/3
+ - **Remarks**: This entity is disabled by default
+- **DNS-over-HTTPS queries**
+ - **Description**: Shows the number of DNS queries via DNS-over-HTTPS
+ - **Remarks**: This entity is disabled by default
+- **DNS-over-HTTPS queries ratio**
+ - **Description**: Shows the percentage of DNS queries via DNS-over-HTTPS
+ - **Remarks**: This entity is disabled by default
+- **DNS-over-QUIC queries**
+ - **Description**: Shows the number of DNS queries via DNS-over-QUIC
+ - **Remarks**: This entity is disabled by default
+- **DNS-over-QUIC queries ratio**
+ - **Description**: Shows the percentage of DNS queries via DNS-over-QUIC
+- **DNS-over-TLS queries**
+ - **Description**: Shows the number of DNS queries via DNS-over-TLS
+ - **Remarks**: This entity is disabled by default
+- **DNS-over-TLS queries ratio**
+ - **Description**: Shows the percentage of DNS queries via DNS-over-TLS
+ - **Remarks**: This entity is disabled by default
+- **TCP queries**
+ - **Description**: Shows the number of DNS queries via TCP
+ - **Remarks**: This entity is disabled by default
+- **TCP queries ratio**
+ - **Description**: Shows the percentage of DNS queries via TCP
+ - **Remarks**: This entity is disabled by default
+- **UDP queries**
+ - **Description**: Shows the number of DNS queries via UDP
+ - **Remarks**: This entity is disabled by default
+- **UDP queries ratio**
+ - **Description**: Shows the percentage of DNS queries via UDP
+ - **Remarks**: This entity is disabled by default
+- **Encrypted queries**
+ - **Description**: Shows the number of encrypted DNS queries
+ - **Remarks**: This entity is disabled by default
+- **Encrypted queries ratio**
+ - **Description**: Shows the percentage of encrypted DNS queries
+ - **Remarks**: This entity is disabled by default
+- **Unencrypted queries**
+ - **Description**: Shows the number of unencrypted DNS queries
+ - **Remarks**: This entity is disabled by default
+- **IPv4 queries**
+ - **Description**: Shows the number of DNS queries via IPv4
+ - **Remarks**: This entity is disabled by default
+- **IPv6 queries**
+ - **Description**: Shows the number of DNS queries via IPv6
+ - **Remarks**: This entity is disabled by default
+- **IPv6 queries ratio**
+ - **Description**: Shows the percentage of DNS queries via IPv6
+ - **Remarks**: This entity is disabled by default
+- **DNSSEC validated queries**
+ - **Description**: Shows the number of DNS queries validated by DNSSEC
+ - **Remarks**: This entity is disabled by default
+- **DNSSEC validated queries ratio**
+ - **Description**: Shows the percentage of DNS queries validated by DNSSEC
+ - **Remarks**: This entity is disabled by default
+- **DNSSEC not validated queries**
+ - **Description**: Shows the number of DNS queries not validated by DNSSEC
+ - **Remarks**: This entity is disabled by default
+- **DNS queries relayed**
+ - **Description**: Shows the number of relayed DNS queries
+
+### Switches
+
+- **AI-Driven threat detection**
+ - **Description**: Controls AI-driven threat detection
+- **Allow affiliate & tracking links**
+ - **Description**: Controls affiliate and tracking links
+- **Anonymized EDNS client subnet**
+ - **Description**: Controls anonymized EDNS client subnet
+- **Bypass age verification**
+ - **Description**: Controls bypass of age verification pages
+- **CNAME flattening**
+ - **Description**: Controls CNAME flattening
+- **Cryptojacking protection**
+ - **Description**: Controls cryptojacking protection
+- **Domain generation algorithms protection**
+ - **Description**: Controls protection against domain generation algorithms
+- **DNS rebinding protection**
+ - **Description**: Controls DNS rebinding protection
+- **Google safe browsing**
+ - **Description**: Controls Google Safe Browsing protection
+- **IDN homograph attacks protection**
+ - **Description**: Controls protection against IDN homograph attacks
+- **Logs**
+ - **Description**: Controls log collection
+- **Force SafeSearch**
+ - **Description**: Controls SafeSearch enforcement
+- **Typosquatting protection**
+ - **Description**: Controls protection against typosquatting domains
+- **Web3**
+ - **Description**: Controls access to Web3 and crypto domains
+- **Force YouTube restricted mode**
+ - **Description**: Controls YouTube Restricted Mode enforcement
+- **Block newly registered domains**
+ - **Description**: Controls blocking of newly registered domains
+- **Block bypass methods**
+ - **Description**: Controls blocking of filter bypass methods
+- **Block child sexual abuse material**
+ - **Description**: Controls blocking of child sexual abuse material
+- **Block dynamic DNS hostnames**
+ - **Description**: Controls blocking of dynamic DNS hostnames
+- **Block disguised third-party trackers**
+ - **Description**: Controls blocking of disguised third-party trackers
+- **Block page**
+ - **Description**: Controls the display of the blocking page
+- **Block online gaming**
+ - **Description**: Controls blocking of online gaming
+- **Block parked domains**
+ - **Description**: Controls blocking of parked domains
+- **Block piracy**
+ - **Description**: Controls blocking of piracy websites
+ - **Remarks**: This entity is disabled by default
+- **Block porn**
+ - **Description**: Controls blocking of pornographic content
+ - **Remarks**: This entity is disabled by default
+- **Block social networks**
+ - **Description**: Controls blocking of social networks
+ - **Remarks**: This entity is disabled by default
+- **Block video streaming**
+ - **Description**: Controls blocking of video streaming websites
+ - **Remarks**: This entity is disabled by default
+- **Block dating**
+ - **Description**: Controls blocking of dating websites
+ - **Remarks**: This entity is disabled by default
+- **Block gambling**
+ - **Description**: Controls blocking of gambling websites
+ - **Remarks**: This entity is disabled by default
+- **Block 9GAG**
+ - **Description**: Controls 9GAG access
+ - **Remarks**: This entity is disabled by default
+- **Block Amazon**
+ - **Description**: Controls Amazon access
+ - **Remarks**: This entity is disabled by default
+- **Block BeReal**
+ - **Description**: Controls BeReal access
+ - **Remarks**: This entity is disabled by default
+- **Block Blizzard**
+ - **Description**: Controls Blizzard access
+ - **Remarks**: This entity is disabled by default
+- **Block ChatGPT**
+ - **Description**: Controls ChatGPT access
+ - **Remarks**: This entity is disabled by default
+- **Block Dailymotion**
+ - **Description**: Controls Dailymotion access
+ - **Remarks**: This entity is disabled by default
+- **Block Discord**
+ - **Description**: Controls Discord access
+ - **Remarks**: This entity is disabled by default
+- **Block Disney Plus**
+ - **Description**: Controls Disney Plus access
+ - **Remarks**: This entity is disabled by default
+- **Block eBay**
+ - **Description**: Controls eBay access
+ - **Remarks**: This entity is disabled by default
+- **Block Facebook**
+ - **Description**: Controls Facebook access
+ - **Remarks**: This entity is disabled by default
+- **Block Fortnite**
+ - **Description**: Controls Fortnite access
+ - **Remarks**: This entity is disabled by default
+- **Block Google Chat**
+ - **Description**: Controls Google Chat access
+ - **Remarks**: This entity is disabled by default
+- **Block HBO Max**
+ - **Description**: Controls HBO Max access
+ - **Remarks**: This entity is disabled by default
+- **Block Hulu**
+ - **Description**: Controls Hulu access
+ - **Remarks**: This entity is disabled by default
+- **Block Imgur**
+ - **Description**: Controls Imgur access
+ - **Remarks**: This entity is disabled by default
+- **Block Instagram**
+ - **Description**: Controls Instagram access
+ - **Remarks**: This entity is disabled by default
+- **Block League of Legends**
+ - **Description**: Controls League of Legends access
+ - **Remarks**: This entity is disabled by default
+- **Block Mastodon**
+ - **Description**: Controls Mastodon access
+ - **Remarks**: This entity is disabled by default
+- **Block Messenger**
+ - **Description**: Controls Facebook Messenger access
+ - **Remarks**: This entity is disabled by default
+- **Block Minecraft**
+ - **Description**: Controls Minecraft access
+ - **Remarks**: This entity is disabled by default
+- **Block Netflix**
+ - **Description**: Controls Netflix access
+ - **Remarks**: This entity is disabled by default
+- **Block Pinterest**
+ - **Description**: Controls Pinterest access
+ - **Remarks**: This entity is disabled by default
+- **Block PlayStation Network**
+ - **Description**: Controls PlayStation Network access
+ - **Remarks**: This entity is disabled by default
+- **Block Prime Video**
+ - **Description**: Controls Prime Video access
+ - **Remarks**: This entity is disabled by default
+- **Block Reddit**
+ - **Description**: Controls Reddit access
+ - **Remarks**: This entity is disabled by default
+- **Block Roblox**
+ - **Description**: Controls Roblox access
+ - **Remarks**: This entity is disabled by default
+- **Block Signal**
+ - **Description**: Controls Signal access
+ - **Remarks**: This entity is disabled by default
+- **Block Skype**
+ - **Description**: Controls Skype access
+ - **Remarks**: This entity is disabled by default
+- **Block Snapchat**
+ - **Description**: Controls Snapchat access
+ - **Remarks**: This entity is disabled by default
+- **Block Spotify**
+ - **Description**: Controls Spotify access
+ - **Remarks**: This entity is disabled by default
+- **Block Steam**
+ - **Description**: Controls Steam access
+ - **Remarks**: This entity is disabled by default
+- **Block Telegram**
+ - **Description**: Controls Telegram access
+ - **Remarks**: This entity is disabled by default
+- **Block TikTok**
+ - **Description**: Controls TikTok access
+ - **Remarks**: This entity is disabled by default
+- **Block Tinder**
+ - **Description**: Controls Tinder access
+ - **Remarks**: This entity is disabled by default
+- **Block Tumblr**
+ - **Description**: Controls Tumblr access
+ - **Remarks**: This entity is disabled by default
+- **Block Twitch**
+ - **Description**: Controls Twitch access
+ - **Remarks**: This entity is disabled by default
+- **Block X (formerly Twitter)**
+ - **Description**: Controls X (formerly Twitter) access
+ - **Remarks**: This entity is disabled by default
+- **Block Vimeo**
+ - **Description**: Controls Vimeo access
+ - **Remarks**: This entity is disabled by default
+- **Block VK**
+ - **Description**: Controls VK access
+ - **Remarks**: This entity is disabled by default
+- **Block WhatsApp**
+ - **Description**: Controls WhatsApp access
+ - **Remarks**: This entity is disabled by default
+- **Block Xbox Network**
+ - **Description**: Controls Xbox Network access
+ - **Remarks**: This entity is disabled by default
+- **Block YouTube**
+ - **Description**: Controls YouTube access
+ - **Remarks**: This entity is disabled by default
+- **Block Zoom**
+ - **Description**: Controls Zoom access
+ - **Remarks**: This entity is disabled by default
+
+## Data updates
+
+By default, the integration {% term polling polls %} data from the NextDNS API:
+- Every 5 minutes for connection status data
+- Every 10 minutes for analytics data
+- Every 1 minute for settings
+
+## Possible use-cases
+
+- Monitor DNS queries from your local network or individual devices.
+- Track DNS query protocols to understand connection security.
+- Manage children's screen time by scheduling access to social media, games, and streaming services.
+
+## Examples
+
+### Block social media for kids
+
+These automations block social media access for the kids profile during evening hours and unblock it after school.
+
+```yaml
+automation:
+ - alias: Block social media for kids in the evening
+ triggers:
+ - trigger: time
+ at: "20:00:00"
+ actions:
+ - action: switch.turn_off
+ target:
+ entity_id: switch.kids_block_social_networks
+ - alias: Unblock social media for kids after school
+ triggers:
+ - trigger: time
+ at: "16:00:00"
+ actions:
+ - action: switch.turn_on
+ target:
+ entity_id: switch.kids_block_social_networks
+```
+
+## Known limitations
+
+There are no known limitations.
diff --git a/source/_integrations/niko_home_control.markdown b/source/_integrations/niko_home_control.markdown
index 5da250fac47..1e65bce2fb0 100644
--- a/source/_integrations/niko_home_control.markdown
+++ b/source/_integrations/niko_home_control.markdown
@@ -1,24 +1,34 @@
---
title: Niko Home Control
-description: Instructions on how to integrate Niko Home Control lights into Home Assistant.
+description: Instructions on how to integrate Niko Home Control 1 lights into Home Assistant.
ha_codeowners:
- '@VandeurenGlenn'
ha_config_flow: true
ha_category:
- Cover
- Light
+ - Climate
+ - Scene
ha_iot_class: Local Push
ha_release: 0.82
ha_domain: niko_home_control
ha_platforms:
- cover
- light
+ - climate
+ - scene
ha_integration_type: integration
related:
- docs: /docs/configuration/
title: Configuration file
---
-The `niko_home_control` {% term integration %} allows you to integrate your [Niko Home Control](https://www.niko.eu/enus/products/niko-home-control) into Home Assistant.
+The `niko_home_control` {% term integration %} allows you to integrate your [Niko connected controller (with Home Control 1)](https://www.niko.eu/enus/products/niko-home-control) into Home Assistant.
{% include integrations/config_flow.md %}
+
+## 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/nina.markdown b/source/_integrations/nina.markdown
index c911935a8b7..47043442ee7 100644
--- a/source/_integrations/nina.markdown
+++ b/source/_integrations/nina.markdown
@@ -37,9 +37,9 @@ The integration includes the possibility to filter warnings in two ways via a re
All filters are applied to lowercase text only.
{% endnote %}
-#### Headline filter
+#### Headline blocklist
-This filter filters warnings based on the headline as a **blacklist**. In other words, if the regular expression matches the headline of the warning, the warning will be **ignored**.
+This blocklist filters warnings based on the headline. In other words, if the regular expression matches the headline of the warning, the warning will be **ignored**.
Default: Match nothing (`/(?!)/`)
diff --git a/source/_integrations/nintendo_parental_controls.markdown b/source/_integrations/nintendo_parental_controls.markdown
new file mode 100644
index 00000000000..df58e752cf9
--- /dev/null
+++ b/source/_integrations/nintendo_parental_controls.markdown
@@ -0,0 +1,127 @@
+---
+title: Nintendo Switch parental controls
+description: The Nintendo Switch Parental Controls integration allows you to monitor and control screentime for children via the Nintendo Switch Parental Controls service.
+ha_release: 2025.11
+ha_iot_class: Cloud Polling
+ha_codeowners:
+ - '@pantherale0'
+ha_domain: nintendo_parental_controls
+ha_integration_type: integration
+ha_platforms:
+ - number
+ - sensor
+ - switch
+ - time
+ha_category: []
+ha_quality_scale: bronze
+ha_config_flow: true
+---
+
+The **Nintendo Switch Parental Controls** {% term integration %} integrates with the Nintendo Switch Parental Controls service, allowing parents to monitor and control screentime for their children.
+
+## Supported devices
+
+Devices supported by the Nintendo Switch Parental Controls mobile app are supported by this integration.
+
+## Prerequisites
+
+To use the Nintendo Switch Parental Controls integration, you must access your Nintendo account's authentication tokens. This process must be performed on a device **without** the official Nintendo Switch Parental Controls mobile app installed. The integration needs to intercept the authentication flow, which the app typically handles automatically.
+
+You will need:
+- Your Nintendo account credentials.
+- A computer or mobile device without the official app installed.
+
+## Configuration
+
+ 1. In the Home Assistant UI, go to {% my integrations title="**Settings** > **Devices & services**" %}.
+
+ 2. Select **Add integration** and search for **Nintendo Switch Parental Controls**.
+
+ 3. You will be prompted to provide an **Access token**. Select the link provided in the dialog description. This link is unique to your setup session.
+
+ 4. A new browser tab will open. Log in to your Nintendo account using your credentials.
+
+ 5. After successful login, you will see a **Linking an External Account** screen. For the Nintendo account you wish to link, right-click the red button **Select this person** and choose **Copy Link** (or **Copy Link Address** / **Copy URL** depending on your browser).
+
+ - **Important**: Do not select the button directly, as this can redirect you and prevent you from getting the necessary token.
+
+ - The copied link should have a format similar to `npf54789befxxxxxxxx://auth#session_token_code={redacted}&state={redacted}&session_state={redacted}`.
+
+ 6. Close the Nintendo Account browser tab.
+
+ 7. Paste the entire copied link (the full string) into the **Access Token** field in the Home Assistant configuration dialog.
+
+ 8. Select **Submit**.
+
+ 9. The configuration flow should then present additional options.
+
+10. Select **Submit** to finalize the setup.
+
+## Supported functionality
+
+### Entities
+
+The **Nintendo Switch Parental Controls** integration provides the following entities.
+
+#### Sensors
+
+- **Used screen time**
+ - **Description**: The current used screen time for a given device.
+ - **Unit of measurement**: `minutes`
+ - **Device class**: `duration`
+- **Time remaining**
+ - **Description**: The amount total amount of time remaining for a device.
+ - **Unit of measurement**: `minutes`
+ - **Device class**: `duration`
+
+#### Time
+
+- **Bedtime alarm**
+ - **Description**: A set bedtime for a given device, at this time, the Switch can either "lock" or show an alert in the top left corner.
+
+#### Switch
+- **Suspend software**
+ - **Description**: Enable to automatically suspend running software when the Bedtime alarm is reached or the maximum screen time is exceeded. Turn off to allow software to continue running past these limits.
+
+#### Number
+
+- **Max screentime today**
+ - **Description**: Maximum amount of screentime to allow today, for unlimited screentime, set to `-1`. By setting this to `0` and turning the **Suspend software** switch on, you can 'lock' your Nintendo Switch.
+
+## Actions
+
+The integration provides the following actions.
+
+### Action: Add bonus time
+
+The `nintendo_parental_controls.add_bonus_time` action adds additional bonus screen time to a specified device, which is granted outside of the maximum allowed screentime.
+
+- **Data attribute**: `config_entry_id`
+ - **Description**: The ID of the config entry containing the device to grant bonus time.
+ - **Optional**: No
+- **Data attribute**: `device_id`
+ - **Description**: The ID of the device to grant bonus time.
+ - **Optional**: No
+- **Data attribute**: `bonus_time`
+ - **Description**: The amount of time in minutes to grant (minimum of 5, maximum of 30).
+ - **Optional**: No
+
+## Known limitations
+
+The integration currently does not provide all the functionality found in the mobile app. Future updates will see this extended.
+
+Further, this integration relies on the cloud and cannot make a local connection to your Switch.
+
+The range used for bonus time is set by Nintendo and therefore cannot be changed.
+
+## Troubleshooting
+
+### Data is not updating in Home Assistant
+
+Make sure the Switch has access to the internet, without this, usage data is not being sent to Nintendo.
+
+## Removing the integration
+
+This integration follows standard integration removal.
+
+{% include integrations/remove_device_service.md %}
diff --git a/source/_integrations/ntfy.markdown b/source/_integrations/ntfy.markdown
index fd41b36d85a..eb7d331f33c 100644
--- a/source/_integrations/ntfy.markdown
+++ b/source/_integrations/ntfy.markdown
@@ -2,21 +2,21 @@
title: ntfy
description: Instructions on how to integrate ntfy with Home Assistant.
ha_category:
- - Notifications
- Event
+ - Notifications
ha_iot_class: Cloud Push
ha_release: 2025.5
ha_config_flow: true
ha_codeowners:
- '@tr4nt0r'
ha_domain: ntfy
-ha_integration_type: integration
+ha_integration_type: service
ha_platforms:
- diagnostics
+ - event
- notify
- sensor
- - event
-ha_quality_scale: bronze
+ha_quality_scale: platinum
---
The **ntfy** {% term integration %} allows publishing push notifications on [ntfy.sh](https://ntfy.sh/) or other ntfy services.
@@ -141,7 +141,7 @@ For more customizable notifications, use the `ntfy.publish` action instead of `n
- `title`: Title for your notification message.
- `message`: Your notification message.
-- `markdown`: Enable Markdown formatting for the message body (Web app only). See the Markdown guide for syntax details: [https://www.markdownguide.org/basic-syntax/](https://www.markdownguide.org/basic-syntax/).
+- `markdown`: Enable Markdown formatting for the message body. See the Markdown guide for syntax details: [https://www.markdownguide.org/basic-syntax/](https://www.markdownguide.org/basic-syntax/).
- `tags`: Add tags or emojis to the notification. Emojis (using shortcodes like `smile`) will appear in the notification title or message. Other tags will be displayed below the notification content.
- `priority`: All messages have a priority, which defines how urgently your phone notifies you, depending on the configured vibration patterns, notification sounds, and visibility in the notification drawer or pop-over.
- `click`: URL that is opened when the notification is clicked.
@@ -226,6 +226,10 @@ The **ntfy** integration adds a device representing the service, along with vari
- **Subscription tier**: The subscription plan currently assigned to the ntfy account.
+## Data updates
+
+The integration retrieves data from **ntfy.sh** (or your own ntfy instance) every 15 minutes to update the usage statistics sensors.
+
## Known limitations
**ntfy** imposes various rate and usage limits. The official [ntfy.sh](https://ntfy.sh/) service allows up to **60 messages in a burst**, with a **replenishment rate of one message every 5 seconds** (i.e., the full 60-message capacity refills in 5 minutes).
diff --git a/source/_integrations/number.markdown b/source/_integrations/number.markdown
index d448c182e09..139f78fe400 100644
--- a/source/_integrations/number.markdown
+++ b/source/_integrations/number.markdown
@@ -46,8 +46,8 @@ The following device classes are supported for numbers:
- **atmospheric_pressure**: Atmospheric pressure in cbar, bar, hPa, mmHg, inHg, kPa, mbar, Pa or psi
- **battery**: Percentage of battery that is left in %
- **blood_glucose_concentration**: Blood glucose concentration in mg/dL, mmol/L
-- **carbon_dioxide**: Carbon Dioxide in CO2 (Smoke) in ppm
-- **carbon_monoxide**: Carbon Monoxide in CO (Gas CNG/LPG) in ppm
+- **carbon_dioxide**: Carbon Dioxide (CO₂) concentration in ppm
+- **carbon_monoxide**: Carbon Monoxide (CO) concentration in ppm, µg/m³, mg/m³
- **current**: Current in A, mA
- **data_rate**: Data rate in bit/s, kbit/s, Mbit/s, Gbit/s, B/s, kB/s, MB/s, GB/s, KiB/s, MiB/s or GiB/s
- **data_size**: Data size in bit, kbit, Mbit, Gbit, B, kB, MB, GB, TB, PB, EB, ZB, YB, KiB, MiB, GiB, TiB, PiB, EiB, ZiB or YiB
@@ -70,12 +70,13 @@ The following device classes are supported for numbers:
- **ph**: Potential hydrogen (pH) value of a water solution
- **pm1**: Concentration of particulate matter less than 1 micrometer in µg/m³
- **pm25**: Concentration of particulate matter less than 2.5 micrometers in µg/m³
+- **pm4**: Concentration of particulate matter less than 4 micrometers in µg/m³
- **pm10**: Concentration of particulate matter less than 10 micrometers in µg/m³
- **power_factor**: Power factor (unitless), unit may be `None` or %
- **power**: Power in mW, W, kW, MW, GW or TW
- **precipitation**: Accumulated precipitation in cm, in or mm
- **precipitation_intensity**: Precipitation intensity in in/d, in/h, mm/d or mm/h
-- **pressure**: Pressure in Pa, kPa, hPa, bar, cbar, mbar, mmHg, inHg, inH₂O or psi
+- **pressure**: Pressure in mPa, Pa, hPa, kPa, bar, cbar, mbar, mmHg, inHg, inH₂O or psi
- **reactive_energy**: Reactive energy in varh or kvarh
- **reactive_power**: Reactive power in mvar, var, or kvar
- **signal_strength**: Signal strength in dB or dBm
@@ -83,11 +84,12 @@ The following device classes are supported for numbers:
- **speed**: Generic speed in ft/s, in/d, in/h, in/s, km/h, kn, m/s, mph, mm/d, or mm/s
- **sulphur_dioxide**: Concentration of sulphur dioxide in µg/m³
- **temperature**: Temperature in °C, °F or K
+- **temperature_delta**: Temperature representing a difference between two values in °C, °F or K
- **volatile_organic_compounds**: Concentration of volatile organic compounds in µg/m³ or mg/m³
- **volatile_organic_compounds_parts**: Ratio of volatile organic compounds in ppm or ppb
- **voltage**: Voltage in V, mV, µV, kV, MV
- **volume**: Generic volume in L, mL, gal, fl. oz., m³, ft³, CCF, or MCF
-- **volume_flow_rate**: Volume flow rate in m³/h, m³/min, m³/s, ft³/min, L/h, L/min, L/s, gal/min, or mL/s
+- **volume_flow_rate**: Volume flow rate in m³/h, m³/min, m³/s, ft³/min, L/h, L/min, L/s, gal/h, gal/min, or mL/s
- **volume_storage**: Generic stored volume in L, mL, gal, fl. oz., m³, ft³, CCF, or MCF
- **water**: Water consumption in L, gal, m³, ft³, CCF, or MCF
- **weight**: Generic mass in kg, g, mg, µg, oz, lb, or st
diff --git a/source/_integrations/number.mqtt.markdown b/source/_integrations/number.mqtt.markdown
index e96a26827e7..515ece52547 100644
--- a/source/_integrations/number.mqtt.markdown
+++ b/source/_integrations/number.mqtt.markdown
@@ -12,7 +12,7 @@ The `mqtt` Number platform allows you to integrate devices that might expose con
## Configuration
-To use an MQTT number entity in your installation, add the following to your {% term "`configuration.yaml`" %} file.
+To use an MQTT number 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 %}
```yaml
diff --git a/source/_integrations/octoprint.markdown b/source/_integrations/octoprint.markdown
index 96906f2c5dd..285fb3d7320 100644
--- a/source/_integrations/octoprint.markdown
+++ b/source/_integrations/octoprint.markdown
@@ -5,6 +5,7 @@ ha_category:
- 3D printing
- Binary sensor
- Button
+ - Number
- Sensor
ha_config_flow: true
ha_release: 0.19
@@ -18,6 +19,7 @@ ha_platforms:
- binary_sensor
- button
- camera
+ - number
- sensor
ha_integration_type: integration
---
@@ -87,6 +89,19 @@ The OctoPrint integration provides the following buttons:
- Shutdown System
- Stop Job
+## Number
+
+The OctoPrint integration lets you set target bed and tool temperature. These writable properties return the same data as Target Temperature sensors, and additionally allow changing Target Temperature from automation, scripts, or entities card interaction.
+
+- Set Target Bed Temperature
+- Set Target Tool (Nozzle) Temperature
+
+## Actions
+
+The OctoPrint integration provides the following actions, which may be invoked from automation, scripts, or as a button interaction.
+
+- Connect to printer
+
## Troubleshooting
### Device is already configured for a second instance
diff --git a/source/_integrations/ogemray.markdown b/source/_integrations/ogemray.markdown
index 9a090855a55..819f2e632da 100644
--- a/source/_integrations/ogemray.markdown
+++ b/source/_integrations/ogemray.markdown
@@ -21,7 +21,6 @@ ha_integration_type: virtual
ha_supporting_domain: shelly
ha_supporting_integration: Shelly
ha_codeowners:
- - '@balloob'
- '@bieniu'
- '@thecode'
- '@chemelli74'
diff --git a/source/_integrations/ollama.markdown b/source/_integrations/ollama.markdown
index 7b355a24a43..43c64ec8250 100644
--- a/source/_integrations/ollama.markdown
+++ b/source/_integrations/ollama.markdown
@@ -2,6 +2,7 @@
title: Ollama
description: Instructions on how to integrate Ollama
ha_category:
+ - AI
- Voice
ha_release: 2024.4
ha_iot_class: Local Polling
diff --git a/source/_integrations/onewire.markdown b/source/_integrations/onewire.markdown
index 2705356ad9a..742a59cfcda 100644
--- a/source/_integrations/onewire.markdown
+++ b/source/_integrations/onewire.markdown
@@ -18,6 +18,7 @@ ha_platforms:
- switch
ha_integration_type: hub
ha_zeroconf: true
+ha_quality_scale: silver
---
The Onewire integration supports sensors that use the 1-wire bus for communication.
@@ -105,6 +106,21 @@ The 1-Wire bus can be connected with a remote 1-wire host over a network connect
{% include integrations/config_flow.md %}
+{% configuration_basic %}
+Host:
+ description: The hostname or IP address of your OWServer instance.
+Port:
+ description: The port of your OWServer instance.
+ default: 4304
+{% endconfiguration_basic %}
+
+{% include integrations/option_flow.md %}
+
+{% configuration_basic %}
+Device selection:
+ description: The precision of the `DS18B20` temperature sensors can be configured for individual devices. The lower the precision, the faster the sensor will respond, but with less accuracy. The selected precision is reflected in the `device_path` attribute of the sensor entities.
+{% endconfiguration_basic %}
+
### Entities and attributes
Upon startup of the platform, the 1-wire bus is searched for available 1-wire devices. On Bridge devices, the `aux` and `main` branches are recursively searched. For each device that this platform handles (see list of supported devices above), the platform adds one sensor for each physical quantity it measures. The name of the sensor is the device ID with the physical quantity it measures appended. Unsupported sensors are noted with a warning message in the log.
@@ -122,29 +138,29 @@ unit_of_measurement: °C
friendly_name: 28.FF5C68521604 Temperature
```
-### Units with multiple sensors
-
-This platform works with devices with multiple sensors, which will cause a discontinuity in recorded values. Existing devices will receive a new ID and therefore show up as new devices.
-If you wish to maintain continuity, it can be resolved in the database by renaming the old devices to the new names.
-
-Connect to your database using the instructions from [Database section](/docs/backend/database/). Check the names of sensors:
-
-```sql
-SELECT entity_id, COUNT(*) as count FROM states GROUP BY entity_id ORDER BY count DESC LIMIT 10;
-```
-
-Alter the names of sensors using the following examples:
-
-```sql
-UPDATE states SET entity_id='sensor._temperature' WHERE entity_id LIKE 'sensor.%' AND attributes LIKE '%\u00b0C%';
-UPDATE states SET entity_id='sensor._pressure' WHERE entity_id LIKE 'sensor.%' AND attributes LIKE '%mb%';
-UPDATE states SET entity_id='sensor._humidity' WHERE entity_id LIKE 'sensor.%' AND attributes LIKE '%%%' ESCAPE '';
-```
-
-Remember to replace `` with the actual name of the sensor, as seen in the `SELECT` query.
-
## Removing the integration
This integration follows standard integration removal. No extra steps are required.
{% include integrations/remove_device_service.md %}
+
+## Troubleshooting
+
+### Temperature reported as 85°C
+
+A reading of 85°C on a `DS18B20` may indicate a valid value, or it may indicate a wiring issue or a loss of power.
+
+> 85°C is the power-on reset value of the `DS18B20`. It can report such a value when its tiny internal capacitor that acts as its power supply is depleted.
+
+There is currently no way to distinguish between a valid and an invalid 85°C value. If such values are reported incorrectly, the first step is to check the wiring (possibly ensuring that the temperature sensors are powered, and not using parasitic power).
+
+If all else fails, then a template can be used to filter out the incorrect values:
+{% raw %}
+```jinja
+{% if states('sensor.28_a05966040000_temperature') | float != 85 %}
+ {{ states('sensor.28_a05966040000_temperature') }}
+{% else %}
+ None
+{% endif %}
+```
+{% endraw %}
diff --git a/source/_integrations/open_router.markdown b/source/_integrations/open_router.markdown
index db59ab26ad9..2e9f12cae34 100644
--- a/source/_integrations/open_router.markdown
+++ b/source/_integrations/open_router.markdown
@@ -2,6 +2,7 @@
title: OpenRouter
description: Instructions on how to integrate OpenRouter as a conversation agent
ha_category:
+ - AI
- Voice
ha_release: 2025.8
ha_iot_class: Cloud Polling
diff --git a/source/_integrations/openai_conversation.markdown b/source/_integrations/openai_conversation.markdown
index cc7d4079be9..75e1bdecc4d 100644
--- a/source/_integrations/openai_conversation.markdown
+++ b/source/_integrations/openai_conversation.markdown
@@ -2,12 +2,11 @@
title: OpenAI
description: Instructions on how to integrate OpenAI as a conversation agent
ha_category:
+ - AI
- Voice
ha_release: 2023.2
ha_iot_class: Cloud Polling
ha_config_flow: true
-ha_codeowners:
- - '@balloob'
ha_domain: openai_conversation
ha_integration_type: service
ha_platforms:
@@ -166,7 +165,7 @@ with the response from OpenAI.
- **Service data attribute**: `config_entry`
- **Description**: Integration entry ID to use.
- - **Example**:
+ - **Example**:
- **Optional**: no
- **Service data attribute**: `prompt`
@@ -189,7 +188,7 @@ data:
Very briefly describe what you see in this image from my doorbell camera.
Your message needs to be short to fit in a phone notification. Don't
describe stationary objects or buildings.
- image_filename:
+ image_filename:
- /tmp/doorbell_snapshot.jpg
response_variable: generated_content
```
diff --git a/source/_integrations/openrgb.markdown b/source/_integrations/openrgb.markdown
new file mode 100644
index 00000000000..6c1aec20dd6
--- /dev/null
+++ b/source/_integrations/openrgb.markdown
@@ -0,0 +1,104 @@
+---
+title: OpenRGB
+description: Instructions on how to integrate OpenRGB within Home Assistant.
+ha_category:
+ - Light
+ha_release: 2025.11
+ha_iot_class: Local Polling
+ha_config_flow: true
+ha_codeowners:
+ - '@felipecrs'
+ha_domain: openrgb
+ha_platforms:
+ - light
+ha_integration_type: hub
+ha_quality_scale: silver
+---
+
+The **OpenRGB** {% term integration %} is used to integrate the RGB lighting devices from computers running [OpenRGB](https://openrgb.org/).
+OpenRGB provides a unified interface for controlling various RGB lighting hardware from different manufacturers.
+
+## Prerequisites
+
+To use this integration, you need the **OpenRGB** application installed on your computer with the SDK Server running.
+
+To enable the OpenRGB SDK server:
+
+1. In the OpenRGB application, go to **SDK Server** tab.
+2. Select **Start Server**.
+3. Optionally, go to the **Settings** tab and check **Start at Login**, **Start Minimized**, and **Start Server** for convenience.
+
+**Note**: if you opted to **Install System Service** in the OpenRGB **Windows installer**, the SDK server is probably already running. You can check this in the **Services** application in Windows, looking for the **OpenRGB** service.
+
+{% include integrations/config_flow.md %}
+
+{% configuration_basic %}
+Name:
+ description: A name for this integration entry, like the name of the computer running the OpenRGB SDK server (for example, `My Gaming PC`).
+Host:
+ description: The hostname or IP address of the computer running the OpenRGB SDK server (for example, `192.168.1.100`).
+Port:
+ description: The port number that the OpenRGB SDK server is running on (default is `6742`).
+{% endconfiguration_basic %}
+
+## Supported devices
+
+This integration supports any RGB device that is compatible with OpenRGB. Refer to the [OpenRGB Supported Devices list](https://openrgb.org/devices.html).
+
+## Supported functionality
+
+The OpenRGB integration provides the following entities:
+
+### Lights
+
+For each RGB device connected to OpenRGB, the integration creates a light entity to control all the LEDs on that device as a single unit.
+
+## Data updates
+
+The **OpenRGB** integration {% term polling polls %} data from the OpenRGB SDK server **every 15 seconds**.
+
+## Reconfiguration
+
+If you need to update your OpenRGB SDK server connection details, you can reconfigure the integration:
+
+1. Go to **{% my integrations title="Settings > Devices & Services" %}**.
+2. Select **OpenRGB**. Select the three dots {% icon "mdi:dots-vertical" %} menu and then select **Reconfigure**.
+3. Update the hostname/IP address and port number as needed.
+4. Select **Submit**.
+
+The integration will then reconnect to the OpenRGB SDK server with the new settings.
+
+## Known limitations
+
+- Changes made directly in the OpenRGB application may not be immediately reflected in Home Assistant (the integration polls for updates every 15 seconds).
+- Some OpenRGB features like per-zone and per-LED control are not yet supported through Home Assistant
+
+## Troubleshooting
+
+### Connection errors
+
+If you encounter connection errors:
+
+- Verify that the **OpenRGB SDK server is running** in the OpenRGB application.
+- Verify that the **SDK Server** > **Server Host** is set to `0.0.0.0` in the OpenRGB application.
+- Confirm that the IP address of the computer running the OpenRGB SDK server matches the **Host** configured in the OpenRGB integration.
+- Confirm that the **SDK Server** > **Server Port** matches the port configured in the OpenRGB integration.
+- Check for firewall rules that may block the connection from Home Assistant to the OpenRGB SDK server.
+
+### Devices not appearing
+
+If your RGB devices don't appear in Home Assistant:
+
+- Verify the devices are detected and working in the OpenRGB application first.
+
+### Light effects not working
+
+If lighting effects are not working:
+
+- Verify the effect/mode can be applied in the OpenRGB application first.
+
+## 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/opnsense.markdown b/source/_integrations/opnsense.markdown
index 2160ed84605..9da79c47827 100644
--- a/source/_integrations/opnsense.markdown
+++ b/source/_integrations/opnsense.markdown
@@ -1,5 +1,5 @@
---
-title: OPNSense
+title: OPNsense
description: Instructions on how to configure OPNsense integration
ha_category:
- Hub
@@ -42,6 +42,10 @@ User with API Key requires privileges for Type:
- GUI Name: Diagnostics: ARP Table
- GUI Name: Diagnostics: Network Insight
+{% important %}
+OPNSense versions 25.7 and later require All Pages privilege to be granted to the API user account.
+{% endimportant %}
+
{% configuration %}
url:
description: The URL for the OPNsense API endpoint of your router.
diff --git a/source/_integrations/opower.markdown b/source/_integrations/opower.markdown
index ce29dd93cd5..0fde290bc61 100644
--- a/source/_integrations/opower.markdown
+++ b/source/_integrations/opower.markdown
@@ -13,6 +13,7 @@ ha_config_flow: true
ha_platforms:
- sensor
ha_integration_type: integration
+ha_quality_scale: bronze
---
The Opower integration allows you to get energy information from utilities that use [Opower](https://www.oracle.com/industries/utilities/opower-energy-efficiency/).
@@ -32,7 +33,6 @@ More than 175 utilities use Opower. Currently only the following utilities are s
- Consolidated Edison (ConEd) and subsidiaries
- Orange & Rockland Utilities (ORU)
- Duquesne Light Company (DQE)
-- Enmax Energy
- Evergy
- Exelon subsidiaries
- Atlantic City Electric
@@ -80,11 +80,11 @@ Alternatively, you can create a new TOTP secret for your account and use the "no
**NOTE: At this time, ConEd only has a single TOTP set up per account. Therefore, it is important that you configure the same TOTP secret for ConEd access in both Opower and your authenticator app.**
-### Exelon subsidiaries
+### Exelon subsidiaries (ACE, BGE, ComEd, Delmarva, PECO, Pepco)
-When using Opower with any of the Exelon subsidiaries, such as BGE, ComEd, PECO, Pepco, etc., you need to actively disable two-factor authentication.
-Before proceeding, make sure you understand the security implications of disabling 2FA.
-Log onto the website, select **Don't use 2FA** and **Don't ask me again**. If you have already enabled 2FA, you most likely cannot disable it, which unfortunately means you cannot use this integration.
+The integration properly supports Multi-Factor Authentication (MFA) for Exelon subsidiaries via code sent to either email or phone SMS. These subsidiaries turned on MFA automatically for customers,
+however you may not have added a phone number. This integration supports this use case, but beware that once you add a phone you most likely cannot remove it entirely.
+You will be asked to re-authenticate via MFA periodically.
### Pacific Gas & Electric (PG&E)
diff --git a/source/_integrations/overkiz.markdown b/source/_integrations/overkiz.markdown
index 8981d2bd3a9..1022edb11bd 100644
--- a/source/_integrations/overkiz.markdown
+++ b/source/_integrations/overkiz.markdown
@@ -99,7 +99,13 @@ This integration retrieves data from Overkiz every 30 seconds to ensure timely u
## Known limitations
-### Zigbee, Z-Wave, Hue, and Sonos devices not supported
+### Unsupported hardware
+
+Some devices that appear in your vendor app may not use the Overkiz platform and are not accessible through the Overkiz API. For example, Somfy Protect devices and some Atlantic Cozytouch devices are not supported by this integration.
+
+If you have a Cozytouch device that is not supported by the Overkiz integration, you can explore [custom components](https://github.com/gduteil/cozytouch) created by the community. These may provide support for additional Cozytouch devices.
+
+### Zigbee, Z-Wave, Hue, and Sonos devices are not supported
Even though most Overkiz hubs support adding Zigbee, Z-Wave, Hue, and Sonos devices, this isn't supported in the Overkiz integration. All these platforms have native integrations in Home Assistant, which provide more frequent state updates and are more feature-rich.
@@ -128,6 +134,10 @@ cover:
entity_id: cover.rts_test_shutter # change to your device id
```
+### Troubleshooting connection issues with the local API
+
+If your entities frequently become unavailable for short periods, this usually indicates connection problems between Home Assistant and your gateway. To improve reliability, try connecting to your gateway using its IP address instead of the `gateway-xxxx-xxxx-xxx.local` hostname.
+
### Overkiz API limits
**Device state changes are not broadcasted for all devices**
diff --git a/source/_integrations/panasonic_viera.markdown b/source/_integrations/panasonic_viera.markdown
index 087e5ee2f63..7dc35395950 100644
--- a/source/_integrations/panasonic_viera.markdown
+++ b/source/_integrations/panasonic_viera.markdown
@@ -141,6 +141,7 @@ The list with all known valid keys can be found [here](https://github.com/floria
- TX-40DX700B
- TX-42AS650
- TX-49DX650B
+- TX-49FXW654
- TX-50DX700B
- TX-55ASM655
- TX-55ASW654
diff --git a/source/_integrations/paperless_ngx.markdown b/source/_integrations/paperless_ngx.markdown
index 3bd7ac1bb98..bf3b9295a9f 100644
--- a/source/_integrations/paperless_ngx.markdown
+++ b/source/_integrations/paperless_ngx.markdown
@@ -131,12 +131,6 @@ There are a few known limitations for using the integration:
- This integration is only fully supported with **Paperless-ngx version 2.15 or later**. Earlier versions are not supported.
- To enable monitoring of diagnostic sensors, you must have **administrator permissions**. Without administrator rights, specific API endpoints cannot be accessed, and the sensor states will not be available.
-## Removing the integration
-
-This integration follows standard integration removal. No extra steps are required.
-
-{% include integrations/remove_device_service.md %}
-
## Troubleshooting
{% details "Message: 'Invalid hostname or IP address'" %}
diff --git a/source/_integrations/pegel_online.markdown b/source/_integrations/pegel_online.markdown
index 9eba1c356d8..701eb4f1df5 100644
--- a/source/_integrations/pegel_online.markdown
+++ b/source/_integrations/pegel_online.markdown
@@ -14,6 +14,7 @@ ha_platforms:
ha_codeowners:
- '@mib1185'
ha_integration_type: service
+ha_quality_scale: platinum
---
This integration uses the data from the German Federal Waterways and Shipping Administration (_Wasserstraßen- und Schifffahrtsverwaltung des Bundes_) [PEGELONLINE](https://www.pegelonline.wsv.de/) to provide different [sensors](#sensors), based on the available data of the selected measurement station.
diff --git a/source/_integrations/pi_hole.markdown b/source/_integrations/pi_hole.markdown
index 2e20f676f72..77a41ae84c6 100644
--- a/source/_integrations/pi_hole.markdown
+++ b/source/_integrations/pi_hole.markdown
@@ -40,9 +40,9 @@ During the setup, it will ask for the following:
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`.
-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**.
+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**. Your admin login password may be used instead but this is not recommended.
-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**
+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
@@ -67,7 +67,10 @@ data:
target:
entity_id: all
```
-
## Switches
-The integration creates a switch for the Pi-hole allowing you to toggle the Pi-hole on and off.
+The integration creates a switch for the Pi-hole allowing you to toggle ad-blocking on and off.
+
+## Sensors
+
+The integration creates a number of sensors which report various ad-blocking metrics as well as diagnostic information about the pi-hole itself.
diff --git a/source/_integrations/piper.markdown b/source/_integrations/piper.markdown
index cfeec57cc98..10d93d5d490 100644
--- a/source/_integrations/piper.markdown
+++ b/source/_integrations/piper.markdown
@@ -9,7 +9,6 @@ ha_integration_type: virtual
ha_supporting_domain: wyoming
ha_supporting_integration: Wyoming Protocol
ha_codeowners:
- - '@balloob'
- '@synesthesiam'
ha_config_flow: true
ha_platforms:
diff --git a/source/_integrations/pitsos.markdown b/source/_integrations/pitsos.markdown
index 750f2eb91f6..27cc43ef0f8 100644
--- a/source/_integrations/pitsos.markdown
+++ b/source/_integrations/pitsos.markdown
@@ -29,7 +29,6 @@ ha_platforms:
- select
- sensor
- switch
- - time
ha_iot_class: Cloud Push
ha_dhcp: true
ha_zeroconf: true
diff --git a/source/_integrations/playstation_network.markdown b/source/_integrations/playstation_network.markdown
index e28ec8248ee..1d43229bd90 100644
--- a/source/_integrations/playstation_network.markdown
+++ b/source/_integrations/playstation_network.markdown
@@ -101,6 +101,9 @@ After adding a friend, a new device will be created with the following entities:
- **Online status**: Indicates the friend's current availability on the PlayStation Network.
- **Last online**: Displays the time the friend was last seen online.
- **Now playing**: Shows the title of the game the friend is currently playing.
+- **Trophy level**: Your friend's current PlayStation trophy level.
+- **Next Level**: Your friend's progress towards the next PlayStation trophy level.
+- **Platinum, gold, silver, and bronze trophies**: The total number of trophies your friend has earned.
### Image
diff --git a/source/_integrations/plex.markdown b/source/_integrations/plex.markdown
index c64c6238530..c24e47a82ed 100644
--- a/source/_integrations/plex.markdown
+++ b/source/_integrations/plex.markdown
@@ -76,6 +76,9 @@ The library sensors show a count of items in each library. Depending on the libr
In addition to the item count, the last added media item (movie, album, or episode) and a timestamp showing when it was added are also provided with each library sensor.
Example automation to use the `last_added_item` attribute on library sensors to notify when new media has been added:
+
+{% raw %}
+
```yaml
alias: "Plex - New media added"
triggers:
@@ -96,8 +99,10 @@ actions:
message: "{{ trigger.to_state.attributes.last_added_item }}"
```
+{% endraw %}
+
{% important %}
-The library sensors are disabled by default, but can be enabled via the Plex integration page.
+The library sensors are disabled by default, but can be enabled via the Plex integration page. After the sensors are enabled, you may need to add a new item to your library before the last added media attribute is populated.
{% endimportant %}
## Button
diff --git a/source/_integrations/plugwise.markdown b/source/_integrations/plugwise.markdown
index e24bde92c92..e13234264a7 100644
--- a/source/_integrations/plugwise.markdown
+++ b/source/_integrations/plugwise.markdown
@@ -186,7 +186,7 @@ The available schedules depend on the [schedules](#schedule-management) you have
The following HVAC modes are available:
-- `auto`: Active schedule – The thermostat changes presets/setpoints according to the schedule.
+- `auto`: Thermostat schedule active – The thermostat changes presets/setpoints according to the user-created schedule.
- `cool or heat`: No active schedule – The system is manually set to cooling or heating mode, activating based on room temperature relative to the thermostat setpoint.
For Adam:
@@ -310,9 +310,8 @@ A complete zone control system also known as [Adam HA](https://www.plugwise.com/
- On/Off, OpenTherm heating and cooling support.
- Running firmwares v3.x or v2.3.
- Additional devices:
- - Zone thermostats such as Lisa or Anna (see warning below on Anna),
- - A temperature sensor, Jip,
- - Valve controllers called Floor or Tom,
+ - Zone thermostats such as Anna, Emma, Lisa or Jip (see warning below on Anna connected to Adam),
+ - Valve controllers called Floor or Tom, can also function as a zone thermostat
- An under-floor heating controller Koen (note: a Koen always comes with a Plug, which is the active part),
- Smart switches, either Plug or Aqara Smart Plug.
@@ -331,16 +330,16 @@ A [smart thermostat](https://www.plugwise.com/en_US/products/anna), supporting:
A [P1](https://www.plugwise.com/en_US/products/smile-p1) smart meter monitor for the single- or multi-phase grid power connection to your home including gas usage monitoring. Running firmware v4.x, v3.x or v2.x.
+#### Anna P1
+
+A smart thermostat [combined](https://www.plugwise.com/en_US/products/anna-p1) with an energy monitor can transform the way you manage energy. If your solar setup generates surplus energy and you're charged for it, this combination ensures that excess solar power is redirected efficiently. Powering your heat pump for instance to make the most of renewable energy. Do you have a setup like this? We’d love to hear your experience!
+
### Stretch (end-of-sale)
For controlling and monitoring legacy power switches, such as the Circles or Stealths, with v3.x or v2.x Stretch firmware.
### Unsupported devices
-#### Anna P1
-
-A smart thermostat [combined](https://www.plugwise.com/en_US/products/anna-p1) with an energy monitor can transform the way you manage energy. If your solar setup generates surplus energy and you're charged for it, this combination ensures that excess solar power is redirected efficiently. Powering your heat pump for instance to make the most of renewable energy. Do you have a setup like this? We’d love to hear your experience!
-
#### Stick
Plugwise formerly sold power-based products comprised of a USB stick, as the controller, and smart plugs (amongst a few other items). This integration does not support the USB-stick. Reuse of the these products, such as Circles and Stealths using a Stretch or an Adam is supported. Work for USB support is in development by the community, but not ready to become a formal Home Assistant integration just yet.
diff --git a/source/_integrations/plum_lightpad.markdown b/source/_integrations/plum_lightpad.markdown
deleted file mode 100644
index 62f1eee2e35..00000000000
--- a/source/_integrations/plum_lightpad.markdown
+++ /dev/null
@@ -1,26 +0,0 @@
----
-title: Plum Lightpad
-description: Instructions on setting up Plum Lightpads within Home Assistant.
-ha_category:
- - Switch
-ha_iot_class: Local Push
-ha_config_flow: true
-ha_release: 0.85
-ha_domain: plum_lightpad
-ha_codeowners:
- - '@ColinHarrington'
- - '@prystupa'
-ha_platforms:
- - light
-ha_integration_type: integration
----
-
-Configurable/Dimmable Wi-Fi Lightswitch
-- Cloud registered, Local API communication (both RESTful and TCP pushed events)
-- Motion Sensor
-- Energy Meter
-- RGB Glow Ring
-- Wi-Fi & Bluetooth connectivity
-- Phone Apps for iOS & Android
-
-{% include integrations/config_flow.md %}
diff --git a/source/_integrations/pooldose.markdown b/source/_integrations/pooldose.markdown
index d66ecaba8a6..d0476f372fc 100644
--- a/source/_integrations/pooldose.markdown
+++ b/source/_integrations/pooldose.markdown
@@ -2,29 +2,31 @@
title: SEKO PoolDose
description: Connect your SEKO PoolDose water treatment system to Home Assistant.
ha_category:
- - Water Management
- Sensor
+ - Water Management
ha_iot_class: Local Polling
ha_config_flow: true
-ha_release: "2025.9"
+ha_release: '2025.9'
ha_codeowners:
- '@lmaertin'
ha_domain: pooldose
ha_platforms:
- sensor
ha_integration_type: integration
+ha_quality_scale: bronze
+ha_dhcp: true
---
The PoolDose integration connects a [SEKO](https://www.seko.com/) water treatment system with Home Assistant. SEKO is a manufacturer of various monitoring and control devices for pools and spas.
-This integration uses an undocumented local HTTP API. It provides live readings for pool sensors such as temperature, pH, ORP/Redox, as well as configuration parameters.
+This integration uses an undocumented local HTTP API. It provides live readings for pool sensors such as temperature, pH, ORP/Redox, as well as configuration parameters.
## Prerequisites
-1. Install and set-up the PoolDose device according to its user manual.
+1. Install and set up the PoolDose device according to its user manual.
1. In particular, connect the device to your Wi-Fi network.
2. Identify the IP address or hostname of the device.
-2. Browse to the IP address resp. hostname. Use HTTP and port 80.
+2. Browse to the IP address or hostname. Use HTTP and port 80.
1. Log in to the web interface.
2. Verify that sensor data is displayed, such as water temperature or pH values shown as gauges.
3. Deactivate the device password, i.e., set it to 0000.
@@ -34,7 +36,7 @@ This integration uses an undocumented local HTTP API. It provides live readings
{% configuration_basic %}
Host:
- description: The IP address resp. hostname of your device. Identify the IP address resp. hostname in the web interface of the device or of your router.
+ description: The IP address or hostname of your device. Identify this in the web interface of the device or of your router.
{% endconfiguration_basic %}
## Removing the integration
@@ -79,6 +81,20 @@ The following devices are known to be supported by the integration:
| **orp_calibration_offset** | mV | ORP calibration offset value | — |
| **orp_calibration_slope** | mV | ORP calibration slope value | — |
+## Known limitations
+
+### Hardware and connectivity issues
+
+The PoolDose devices have two characteristics that can affect their network connectivity:
+
+- **Hardware limitations**: The devices use a small-scale controller that is heavily loaded by web server and data processing tasks. This can occasionally cause brief connection interruptions, though devices typically recover quickly.
+
+- **Energy-saving mode**: When the pump monitoring feature is activated in the device settings, the device often enters an energy-saving mode if no pump operation is detected. During this time, the device may be less responsive or temporarily unavailable on the network, for example, at night.
+
+### Cached data behavior
+
+These limitations are normal behavior for the device and not issues with the integration itself. To handle these connectivity issues, the integration caches values for a maximum of 300 seconds (5 minutes) when the device is temporarily unresponsive. After this cache period expires, entities will show as "unavailable" until the device provides new data again.
+
## Troubleshooting
### Device not found
@@ -89,7 +105,7 @@ When trying to set up the integration, you receive an error that the device cann
##### Description
-The device may not be properly connected to your network or may be using a different hostname than expected.
+The device may not be properly connected to your network, or it may be using a different IP address or hostname than expected.
##### Resolution
@@ -108,7 +124,7 @@ The integration cannot connect to the device even though it's found on the netwo
##### Description
-This typically occurs when the device's web interface password is not set to the default value resp. deactivated.
+This typically occurs when the device's web interface password is not set to the default value (0000) or not properly deactivated.
##### Resolution
@@ -136,3 +152,22 @@ This behavior is expected and does not indicate a problem with the integration:
1. The integration uses cached values when the device is temporarily unresponsive.
2. Entities will return to normal once the device becomes responsive again.
3. Consider this behavior when creating automations that depend on these sensors.
+
+### Missing peristaltic pump status
+
+#### Symptom: No peristaltic pump status data is available
+
+Peristaltic pump status sensors don't show any data or appear as unavailable.
+
+##### Description
+
+The PoolDose device only propagates the status of peristaltic dosing pumps when the external relays for these pumps are enabled in the device settings.
+
+##### Resolution
+
+To get peristaltic pump status data:
+
+1. Browse to your PoolDose device's settings.
+2. Find the external relay configuration for the pH and ORP pumps.
+3. Enable the external relays for the pumps you want to monitor.
+4. Save the settings and restart the device if required.
diff --git a/source/_integrations/portainer.markdown b/source/_integrations/portainer.markdown
index d9bad2945dc..f857b8a8cc3 100644
--- a/source/_integrations/portainer.markdown
+++ b/source/_integrations/portainer.markdown
@@ -3,15 +3,20 @@ title: Portainer
description: Instructions on how to integrate Portainer with Home Assistant.
ha_category:
- Binary sensor
-ha_release: "2025.10"
-ha_iot_class: Cloud Polling
+ha_release: '2025.10'
+ha_iot_class: Local Polling
ha_codeowners:
- '@erwindouna'
ha_domain: portainer
ha_config_flow: true
ha_platforms:
- binary_sensor
-ha_integration_type: integration
+ - button
+ - diagnostics
+ - sensor
+ - switch
+ha_integration_type: hub
+ha_quality_scale: bronze
---
The Portainer {% term integration %} is used as an interface to the [Portainer API](https://docs.portainer.io/api).
@@ -43,6 +48,17 @@ This integration is currently being actively developed and tested. More platform
There is currently support for the following device types within Home Assistant:
- Binary sensor - for monitoring the status of Portainer services.
+- Switch - for turning on and off containers.
+- Sensor - for monitoring various elements of containers.
+- Button - for restarting containers.
+
+## Data updates
+
+The integration normally updates every 60 seconds. For more detailed steps on how to define a custom polling interval, follow the procedure below.
+
+### Defining a custom polling interval
+
+{% include common-tasks/define_custom_polling.md %}
## Removing the integration
diff --git a/source/_integrations/private_ble_device.markdown b/source/_integrations/private_ble_device.markdown
index c51f394a8f4..7bdd395896e 100644
--- a/source/_integrations/private_ble_device.markdown
+++ b/source/_integrations/private_ble_device.markdown
@@ -32,13 +32,14 @@ There are two common representations for encoding an IRK - base64 encoding or he
If you are trying to get the IRK for your iPhone or Apple Watch, you must be logged in to the Mac with the same iCloud account on those devices. This procedure should also work for devices that you pair with macOS.
1. Start the **Keychain Access** application.
-2. In the left sidebar, make sure iCloud is selected.
+2. Depending on your macOS version, Keychain Access may look different. On macOS 26, select **Local Items** in the sidebar on the left. On older macOS versions, select **iCloud** in the sidebar.
3. In the search bar in the upper right, type Bluetooth.
4. A list of GUIDs is shown.
-5. Double-click on a record. As part of the **Account** field, it will say `Public: XX:XX:XX:XX:XX:XX`. This MAC address should match the device you are trying to work with.
-6. Click on show password
-7. You will have to enter your password, then enter your username and password.
-8. macOS will show some XML. You are looking for the "Remote IRK" field. After there is a data field that contains a base64 encoded version of your Identity Resolving Key.
+5. Click on the first record in the list. At the top, as part of the **Account** field, you should see `Public: XX:XX:XX:XX:XX:XX` (or Random - you can ignore records starting with random).
+6. Scroll down through the records to find the MAC address that matches your iPhone/Watch (you can find this in **Settings** > **General** > **About** on your phone/watch).
+7. Select **Show password**.
+8. You will have to enter your password, then enter your username and password.
+9. macOS will show some XML. You are looking for the **Remote IRK** field. After that, there is a data field that contains a base64 encoded version of your Identity Resolving Key.
### On Windows / For Android
diff --git a/source/_integrations/profiler.markdown b/source/_integrations/profiler.markdown
index 8ebdf81d1df..b4a4760982c 100644
--- a/source/_integrations/profiler.markdown
+++ b/source/_integrations/profiler.markdown
@@ -182,7 +182,9 @@ Log what is scheduled in the event loop. This can be helpful in tracking down in
Each upcoming scheduled item is logged similar to the below example:
-`[homeassistant.components.profiler] Scheduled: .run_action(>>) at /usr/src/homeassistant/homeassistant/helpers/event.py:1175>`
+```txt
+[homeassistant.components.profiler] Scheduled: .run_action(>>) at /usr/src/homeassistant/homeassistant/helpers/event.py:1175>`
+```
### Action profiler.lru_stats
@@ -211,3 +213,23 @@ An example is below:
```txt
[homeassistant.components.profiler] Task: wait_for=>
```
+
+### Action profiler.dump_sockets
+
+{% my developer_call_service badge service="profiler.dump_sockets" %}
+
+Log all sockets used by Home Assistant. This action can help identify what network connections are currently open, mainly to help track down connections that are not being closed properly.
+
+Example output:
+
+```txt
+[homeassistant.components.profiler] Sockets used by Home Assistant:
+
+
+
+
+
+
+
+...
+```
diff --git a/source/_integrations/profilo.markdown b/source/_integrations/profilo.markdown
index 478034af125..f275a7c0d6b 100644
--- a/source/_integrations/profilo.markdown
+++ b/source/_integrations/profilo.markdown
@@ -29,7 +29,6 @@ ha_platforms:
- select
- sensor
- switch
- - time
ha_iot_class: Cloud Push
ha_dhcp: true
ha_zeroconf: true
diff --git a/source/_integrations/prowl.markdown b/source/_integrations/prowl.markdown
index fc535cf5605..cb181738e7a 100644
--- a/source/_integrations/prowl.markdown
+++ b/source/_integrations/prowl.markdown
@@ -8,11 +8,12 @@ ha_iot_class: Cloud Push
ha_domain: prowl
ha_platforms:
- notify
-ha_integration_type: integration
+ha_integration_type: service
related:
- docs: /docs/configuration/
title: Configuration file
ha_quality_scale: legacy
+ha_config_flow: true
---
The `prowl` {% term integration %} uses [Prowl](https://www.prowlapp.com/) to deliver push notifications from Home Assistant to your iOS device.
diff --git a/source/_integrations/proxmoxve.markdown b/source/_integrations/proxmoxve.markdown
index 0d72e9b3d75..59636412c80 100644
--- a/source/_integrations/proxmoxve.markdown
+++ b/source/_integrations/proxmoxve.markdown
@@ -25,7 +25,7 @@ After configuring this {% term integration %}, the binary sensors automatically
## Configuration
{% important %}
-You should have at least one VM or container entry configured, else this integration won't do anything.
+You should have at least one VM or container entry configured within Home Assistant, else this integration won't do anything.
{% endimportant %}
To use the `proxmoxve` {% term integration %}, add the following configuration to your {% term "`configuration.yaml`" %} file.
@@ -152,7 +152,7 @@ The Home Assistant user you create must already exist on the Linux system.
1. Click `Datacenter`
2. Open `Permissions` and click `Users`
3. Click `Add`
-4. Enter a username (e.g.,` hass`)
+4. Enter a username (e.g.,`hass`)
5. Set the realm to "Proxmox VE authentication server"
6. Enter a secure password (it can be complex as you will only need to copy/paste it into your Home Assistant configuration)
7. Select the group just created earlier (`HomeAssistant`) to grant access to Proxmox
diff --git a/source/_integrations/prusalink.markdown b/source/_integrations/prusalink.markdown
index 10d51feaa69..be72cc32bf9 100644
--- a/source/_integrations/prusalink.markdown
+++ b/source/_integrations/prusalink.markdown
@@ -6,8 +6,6 @@ ha_category:
ha_iot_class: Local Polling
ha_release: '2022.9'
ha_config_flow: true
-ha_codeowners:
- - '@balloob'
ha_domain: prusalink
ha_integration_type: integration
ha_platforms:
diff --git a/source/_integrations/qbittorrent.markdown b/source/_integrations/qbittorrent.markdown
index 2809778b683..52d6e84d785 100644
--- a/source/_integrations/qbittorrent.markdown
+++ b/source/_integrations/qbittorrent.markdown
@@ -42,6 +42,7 @@ The qBittorrent integration will add the following sensors:
- `sensor.qbittorrent_active_torrents`: The current active torrents in qBittorrent.
- `sensor.qbittorrent_inactive_torrents`: The current inactive torrents in qBittorrent.
- `sensor.qbittorrent_paused_torrents`: The current paused torrents in qBittorrent.
+- `sensor.qbittorrent_errored_torrents`: The current errored torrents in qBittorrent.
## Switch
@@ -59,7 +60,7 @@ with a dictionary of torrents based on the provided filter.
| Data attribute | Optional | Description | Example |
| ---------------------- | -------- | ---------------------------------------------- | --------------------------------------------------- |
| `device` | no | The device you'd like to check the torrents of | all, active, inactive, paused, downloading, seeding |
-| `torrent_filter` | no | The type of torrents you want in the response | all, active, inactive, paused, downloading, seeding |
+| `torrent_filter` | no | The type of torrents you want in the response | all, active, inactive, paused, errored, downloading, seeding |
```yaml
action: qbittorrent.get_torrents
@@ -77,7 +78,7 @@ with a dictionary of torrents based on the provided filter.
| Data attribute | Optional | Description | Example |
| ---------------------- | -------- | --------------------------------------------- | --------------------------------------------------- |
-| `torrent_filter` | no | The type of torrents you want in the response | all, active, inactive, paused, downloading, seeding |
+| `torrent_filter` | no | The type of torrents you want in the response | all, active, inactive, paused, errored, downloading, seeding |
```yaml
action: qbittorrent.get_all_torrents
diff --git a/source/_integrations/recorder.markdown b/source/_integrations/recorder.markdown
index 0c22657d489..a3ebb4c9962 100644
--- a/source/_integrations/recorder.markdown
+++ b/source/_integrations/recorder.markdown
@@ -34,8 +34,6 @@ The default, and recommended, database engine is [SQLite](https://www.sqlite.org
Changing database used by the recorder may result in losing your existing history. Migrating data is not supported.
{% endcaution %}
-To change the defaults for the `recorder` integration in your installation, add the following to your {% term "`configuration.yaml`" %} file:
-
## Disk space requirements
A bare minimum requirement is to have at least as much free temporary space available as the size of your database at all times. A table rebuild, repair, or repack may happen at any time, which can result in a copy of the data on disk during the operation. Meeting the bare minimum requirement is essential during a version upgrade, where the schema may change, as this operation almost always requires making a temporary copy of part of the database.
@@ -44,6 +42,8 @@ For example, if your database is 1.5 GiB on disk, you must always have at l
## Advanced configuration
+To change the defaults for the `recorder` integration in your installation, add the following to your {% term "`configuration.yaml`" %} file:
+
```yaml
# Example configuration.yaml entry
recorder:
@@ -85,7 +85,7 @@ recorder:
default: 10
type: integer
commit_interval:
- description: How often (in seconds) the events and state changes are committed to the database. The default of `5` allows events to be committed almost right away without trashing the disk when an event storm happens. Increasing this will reduce disk I/O and may prolong disk (SD card) lifetime with the trade-off being that the database will lag (the logbook and history will not lag, because the changes are streamed to them immediatelly). If this is set to `0` (zero), commit are made as soon as possible after an event is processed.
+ description: How often (in seconds) the events and state changes are committed to the database. The default of `5` allows events to be committed almost right away without trashing the disk when an event storm happens. Increasing this will reduce disk I/O and may prolong disk (SD card) lifetime with the trade-off being that the database will lag (the activity and history will not lag, because the changes are streamed to them immediatelly). If this is set to `0` (zero), commit are made as soon as possible after an event is processed.
required: false
default: 5
type: integer
@@ -149,7 +149,7 @@ recorder:
{% include common-tasks/filters.md %}
-If you only want to hide events from your logbook, take a look at the [logbook integration](/integrations/logbook/). But if you have privacy concerns about certain events or want them in neither the history or logbook, you should use the `exclude`/`include` options of the `recorder` integration. That way they aren't even in your database, you can reduce storage and keep the database small by excluding certain often-logged events (like `sensor.last_boot`).
+If you only want to hide events from your **Activity** panel, take a look at the [Activity integration](/integrations/logbook/). But if you have privacy concerns about certain events or want them in neither the history nor activity, you should use the `exclude`/`include` options of the `recorder` integration. That way they aren't even in your database, you can reduce storage and keep the database small by excluding certain often-logged events (like `sensor.last_boot`).
#### Common filtering examples
@@ -172,7 +172,7 @@ recorder:
- sensor.last_boot # Comes from 'systemmonitor' sensor platform
- sun.sun # Don't record sun data
event_types:
- - call_service # Don't record actions
+ - my_custom_event
```
Defining domains and entities to record by using the `include` configuration (i.e. allowlist) is convenient if you have a lot of entities in your system and your `exclude` lists possibly get very large, so it might be better just to define the entities or domains to record.
@@ -428,7 +428,7 @@ The database engine must be `InnoDB` as `MyIASM` is not supported.
```bash
SET GLOBAL default_storage_engine = 'InnoDB';
-CREATE DATABASE DB_NAME CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
+CREATE DATABASE DB_NAME CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
```
Where `DB_NAME` is the name of your database
diff --git a/source/_integrations/renault.markdown b/source/_integrations/renault.markdown
index 9d0706b4175..acaabec0393 100644
--- a/source/_integrations/renault.markdown
+++ b/source/_integrations/renault.markdown
@@ -32,7 +32,7 @@ This integration provides the following platforms:
- Device tracker - to track location of your car.
- Buttons - to start air conditioning or start/stop the charge. Please note that although available these actions do not work on all vehicles.
- Selectors - to change the charge mode.
-- Sensors - such as battery level, outside temperature, odometer, estimated range, and charging rate.
+- Sensors - such as battery level, outside temperature, odometer, estimated range, charging rate, and tyre pressure.
{% include integrations/config_flow.md %}
diff --git a/source/_integrations/reolink.markdown b/source/_integrations/reolink.markdown
index 943b6c9f729..c4ea124ac4c 100644
--- a/source/_integrations/reolink.markdown
+++ b/source/_integrations/reolink.markdown
@@ -38,6 +38,8 @@ works_with:
The integration allows you to control [Reolink](https://reolink.com/) NVRs or cameras. Reolink cameras are known for their local storage, without the need for a cloud subscription or account. Reolink cameras can operate fully locally on your network, putting privacy first. When blocking internet access for the Reolink devices, the Home Assistant integration, as well as the Reolink app/client, will continue to work as usual. Reolink cameras provide excellent day- and nighttime video clarity at an affordable price. An SD card in the camera offers local recording, while an optional Reolink NVR/Hub can offer a large recording capacity indoors. As evident by the list of entities in this documentation, Reolink cameras are highly configurable and tightly integrated into Home Assistant.
+This integration is officially authorized by Reolink, with @StarkillerOG as the main developer, and it is built with the support of Reolink's official resources.
+
## Prerequisites
A brand new Reolink camera needs to be connected to the network and initialized. During initialization, the camera's credentials need to be set. Refer to the [Initial setup](#initial-setup) section for detailed instructions.
@@ -70,7 +72,7 @@ If an entity listed below has an asterisk (*) next to its name, it means it is d
## Data updates: plus (+) next to entities listed in this documentation
If an entity listed below has a plus (+) next to its name, it means this entity supports push updates. These entities will have almost instant state changes.
-For redundancy, the state of all entities is also polled every 60 seconds. For entities without a plus (+), this is the only update method. Therefore, a device's state change can take up to 60 seconds to be reflected in Home Assistant.
+For redundancy, the state of all entities is also polled. For cameras connected to a NVR/Hub, the polling interval is 10 seconds per camera, with a minimum of 60 seconds total. For directly connected cameras, the polling interval is 60 seconds. For entities without a plus (+), polling is the only update method. Therefore, a device's state change can take some time to be reflected in Home Assistant.
An exception is the firmware update entity, which is polled every 24 hours.
Another exception are battery cameras, most {% term entities %} are still {% term polling polls %} every 60 seconds. However, the entities that would cause the camera to wake from sleep will only be polled during the following events:
@@ -104,6 +106,7 @@ Depending on the supported features of the camera ([see specifications of the ca
- Visitor++ (Doorbell presses)
- AI person detection++
- AI vehicle detection++
+- AI bicycle detection+
- AI pet detection++
- AI animal detection++
- AI face detection++
@@ -120,6 +123,7 @@ Depending on the supported features of the camera ([see specifications of the ca
- AI linger animal+ (up to 3 zones)
- AI item forgotten+ (up to 3 zones)
- AI item taken+ (up to 3 zones)
+- IO input+
- Sleep status+
\++ These sensors receive events using the following 4 methods (in order): TCP push, ONVIF push, ONVIF long polling or fast polling (every 5 seconds).
@@ -135,8 +139,11 @@ Depending on the supported features of the camera ([see specifications of the ca
- Optical zoom control
- Focus control
-- Floodlight turn on brightness+
+- Floodlight turn on brightness*+
+- Floodlight event brightness*+
- Infrared light brightness
+- Floodlight event on time*
+- Floodlight event flash time*
- Volume (Camera)
- Volume speak (Camera)
- Volume doorbell (Camera)
@@ -144,12 +151,15 @@ Depending on the supported features of the camera ([see specifications of the ca
- Message volume (Home Hub)
- Chime volume
- Chime silent time
+- Audio noise reduction*
- Guard return time
- Motion sensitivity
- PIR sensitivity
+- PIR interval*
- AI face sensitivity
- AI person sensitivity
- AI vehicle sensitivity
+- AI bicycle sensitivity
- AI package sensitivity
- AI pet sensitivity
- AI animal sensitivity
@@ -161,6 +171,7 @@ Depending on the supported features of the camera ([see specifications of the ca
- AI face delay*
- AI person delay*
- AI vehicle delay*
+- AI bicycle delay*
- AI package delay*
- AI pet delay*
- AI animal delay*
@@ -183,7 +194,11 @@ Depending on the supported features of the camera ([see specifications of the ca
- 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.
+**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.
+**Floodlight event brightness** controls the brightness of the floodlight when it is turned on due to the camera detecting an event (for example, a person or vehicle), see the **Floodlight event mode** entity.
+
+**Floodlight event on time** will be in the `unknown` state if **Floodlight event mode** is not in the `on` state.
+**Floodlight event flash time** will be in the `unknown` state if **Floodlight event mode** is not in the `flash` state.
When the camera is not moved and no person/pet/animal/vehicle is detected for the **Guard return time** in seconds, and the **Guard return** switch is ON, the camera will move back to the guard position.
@@ -226,7 +241,8 @@ Some Reolink PTZ cameras can move at di
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)
+- Floodlight mode (Off, Auto, On at night, Schedule, Adaptive, Auto adaptive)
+- Floodlight event mode (Off, On, Flash)
- Day night mode+ (Auto, Color, Black&White)
- PTZ preset
- Play quick reply message
@@ -235,6 +251,7 @@ Depending on the supported features of the camera ([see specifications of the ca
- Doorbell LED (Stay off, Auto, Auto & always on at night)
- HDR* (Off, On, Auto)
- Binning mode* (Off, On, Auto)
+- Image exposure mode* (Auto, Low noise, Anti-smearing, Manual)
- Clear frame rate*
- Fluent frame rate*
- Clear bit rate*
@@ -289,6 +306,7 @@ Depending on the supported features of the camera ([see specifications of the ca
- Record
- Manual record+
- Pre-recording
+- Surveillance rule
- Privacy mode+
- Privacy mask
- Push notifications
@@ -334,9 +352,12 @@ When the **floodlight** entity is ON always ON, when OFF controlled based on the
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:
+- Person type+ (man, woman)
+- Animal type+ (dog, cat)
+- Vehicle type+ (sedan, SUV, pickup truck, motorcycle)
- PTZ pan position
- PTZ tilt position
-- Day night state+
+- Day night state+ (color, black and white, color with floodlight)
- Wi-Fi signal*
- CPU usage*
- HDD/SD storage*
@@ -368,12 +389,12 @@ The following models have been tested and confirmed to work with a direct link t
- C2 Pro*
- [CX410](https://reolink.com/product/cx410/)
- [CX810](https://reolink.com/product/cx810/)
-- [E1 Pro](https://reolink.com/product/e1-pro/) (only hardware version IPC_NT1NA45MP)
+- [E1 Pro](https://reolink.com/product/e1-pro/) (5MP models - hardware version IPC_NT1NA45MP - or newer†)
- [E1 Zoom](https://reolink.com/product/e1-zoom/)
- [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/)
+- [Elite Floodlight WiFi](https://reolink.com/product/elite-floodlight-wifi/) (needs mains power, cannot be integrated when powered through USB)
- [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/)
@@ -385,7 +406,7 @@ The following models have been tested and confirmed to work with a direct link t
- [RLC-510A](https://reolink.com/product/rlc-510a/)
- RLC-511*
- RLC-511W*
-- [RLC-511WA](https://reolink.com/product/rlc-511wa/)
+- [RLC-511WA](https://reolink.com/product/rlc-511wa/)*
- RLC-520*
- [RLC-520A](https://reolink.com/product/rlc-520a/)
- RLC-522*
@@ -400,6 +421,7 @@ The following models have been tested and confirmed to work with a direct link t
- **[RLC-823S2](https://reolink.com/product/rlc-823s2/)**
- [RLC-830A](https://reolink.com/product/rlc-830a/)
- [RLC-833A](https://reolink.com/product/rlc-833a/)
+- [RLC-840A](https://reolink.com/product/rlc-840a/)
- [RLC-843A](https://reolink.com/product/rlc-843a/)
- [RLC-1212A](https://reolink.com/product/rlc-1212a/)
- **[RLC-1224A](https://reolink.com/product/rlc-1224a/)**
@@ -409,7 +431,8 @@ The following models have been tested and confirmed to work with a direct link t
- [RLN12W NVR](https://reolink.com/product/rln12w/)
- [NVS8 NVR](https://reolink.com/product/nvs8/) (Retail version of RLN8)
- [NVS16 NVR](https://reolink.com/product/nvs16/) (Retail version of RLN16)
-- [Reolink Chime](https://reolink.com/product/reolink-chime/) (when connected to a doorbell)
+- [RP-PCB8MZ](https://reolink.com/product/rp-pcb8mz/)
+- [Reolink Chime](https://reolink.com/product/reolink-chime/) (when connected to a doorbell or Home Hub)
- [Reolink Duo WiFi](https://reolink.com/product/reolink-duo-wifi-v1/)
- [Reolink Duo 2 WiFi](https://reolink.com/product/reolink-duo-wifi/)
- **[Reolink Duo 3 PoE](https://reolink.com/product/reolink-duo-3-poe/)**
@@ -426,6 +449,8 @@ The following models have been tested and confirmed to work with a direct link t
*These models are discontinued and not sold anymore, they will continue to work with Home Assistant.
+†Requires a [camera hardware version](https://support.reolink.com/hc/en-us/articles/900000638583-Introduction-to-the-Hardware-Version-of-Reolink-Cameras/) that supports remote access. All 5MP or newer E1 Pro models (where the hardware version includes "5MP") meet this requirement. Most sellers (including ReoLink) do not explicitly state the hardware version, so verify the resolution is 5MP or greater to ensure compatibility.
+
### Tested battery-powered models
Battery-powered Reolink cameras can be used with Home Assistant with the help of a [Reolink Home Hub](https://reolink.com/product/reolink-home-hub/) or NVR. The Home Hub/NVR will act as a bridge between the battery-powered cameras and Home Assistant, conserving the battery life. All features of the battery-powered cameras will be available just like regular-powered cameras. Viewing the camera stream in Home Assistant will keep the battery camera awake during viewing, consuming battery life. Therefore, ensure you do not use the camera stream on a dashboard that is constantly being viewed, like a wall panel dashboard. You can check proper operation by ensuring that the "Sleep status" entity will go to "Sleeping" if the battery camera is not being actively used.
@@ -450,7 +475,7 @@ The following battery-powered models have been tested and confirmed to work thro
- **[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 Doorbell Battery](https://reolink.com/product/reolink-doorbell-battery/)**
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.
@@ -779,6 +804,7 @@ Prerequisites:
- Wake up and start recording on other battery cameras nearby if one camera/motion sensor detects an event.
- Turn on the spotlights or sirens of other cameras nearby when one camera detects a person, vehicle, or animal.
- If a camera detects a person/vehicle/animal, then point other PTZ cameras in that direction using PTZ presets.
+- Make a timelapse in different directions using PTZ presets and the snapshot service.
- Switch day night mode (Color/IR Black&White) based on sunset/sunrise times or the status of (outdoor) lights instead of relying on the internal light sensor.
- Change the camera volume based on the time and/or when you are home or not (geofencing)
- Increase the framerate and maximum bitrate of a camera when a person/vehicle/animal is detected and lower them again after 1 minute of no detection. This saves storage space, so you can record longer when recording 24/7 without compromising image clarity during events.
diff --git a/source/_integrations/rest_command.markdown b/source/_integrations/rest_command.markdown
index a5fbd470563..618168f1bb8 100644
--- a/source/_integrations/rest_command.markdown
+++ b/source/_integrations/rest_command.markdown
@@ -81,6 +81,11 @@ service_name:
required: false
type: boolean
default: false
+ skip_url_encoding:
+ description: Skip internal URL canonicalization, which would have encoded the _host_ part by [IDNA](https://docs.aiohttp.org/en/stable/glossary.html#term-IDNA) codec and applied [requoting](https://docs.aiohttp.org/en/stable/glossary.html#term-requoting) to the _path_ and _query_ parts.
+ required: false
+ type: boolean
+ default: false
{% endconfiguration %}
## Examples
diff --git a/source/_integrations/rhasspy.markdown b/source/_integrations/rhasspy.markdown
index 56755c22f87..e6637c5b47b 100644
--- a/source/_integrations/rhasspy.markdown
+++ b/source/_integrations/rhasspy.markdown
@@ -7,7 +7,6 @@ ha_iot_class: Local Push
ha_release: '2022.8'
ha_config_flow: true
ha_codeowners:
- - '@balloob'
- '@synesthesiam'
ha_domain: rhasspy
ha_integration_type: integration
diff --git a/source/_integrations/ridwell.markdown b/source/_integrations/ridwell.markdown
index df6ebebc863..d6043d5a8bd 100644
--- a/source/_integrations/ridwell.markdown
+++ b/source/_integrations/ridwell.markdown
@@ -91,3 +91,15 @@ For example:
}
}
```
+
+## Removing the integration
+
+This integration follows standard integration removal steps.
+
+{% note %}
+Removing this integration from Home Assistant will not end or disrupt your paid subscription.
+{% endnote %}
+
+Any pickups scheduled or modified by this integration will persist after removing the integration, and they can continue to be managed using the Ridwell site or app.
+
+{% include integrations/remove_device_service.md %}
diff --git a/source/_integrations/rmvtransport.markdown b/source/_integrations/rmvtransport.markdown
index 41e9609b1ae..74ddcedc053 100644
--- a/source/_integrations/rmvtransport.markdown
+++ b/source/_integrations/rmvtransport.markdown
@@ -21,7 +21,7 @@ The `rvmtransport` {% term integration %} will give you the departure time of th
## Setup
-Visit the [RMV OpenData web site](https://opendata.rmv.de) to find a list of valid station IDs.
+Visit the [RMV OpenData web site](https://opendata.rmv.de) to find a list of valid station IDs. You will need to use the "HAFAS_ID".
## Configuration
@@ -61,7 +61,7 @@ next_departure:
required: false
type: [string]
direction:
- description: "Name of a stop or station, e.g., 'Frankfurt (Main) Hauptbahnhof'. This can be used to only consider a particular direction of travel."
+ description: "ID of a stop or station, e.g., `3000912`. This can be used to only consider a particular direction of travel."
required: false
type: [string]
lines:
@@ -116,6 +116,9 @@ sensor:
lines: "S8"
max_journeys: 5
products: "S"
+ - station: 3001830
+ time_offset: 15
+ direction: 3000010
```
The first sensor will return S-Bahn, bus, RB and RE trains departures from Frankfurt Hauptbahnhof to Frankfurt Airport or Stadium that are at least 5 minutes away.
@@ -123,3 +126,5 @@ The first sensor will return S-Bahn, bus, RB and RE trains departures from Frank
The second sensor returns bus departures from Wiesbaden Hauptbahnhof going to Dernsches Gelände and Mainz Hauptbahnhof. To retrieve the time of the second departure, you would use `state_attr('sensor.ENTITY_NAME', 'departures')[1].time`.
The third sensor returns all S-Bahn trains from Mainz Hauptbahnhof for line S8.
+
+The 4th sensor returns all connections from Niederrad Bahnhof going to or over Frankfurt Hauptbahnhof.
diff --git a/source/_integrations/roborock.markdown b/source/_integrations/roborock.markdown
index 988cfe34c28..700a2c6ddea 100644
--- a/source/_integrations/roborock.markdown
+++ b/source/_integrations/roborock.markdown
@@ -46,7 +46,7 @@ pause the vacuum when a media player starts playing music.
## Note about compatibility
-Roborock recently released a new series of models, Q10 and Q7. This integration does NOT support these models (and likely all future released vacuums). Roborock has changed the protocol for how these devices interact. Therefore, they will not be supported by this integration until they are reverse-engineered.
+The newly released [Q-Series](https://us.roborock.com/pages/roborock-store#Q-Series) devices are not supported. Roborock has changed the protocol for how these devices interact. It is unclear if new devices not in the Q-series will use the existing protocol or the new protocol. Most Q-Series devices should have partial support via the [Matter](/integrations/matter/) integration.
## Prerequisites
@@ -101,6 +101,8 @@ Virtual walls:
description: Show virtual walls on the map.
Zones:
description: Show zones on the map.
+Show background:
+ description: Show a blue background behind the map instead of a transparent background.
{% endconfiguration_basic %}
## Data Updates
@@ -193,6 +195,12 @@ The vacuum entity holds the ability to control most things the vacuum can do, su
- **Filter time left**
- **Description**: How much time is left before Roborock recommends you replace your vacuum's air filter.
+- **Maintenance brush time left**
+ - **Description**: How much time is left before Roborock recommends you replace your dock's maintenance brush.
+
+- **Strainer time left**
+ - **Description**: How much time is left before Roborock recommends you replace your dock's strainer. This can refer to the water filter or the cleaning tray depending on your device.
+
- **Status**
- **Description**: The current status of your vacuum. This typically describes the action that is currently being run. For example, 'spot_cleaning' or 'docking'.
@@ -435,8 +443,28 @@ Roborock servers require accepting a user agreement before using the API, which
4. Log back in and accept the policy.
5. Reload the Roborock integration!
-### The integration tells me it cannot reach my vacuum and is using the cloud API and that this is not supported
+### The integration tells me it cannot reach my vacuum and is using the cloud API and that this is not supported or I am having any networking issues
This integration has the capability to control your devices through the cloud API and the local API. If the local API is not reachable, it will just use the cloud API. We recommend only using the local API as it helps prevent any kind of rate-limiting.
-The steps needed to fix this issue are specific to your networking setup. Make sure your Home Assistant instance can communicate on port 58867 with the IP address of your vacuum. This may require changing firewall settings, VLAN configuration, etc.
+The steps needed to fix this issue are specific to your networking setup. Here are some general troubleshooting steps:
+
+1. Ensure your vacuum can communicate externally via port 8883.
+2. Ensure your vacuum can communicate with your Home Assistant instance on ports TCP 58867 and UDP 58866.
+3. If you are using a tool such as Pi-Hole, AdGuard, or anything else that modifies your DNS, ensure that your vacuum is exempted.
+4. Set a static IP for your vacuum.
+5. Check your router's webpage. If the device is losing connection, you need to focus on increasing your Wi-Fi network's performance.
+
+### My Device goes unavailable every night at around 3am - how can I fix this?
+
+Every night, the vacuum disconnects from the internet for about one minute and automatically reconnects. This causes the integration to go unavailable until the vacuum is reachable again. This is not an issue with the integration but rather the integration is reacting to the device's status.
+
+### The integration tells me no devices were found even though I have devices on my account.
+
+Some devices are not supported yet as they use a different protocol than other devices. Make sure you are on the latest version of Home Assistant.
+
+### I'm getting information about rate limiting in my logs - what should I do?
+
+There is rate limiting built into the Python package that this integration is built on. This is to try to help prevent your instance from overwhelming the Roborock servers and resulting in any kind of IP ban. Best practice is to disable the integration for 24 hours.
+
+It's also important to try to determine what caused this error in your setup. A common cause some users have is that they have a script that automatically reloads the integration if it goes unavailable. Then, if the device gets stuck and runs out of battery, you are frequently reloading and that causes rate limits.
diff --git a/source/_integrations/route_b_smart_meter.markdown b/source/_integrations/route_b_smart_meter.markdown
new file mode 100644
index 00000000000..b09f647792e
--- /dev/null
+++ b/source/_integrations/route_b_smart_meter.markdown
@@ -0,0 +1,88 @@
+---
+title: Smart Meter B Route
+description: Integrate your Smart Meter using B Route.
+ha_category:
+ - Energy
+ - Sensor
+ha_release: '2025.10'
+ha_iot_class: Local Polling
+ha_codeowners:
+ - '@SeraphicRav'
+ha_domain: route_b_smart_meter
+ha_platforms:
+ - sensor
+ha_config_flow: true
+ha_integration_type: device
+ha_quality_scale: bronze
+---
+
+The **Smart Meter B Route** {% term integration %} allows you to access the data of your smart meter using the B Route protocol.
+
+## Overview
+
+This integration enables you to access and monitor your household energy consumption data from a smart meter using the B Route protocol in Home Assistant. You'll need a compatible USB dongle and your B Route credentials to set up this integration. It has been tested for the Japanese market and most households are eligible, the installation of a smart meter is free. You can find some information by TEPCO [here](https://www.tepco.co.jp/en/pg/development/domestic/smartmeter-e.html) but other utility companies may have similar pages.
+
+## Prerequisites
+
+Even if you have a contract with a new power provider, you can still use this service by applying to the regional utility company (for example, TEPCO in Tokyo).
+Ensure that your power supply is not a bulk power supply for an apartment building.
+
+1. Compatible USB dongles (tested with):
+ - Wi-SUN USB dongle from [Ratoc Systems](https://www.ratocsystems.com/products/wisun/usb-wisun/rs-wsuha/).
+ - Wi-SUN Module RL7023 Stick-D/DSS from [Tessera Technology Inc.](https://www.tessera.co.jp/product/rfmodul/rl7023stick-d_dss.html).
+2. [B Route credentials from your utility company](#obtaining-b-route-credentials).
+3. Smart meter:
+ - A smart meter that supports the B Route protocol.
+ - If you are renting but do not have a smart meter equipped, you will need to contact your house management company, as the installation is free but may require permission.
+
+{% include integrations/config_flow.md %}
+
+### Signal reach
+
+The Wi-SUN USB dongle has a typical signal reach of approximately 50 meters indoors and up to 200 meters outdoors, depending on environmental factors such as walls, interference, and other obstacles.
+
+## Obtaining B Route credentials
+
+1. **Contact your utility company**: Reach out to your electricity provider and request your B Route credentials. For example, if you live in Tokyo, contact TEPCO.
+2. **Provide necessary information**: You may need to provide your smart meter ID, customer ID, or other identifying information.
+3. **Receive credentials**: Your utility company will provide you with a user ID and password for accessing the B Route data.
+
+Refer to the links below to apply for your B Route credentials:
+
+- [Hokkaido Electric Power](https://www.hepco.co.jp/network/electric_life/service/electronic_meter/b_route_service_low.html)
+- [Tohoku Electric Power](https://nw.tohoku-epco.co.jp/consignment/request/other/)
+- [TEPCO](http://www.tepco.co.jp/pg/consignment/liberalization/smartmeter-broute.html)
+- [Chubu Electric Power](https://www.chuden.co.jp/home/smartmeter/intro/use/index.html)
+- [Hokuriku Electric Power](http://www.rikuden.co.jp/nw_kojin/b_routeservice.html)
+- [Kansai Electric Power](http://www.kepco.co.jp/corporate/smartmeter/routeb/routeb_how.html)
+- [Chugoku Electric Power](https://www.energia.co.jp/nw/safety/smartmeter/route-b.html)
+- [Shikoku Electric Power](https://www.yonden.co.jp/nw/b_root/index.html)
+- [Kyushu Electric Power](https://www.kyuden.co.jp/td_service_meter_b-root_index.html)
+- [Okinawa Electric Power](https://www.okiden.co.jp/business-support/service/smartmeter/b-route/index.html)
+
+## Retrieving your monthly consumption data
+
+By default, the data you get is the total consumption since an unknown date in the past. If you want to get your monthly consumption data, you can use the [utility_meter](/integrations/utility_meter/) {% term integration %}.
+
+## Retrieving your monthly cost data
+
+To get your monthly cost data, you can use the [template sensor](/integrations/template/) {% term integration %} along with the [utility_meter](/integrations/utility_meter/) {% term integration %}. You will need to know your electricity rate (cost per kWh) to calculate the cost. For instance, if you are using Tokyo Gas and have a price depending on your usage, you can use the following template with a unit of measurement set to your currency per kWh (for example, JPY/kWh) and the appropriate sensor name:
+
+```yaml
+{% raw %}
+{% set consumption = states('sensor.tokyo_gas_electricity_monthly_consumption') | float(0) %}
+{% if consumption < 120 %}
+29.9
+{% elif consumption < 300 %}
+35.41
+{% else %}
+37.47
+{% endif %}
+{% endraw %}
+```
+
+## Removing the {% term integration %}
+
+This {% term integration %} follows standard {% term integration %} removal. No extra steps are required.
+
+{% include integrations/remove_device_service.md %}
diff --git a/source/_integrations/russound_rio.markdown b/source/_integrations/russound_rio.markdown
index 36e1acd1be7..baed61edf62 100644
--- a/source/_integrations/russound_rio.markdown
+++ b/source/_integrations/russound_rio.markdown
@@ -27,6 +27,8 @@ The platform automatically discovers all enabled zones and sources. Each zone is
This integration allows you to connect the following controllers:
+- Russound SMZ8
+- Russound SMZ16-PRE
- Russound MBX-PRE
- Russound MBX-AMP
- Russound ACA-E5
diff --git a/source/_integrations/ruuvitag_ble.markdown b/source/_integrations/ruuvitag_ble.markdown
index 72889cd0c96..31eb2a45144 100644
--- a/source/_integrations/ruuvitag_ble.markdown
+++ b/source/_integrations/ruuvitag_ble.markdown
@@ -1,6 +1,6 @@
---
-title: RuuviTag BLE
-description: Instructions on how to integrate RuuviTag BLE devices into Home Assistant.
+title: Ruuvi BLE
+description: Instructions on how to integrate Ruuvi BLE devices into Home Assistant.
ha_category:
- Sensor
ha_bluetooth: true
@@ -15,14 +15,16 @@ ha_platforms:
ha_integration_type: integration
---
-Integrates [Ruuvi](https://ruuvi.com/)'s RuuviTag BLE devices into Home Assistant.
+Integrates [Ruuvi](https://ruuvi.com/)'s BLE devices into Home Assistant.
{% include integrations/config_flow.md %}
-The RuuviTag BLE integration will automatically discover devices once the [Bluetooth](/integrations/bluetooth) integration is enabled and functional.
+The Ruuvi BLE integration will automatically discover supported devices once the [Bluetooth](/integrations/bluetooth) integration is enabled and functional.
-If your RuuviTags are not discovered, please make sure to update them to [the latest firmware](https://ruuvi.com/software-update/).
+If your Ruuvi devices are not discovered, please make sure to update them to [the latest firmware](https://ruuvi.com/software-update/).
## Supported devices
-- [RuuviTag](https://ruuvi.com/ruuvitag/)
+- [RuuviTag](https://ruuvi.com/ruuvitag/) - Environmental sensor tags
+- [RuuviTag Pro](https://ruuvi.com/ruuvitag-pro/) - Heavy-duty environmental sensor tags
+- [Ruuvi Air](https://ruuvi.com/air/) - Air quality monitors (since Home Assistant 2025.11)
diff --git a/source/_integrations/samsungtv.markdown b/source/_integrations/samsungtv.markdown
index ad0b54aa835..f077ee0bb35 100644
--- a/source/_integrations/samsungtv.markdown
+++ b/source/_integrations/samsungtv.markdown
@@ -19,7 +19,7 @@ ha_platforms:
ha_zeroconf: true
ha_dhcp: true
ha_integration_type: device
-ha_quality_scale: bronze
+ha_quality_scale: silver
---
The `samsungtv` platform allows you to control a [Samsung Smart TV](https://www.samsung.com/uk/tvs/all-tvs/).
diff --git a/source/_integrations/satel_integra.markdown b/source/_integrations/satel_integra.markdown
index 6b2267581d4..f50a1350e64 100644
--- a/source/_integrations/satel_integra.markdown
+++ b/source/_integrations/satel_integra.markdown
@@ -8,16 +8,19 @@ ha_category:
- Switch
ha_release: 0.54
ha_iot_class: Local Push
+ha_config_flow: true
+ha_codeowners:
+ - '@Tommatheussen'
ha_domain: satel_integra
ha_platforms:
- alarm_control_panel
- binary_sensor
+ - diagnostics
- switch
-ha_integration_type: integration
+ha_integration_type: device
related:
- docs: /docs/configuration/
title: Configuration file
-ha_quality_scale: legacy
---
The `satel_integra` {% term integration %} will allow Home Assistant users who own a Satel Integra alarm panel to leverage their alarm system and its sensors to provide Home Assistant with information about their homes. Connectivity between Home Assistant and the alarm is accomplished through a ETHM extension module that must be installed in the alarm. Compatible with ETHM-1 Plus module with firmware version > 2.00 (version 2.04 confirmed).
@@ -25,7 +28,7 @@ The `satel_integra` {% term integration %} will allow Home Assistant users who o
There is currently support for the following device types within Home Assistant:
- Binary sensor: Reports on zone or output statuses
-- Switch: allows for setting states of selected outputs
+- Switch: allows for setting states of selected outputs
- Alarm control panel: represents the zones (in Polish: "strefa"). Reports its status, and can be used to arm/disarm the partition
The module communicates via Satel's open TCP protocol published on their website. It subscribes for new events coming from alarm system and reacts to them immediately.
@@ -40,133 +43,23 @@ A list of all partition, zone and output IDs can be acquired by running DloadX p
For the binary sensor, check the [type/class](/integrations/binary_sensor/) list for a possible visualization of your zones. Note: If no zones or outputs are specified, Home Assistant will not load any binary_sensor integrations."
-## Configuration
+{% include integrations/config_flow.md %}
-A `satel_integra` section must be present in the {% term "`configuration.yaml`" %} file.
-{% include integrations/restart_ha_after_config_inclusion.md %}
+{% configuration_basic %}
+Host:
+ description: The IP address of the Satel Integra ETHM module.
+Port:
+ description: The port on which the ETHM module listens for clients using the integration protocol.
+Code:
+ description: Optional code that will be used to toggle switchable outputs.
+{% endconfiguration_basic %}
-```yaml
-# Example configuration.yaml entry
-satel_integra:
- host: IP_ADDRESS
-```
+## Configuring partitions, zones, and outputs
-{% configuration %}
-host:
- description: The IP address of the Satel Integra ETHM module on your home network, if using socket type.
- required: true
- default: localhost
- type: string
-port:
- description: The port on which the ETHM module listens for clients using integration protocol.
- required: false
- default: 7094
- type: integer
-code:
- description: User password, it's needed for making use of the switchable_outputs. It's recommended not to use admin password.
- required: false
- type: string
-partitions:
- description: List of the partitions to operate on.
- required: false
- type: [integer, list]
- keys:
- name:
- description: Name of the partition.
- required: true
- type: string
- arm_home_mode:
- description: The mode in which the partition is armed when 'arm home' is used. Possible options are `1`,`2` or `3`. For more information on what the differences are between them, please refer to Satel Integra manual.
- required: false
- default: 1
- type: integer
-zones:
- description: "This parameter lists the zones (or inputs) that will be visible by Home Assistant. For each zone, a proper ID must be given as well as its name. The name is arbitrary and does not need to match the one specified in Satel Integra alarm configuration."
- required: false
- type: [integer, list]
- keys:
- name:
- description: Name of the zone.
- required: true
- type: string
- type:
- description: The zone type.
- required: false
- default: motion
- type: string
-outputs:
- description: "Very similar to zones, but with outputs. Satel Integra uses outputs to inform external systems about different events. For example power failure, or that alarm started counting for exit or some other user-defined condition. They may be used for simple alarm-based automation. For more information please refer to Satel homepage and forums."
- required: false
- type: [integer, list]
- keys:
- name:
- description: Name of the output.
- required: true
- type: string
- type:
- description: The type of the device - just for presentation.
- required: false
- default: motion
- type: string
-switchable_outputs:
- description: "Switchable outputs. These will show up as switches within Home Assistant."
- required: false
- type: [integer, list]
- keys:
- name:
- description: Name of the output.
- required: true
- type: string
-{% endconfiguration %}
+After setting up the connection details, you can configure partitions, zones, and outputs as **Subentries** on the {% my integration domain="satel_integra" title="**Satel Integra**" %} integration page.
-## Full examples
-
-```yaml
-# Example configuration.yaml entry
-satel_integra:
- host: 192.168.1.100
- port: 7094
- partitions:
- 01:
- name: "House"
- arm_home_mode: 2
- 02:
- name: "Garage"
- zones:
- 01:
- name: "Bedroom"
- type: "motion"
- 02:
- name: "Hall"
- type: "motion"
- 30:
- name: "Kitchen - smoke"
- type: "smoke"
- 113:
- name: "Entry door"
- type: "opening"
- outputs:
- 05:
- name: "Garden lights trigger"
- type: "light"
- 09:
- name: "Gate opening trigger"
- type: "opening"
- 30:
- name: "Alarm triggered"
- type: "safety"
- 32:
- name: "Alarm power problem"
- type: "safety"
- switchable_outputs:
- 05:
- name: "Gate open"
- 06:
- name: "Gate close"
- 14:
- name: "Garden light"
-
-```
+To create the respective entities, select the **Add partition**, **Add zone**, **Add output**, or **Add switchable output** buttons. Follow the instructions in the UI to set up the individual entities.
+**Result**: Each partition will have its own alarm panel. Each zone and output will have a binary sensor, and a switch will be created for each switchable output.
Having configured the zones and the outputs, you can use them for automation, such as to react on the movement in your bedroom.
For example:
@@ -182,3 +75,9 @@ For example:
target:
entity_id: input_boolean.movement_detected
```
+
+## Removing the integration
+
+This integration follows standard integration removal. Once the integration is removed, consider disabling the communication ability to the ETHM-1 Plus module using DLOADX to reduce security risks.
+
+{% include integrations/remove_device_service.md %}
diff --git a/source/_integrations/saunum.markdown b/source/_integrations/saunum.markdown
new file mode 100644
index 00000000000..e9f5f292b4b
--- /dev/null
+++ b/source/_integrations/saunum.markdown
@@ -0,0 +1,153 @@
+---
+title: Saunum Leil
+description: Instructions on how to integrate Saunum Leil sauna control units into Home Assistant.
+ha_iot_class: Local Polling
+ha_release: 2025.12
+ha_codeowners:
+ - "@mettolen"
+ha_domain: saunum
+ha_integration_type: device
+ha_config_flow: true
+ha_quality_scale: bronze
+related:
+ - url: https://www.saunum.com/
+ title: Saunum
+ - url: https://saunum.com/en/product/control-devices/
+ title: Saunum Leil product page
+
+---
+
+The **Saunum Leil** {% term integration %} integrates your [Saunum Leil](https://saunum.com/en/product/control-devices/) sauna control unit with Home Assistant. [Saunum](https://saunum.com/) is an Estonian company that creates advanced sauna heaters and control systems with smart features.
+
+With the Leil control unit, you can precisely control temperature, customize your sauna experience, and monitor your sauna's operation.
+
+## Prerequisites
+
+Before setting up the integration, you need to:
+
+1. Have a Saunum Leil sauna control unit installed and connected to your network.
+2. Know the IP address of your control unit. You can find this on the Leil touch panel:
+ - Navigate to **Settings** > **Modbus Settings**
+ - Note the IP address displayed
+
+{% include integrations/config_flow.md %}
+
+{% configuration_basic %}
+Host:
+ description: "The IP address of your Saunum Leil control unit. You can find it in the Leil touch panel under **Settings** > **Modbus Settings**."
+{% endconfiguration_basic %}
+
+## Changing temperature unit
+
+The temperature unit displayed in Home Assistant is controlled by your Home Assistant system settings, not by the integration or the Leil touch panel settings.
+
+To change between Celsius and Fahrenheit:
+
+1. Go to {% my general title="**Settings** > **System** > **General**" %}.
+2. Under **Unit system**, select either:
+ - **Metric** for Celsius (°C)
+ - **Imperial** for Fahrenheit (°F)
+3. The temperature entities will automatically update to display in your chosen unit.
+
+The Saunum Leil control unit natively operates in Celsius, even if Fahrenheit is selected in the Leil touch panel display settings. Home Assistant automatically converts and displays temperatures in Fahrenheit when the Imperial unit system is selected. Temperature ranges are:
+
+- Celsius: 40-100°C
+- Fahrenheit: 104-212°F
+
+## Using the sauna
+
+### Starting a sauna session
+
+1. **Turn on the session** by setting the **Sauna** climate entity to heat mode.
+2. **Adjust the target temperature** using climate entity temperature dial (40-100°C / 104-212°F).
+
+Once started, the sauna begins heating to the target temperature and automatically turns off after the configured duration. During an active session, you cannot change the sauna type, sauna duration, or fan duration settings.
+
+{% important %}
+Never leave a heating sauna unattended for extended periods. Always ensure proper ventilation and never place flammable materials near or on the sauna heater. Sauna surfaces, especially near the heater, can cause severe burns. Use caution when the sauna is hot.
+
+When controlling your sauna remotely through Home Assistant:
+
+- Always verify the sauna is empty before starting a remote heating session.
+- Ensure no flammable materials have been left in or near the sauna.
+- Set appropriate session durations to prevent prolonged unattended operation.
+- Monitor alarm sensors regularly for any safety issues.
+{% endimportant %}
+
+## Supported functionality
+
+The **Saunum Leil** integration provides the following entities for controlling and monitoring your sauna.
+
+### Climate
+
+- **Sauna**
+ - **Description**: Main climate control for your sauna, allowing you to set target temperature and control heating.
+ - **Features**: Temperature control, HVAC modes (off, heat).
+
+## Supported devices
+
+The following devices are known to be supported by the integration:
+
+- Saunum Leil touch screen control panel
+
+## Data updates
+
+The **Saunum Leil** integration {% term polling polls %} data from the control unit every 1 minute by default.
+
+## Known limitations
+
+- The integration communicates with the control unit using the Modbus TCP protocol. Ensure your network allows communication on port 502.
+- When the sauna session is active, the sauna duration, fan duration, and sauna type cannot be changed.
+- The integration does not provide the ability to reboot, which can instead be done via the Leil touch screen control panel.
+
+## Troubleshooting
+
+### Cannot connect to the device
+
+#### Symptom: "Failed to connect to the device"
+
+When trying to set up the integration, you receive an error message that the connection failed.
+
+#### Description
+
+This typically means the control unit is not reachable on your network, or the Modbus TCP settings are incorrect.
+
+#### Resolution
+
+To resolve this issue, try the following steps:
+
+1. Verify the control unit is powered on and connected to your network.
+2. Check the IP address on the Leil touch panel:
+ - Go to **Settings** > **Modbus Settings**.
+ - Verify the IP address matches what you entered.
+3. Ensure your Home Assistant instance can reach the control unit:
+ - Try pinging the IP address from your Home Assistant host system.
+ - Check for firewalls or network segmentation blocking communication.
+4. Verify the port **502** is accessible:
+ - Check your router and firewall settings.
+5. Ensure no other device or software is already communicating with the control unit on the same Modbus connection.
+
+### Entities show as unavailable
+
+#### Symptom: All entities show as "unavailable"
+
+After successful setup, the entities appear but show unavailable status.
+
+#### Description
+
+This indicates the integration successfully connected initially but is now unable to communicate with the control unit.
+
+#### Resolution
+
+1. Check that the control unit is still powered on.
+2. Verify network connectivity between Home Assistant and the control unit.
+3. Check if the IP address of the control unit has changed (DHCP):
+ - Consider setting a static IP address for the control unit in your router.
+ - If the IP address changed, remove and re-add the integration with the new address.
+4. Restart the Saunum Leil control unit if communication issues persist.
+
+## 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/select.mqtt.markdown b/source/_integrations/select.mqtt.markdown
index 2d3d1e2b03e..8223744e27d 100644
--- a/source/_integrations/select.mqtt.markdown
+++ b/source/_integrations/select.mqtt.markdown
@@ -12,7 +12,7 @@ The `mqtt` Select platform allows you to integrate devices that might expose con
## Configuration
-To use an MQTT select entity in your installation, add the following to your {% term "`configuration.yaml`" %} file.
+To use an MQTT select 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 %}
```yaml
diff --git a/source/_integrations/sensor.markdown b/source/_integrations/sensor.markdown
index 659d283e417..f94ffc42c02 100644
--- a/source/_integrations/sensor.markdown
+++ b/source/_integrations/sensor.markdown
@@ -55,8 +55,8 @@ The following device classes are supported for sensors:
- **atmospheric_pressure**: Atmospheric pressure in cbar, bar, hPa, mmHg, inHg, kPa, mbar, Pa or psi
- **battery**: Percentage of battery that is left in %
- **blood_glucose_concentration**: Blood glucose concentration in mg/dL, mmol/L
-- **carbon_dioxide**: Carbon Dioxide in CO2 (Smoke) in ppm
-- **carbon_monoxide**: Carbon Monoxide in CO (Gas CNG/LPG) in ppm
+- **carbon_dioxide**: Carbon Dioxide (CO₂) concentration in ppm
+- **carbon_monoxide**: Carbon Monoxide (CO) concentration in ppm, µg/m³, mg/m³
- **current**: Current in A, mA
- **data_rate**: Data rate in bit/s, kbit/s, Mbit/s, Gbit/s, B/s, kB/s, MB/s, GB/s, KiB/s, MiB/s or GiB/s
- **data_size**: Data size in bit, kbit, Mbit, Gbit, B, kB, MB, GB, TB, PB, EB, ZB, YB, KiB, MiB, GiB, TiB, PiB, EiB, ZiB or YiB
@@ -81,12 +81,13 @@ The following device classes are supported for sensors:
- **ph**: Potential hydrogen (pH) value of a water solution
- **pm1**: Concentration of particulate matter less than 1 micrometer in µg/m³
- **pm25**: Concentration of particulate matter less than 2.5 micrometers in µg/m³
+- **pm4**: Concentration of particulate matter less than 4 micrometers in µg/m³
- **pm10**: Concentration of particulate matter less than 10 micrometers in µg/m³
- **power_factor**: Power factor (unitless), unit may be `None` or %
- **power**: Power in mW, W, kW, MW, GW or TW
- **precipitation**: Accumulated precipitation in cm, in or mm
- **precipitation_intensity**: Precipitation intensity in in/d, in/h, mm/d or mm/h
-- **pressure**: Pressure in Pa, kPa, hPa, bar, cbar, mbar, mmHg, inHg, inH₂O or psi
+- **pressure**: Pressure in mPa, Pa, hPa, kPa, bar, cbar, mbar, mmHg, inHg, inH₂O or psi
- **reactive_energy**: Reactive energy in varh or kvarh
- **reactive_power**: Reactive power in mvar, var, or kvar
- **signal_strength**: Signal strength in dB or dBm
@@ -94,12 +95,13 @@ The following device classes are supported for sensors:
- **speed**: Generic speed in ft/s, in/d, in/h, in/s, km/h, kn, m/s, mph, mm/d, or mm/s
- **sulphur_dioxide**: Concentration of sulphur dioxide in µg/m³
- **temperature**: Temperature in °C, °F or K
+- **temperature_delta**: Temperature difference between two measurements in °C, °F, or K
- **timestamp**: Datetime object or timestamp string (ISO 8601)
- **volatile_organic_compounds**: Concentration of volatile organic compounds in µg/m³ or mg/m³
- **volatile_organic_compounds_parts**: Ratio of volatile organic compounds in ppm or ppb
- **voltage**: Voltage in V, mV, µV, kV, MV
- **volume**: Generic volume in L, mL, gal, fl. oz., m³, ft³, CCF, or MCF
-- **volume_flow_rate**: Volume flow rate in m³/h, m³/min, m³/s, ft³/min, L/h, L/min, L/s, gal/min, or mL/s
+- **volume_flow_rate**: Volume flow rate in m³/h, m³/min, m³/s, ft³/min, L/h, L/min, L/s, gal/h, gal/min, or mL/s
- **volume_storage**: Generic stored volume in L, mL, gal, fl. oz., m³, ft³, CCF, or MCF
- **water**: Water consumption in L, gal, m³, ft³, CCF, or MCF
- **weight**: Generic mass in kg, g, mg, µg, oz, lb, or st
diff --git a/source/_integrations/senz.markdown b/source/_integrations/senz.markdown
index 501052f90b6..98ca8d7c254 100644
--- a/source/_integrations/senz.markdown
+++ b/source/_integrations/senz.markdown
@@ -3,6 +3,7 @@ title: nVent RAYCHEM SENZ
description: Instructions how to integrate SENZ thermostats into Home Assistant.
ha_category:
- Climate
+ - Sensor
ha_iot_class: Cloud Polling
ha_release: 2022.5
ha_config_flow: true
@@ -11,9 +12,22 @@ ha_codeowners:
ha_domain: senz
ha_platforms:
- climate
+ - diagnostics
+ - sensor
ha_integration_type: integration
---
The SENZ integration allows you to control and monitor your nVent RAYCHEM SENZ-WIFI thermostats.
{% include integrations/config_flow.md %}
+
+## Use cases
+
+- Control and monitor the thermostat.
+- Monitor the current temperature.
+
+## Removing the integration
+
+This integration follows standard integration removal. If you have entered your own credentials, you will be asked if you want to keep them or delete them. If you want to delete them later you can do that from the tree-dot menu in {% my integrations title="**Settings** > **Devices & services**" %}.
+
+{% include integrations/remove_device_service.md %}
diff --git a/source/_integrations/sesame.markdown b/source/_integrations/sesame.markdown
index 761b35bf2cd..d97a7555a19 100644
--- a/source/_integrations/sesame.markdown
+++ b/source/_integrations/sesame.markdown
@@ -17,6 +17,12 @@ ha_quality_scale: legacy
The `sesame` {% term integration %} allows you to control your [Sesame](https://candyhouse.co/) smart locks made by CANDY HOUSE, Inc.
+## Sesame Smart Lock Versions
+
+The integration documented here should only be used with the original Sesame Lock.
+
+Sesame Smart Lock version 5 and Hub version 3 were released in 2025 and can be integrated with Home Assistant via the Matter integration instead.
+
## Configuration
Your Sesame needs to be paired with a standalone [Wi-Fi Access Point](https://candyhouse.co/collections/frontpage/products/wi-fi-access-point) purchased separately.
diff --git a/source/_integrations/sftp_storage.markdown b/source/_integrations/sftp_storage.markdown
index 91d06b5063a..43f0f15e98f 100644
--- a/source/_integrations/sftp_storage.markdown
+++ b/source/_integrations/sftp_storage.markdown
@@ -2,15 +2,15 @@
title: SFTP Storage
description: Allows storing backups created with Backup system onto remote SFTP host.
ha_category:
- - Other
-ha_release: 2025.10
-ha_quality_scale: internal
+ - Backup
+ha_release: '2025.10'
+ha_quality_scale: silver
ha_domain: sftp_storage
ha_codeowners:
- '@maretodoric'
-ha_iot_class: Local Push
+ha_iot_class: Local Polling
ha_config_flow: true
-ha_integration_type: integration
+ha_integration_type: service
related:
- docs: /common-tasks/general/#backups
title: Backups
diff --git a/source/_integrations/sharkiq.markdown b/source/_integrations/sharkiq.markdown
index 3f191c54c38..85f7f8e7e70 100644
--- a/source/_integrations/sharkiq.markdown
+++ b/source/_integrations/sharkiq.markdown
@@ -9,6 +9,7 @@ ha_config_flow: true
ha_codeowners:
- '@JeffResc'
- '@funkybunch'
+ - '@TheOneOgre'
ha_domain: sharkiq
ha_platforms:
- vacuum
diff --git a/source/_integrations/shell_command.markdown b/source/_integrations/shell_command.markdown
index c19c8da114c..54ea7aac0d6 100644
--- a/source/_integrations/shell_command.markdown
+++ b/source/_integrations/shell_command.markdown
@@ -36,12 +36,16 @@ alias:
type: string
{% endconfiguration %}
-The commands can be dynamic, using templates to insert values for arguments. When using templates, shell_command runs in a more secure environment which doesn't allow any shell helpers like automatically expanding the home dir `~` or using pipe symbols to run multiple commands. Similarly, only content after the first space can be generated by a template. This means the command name itself cannot be generated by a template, but it must be literally provided.
+The commands can be dynamic, using templates to insert values for arguments. When using templates, shell_command runs in a more secure environment which doesn't allow any shell helpers like automatically expanding the home directory character (`~`), using pipe symbols (`|`) to run multiple commands, or operators redirecting output (such as `>` and `>>`). Similarly, only content after the first space can be generated by a template. This means the command name itself cannot be generated by a template, but it must be literally provided.
Any action data passed into the action to activate the shell command will be available as a variable within the template.
`stdout` and `stderr` output from the command are both captured and will be logged by setting the [log level](/integrations/logger/) to debug.
+{% note %}
+After you add or edit a command, restart Home Assistant. New commands won’t work until you restart, and changes to existing commands won’t take effect until after a restart.
+{% endnote %}
+
## Execution
The `command` is executed within the [configuration directory](/docs/configuration/).
diff --git a/source/_integrations/shelly.markdown b/source/_integrations/shelly.markdown
index d9811839ac4..5be79b2a2c8 100644
--- a/source/_integrations/shelly.markdown
+++ b/source/_integrations/shelly.markdown
@@ -17,7 +17,6 @@ ha_category:
- Valve
ha_release: 0.115
ha_codeowners:
- - '@balloob'
- '@bieniu'
- '@thecode'
- '@chemelli74'
@@ -181,7 +180,7 @@ The integration creates a sub-device for every relay (channel) and uses the foll
- If a `Device Name` is set in the device, the integration will use it to generate the main device name and entity names assigned to the main device.
- If a `Device Name` is not set, the integration will use the `Device ID` to generate the main device name and entity names assigned to the main device.
- If a `Channel Name` is set in the device, the integration will use it to generate the sub-device name and entity names assigned to this sub-device (channel/relay).
-- If a `Channel Name` is set to the default value in the device, the integration will use the device name and this ddefault channel name to generate the sub-device name and entity names assigned to this sub-device (channel/relay).
+- If a `Channel Name` is set to the default value in the device, the integration will use the device name and this default channel name to generate the sub-device name and entity names assigned to this sub-device (channel/relay).
Examples:
@@ -208,13 +207,15 @@ Depending on how a device's button type is configured, the integration will crea
### Binary input sensors (generation 2+)
-For generation 2+ hardware, it's possible to select if a device's input is connected to a button or a switch. Binary sensors are created only if the input mode is set to `switch`. When the input is of type `button` you need to use events for your automations.
+For generation 2+ hardware, it's possible to select if a device's input is connected to a button or a switch. Binary sensors are created only if the **Input Mode** is set to `Switch`. When the **Input Mode** is set to `Button` you need to use events for your automations.
-## Event entities (generation 1)
+## Event entities
-If the **BUTTON TYPE** of the switch connected to the device is set to `momentary` or `detached switch`, the integration creates an event entity for this switch. You can use this entity in your automations.
+### Event entities (generation 1)
-## Event entities (generation 2+)
+If the **BUTTON TYPE** of the switch connected to the device is set to `Momentary` or `Detached Switch`, the integration creates an event entity for this switch. You can use this entity in your automations.
+
+### Event entities (generation 2+)
If the **Input Mode** of the switch connected to the device is set to `Button`, the integration creates an event entity for this switch. You can use this entity in your automations.
@@ -242,7 +243,11 @@ Shelly.addEventHandler(eventHandler);
## Events
-If the **BUTTON TYPE** of the switch connected to the device is set to `momentary` or `detached switch`, integration fires events under the type `shelly.click` when the switch is used. You can use these events in your automations.
+The integration fires events under the type `shelly.click` when the switch is used if:
+- The **BUTTON TYPE** of the switch connected to the device is set to `Momentary` or `Detached Switch` – for generation 1 devices.
+- The **Input Mode** of the switch connected to the device is set to `Button` – for generation 2+ devices.
+
+You can use these events in your automations.
Also, some devices do not add an entity for the button/switch. For example, the Shelly Button1 has only one entity for the battery level. It does not have an entity for the button itself. To trigger automations based on button presses, use the `shelly.click` event.
@@ -427,6 +432,12 @@ For each device script, the integration creates a `switch` entity that allows yo
Shelly devices rely on [SNTP](https://en.wikipedia.org/wiki/Network_Time_Protocol#SNTP) for features like power measurement.
Please check from the device Web UI that the configured server is reachable.
+## Troubleshooting
+
+1. [Enable debug logging](https://www.home-assistant.io/docs/configuration/troubleshooting/#enabling-debug-logging).
+2. Take necessary steps/actions to replicate the issue.
+3. [Disable debug logging and download logs](https://www.home-assistant.io/docs/configuration/troubleshooting/#disable-debug-logging-and-download-logs).
+
## Known issues and limitations
- Only supports firmware 1.9 and later for generation 1 devices
diff --git a/source/_integrations/siemens.markdown b/source/_integrations/siemens.markdown
index 2d742d70e30..b9f1c90ae99 100644
--- a/source/_integrations/siemens.markdown
+++ b/source/_integrations/siemens.markdown
@@ -29,7 +29,6 @@ ha_platforms:
- select
- sensor
- switch
- - time
ha_iot_class: Cloud Push
ha_dhcp: true
ha_zeroconf: true
diff --git a/source/_integrations/signal_messenger.markdown b/source/_integrations/signal_messenger.markdown
index cb85a2adb59..fd2c57fc372 100644
--- a/source/_integrations/signal_messenger.markdown
+++ b/source/_integrations/signal_messenger.markdown
@@ -188,7 +188,7 @@ actions:
message: "Message received!"
```
-**NOTE** If the parameter `mode` is set to `json-rpc`, then you can use [signal-api-receiver](https://github.com/kalbasit/signal-api-receiver) to receive from Signal as follows:
+**NOTE** If the addon's `mode` parameter is set to `json-rpc`, then you can use [signal-api-receiver](https://github.com/kalbasit/signal-api-receiver) in the configuration of Home Assistant to receive from Signal as follows:
```yaml
- resource: "http://127.0.0.1:8105/receive/pop"
diff --git a/source/_integrations/siren.mqtt.markdown b/source/_integrations/siren.mqtt.markdown
index 4c8e93b2f18..e965a16dd40 100644
--- a/source/_integrations/siren.mqtt.markdown
+++ b/source/_integrations/siren.mqtt.markdown
@@ -18,7 +18,7 @@ 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 use an MQTT siren in your installation, add the following to your {% term "`configuration.yaml`" %} file.
+To use an MQTT siren 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
diff --git a/source/_integrations/sleep_as_android.markdown b/source/_integrations/sleep_as_android.markdown
index 62335854e3d..e1454ccdaf2 100644
--- a/source/_integrations/sleep_as_android.markdown
+++ b/source/_integrations/sleep_as_android.markdown
@@ -10,12 +10,12 @@ ha_config_flow: true
ha_codeowners:
- '@tr4nt0r'
ha_domain: sleep_as_android
-ha_integration_type: integration
+ha_integration_type: service
ha_platforms:
- diagnostics
- event
- sensor
-ha_quality_scale: silver
+ha_quality_scale: platinum
---
The **Sleep as Android** {% term integration %} connects the Sleep as Android app to Home Assistant, allowing you to trigger automations based on alarm clock or sleep cycle events.
@@ -30,7 +30,7 @@ The Sleep as Android integration allows you to trigger sleep-related automations
## Prerequisites
-This integration uses webhooks to receive events from Sleep as Android. By default, webhook triggers can only be accessed from devices on the same network as Home Assistant. If you want to receive events while away from your home network, remote access must be enabled, either by adding a [remote URL](/docs/configuration/remote/) or via [Nabu Casa Cloud](https://www.nabucasa.com/config/webhooks/).
+This integration uses webhooks to receive events from Sleep as Android. By default, webhook triggers can only be accessed from devices on the same network as Home Assistant. If you want to receive events while away from your home network, remote access must be enabled, either by adding a [remote URL](/docs/configuration/remote/) or via [Home Assistant Cloud](https://www.nabucasa.com/config/webhooks/).
Steps to set up the integration:
@@ -159,6 +159,15 @@ Events triggered when a specific sound is detected during sleep tracking.
| `snore` | Snoring |
| `talk` | Talking |
+### Jet lag prevention
+
+Events triggered when a specific sound is detected during sleep tracking.
+
+| Event type | Description |
+| --------------- | -------------------------- |
+| `jet_lag_start` | Jet lag prevention started |
+| `jet_lag_stop` | Jet lag prevention stopped |
+
## Automation
Here’s an example automation: when your Sleep as Android alarm starts ringing, your bedroom blinds will automatically open.
@@ -187,6 +196,21 @@ mode: single
{% endraw %}
+## Control Sleep as Android via Home Assistant
+
+The **Sleep as Android** app can be automated through its [Intent API](https://sleep.urbandroid.org/docs/devs/intent_api.html), allowing you to perform actions such as:
+
+- Enable or disable alarms
+- Snooze or dismiss alarms
+- Start, stop, or pause sleep tracking
+- Stop lullaby playback
+
+Thanks to the **Home Assistant Companion App for Android**, which supports [broadcasting intents](/docs/notifications/notification-commands#broadcast-intent), you can trigger these actions directly from Home Assistant.
+
+To make this even easier, you can import the following blueprint. It supports nearly all Sleep as Android actions, so you can automate your sleep routine without writing any custom scripts:
+
+{% my blueprint_import badge blueprint_url="https://community.home-assistant.io/t/sleep-as-android-trigger-app-actions/920845" %}
+
## Data updates
This integration receives push updates from the Sleep as Android app whenever an event is triggered. If no events occur, the displayed data may become outdated.
diff --git a/source/_integrations/sma.markdown b/source/_integrations/sma.markdown
index 8f2c46fdb1b..790a01516cc 100644
--- a/source/_integrations/sma.markdown
+++ b/source/_integrations/sma.markdown
@@ -14,7 +14,7 @@ ha_domain: sma
ha_platforms:
- diagnostics
- sensor
-ha_integration_type: integration
+ha_integration_type: device
ha_dhcp: true
---
diff --git a/source/_integrations/smhi.markdown b/source/_integrations/smhi.markdown
index 93099670fe4..06957768b71 100644
--- a/source/_integrations/smhi.markdown
+++ b/source/_integrations/smhi.markdown
@@ -33,19 +33,30 @@ The weather entity provides the current state of the weather as well as detailed
## Sensors
-The integration creates entities showing the current state of some additional weather metrics.
+The integration creates entities showing the current state of some additional weather and fire 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 following weather sensors are provided (cloud sensors are disabled by default):
-The cloud sensors are not enabled by default.
+- **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**: Precipitation category can be any of the following: No precipitation, Snow, Snow and rain, Rain, Drizzle, Freezing rain, or Freezing drizzle
+- **Frozen precipitation** (%): Percent of precipitation in frozen form
+
+The following fire sensors are provided (fire sensors are disabled by default):
+
+- **FWI-index**: Fire weather index classified from low risk to very high risk
+- **FWI-value**: Fire weather index as its native value
+- **Initial spread index (ISI)**: Describes the expected rate of fire spread
+- **Build up index (BUI)**: Indicates the total amount of fuel available for the fire
+- **Fine fuel moisture code (FFMC)**: Describes the moisture content in the dead fine fuels
+- **Duff moisture code (DMC)**: Describes moisture content of loosely compacted organic layers of moderate depth
+- **Drought code (DC)**: Describes moisture content of deep compact organic layers
+- **Highest grass fire risk**: Highest grass fire risk (danger) according to the grass fire model ranging from snow cover to very high
+- **Potential rate of spread**: Potential rate of spread (m/min) of uncut and ungrazed natural grass
+- **Fuel drying**: Measure of the available water amount in the forest fuel ranging from extremely dry to very wet
The SMHI weather service is free under the Creative Commons Attribution 4.0, international license. Weather data will be pulled once every 30 minutes.
diff --git a/source/_integrations/smtp.markdown b/source/_integrations/smtp.markdown
index 997bf42f488..bb162ceae7f 100644
--- a/source/_integrations/smtp.markdown
+++ b/source/_integrations/smtp.markdown
@@ -192,8 +192,8 @@ burglar: