From f9a9929f64313cd82ca021d49708e2335baed68c Mon Sep 17 00:00:00 2001 From: Tom Date: Wed, 30 Jul 2025 17:38:17 +0200 Subject: [PATCH 01/63] Improve introduction and add use-case and example for UISP airOS (#40210) --- source/_integrations/airos.markdown | 41 +++++++++++++++++++++++++++-- 1 file changed, 39 insertions(+), 2 deletions(-) diff --git a/source/_integrations/airos.markdown b/source/_integrations/airos.markdown index 9c885dc21077..24c8fa027a3b 100644 --- a/source/_integrations/airos.markdown +++ b/source/_integrations/airos.markdown @@ -15,12 +15,16 @@ ha_integration_type: device ha_quality_scale: bronze --- -Ubiquiti's [UISP](https://techspecs.ui.com/uisp/wireless) (Ubiquity Internet Service Provider) product line includes various devices designed for interconnecting locations. This integration provides monitoring capabilities for devices running the airOS opearting system. +Ubiquiti's [UISP](https://techspecs.ui.com/uisp/wireless) (Ubiquity Internet Service Provider) product line offers a comprehensive suite of devices specifically designed for interconnecting various locations. Even their most cost-effective NanoStations achieve up to 450 Mbps real TCP/IP throughput and maintain reliable links up 10km range! -There is currently support for the following device types within Home Assistant: +A common use-case is establishing wireless point-to-point (PtP) or multi-point-to-point (PtMP) links between buildings, remote sites or even neighbours. This is highly advantageous when traditional fiber-optic or Ethernet is either impractical or distance is too much for copper cabling. With line-of-sight (LOS) between airOS devices, a stable and high-bandwidth "beam" can be established, eliminating any need for additional infrastructure. While regular WiFi Access Points can be used, e.g. with meshing, for extending the network range, this also reduces capacity and performance of you WiFi network. + +There is currently support for the following plaforms within Home Assistant: - [Sensor](#sensor) +This integration allows users to pull network metrics and statuses directly into their Home Assistant dashboards, enabling advanced automation, notifications, and comprehensive network oversight within their smart home ecosystem. + {% note %} Ubiquiti UISP products cannot be managed from their popular [UniFi](/integrations/unifi/) software. They are typically configured using a web browser, the UISP Mobile App, or the UISP Cloud/Self-Hosted platform. {% endnote %} @@ -76,6 +80,39 @@ Performance in decibels of the devices antenna. See [Gain](https://en.wikipedia. Data is polled from devices every 60 seconds. +## Examples + +### Detect link degradation + +As both stations need to maintain line-of-sight (LOS) between each other, the greater their distance, the more likely something will occasionally obstruct the path. A construction site crane might be in the way, or your local window cleaners might have slightly tapped your Access Point, causing its antenna to become misaligned. While the link might still be operational, it will definitely not be providing the capacity it had before. This automation example will notify you of an unexpected change in your link's capacity bandwidth. + +This automation triggers when either the download or upload capacity reported by your NanoStation drops significantly below its expected performance level. + +```yaml +automation: + alias: 'UISP NanoStation Link Capacity Warning' + triggers: + - trigger: numeric_state + entity_id: + - sensor.nanostation_5ac_access_point_download_capacity + - sensor.nanostation_5ac_access_point_upload_capacity + for: + hours: 0 + minutes: 5 + seconds: 0 + above: 360000 + conditions: [] + actions: + - action: notify.send_message + metadata: {} + data: + message: "Point-to-Point capacity loss, please check your wireless links" + target: + entity_id: notify.notifier +``` + +The above currently caters for a 25% degradation of 450 Mbit/s. If you want to consider your actual capacity dynamically we suggest looking into the [Statistics](/integrations/statistics/) integration. + ## Troubleshooting ### Accessing the local device From 659de7e7109459f079ba10700f25372c9087195c Mon Sep 17 00:00:00 2001 From: Petro31 <35082313+Petro31@users.noreply.github.com> Date: Thu, 31 Jul 2025 10:00:05 -0400 Subject: [PATCH 02/63] Add-optimistic-to-platforms (#40235) --- source/_integrations/template.markdown | 43 +++++++++++++++++++++----- 1 file changed, 35 insertions(+), 8 deletions(-) diff --git a/source/_integrations/template.markdown b/source/_integrations/template.markdown index 43431e6d7ba7..8f1f4a006d92 100644 --- a/source/_integrations/template.markdown +++ b/source/_integrations/template.markdown @@ -308,6 +308,11 @@ alarm_control_panel: description: Defines an action to run when the alarm is disarmed. required: false type: action + optimistic: + description: Flag that defines if the alarm control panel works in optimistic mode. When enabled, the alarm control panel's state will update immediately when a new option is chosen through the UI or service calls, without waiting for the template defined in `state` to update. When disabled (default), the alarm control panel will only update when the `state` template returns a new value. + required: false + type: boolean + default: false state: description: "Defines a template to set the state of the alarm panel. Only the states `armed_away`, `armed_home`, `armed_night`, `armed_vacation`, `arming`, `disarmed`, `pending`, `triggered` and `unavailable` are used." required: false @@ -828,14 +833,19 @@ fan: required: true type: map keys: - oscillating: - description: "Defines a template to get the osc state of the fan. Valid values: `true`, `false`." - required: false - type: template direction: description: "Defines a template to get the direction of the fan. Valid values: `forward`, `reverse`." required: false type: template + optimistic: + description: Flag that defines if the fan works in optimistic mode. When enabled, the fan's state will update immediately when a new option is chosen through the UI or service calls, without waiting for the template defined in `state` to update. When disabled (default), the fan will only update when the `state` template returns a new value. + required: false + type: boolean + default: false + oscillating: + description: "Defines a template to get the oscillation state of the fan. Valid values: `true`, `false`." + required: false + type: template percentage: description: Defines a template to get the speed percentage of the fan. required: false @@ -1197,6 +1207,11 @@ light: required: false type: template default: optimistic + optimistic: + description: Flag that defines if the light works in optimistic mode. When enabled, the light's state will update immediately when a new option is chosen through the UI or service calls, without waiting for the template defined in `state` to update. When disabled (default), the light will only update when the `state` template returns a new value. + required: false + type: boolean + default: false rgb: description: Defines a template to get the RGB color of the light. Must render a tuple or a list (red, green, blue). required: false @@ -1441,13 +1456,14 @@ lock: required: false type: action optimistic: - description: Flag that defines if the lock works in optimistic mode. + description: Flag that defines if the lock works in optimistic mode. When enabled, the lock's state will update immediately when a new option is chosen through the UI or service calls, without waiting for the template defined in `state` to update. When disabled (default), the lock will only update when the `state` template returns a new value. required: false type: boolean default: false state: description: Defines a template to set the state of the lock. Valid output values from the template are `locked`, `unlocked`, `open`, `locking`, `unlocking`, `opening`, and `jammed`, which are directly mapped to the corresponding states. In addition, `true` and `on` are valid as synonyms to `locked` while `false` and `off` are valid as synonyms to `unlocked`. - required: true + required: false + default: optimistic type: template unlock: description: Defines an action to run when the lock is unlocked. @@ -1626,7 +1642,7 @@ number: type: template default: 0.0 optimistic: - description: Flag that defines if number works in optimistic mode. When enabled, the number's state will update immediately when changed through the UI or service calls, without waiting for the template defined in `state` to update. When disabled (default), the number will only update when the `state` template returns a new value. + description: Flag that defines if the number works in optimistic mode. When enabled, the number's state will update immediately when changed through the UI or service calls, without waiting for the template defined in `state` to update. When disabled (default), the number will only update when the `state` template returns a new value. required: false type: boolean default: false @@ -1726,7 +1742,7 @@ select: type: map keys: optimistic: - description: Flag that defines if select works in optimistic mode. When enabled, the select's state will update immediately when a new option is chosen through the UI or service calls, without waiting for the template defined in `state` to update. When disabled (default), the select will only update when the `state` template returns a new value. + description: Flag that defines if the select works in optimistic mode. When enabled, the select's state will update immediately when a new option is chosen through the UI or service calls, without waiting for the template defined in `state` to update. When disabled (default), the select will only update when the `state` template returns a new value. required: false type: boolean default: false @@ -1980,6 +1996,11 @@ switch: required: true type: map keys: + optimistic: + description: Flag that defines if the switch works in optimistic mode. When enabled, the switch's state will update immediately when a new option is chosen through the UI or service calls, without waiting for the template defined in `state` to update. When disabled (default), the switch will only update when the `state` template returns a new value. + required: false + type: boolean + default: false state: description: Defines a template to set the state of the switch. If not defined, the switch will optimistically assume all commands are successful. required: false @@ -2155,6 +2176,11 @@ vacuum: description: Defines an action to run when the vacuum is given a locate command. required: false type: action + optimistic: + description: Flag that defines if the vacuum works in optimistic mode. When enabled, the vacuum's state will update immediately when a new option is chosen through the UI or service calls, without waiting for the template defined in `state` to update. When disabled (default), the vacuum will only update when the `state` template returns a new value. + required: false + type: boolean + default: false pause: description: Defines an action to run when the vacuum is paused. required: false @@ -2174,6 +2200,7 @@ vacuum: state: description: "Defines a template to get the state of the vacuum. Valid value: `docked`/`cleaning`/`idle`/`paused`/`returning`/`error`" required: false + default: optimistic type: template stop: description: Defines an action to run when the vacuum is stopped. From ddc7ba8bf92d2d6f242601eb5409a8ceee10b21b Mon Sep 17 00:00:00 2001 From: Fabian Leutgeb Date: Fri, 1 Aug 2025 03:22:19 +0200 Subject: [PATCH 03/63] Linked entities for HomeKit valve duration characteristics (#40222) Co-authored-by: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com> --- source/_integrations/homekit.markdown | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/source/_integrations/homekit.markdown b/source/_integrations/homekit.markdown index 8338f889af69..27be6c3e4a6a 100644 --- a/source/_integrations/homekit.markdown +++ b/source/_integrations/homekit.markdown @@ -194,6 +194,14 @@ homekit: description: The `entity_id` of a `sensor` entity to use as the temperature sensor of the air purifier accessory. required: false type: string + linked_valve_duration: + description: The `entity_id` of an `input_number` entity to use as the default run time of a valve switch (switch type `faucet`, `shower`, `sprinkler`, or `valve`), or valve accessory. Minimum value `300` seconds. Maximum value `3600` seconds. Step size `300` seconds. Changes in HomeKit will change the sensor state (and vice versa). + required: false + type: string + linked_valve_end_time: + description: The `entity_id` of a `sensor` (timestamp) entity to use for calculating the remaining time of a valve switch (switch type `faucet`, `shower`, `sprinkler`, or `valve`), or valve accessory. The end time has to be maintained in Home Assistant. HomeKit will not update the state of this sensor. + required: false + type: string low_battery_threshold: description: Minimum battery level before the accessory starts reporting a low battery. required: false @@ -450,10 +458,10 @@ The following integrations are currently supported: | sensor | CarbonMonoxideSensor | All sensors that have `carbon_monoxide` as their `device_class` | | sensor | CarbonDioxideSensor | All sensors that have `co2` as part of their `entity_id` or `carbon_dioxide` as their `device_class` | | sensor | LightSensor | All sensors that have `lm` or `lx` as their `unit_of_measurement` or `illuminance` as their `device_class` | -| switch | Switch | Represented as a switch by default but can be changed by using `type` within `entity_config`. | +| switch | Switch | Represented as a switch by default but can be changed by using `type` within `entity_config`. Valve switches (type `faucet`, `shower`, `sprinkler`, or `valve`) can be linked with `linked_valve_duration` and `linked_valve_end_time`. | | water_heater | WaterHeater | All `water_heater` devices. | | device_automation | DeviceTriggerAccessory | All devices that support triggers. | -| valve | Valve | All `valve` devices. | +| valve | Valve | All `valve` devices can be linked with `linked_valve_duration` and `linked_valve_end_time`. | # Device triggers From 3c328f8af48c59ad97d7903f87d130baed58419e Mon Sep 17 00:00:00 2001 From: Tom Date: Fri, 1 Aug 2025 20:31:27 +0200 Subject: [PATCH 04/63] Add diagnostics section to UISP AirOS (#40199) --- source/_integrations/airos.markdown | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/source/_integrations/airos.markdown b/source/_integrations/airos.markdown index 24c8fa027a3b..662f0f0ba018 100644 --- a/source/_integrations/airos.markdown +++ b/source/_integrations/airos.markdown @@ -128,3 +128,18 @@ If you need to configure the device directly, you can find the link to your devi Please note that the [default intervals](#data-updates) are considered best practice. Updating too frequently may induce considerable load on your bridge(s) resulting in unexpected results or missing data. {% include common-tasks/define_custom_polling.md %} + +### Diagnostic data + +If you need to create an issue to report a bug or want to inspect diagnostic data, use the below method to retrieve diagnostics: + +1. Go to {% my integrations title="**Settings** > **Devices & services**" %}, and select your integration and device. +2. On the integration entry, select the {% icon "mdi:dots-vertical" %}. + - Then, select **Download diagnostics** and a JSON file will be downloaded. +3. You can inspect the downloaded file or, when requested, upload it to your issue report. + +## Removing the integration + +This integration follows standard integration removal. No extra steps are required within Home Assistant or on your devices running airOS. + +{% include integrations/remove_device_service.md %} From f57d1351b64b344099cb01b2a000be3cb35301ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=85ke=20Strandberg?= Date: Sat, 2 Aug 2025 09:21:14 +0200 Subject: [PATCH 05/63] Add automation example to Miele page (#40231) --- source/_integrations/miele.markdown | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/source/_integrations/miele.markdown b/source/_integrations/miele.markdown index 5bcfa5e47a14..e34a0916f4b6 100644 --- a/source/_integrations/miele.markdown +++ b/source/_integrations/miele.markdown @@ -244,6 +244,30 @@ actions: {% endraw %} {% enddetails %} +### Set program and start washing machine + +Load your washing machine and manually activate mobile start or remote control mode on the machine. + +{% details "Example YAML configuration" %} + +{% raw %} + +```yaml +alias: "Wash cottons early in the morning" +description: "Set cottons program and start washing machine early in the morning" +triggers: + - trigger: time + at: "04:00:00" +actions: + - action: miele.set_program + data: + device_id: + program_id: 1 +``` + +{% endraw %} +{% enddetails %} + ## Data updates This integration uses server-sent events from the Miele API to receive live updates from the appliances. From f05adb5a58e4db0370ca2759980d64cabe2efc4a Mon Sep 17 00:00:00 2001 From: Thomas D <11554546+thomasddn@users.noreply.github.com> Date: Sat, 2 Aug 2025 20:02:08 +0200 Subject: [PATCH 06/63] Add sensor to Qbus integration (#40130) --- source/_integrations/qbus.markdown | 3 +++ 1 file changed, 3 insertions(+) diff --git a/source/_integrations/qbus.markdown b/source/_integrations/qbus.markdown index e56314e01b14..63bbec40cc07 100644 --- a/source/_integrations/qbus.markdown +++ b/source/_integrations/qbus.markdown @@ -7,12 +7,14 @@ ha_category: - Hub - Light - Scene + - Sensor - Switch ha_platforms: - climate - cover - light - scene + - sensor - switch ha_iot_class: Local Push ha_codeowners: @@ -52,6 +54,7 @@ There is currently support for the following **Qbus** products within Home Assis - **Cover**: operate covers with support for actions like open, close, stop, position adjustment, and tilt — depending on your setup. - **Light**: control dimmer lights, allowing both on/off functionality and brightness adjustment. - **Scene**: activate predefined scenes. +- **Sensor**: display sensor values from devices like gauges, humidity sensors, thermostats, ventilation, and weather stations. - **Switch**: toggle on/off outputs. ## Removing the integration From 1901cb822d26cb15394b1e314aad40b3aa9f9ddd Mon Sep 17 00:00:00 2001 From: Manu <4445816+tr4nt0r@users.noreply.github.com> Date: Sun, 3 Aug 2025 07:04:24 +0200 Subject: [PATCH 07/63] Add direct message notifier to PlayStation Network (#40249) --- source/_integrations/playstation_network.markdown | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/_integrations/playstation_network.markdown b/source/_integrations/playstation_network.markdown index dac26b9a0b8e..05c7fe94c455 100644 --- a/source/_integrations/playstation_network.markdown +++ b/source/_integrations/playstation_network.markdown @@ -105,6 +105,10 @@ After adding a friend, a new device will be created with the following entities: - **Avatar**: Displays the friend's current avatar. - **Now playing**: Displays the current game title image if the friend is playing a game. +### Notifier + +- **Direct message**: Sends a private message to your friend through the PlayStation Network. + ## Data updates This integration retrieves data from the PlayStation Network every 30 seconds to ensure timely updates. From c9ef9795dbcbd820033277e8fe5b22a8bce63715 Mon Sep 17 00:00:00 2001 From: Jan-Philipp Benecke Date: Mon, 4 Aug 2025 08:22:09 +0200 Subject: [PATCH 08/63] Add jitter sensor to Ping integration (#40259) --- source/_integrations/ping.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_integrations/ping.markdown b/source/_integrations/ping.markdown index 2bbd6fb8e453..4057531e364b 100644 --- a/source/_integrations/ping.markdown +++ b/source/_integrations/ping.markdown @@ -59,6 +59,7 @@ The integration exposes the different round trip times milliseconds as entities: - `Round Trip Time Average` - the average round trip time - `Round Trip Time Minimum` - the shortest round trip time - `Round Trip Time Maximum` - the longest round trip time +- `Jitter` - the variation in round trip times **These entities are disabled by default and can be enabled in the UI if needed.** From c142c25f8cd4819d3b9d5447362c327768992ad3 Mon Sep 17 00:00:00 2001 From: hanwg Date: Mon, 4 Aug 2025 20:34:38 +0800 Subject: [PATCH 09/63] Update Telegram bot events (#39983) --- source/_integrations/telegram_bot.markdown | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/source/_integrations/telegram_bot.markdown b/source/_integrations/telegram_bot.markdown index be334db9ef3f..2024d362205c 100644 --- a/source/_integrations/telegram_bot.markdown +++ b/source/_integrations/telegram_bot.markdown @@ -468,10 +468,17 @@ args: "" from_first: "" from_last: "" user_id: "" +id: "" chat_id: "" chat: "" date: "" message_thread_id: "" +bot: + config_entry_id: "" + id: "" + first_name: "" + last_name: "" + username: "" ``` Any other message not starting with `/` will be processed as simple text, firing a `telegram_text` event on the event bus with the following `event_data`: @@ -481,10 +488,16 @@ text: "some text received" from_first: "" from_last: "" user_id: "" +id: "" chat_id: "" -chat: "" date: "" message_thread_id: "" +bot: + config_entry_id: "" + id: "" + first_name: "" + last_name: "" + username: "" ``` If the message is sent from a [press from an inline button](https://core.telegram.org/bots#inline-keyboards-and-on-the-fly-updating), for example, a callback query is received, and Home Assistant will fire a `telegram_callback` event with: @@ -498,6 +511,12 @@ user_id: "" id: "" chat_instance: "" chat_id: "" +bot: + config_entry_id: "" + id: "" + first_name: "" + last_name: "" + username: "" ``` ### Configuration samples From 0ef5b2546f90b54523dfb7457b3af53f6cd0cc75 Mon Sep 17 00:00:00 2001 From: Markus Adrario Date: Mon, 4 Aug 2025 16:47:26 +0200 Subject: [PATCH 10/63] Add zeroconf to Homee (#40246) --- source/_integrations/homee.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_integrations/homee.markdown b/source/_integrations/homee.markdown index 2d882d8c378b..0e2ba87673e1 100644 --- a/source/_integrations/homee.markdown +++ b/source/_integrations/homee.markdown @@ -17,6 +17,7 @@ ha_category: - Switch - Valve ha_config_flow: true +ha_zeroconf: true ha_release: 2025.2 ha_iot_class: Local Push ha_codeowners: From ef1aeb72737028fba30c2400c9b483cd79a12484 Mon Sep 17 00:00:00 2001 From: Thomas55555 <59625598+Thomas55555@users.noreply.github.com> Date: Mon, 4 Aug 2025 22:28:45 +0200 Subject: [PATCH 11/63] Reset cutting blade usage time in Husqvarna Automower (#40260) --- source/_integrations/husqvarna_automower.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_integrations/husqvarna_automower.markdown b/source/_integrations/husqvarna_automower.markdown index 36f1c50ed1ac..e08f1a01bc6a 100644 --- a/source/_integrations/husqvarna_automower.markdown +++ b/source/_integrations/husqvarna_automower.markdown @@ -108,6 +108,7 @@ The integration will create the following binary sensors: The integration will create the following buttons: - **Confirm Error** (if available): For confirming minor mower errors. +- **Reset cutting blade usage time** (if available): Resets the cutting blade usage time. - **Sync clock**: Syncs the clock of the mower with the time set in Home Assistant. ### Calendar From a2fa2bd7e9c790c06bd4d424eecbc3709c545105 Mon Sep 17 00:00:00 2001 From: Tom Date: Mon, 4 Aug 2025 22:37:29 +0200 Subject: [PATCH 12/63] Remove airOS wireless_mode sensor (#40274) --- source/_integrations/airos.markdown | 4 ---- 1 file changed, 4 deletions(-) diff --git a/source/_integrations/airos.markdown b/source/_integrations/airos.markdown index 662f0f0ba018..528b7ff37767 100644 --- a/source/_integrations/airos.markdown +++ b/source/_integrations/airos.markdown @@ -56,10 +56,6 @@ Indicates the role of the device in your network, either 'bridge' or 'router'. The base frequency set for this device. -### Wireless Mode - -ndicates the device's role in the wireless link, typically 'ap-ptp' (Access Point Point-to-Point) or 'sta-ptp' (Station Point-to-Point). - ### Wireless SSID The SSID (wireless network name) used by this device. From c33a070d8c16dc282d06b44fdad88c926aca790f Mon Sep 17 00:00:00 2001 From: Tom Date: Wed, 6 Aug 2025 06:04:24 +0200 Subject: [PATCH 13/63] Improve airOS documentation (#40289) --- source/_integrations/airos.markdown | 46 +++++++++++++++++++++-------- 1 file changed, 33 insertions(+), 13 deletions(-) diff --git a/source/_integrations/airos.markdown b/source/_integrations/airos.markdown index 528b7ff37767..c8ac3ce31199 100644 --- a/source/_integrations/airos.markdown +++ b/source/_integrations/airos.markdown @@ -15,9 +15,9 @@ ha_integration_type: device ha_quality_scale: bronze --- -Ubiquiti's [UISP](https://techspecs.ui.com/uisp/wireless) (Ubiquity Internet Service Provider) product line offers a comprehensive suite of devices specifically designed for interconnecting various locations. Even their most cost-effective NanoStations achieve up to 450 Mbps real TCP/IP throughput and maintain reliable links up 10km range! +Ubiquiti UISP-range of [wireless](https://techspecs.ui.com/uisp/wireless) products offer a comprehensive suite of devices specifically designed for interconnecting various locations. As long as these airOS devices can 'see' each other without any (or limited) obstructions like buildings or trees, a stable and high-bandwidth "beam" can be established. Even their most cost-effective devices can achieve up to 450 Mbps real TCP/IP throughput and maintain reliable links up 10km range! -A common use-case is establishing wireless point-to-point (PtP) or multi-point-to-point (PtMP) links between buildings, remote sites or even neighbours. This is highly advantageous when traditional fiber-optic or Ethernet is either impractical or distance is too much for copper cabling. With line-of-sight (LOS) between airOS devices, a stable and high-bandwidth "beam" can be established, eliminating any need for additional infrastructure. While regular WiFi Access Points can be used, e.g. with meshing, for extending the network range, this also reduces capacity and performance of you WiFi network. +A common use-case is establishing wireless PtP or PtMP links between buildings, remote sites, neighbours or even your shed. This is highly advantageous when traditional fiber-optic or copper network cabling is either impractical or the distance is too far for copper cabling. With LoS between airOS devices, a stable and high-bandwidth "beam" can be established, eliminating any need for additional infrastructure. This can be an improvement over extending your WiFi coverage using meshing of Access Points, as meshing potentially reduces the capacity and performance of your WiFi network. There is currently support for the following plaforms within Home Assistant: @@ -26,7 +26,7 @@ There is currently support for the following plaforms within Home Assistant: This integration allows users to pull network metrics and statuses directly into their Home Assistant dashboards, enabling advanced automation, notifications, and comprehensive network oversight within their smart home ecosystem. {% note %} -Ubiquiti UISP products cannot be managed from their popular [UniFi](/integrations/unifi/) software. They are typically configured using a web browser, the UISP Mobile App, or the UISP Cloud/Self-Hosted platform. +Ubiquiti UISP products cannot be managed from their popular [UniFi](/integrations/unifi/) software. They are typically configured using a web browser, the UISP Mobile App, or the UISP platform (either Cloud or [Self-Hosted](https://help.uisp.com/hc/en-us/articles/22591008678039-UISP-First-Time-Setup-Installation). {% endnote %} ## Prerequisites @@ -37,12 +37,32 @@ This integration only supports devices running airOS 8 and already configured us ## Supported devices -### airOS 8 +### airOS firmware 8 -While there is no known limitation to which devices running airOS 8 are supported, success has been reported on: +While there is no known limitation to which devices running airOS firmware version 8 are supported, success has been reported on: -- PowerBeam 5AC gen2 -- Nanostation 5AC (LOCO5AC) +- Nanostation 5AC Loco (Loco5AC) +- PowerBeam 5AC (PBE-5AC-Gen2) + +Do you have a device that works? We’d love to hear [your experience](#feedback_section) so we can add it to this list! + +## Operating roles + +Depending on the device's placement, it will be configured as either an 'Access Point' (AP) acting as the central device or a 'Station' connecting as a client. An AP can have multiple stations connected to it, whereas a station typically connects to only a single AP. + +For stations in particular, they can operate in either a 'Bridge' or 'Router' role: + +- In 'Bridge' mode, the default and most common configuration + + - The airOS device simply bridges the wireless and wired connections. In simplistic terms, it functions as a transparent network cable, making it invisible to the devices on both the station and AP sides. + - This mode is ideal for extending a network's reach without introducing new subnets or managing additional routing. + +- In 'Router' mode, the airOS device + + - Acts as a small router, performing NAT as well as providing DHCP services for devices connected to its LAN port. + - Can also be configured as a PPPoE client, authenticating with a central PPPoE server to receive its IP address, gateway, and other network settings. + +The choice between Bridge and Router mode depends on the network architecture and whether the device is intended to extend an existing network (Bridge) or create a new subnet (Router). ## Sensor @@ -50,7 +70,7 @@ This integration exposes the following sensor entities for your airOS devices: ### Network Role -Indicates the role of the device in your network, either 'bridge' or 'router'. +Indicates the role of the device in your network, either 'bridge' or 'router' (see [operating roles](#operating-roles) for more information. ### Wireless Frequency @@ -58,7 +78,7 @@ The base frequency set for this device. ### Wireless SSID -The SSID (wireless network name) used by this device. +The SSID (i.e. the wireless network name) used by this device. ### Download capacity & Upload capacity @@ -70,7 +90,7 @@ These sensors show the actual data transfer rate (receive and transmit) for this ### Antenna gain -Performance in decibels of the devices antenna. See [Gain](https://en.wikipedia.org/wiki/Gain_(antenna)) on Wikipedia. +Performance in dB for the device antenna. See [Gain](https://en.wikipedia.org/wiki/Gain_(antenna)) on Wikipedia. ## Data updates @@ -80,7 +100,7 @@ Data is polled from devices every 60 seconds. ### Detect link degradation -As both stations need to maintain line-of-sight (LOS) between each other, the greater their distance, the more likely something will occasionally obstruct the path. A construction site crane might be in the way, or your local window cleaners might have slightly tapped your Access Point, causing its antenna to become misaligned. While the link might still be operational, it will definitely not be providing the capacity it had before. This automation example will notify you of an unexpected change in your link's capacity bandwidth. +As both stations need to maintain LoS between each other, the greater their distance, the more likely something will occasionally obstruct the path. A construction site crane might be in the way, or your local window cleaners might have slightly tapped your Access Point, causing its antenna to become misaligned. While the link might still be operational, it will definitely not be providing the capacity it had before. This automation example will notify you of an unexpected change in your link's capacity bandwidth. This automation triggers when either the download or upload capacity reported by your NanoStation drops significantly below its expected performance level. @@ -107,7 +127,7 @@ automation: entity_id: notify.notifier ``` -The above currently caters for a 25% degradation of 450 Mbit/s. If you want to consider your actual capacity dynamically we suggest looking into the [Statistics](/integrations/statistics/) integration. +The above currently caters for a 25% degradation of 450 Mbit/s. If you want to consider your actual capacity in a dynamic approach, we suggest looking into the [Statistics](/integrations/statistics/) integration. ## Troubleshooting @@ -121,7 +141,7 @@ If you need to configure the device directly, you can find the link to your devi ### Adjusting the update interval -Please note that the [default intervals](#data-updates) are considered best practice. Updating too frequently may induce considerable load on your bridge(s) resulting in unexpected results or missing data. +Please note that the [default interval](#data-updates) is considered best practice. Updating too frequently may induce considerable load on your bridge(s) resulting in unexpected results or missing data. {% include common-tasks/define_custom_polling.md %} From df3962a1f12254a7f24f968b81d8a13fec85c03a Mon Sep 17 00:00:00 2001 From: starkillerOG Date: Wed, 6 Aug 2025 11:12:50 +0200 Subject: [PATCH 14/63] Reduce Reolink fimware polling from 12h to 24h docs (#40299) --- source/_integrations/reolink.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_integrations/reolink.markdown b/source/_integrations/reolink.markdown index 49e6b3d43f93..0d4b9e529d6e 100644 --- a/source/_integrations/reolink.markdown +++ b/source/_integrations/reolink.markdown @@ -71,7 +71,7 @@ If an entity listed below has an asterisk (*) next to its name, it means it is d 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. -An exception is the firmware update entity, which is polled every 12 hours. +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: - The camera wakes by itself (PIR event) and the last update was more than 1 hour ago. @@ -341,7 +341,7 @@ Depending on the supported features of the camera ([see specifications of the ca ### Update entity -An update entity is available that checks for firmware updates every 12 hours. +An update entity is available that checks for firmware updates every 24 hours. Updates are checked both through the camera API and directly from the [Reolink download center](https://reolink.com/download-center/). Therefore the update entity in Home Assistant can find and install a firmware update from the [Reolink download center](https://reolink.com/download-center/) while the Reolink app/windows/web client does not always find this update. From b960a35a7ccd2765df6dcb130196d2d24b58b315 Mon Sep 17 00:00:00 2001 From: Jan Bouwhuis Date: Wed, 6 Aug 2025 11:51:55 +0200 Subject: [PATCH 15/63] Deprecate MQTT vacuum battery feature (#40251) --- source/_integrations/vacuum.mqtt.markdown | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/source/_integrations/vacuum.mqtt.markdown b/source/_integrations/vacuum.mqtt.markdown index 9356c1a03d2c..05130c5afc73 100644 --- a/source/_integrations/vacuum.mqtt.markdown +++ b/source/_integrations/vacuum.mqtt.markdown @@ -208,14 +208,14 @@ set_fan_speed_topic: required: false type: string state_topic: - description: "The MQTT topic subscribed to receive state messages from the vacuum. Messages received on the `state_topic` must be a valid JSON dictionary, with a mandatory `state` key and optionally `battery_level` and `fan_speed` keys as shown in the [example](#configuration-example)." + description: "The MQTT topic subscribed to receive state messages from the vacuum. Messages received on the `state_topic` must be a valid JSON dictionary, with a mandatory `state` key and optionally `fan_speed` keys as shown in the [example](#configuration-example)." required: false type: string supported_features: - description: "List of features that the vacuum supports (possible values are `start`, `stop`, `pause`, `return_home`, `battery`, `status`, `locate`, `clean_spot`, `fan_speed`, `send_command`)." + description: "List of features that the vacuum supports (possible values are `start`, `stop`, `pause`, `return_home`, `status`, `locate`, `clean_spot`, `fan_speed`, `send_command`)." required: false type: [string, list] - default: "`start`, `stop`, `return_home`, `status`, `battery`, `clean_spot`" + default: "`start`, `stop`, `return_home`, `status`, `clean_spot`" unique_id: description: An ID that uniquely identifies this vacuum. If two vacuums have the same unique ID, Home Assistant will raise an exception. Required when used with device-based discovery. required: false @@ -234,7 +234,6 @@ mqtt: - pause - stop - return_home - - battery - status - locate - clean_spot @@ -312,7 +311,6 @@ MQTT payload: ```json { - "battery_level": 61, "state": "docked", "fan_speed": "off" } From b2af37356fb03f86e7b40a6ca201196c9826c4ed Mon Sep 17 00:00:00 2001 From: tronikos Date: Wed, 6 Aug 2025 05:20:44 -0700 Subject: [PATCH 16/63] Update Opower for PG&E (#40211) --- source/_integrations/opower.markdown | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/source/_integrations/opower.markdown b/source/_integrations/opower.markdown index fb34295f4dc0..974c1c53afca 100644 --- a/source/_integrations/opower.markdown +++ b/source/_integrations/opower.markdown @@ -50,7 +50,6 @@ More than 175 utilities use Opower. Currently only the following utilities are s - National Grid NY Metro - National Grid NY Upstate - Pacific Gas & Electric (PG&E) - > **Note:** Currently only works with PG&E accounts created **before June 2025** that do not require multi-factor authentication (MFA). - Portland General Electric (PGE) - Puget Sound Energy (PSE) - Sacramento Municipal Utility District (SMUD) @@ -88,6 +87,11 @@ When using Opower with any of the Exelon subsidiaries, such as BGE, ComEd, PECO, 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. +### Pacific Gas & Electric (PG&E) + +The integration properly supports Multi-Factor Authentication (MFA) for PG&E via either email or phone. +You will be asked to re-authenticate via MFA every 180 days. + {% include integrations/config_flow.md %} ## Sensors From 4d271616a42d514127b9b25c5bf077ad1ecd3da2 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Wed, 6 Aug 2025 20:07:52 -1000 Subject: [PATCH 17/63] Add support for Inkbird IAM-T2 (#40314) --- source/_integrations/inkbird.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_integrations/inkbird.markdown b/source/_integrations/inkbird.markdown index 65b3a0d29014..dcf7c16cf11e 100644 --- a/source/_integrations/inkbird.markdown +++ b/source/_integrations/inkbird.markdown @@ -30,6 +30,7 @@ Integrates [INKBIRD](https://www.inkbird.com/) devices into Home Assistant. - [INKBIRD Bluetooth Hygrometer Thermometer ITH-13-B](https://inkbird.com/products/bluetooth-hygrometer-thermometer-ith-13-b) - [INKBIRD Bluetooth Hygrometer Thermometer ITH-21-B](https://inkbird.com/products/bluetooth-hygrometer-thermometer-ith-21-b) - [INKBIRD Bluetooth Wireless 4-in-1 Air Quality Monitor IAM-T1](https://inkbird.com/collections/air-quality-monitors/products/smart-indoor-air-quality-monitor-iam-t1) +- [INKBIRD Bluetooth 3-in-1 Indoor Air Quality Monitor IAM-T2](https://inkbird.com/products/bluetooth-3-in-1-indoor-air-quality-monitor-iam-t2) - [Nutrichef Smart Wireless Grill Thermometer](https://nutrichefkitchen.com/products/pwirbbq40) - [Nutrichef Smart Bluetooth BBQ Grill Thermometer](https://nutrichefkitchen.com/products/pwirbbq80-1) From df91af72c37900870b815f4f08726de200c2b6c3 Mon Sep 17 00:00:00 2001 From: G Johansson Date: Fri, 8 Aug 2025 13:09:17 +0200 Subject: [PATCH 18/63] Remove linear_garage_door integration docs (#40302) --- .../_integrations/linear_garage_door.markdown | 41 ------------------- source/_redirects | 1 + 2 files changed, 1 insertion(+), 41 deletions(-) delete mode 100644 source/_integrations/linear_garage_door.markdown diff --git a/source/_integrations/linear_garage_door.markdown b/source/_integrations/linear_garage_door.markdown deleted file mode 100644 index 224241c30e38..000000000000 --- a/source/_integrations/linear_garage_door.markdown +++ /dev/null @@ -1,41 +0,0 @@ ---- -title: Linear Garage Door -description: Control Linear garage doors -ha_release: '2023.12' -ha_category: - - Cover - - Light -ha_iot_class: Cloud Polling -ha_config_flow: true -ha_codeowners: - - '@IceBotYT' -ha_domain: linear_garage_door -ha_platforms: - - cover - - diagnostics - - light -ha_integration_type: integration ---- - -{% warning %} -This integration is now deprecated and will be removed in 2025.8.0. -Please use the new [Nice G.O.](/integrations/nice_go) integration instead to avoid disruption. - -For more information, refer to the [Nice G.O. migration documentation](https://na.niceforyou.com/features/nice-go-app/#migration). -{% endwarning %} - -The Linear integration lets you control Linear garage doors through Home Assistant. Device names in Home Assistant are generated based on the names defined in your Linear mobile app. - -## Prerequisites - -This integration is for garage doors connected to the cloud by Wi-Fi using the Linear mobile app. - -{% include integrations/config_flow.md %} - -## Cover - -Garage doors linked to your Linear account will appear as covers. - -## Light - -Lights on your garage door will appear as lights. diff --git a/source/_redirects b/source/_redirects index 96b72be83663..fed3aebcec3e 100644 --- a/source/_redirects +++ b/source/_redirects @@ -586,6 +586,7 @@ layout: null /integrations/lirc /more-info/removed-integration 301 /integrations/life360 /more-info/removed-integration 301 /integrations/lifx_legacy /more-info/removed-integration 301 +/integrations/linear_garage_door /more-info/removed-integration 301 /integrations/linksys_ap /more-info/removed-integration 301 /integrations/linky /more-info/removed-integration 301 /integrations/liveboxplaytv /more-info/removed-integration 301 From 930312b3279c229bfd7d5b5e0adcabac4a3c6c58 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joris=20Pelgr=C3=B6m?= Date: Fri, 8 Aug 2025 13:47:36 +0200 Subject: [PATCH 19/63] Document select platform for LetPot integration (#40323) --- source/_integrations/letpot.markdown | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/source/_integrations/letpot.markdown b/source/_integrations/letpot.markdown index e8d40ed83556..ae130d278fda 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 + - Select - Sensor - Switch - Time @@ -15,6 +16,7 @@ ha_domain: letpot ha_integration_type: hub ha_platforms: - binary_sensor + - select - sensor - switch - time @@ -79,6 +81,17 @@ 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 + +- **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). + +Depending on device support, more selects are available: + +- **Light brightness**: Set the built-in light brightness to low or high. + - Available for LetPot Air devices, and some LetPot SE devices which support changing the brightness. +- **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 For LetPot Max devices, the following sensors are available: From 5d69fd1fdc058ce242bacc0ac42c54e3fd9d422a Mon Sep 17 00:00:00 2001 From: Petar Petrov Date: Fri, 8 Aug 2025 16:38:12 +0300 Subject: [PATCH 20/63] Document `layout: auto` for "energy-sankey" card (#40322) Co-authored-by: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com> --- source/_dashboards/energy.markdown | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/source/_dashboards/energy.markdown b/source/_dashboards/energy.markdown index 0d9219c8a77f..3b4e698293b2 100644 --- a/source/_dashboards/energy.markdown +++ b/source/_dashboards/energy.markdown @@ -259,8 +259,9 @@ title: type: string layout: required: false - description: "`vertical` or `horizontal`. Determines the orientation (flow direction) of the card" + description: "`vertical`, `horizontal` or `auto`. Determines the orientation (flow direction) of the card. `auto` changes it based on the screen size." type: string + default: auto group_by_area: required: false description: Whether to group the devices by area From b8b17177e41984e432a4250e9b70be795ffd6a81 Mon Sep 17 00:00:00 2001 From: mbo18 Date: Fri, 8 Aug 2025 22:55:34 +0200 Subject: [PATCH 21/63] Add absolute humidity to Awair documentation (#40304) --- source/_integrations/awair.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_integrations/awair.markdown b/source/_integrations/awair.markdown index 1d34999af952..af120d19dc75 100644 --- a/source/_integrations/awair.markdown +++ b/source/_integrations/awair.markdown @@ -38,6 +38,7 @@ The integration will fetch data from each device. The following sensors are supp - Temperature - Humidity +- Absolute humidity - Carbon dioxide - Total volatile organic compounds - PM2.5 density From 93190846dcd592ed04e9104c50ba40a2d52363f8 Mon Sep 17 00:00:00 2001 From: Joakim Plate Date: Sat, 9 Aug 2025 00:45:05 +0200 Subject: [PATCH 22/63] Add ToGrill documentation (#40291) Co-authored-by: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com> Co-authored-by: Joost Lekkerkerker --- source/_integrations/togrill.markdown | 52 +++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 source/_integrations/togrill.markdown diff --git a/source/_integrations/togrill.markdown b/source/_integrations/togrill.markdown new file mode 100644 index 000000000000..95178fd98f9e --- /dev/null +++ b/source/_integrations/togrill.markdown @@ -0,0 +1,52 @@ +--- +title: ToGrill Bluetooth BBQ thermometers +description: Control and monitor your ToGrill compatible BBQ thermometers. +ha_iot_class: Local Push +ha_config_flow: true +ha_release: '2025.9' +ha_category: + - Sensor +ha_domain: togrill +ha_bluetooth: true +ha_platforms: + - sensor +ha_integration_type: device +ha_codeowners: + - '@elupus' +ha_quality_scale: bronze +--- + +The ToGrill {% term integration %} allows you to connect your ToGrill compatible Bluetooth grill thermometer. + +{% tip %} + +The recommended way to connect the device to Home Assistant is by using an [ESPHome Bluetooth Proxy](https://esphome.io/projects/?type=bluetooth), as they provide the best experience. + +{% endtip %} + +{% include integrations/config_flow.md %} + +Home Assistant will display a list of addresses of the available desks, and you just need to select the one you want to add. Repeat the process to add more than one desk. + +{% note %} +When the Home Assistant integration is active, it will take exclusive control over the device and block access by other controllers like the standard smart phone applications. +{% endnote %} + +## Known working devices + +Many ToGrill compatible devices exist from many different vendors. Only a subset has been tested successfully. These are known to work. Other detected devices may work or may not work as expected. + +| Device | Model | +|----------------------------------|--------| +| Rubicson - BBQ probe thermometer | Pro-05 | + +## Sensors + +**Probe X**: The current temperature of the given temperature probe +**Battery**: The current battery level of the device. + +## Removing the integration + +This integration follows standard integration removal. No extra steps are required. + +{% include integrations/remove_device_service.md %} From 5f271ee0e8546d68973d5755f261ac4d569f5b99 Mon Sep 17 00:00:00 2001 From: Tom Date: Sat, 9 Aug 2025 07:14:10 +0200 Subject: [PATCH 23/63] Add binary_sensor to UISP airOS (#40242) Co-authored-by: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- source/_integrations/airos.markdown | 27 ++++++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/source/_integrations/airos.markdown b/source/_integrations/airos.markdown index c8ac3ce31199..68a49979df75 100644 --- a/source/_integrations/airos.markdown +++ b/source/_integrations/airos.markdown @@ -19,8 +19,9 @@ Ubiquiti UISP-range of [ A common use-case is establishing wireless PtP or PtMP links between buildings, remote sites, neighbours or even your shed. This is highly advantageous when traditional fiber-optic or copper network cabling is either impractical or the distance is too far for copper cabling. With LoS between airOS devices, a stable and high-bandwidth "beam" can be established, eliminating any need for additional infrastructure. This can be an improvement over extending your WiFi coverage using meshing of Access Points, as meshing potentially reduces the capacity and performance of your WiFi network. -There is currently support for the following plaforms within Home Assistant: +There is currently support for the following platforms within Home Assistant: +- [Binary sensor](#binary-sensor) - [Sensor](#sensor) This integration allows users to pull network metrics and statuses directly into their Home Assistant dashboards, enabling advanced automation, notifications, and comprehensive network oversight within their smart home ecosystem. @@ -64,9 +65,29 @@ For stations in particular, they can operate in either a 'Bridge' or 'Router' ro The choice between Bridge and Router mode depends on the network architecture and whether the device is intended to extend an existing network (Bridge) or create a new subnet (Router). -## Sensor +## Binary sensor + +### Port forwarding + +Active if any port forwarding is enabled when operating in 'router' mode. + +### DHCP client + +Active if the device configured to use DHCP for its network settings, inactive if IP address is statically assigned. + +### DHCP server -This integration exposes the following sensor entities for your airOS devices: +Active if the device itself is configured and acting as a DHCP server. + +### DHCPv6 server + +Active if the device itself is configured and acting as a DHCP server for IPv6. + +### PPPoE + +Active if the device is configured for PPPoE and the PPPoE link state is active. + +## Sensor ### Network Role From f97ea3b8ac3e15476fb8e3bde4ead688d7211498 Mon Sep 17 00:00:00 2001 From: Thomas55555 <59625598+Thomas55555@users.noreply.github.com> Date: Sat, 9 Aug 2025 07:14:49 +0200 Subject: [PATCH 24/63] Add event platform to Husqvarna Automower (#39863) Co-authored-by: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com> --- .../husqvarna_automower.markdown | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/source/_integrations/husqvarna_automower.markdown b/source/_integrations/husqvarna_automower.markdown index e08f1a01bc6a..94d62a266843 100644 --- a/source/_integrations/husqvarna_automower.markdown +++ b/source/_integrations/husqvarna_automower.markdown @@ -6,6 +6,7 @@ ha_category: - Button - Calendar - Device tracker + - Event - Lawn Mower - Number - Select @@ -22,6 +23,7 @@ ha_platforms: - calendar - device_tracker - diagnostics + - event - lawn_mower - number - select @@ -119,6 +121,30 @@ The integration will create a calendar entity for all mowers. The calendar shows The integration will create a device tracker entity to show the position of the mower. +### Event (if available) + +- Shows the last error as event. +- Includes additional context: `severity`, `latitude`, `longitude`, and `date_time`. + +#### Example attributes + +| Attribute | Description | +|---------------|----------------------------------------| +| `event_type` | Error code (for example, `tilt_error`) | +| `severity` | Error severity (for example, `error`, `warning`) | +| `latitude` | Latitude where the error occurred | +| `longitude` | Longitude where the error occurred | +| `date_time` | Timestamp of the error | + +#### Use cases + +- Send a notification when the mower is lifted or stuck. +- Show last error location on a map + +{% note %} +The entity will only be created when a new message is received. If a mower hasn’t reported any errors yet, the entity won't show up. +{% endnote %} + ### Lawn mower The integration will create a lawn mower entity to control the mower. This entity can: From a372f4985ad1db074b646d3fa7a15d33be99876d Mon Sep 17 00:00:00 2001 From: tronikos Date: Sun, 10 Aug 2025 00:39:19 -0700 Subject: [PATCH 25/63] Remove Mercury NZ Limited from docs (#40348) --- source/_integrations/mercury_nz.markdown | 20 -------------------- source/_integrations/opower.markdown | 1 - source/_redirects | 1 + 3 files changed, 1 insertion(+), 21 deletions(-) delete mode 100644 source/_integrations/mercury_nz.markdown diff --git a/source/_integrations/mercury_nz.markdown b/source/_integrations/mercury_nz.markdown deleted file mode 100644 index 2ad15fe82a04..000000000000 --- a/source/_integrations/mercury_nz.markdown +++ /dev/null @@ -1,20 +0,0 @@ ---- -title: Mercury NZ Limited -description: Get energy usage from Mercury NZ Limited using the Opower integration -ha_category: - - Energy - - Sensor -ha_release: 2023.8 -ha_domain: mercury_nz -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 %} diff --git a/source/_integrations/opower.markdown b/source/_integrations/opower.markdown index 974c1c53afca..2b78e111a0c2 100644 --- a/source/_integrations/opower.markdown +++ b/source/_integrations/opower.markdown @@ -43,7 +43,6 @@ More than 175 utilities use Opower. Currently only the following utilities are s - PECO Energy Company (PECO) - Potomac Electric Power Company (Pepco) - Glendale Water and Power (GWP) -- Mercury NZ Limited - National Grid US subsidiaries - National Grid Massachusetts - National Grid NY Long Island diff --git a/source/_redirects b/source/_redirects index fed3aebcec3e..8c8f4f5a22a1 100644 --- a/source/_redirects +++ b/source/_redirects @@ -599,6 +599,7 @@ layout: null /integrations/mailbox /more-info/removed-integration 301 /integrations/mazda /more-info/removed-integration 301 /integrations/mcp23017 /more-info/removed-integration 301 +/integrations/mercury_nz /more-info/removed-integration 301 /integrations/mhz19 /more-info/removed-integration 301 /integrations/myq /blog/2023/11/06/removal-of-myq-integration/ 301 /integrations/miflora /integrations/xiaomi_ble From a04a279c83770b4af9f0d6196828de7461480ca2 Mon Sep 17 00:00:00 2001 From: Vincent Wolsink Date: Sun, 10 Aug 2025 21:55:53 +0200 Subject: [PATCH 26/63] Add documentation for humidity control Huum (#40356) --- source/_integrations/huum.markdown | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/source/_integrations/huum.markdown b/source/_integrations/huum.markdown index 78cbc17fc353..e1ce541f853e 100644 --- a/source/_integrations/huum.markdown +++ b/source/_integrations/huum.markdown @@ -5,6 +5,7 @@ ha_category: - Binary sensor - Climate - Light + - Number ha_release: 2024.2 ha_iot_class: Cloud Polling ha_codeowners: @@ -16,6 +17,7 @@ ha_platforms: - binary_sensor - climate - light + - number ha_integration_type: integration --- @@ -50,3 +52,8 @@ The climate entity controls the sauna heater and offers the following capabiliti ### Light - **Light**: Sauna light control (on or off). + +### Number + +- **Humidity**: Control steamer duty cycle (0-10) to adjust sauna humidity. + From 2466b9511de74634b8b3438c7d2f9182661e5346 Mon Sep 17 00:00:00 2001 From: dontinelli <73341522+dontinelli@users.noreply.github.com> Date: Sun, 10 Aug 2025 22:30:29 +0200 Subject: [PATCH 27/63] Update solarlog documentation for new sensors (#40366) --- source/_integrations/solarlog.markdown | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/source/_integrations/solarlog.markdown b/source/_integrations/solarlog.markdown index 7a32c8c3b5f8..b24b963d0858 100644 --- a/source/_integrations/solarlog.markdown +++ b/source/_integrations/solarlog.markdown @@ -100,8 +100,13 @@ The following additional sensor becomes available: | Name | Unit | Description | |-----------------------|--------|:-------------------------------------------| +| charge_level | % | Current charge level of battery.* | +| charging_power | W | Current power charging battery.* | +| discharging_power | W | Current power discharging battery.* | | self_consumption_year | kWh | Annual self-consumed solar power. | +*Only available, if battery connected to solarlog. + In addition, information from devices connected to the Solar-Log device becomes available. The following additional sensors become available (all values are per inverter/device): | Name | Unit | Description | From 6347e1a0f65336ea36837049f3295c02174366a1 Mon Sep 17 00:00:00 2001 From: karwosts <32912880+karwosts@users.noreply.github.com> Date: Mon, 11 Aug 2025 01:24:57 -0700 Subject: [PATCH 28/63] Support `multiple` for StateSelector (#39419) --- source/_docs/blueprint/selectors.markdown | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/source/_docs/blueprint/selectors.markdown b/source/_docs/blueprint/selectors.markdown index d914b288ef28..691f7b5afc77 100644 --- a/source/_docs/blueprint/selectors.markdown +++ b/source/_docs/blueprint/selectors.markdown @@ -1414,7 +1414,7 @@ would return ["Green"] and in the last example it returns ["g"]. ## State selector The state selector shows a list of states for a provided entity of which -one can be selected. +one or more can be selected. ![Screenshot of an state selector](/images/blueprints/selector-state.png) @@ -1427,10 +1427,16 @@ hide_states: description: The states to exclude from the list of options type: list required: false +multiple: + description: > + Allows selecting multiple states. If set to `true`, the resulting value of + this selector will be a list instead of a single string value. + type: boolean + default: false {% endconfiguration %} The output of this selector is the select state (not the translated or -prettified name shown in the frontend). +prettified name shown in the frontend), or a list of states if `multiple` is true. For example: `heat_cool`. From dc7c1d92f2897f907710f939c093c4aec13edfcc Mon Sep 17 00:00:00 2001 From: Robin Lintermann Date: Mon, 11 Aug 2025 17:08:16 +0200 Subject: [PATCH 29/63] Smarla integration doc sensor platform (#39276) --- source/_integrations/smarla.markdown | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/source/_integrations/smarla.markdown b/source/_integrations/smarla.markdown index c38154d5e261..3c8122d02e0b 100644 --- a/source/_integrations/smarla.markdown +++ b/source/_integrations/smarla.markdown @@ -3,6 +3,7 @@ title: Swing2Sleep Smarla description: Instructions on connecting Swing2Sleep Smarla to Home Assistant. ha_category: - Number + - Sensor - Switch ha_iot_class: Cloud Push ha_release: 2025.6 @@ -14,6 +15,7 @@ ha_integration_type: device ha_config_flow: true ha_platforms: - number + - sensor - switch ha_quality_scale: bronze --- @@ -45,6 +47,10 @@ This component will set up the following entities: | `swing_active` | `switch` | Turns the cradle’s oscillation on or off. | | `smart_mode` | `switch` | Enables or disables automatic intensity control. | | `intensity` | `number` | Sets the intensity level (range: `0` to `100`). | +| `amplitude` | `sensor` | Displays the current measured amplitude of the oscillation. | +| `period` | `sensor` | Displays the current measured period of the oscillation. | +| `activity` | `sensor` | Displays the current measured activity level. | +| `swing_count` | `sensor` | Displays the total number of swings. | ## Removing the integration From e99390a656b4ec5d18ef96473223df48089db93a Mon Sep 17 00:00:00 2001 From: pcan08 <155250376+pcan08@users.noreply.github.com> Date: Mon, 11 Aug 2025 17:29:20 +0200 Subject: [PATCH 30/63] Add fan-direction dashboard feature documentation (#40367) --- source/dashboards/features.markdown | 21 ++++++++++++++++++ .../dashboards/features/fan_direction.png | Bin 0 -> 5428 bytes 2 files changed, 21 insertions(+) create mode 100644 source/images/dashboards/features/fan_direction.png diff --git a/source/dashboards/features.markdown b/source/dashboards/features.markdown index 592a7561eccb..41e442cb19fb 100644 --- a/source/dashboards/features.markdown +++ b/source/dashboards/features.markdown @@ -322,6 +322,27 @@ type: type: string {% endconfiguration %} +## Fan direction + +Widget that displays controls to change direction for a [fan](/integrations/fan). + +

+ Screenshot of the tile card with the fan direction feature + Screenshot of the tile card with the fan direction feature +

+ +```yaml +features: + - type: "fan-direction" +``` + +{% configuration features %} +type: + required: true + description: "`fan-direction`" + type: string +{% endconfiguration %} + ## Fan preset modes Widget that displays buttons or icons to control the preset mode for a [fan](/integrations/fan). diff --git a/source/images/dashboards/features/fan_direction.png b/source/images/dashboards/features/fan_direction.png new file mode 100644 index 0000000000000000000000000000000000000000..8889c240a0de319cf474976b16f52a41275dc4e5 GIT binary patch literal 5428 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 literal 0 HcmV?d00001 From 7778d50b75f88e5df3070eac14e4a1d390be7690 Mon Sep 17 00:00:00 2001 From: Noah Husby <32528627+noahhusby@users.noreply.github.com> Date: Mon, 11 Aug 2025 16:57:15 -0400 Subject: [PATCH 31/63] Add media browsing to Russound RIO (#39876) Co-authored-by: Joost Lekkerkerker --- source/_integrations/russound_rio.markdown | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/_integrations/russound_rio.markdown b/source/_integrations/russound_rio.markdown index 1041f6f6db0e..36e1acd1be76 100644 --- a/source/_integrations/russound_rio.markdown +++ b/source/_integrations/russound_rio.markdown @@ -107,6 +107,10 @@ data: media_content_id: "1,8" ``` +## Browsing media + +The Russound RIO integration allows you to browse saved presets from your dashboard. + ## Troubleshooting ### There is a delay on getting the current status From 47efb72c900c5c4cf1415387759080e0617f157f Mon Sep 17 00:00:00 2001 From: yufeng Date: Tue, 12 Aug 2025 17:34:48 +0800 Subject: [PATCH 32/63] add valve entity (#40387) --- source/_integrations/tuya.markdown | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/_integrations/tuya.markdown b/source/_integrations/tuya.markdown index 635a8276d1ba..a3485cfd400d 100644 --- a/source/_integrations/tuya.markdown +++ b/source/_integrations/tuya.markdown @@ -17,6 +17,7 @@ ha_category: - Siren - Switch - Vacuum + - Valve ha_iot_class: Cloud Push ha_release: 0.74 ha_config_flow: true @@ -43,6 +44,7 @@ ha_platforms: - siren - switch - vacuum + - valve ha_dhcp: true ha_integration_type: hub --- From 5bc5428ec6330f32552d9022c01558f183f7f6dd Mon Sep 17 00:00:00 2001 From: hanwg Date: Tue, 12 Aug 2025 21:24:29 +0800 Subject: [PATCH 33/63] Add notify entity for Telegram bot (#40284) --- source/_integrations/telegram_bot.markdown | 27 ++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/source/_integrations/telegram_bot.markdown b/source/_integrations/telegram_bot.markdown index 2024d362205c..2012656affa1 100644 --- a/source/_integrations/telegram_bot.markdown +++ b/source/_integrations/telegram_bot.markdown @@ -144,6 +144,26 @@ Chat ID: description: ID representing the user or group chat to which messages can be sent. {% endconfiguration_basic %} +## Notifiers + +This integration will add a notify {% term entity %} for each configured chat ID. +You can use the `notify.send_message` action to publish notifications. + +{% details "Example YAML configuration" %} + +{% raw %} + +```yaml +action: notify.send_message +data: + message: "Reminder: Have you considered frogs?" + entity_id: notify.telegram_bot_chat +``` + +{% endraw %} + +{% enddetails %} + ## Notification actions Available actions: `send_message`, `send_photo`, `send_video`, `send_animation`, `send_voice`, `send_sticker`, `send_document`, `send_location`, `edit_message`, `edit_caption`, `edit_replymarkup`, `answer_callback_query`, `delete_message`, `leave_chat` and `set_message_reaction`. @@ -445,6 +465,13 @@ Sets the bot's reaction for a given message. ## Telegram notification platform +{% warning %} + +The notification platform has been marked as legacy and might be deprecated in the future. +Please use [notifiers](./#notifiers) instead. + +{% endwarning %} + The [`telegram` notification platform](/integrations/telegram) requires the `telegram_bot` integration to work with, and it's designed to generate a customized shortcut (`notify.USERNAME`) to send notifications (messages, photos, documents, and locations) to a particular `chat_id` with the old syntax, allowing backward compatibility. The data attributes `parse_mode`, `disable_notification`, `message_tag`, `disable_web_page_preview`, and `message_thread_id` are also supported. The required YAML configuration now reduces to: From 5b7b8782a477975e4c8f15611ca9c25e362bf64c Mon Sep 17 00:00:00 2001 From: Aidan Timson Date: Tue, 12 Aug 2025 14:29:58 +0100 Subject: [PATCH 34/63] Add valve open/close card feature (#40372) --- source/dashboards/features.markdown | 21 ++++++++++++++++++ .../dashboards/features/valve_open_close.png | Bin 0 -> 8112 bytes 2 files changed, 21 insertions(+) create mode 100644 source/images/dashboards/features/valve_open_close.png diff --git a/source/dashboards/features.markdown b/source/dashboards/features.markdown index 41e442cb19fb..55d238108a16 100644 --- a/source/dashboards/features.markdown +++ b/source/dashboards/features.markdown @@ -736,6 +736,27 @@ commands: type: list {% endconfiguration %} +## Valve open/close + +Widget that displays buttons to open, close, or stop a [valve](/integrations/valve). + +

+ Screenshot of the tile card with open/close feature + Screenshot of the tile card with valve open/close feature +

+ +```yaml +features: + - type: "valve-open-close" +``` + +{% configuration features %} +type: + required: true + description: "`valve-open-close`" + type: string +{% endconfiguration %} + ## Water heater operation modes Widget that displays buttons to control the operation mode of a [water heater](/integrations/water_heater). diff --git a/source/images/dashboards/features/valve_open_close.png b/source/images/dashboards/features/valve_open_close.png new file mode 100644 index 0000000000000000000000000000000000000000..45df500b1c9aa2bb03a9024d2edafb1203966103 GIT binary patch literal 8112 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 e%KrnCj?|#sb Date: Tue, 12 Aug 2025 17:25:23 +0200 Subject: [PATCH 35/63] Add a note on new `number` platform for `airq` integration (#40390) Co-authored-by: Joost Lekkerkerker --- source/_integrations/airq.markdown | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/source/_integrations/airq.markdown b/source/_integrations/airq.markdown index ffd77f9a3d54..399d12190844 100644 --- a/source/_integrations/airq.markdown +++ b/source/_integrations/airq.markdown @@ -14,6 +14,7 @@ ha_domain: airq ha_config_flow: true ha_platforms: - sensor + - number ha_integration_type: hub --- @@ -96,6 +97,10 @@ After the integration has been initialized, the user can configure any of the fo - **Clip negative values**. Default: `on`. For baseline calibration purposes, certain sensor values may briefly become negative. The default behavior is to clip such values to 0. +## LED Control + +In addition to sensor readings, this integration exposes the brightness of the device’s LED strips as a `number` entity named `number._led_brightness`. You can set the brightness (0–100) manually from the Overview panel or in automations. Setting it to 0 will turn the LEDs off. + ## Troubleshooting For troubleshooting or when reporting an issue, please enable [debug logging](/docs/configuration/troubleshooting/#debug-logs-and-diagnostics) and restart the integration. As soon as the issue reoccurs stop the debug logging, which will trigger the download of the debug log file. From adb59ed05181e15b70f611e76af8096efc29526c Mon Sep 17 00:00:00 2001 From: Tucker Kern Date: Tue, 12 Aug 2025 10:07:51 -0600 Subject: [PATCH 36/63] Update Snapcast to remove references to old join/unjoin actions (#39568) --- source/_integrations/snapcast.markdown | 17 ----------------- 1 file changed, 17 deletions(-) diff --git a/source/_integrations/snapcast.markdown b/source/_integrations/snapcast.markdown index 252e4d52b0f4..998306275cff 100644 --- a/source/_integrations/snapcast.markdown +++ b/source/_integrations/snapcast.markdown @@ -38,23 +38,6 @@ Restore a previously taken snapshot of one or more speakers. | ---------------------- | -------- | ----------- | | `entity_id` | no | String or list of `entity_id`s that should have their snapshot restored. -### Action `snapcast.join` - -Group players together under a single group. - -| Data attribute | Optional | Description | -| ---------------------- | -------- | ----------- | -| `master` | no | Entity ID of the player to synchronize to. -| `entity_id` | yes | String or list of `entity_id`s to join to the master. - -### Action `snapcast.unjoin` - -Remove one or more speakers from their group of speakers. - -| Data attribute | Optional | Description | -| ---------------------- | -------- | ----------- | -| `entity_id` | no | String or list of `entity_id`s to separate from their coordinator speaker. - ### Action `snapcast.set_latency` Set the latency of a speaker. From e2500667cbebda041f4468a9205a9691e5776e72 Mon Sep 17 00:00:00 2001 From: karwosts <32912880+karwosts@users.noreply.github.com> Date: Tue, 12 Aug 2025 19:47:15 -0700 Subject: [PATCH 37/63] Document `not` and `location` conditions. (#40396) --- source/_dashboards/conditional.markdown | 47 ++++++++++++++++++++++++- 1 file changed, 46 insertions(+), 1 deletion(-) diff --git a/source/_dashboards/conditional.markdown b/source/_dashboards/conditional.markdown index c3db5117a0f2..b808f271eaac 100644 --- a/source/_dashboards/conditional.markdown +++ b/source/_dashboards/conditional.markdown @@ -198,9 +198,31 @@ users: type: list {% endconfiguration %} +### Location + +Specify the visibility of the card based on the current user's current location. The location is based on the state of the `person` entity associated with the current user. If the current user does not have a `person` entity, this condition will always resolve to false. + +```yaml +condition: location +locations: + - home + - Home Neigborhood +``` + +{% configuration %} +condition: + required: true + description: "`location`" + type: string +locations: + required: true + description: A list of zones, which if any match the current state of the `person`, will cause this condition to be true. + type: list +{% endconfiguration %} + ### And -Specify that both conditions must be met. +Specify that all conditions must be met. ```yaml condition: and @@ -248,4 +270,27 @@ conditions: type: list {% endconfiguration %} +### Not + +Specify that at least one of the conditions must not be met. + +```yaml +condition: not +conditions: + - condition: numeric_state + above: 0 + - condition: user + users: + - 581fca7fdc014b8b894519cc531f9a04 +``` +{% configuration %} +condition: + required: true + description: "`not`" + type: string +conditions: + required: false + description: List of conditions to check. See [available conditions](#conditions-options). + type: list +{% endconfiguration %} From d84114af93852426af51cbc6cd6f5d6f92736f47 Mon Sep 17 00:00:00 2001 From: Manu <4445816+tr4nt0r@users.noreply.github.com> Date: Wed, 13 Aug 2025 05:24:33 +0200 Subject: [PATCH 38/63] Add party-related entities to Habitica integration (#40203) Co-authored-by: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com> --- source/_integrations/habitica.markdown | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/source/_integrations/habitica.markdown b/source/_integrations/habitica.markdown index 9b636037460e..cad6b0c8adfc 100644 --- a/source/_integrations/habitica.markdown +++ b/source/_integrations/habitica.markdown @@ -161,6 +161,24 @@ 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. +## Party + +If you’re part of a party, the integration creates a device with these entities. + +- **Boss health**: The total health of the quest boss. +- **Boss health remaining**: The remaining health of the quest boss. +- **Collected quest items**: Displays the total number of items collected. Attributes include a breakdown of each required item type, showing both collected and required amounts. +- **Group leader**: The username of your party's leader. +- **Member count**: The current number of members in your party. +- **Quest**: Shows the name of the current quest your party is engaged in. +- **Quest boss**: The name and image of the foe your party is currently battling. + +{% note %} + +Certain entities are only available depending on whether you are in a boss quest or a collect quest. + +{% endnote %} + ## Actions ### Action `habitica.cast_skill` From 3aa63c2d8ed990d1c6932bd0a86211242f267add Mon Sep 17 00:00:00 2001 From: Manu <4445816+tr4nt0r@users.noreply.github.com> Date: Wed, 13 Aug 2025 05:27:24 +0200 Subject: [PATCH 39/63] Add Sleep as Android integration (#38465) --- .../_integrations/sleep_as_android.markdown | 211 ++++++++++++++++++ 1 file changed, 211 insertions(+) create mode 100644 source/_integrations/sleep_as_android.markdown diff --git a/source/_integrations/sleep_as_android.markdown b/source/_integrations/sleep_as_android.markdown new file mode 100644 index 000000000000..59308aa72569 --- /dev/null +++ b/source/_integrations/sleep_as_android.markdown @@ -0,0 +1,211 @@ +--- +title: Sleep as Android +description: Instructions on how to integrate Sleep as Android with Home Assistant. +ha_category: + - Event + - Sensor +ha_iot_class: Local push +ha_release: 2025.9 +ha_config_flow: true +ha_codeowners: + - '@tr4nt0r' +ha_domain: sleep_as_android +ha_integration_type: integration +ha_platforms: + - event + - sensor +ha_quality_scale: silver +--- + +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. + +## About Sleep as Android + +[**Sleep as Android**](https://sleep.urbandroid.org/) is a smart alarm clock with sleep cycle tracking capabilities and numerous other features to analyze and improve sleeping habits. It is available exclusively for Android devices and can be downloaded from [Google Play](https://play.google.com/store/apps/details?id=com.urbandroid.sleep). + +## How you can use this integration + +The Sleep as Android integration allows you to trigger sleep-related automations. You can trigger actions when sleep tracking starts or stops, such as dimming the lights or adjusting thermostat settings. Alarm events allow you to respond to snoozing or dismissing alarms — like starting a morning routine or sending a notification if the alarm was skipped. Additionally, you can react to specific sleep phases or sound detections (for example, snoring or baby crying), or monitor critical conditions such as sleep apnea. + +## 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/). + +Steps to set up the integration: + +1. Preferably, open Home Assistant on the device you want to connect to the Sleep as Android integration and initiate the setup. +2. You will be presented a URL during the setup process. Mark the URL and copy it to the clipboard. +3. Open the Sleep as Android app and go to {% icon "mdi:cog" %} **Settings** > **Services** > **Automation** > **Webhooks**. +4. Turn on the switch to enable webhooks and paste the webhook URL from your clipboard into the URL field. + +{% note %} + +To receive updates from Sleep as Android while away from home, your Home Assistant instance must be remotely accessible. +You can enable this by configuring a remote URL for Home Assistant or by using Home Assistant Cloud. + +When setting up the Sleep as Android integration, the webhook is created using your external or cloud URL if remote access is available at that time. +If your instance is not remotely accessible during setup, the webhook will use your internal URL instead. +In this case, you will need to manually update the webhook to use your remote URL once remote access is configured. + +{% endnote %} + +{% tip %} + +If you scroll to the top and select **Events**, you can individually select and deselect the events the Sleep as Android app should trigger. + +{% endtip %} + +{% include integrations/config_flow.md %} + +## Sensors + +- **Next alarm**: The scheduled time of your upcoming alarm. +- **Alarm label**: The label or description assigned to the next alarm. + +## Events + +The integration offers various event entities that will display the most recent events from Sleep as Android. + +### Alarm clock + +Events related to the alarm clock feature. + +| Event type | Description | +| ------------------- | -------------------------- | +| `alert_dismiss` | Alarm dismissed | +| `alert_start` | Alarm started | +| `rescheduled` | Alarm rescheduled | +| `skip_next` | Alarm skipped | +| `snooze_clicked` | Snoozing | +| `snooze_canceled` | Snoozing canceled | + +### Smart wake-up + +Events related to the smart wake-up feature. + +| Event type | Description | +| ------------------------- | -------------------------- | +| `before_smart_period` | 45min before smart wake-up | +| `smart_period` | Smart wake-up started | + +### User notifications + +Events related to user notifications. + +| Event type | Description | +| ------------------------- | --------------- | +| `wake_up_check` | Wake-up check | +| `show_skip_next_alarm` | Skip next alarm | +| `time_to_bed_alarm_alert` | Time to bed | + +### Sleep health + +Events related to sleep health. + +| Event type | Description | +| ------------- | ---------------------- | +| `antisnoring` | Anti-snoring triggered | +| `apnea_alarm` | Sleep apnea detected | + +### Lullaby + +Events related to the Lullaby feature. + +| Event type | Description | +| ------------- | ------------------------------- | +| `start` | Lullaby started playing | +| `stop` | Lullaby stopped playing | +| `volume_down` | Lullaby started lowering volume | + +### Sleep phase + +Events when entering a new sleep phase. + +| Event type | Description | +| ------------- | ----------- | +| `awake` | Woke up | +| `deep_sleep` | Deep sleep | +| `light_sleep` | Light sleep | +| `not_awake` | Fell asleep | +| `rem` | REM sleep | + +{% warning %} + +Be cautious when automating based on sleep phase events, especially deep and light sleep, as these can trigger lots of events throughout the night, and they may not precisely correlate with the resulting sleep graph as Sleep as Android can only detect phases reliably using whole-night data. + +{% endwarning %} + +### Sleep tracking + +Events related to the sleep tracking feature. + +| Event type | Description | +| ---------- | ---------------- | +| `paused` | Tracking paused | +| `resumed` | Tracking resumed | +| `started` | Tracking started | +| `stopped` | Tracking stopped | + +### Sound recognition + +Events triggered when a specific sound is detected during sleep tracking. + +| Event type | Description | +| ---------- | -------------------- | +| `baby` | Baby crying | +| `cough` | Coughing or sneezing | +| `laugh` | Laughter | +| `snore` | Snoring | +| `talk` | Talking | + +## Automation + +Here’s an example automation: when your Sleep as Android alarm starts ringing, your bedroom blinds will automatically open. + +{% raw %} + +```yaml +alias: Open window blinds on Alarm +triggers: + - trigger: state + entity_id: + - event.sleep_as_android_alarm_clock + attribute: event_type + to: alert_start + not_from: unavailable +conditions: + - condition: state + entity_id: person.user1 + state: home +actions: + - action: cover.open_cover + target: + entity_id: cover.bedroom_blinds +mode: single +``` + +{% endraw %} + +## 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. + +## Known limitations + +- If Home Assistant is unreachable when an event is pushed, for example when you are away from your home network without remote access, the Sleep as Android integration will miss the update. The app does not retry sending it. + +- The integration does not support controlling the Sleep as Android app, such as setting alarm times or turning off alarms. + +## Troubleshooting + +The **Sleep as Android** integration receives updates via a push from your Sleep as Android app to a webhook. If you encounter issues, verify that your Home Assistant is reachable from your mobile phone. + +In any case, when reporting an issue, please enable [debug logging](/docs/configuration/troubleshooting/#debug-logs-and-diagnostics), restart the integration, and as soon as the issue reoccurs, stop the debug logging again (*download of debug log file will start automatically*). Further, if still possible, please also download the [diagnostics](/integrations/diagnostics) data. If you have collected the debug log and the diagnostics data, provide them with the issue report. + +## Removing the integration + +This integration can be removed by following these steps: + +{% include integrations/remove_device_service.md %} + +4. Open the Sleep as Android app and go to {% icon "mdi:cog" %} **Settings** > **Services** > **Automation** > **Webhooks**. Turn off webhooks and remove the URL. From 692a4db3fab91b404d6c758b5c92d445080e19b0 Mon Sep 17 00:00:00 2001 From: Aidan Timson Date: Wed, 13 Aug 2025 13:13:21 +0100 Subject: [PATCH 40/63] Add valve postion card feature (#40393) --- source/dashboards/features.markdown | 21 ++++++++++++++++++ .../dashboards/features/valve_position.png | Bin 0 -> 9279 bytes 2 files changed, 21 insertions(+) create mode 100644 source/images/dashboards/features/valve_position.png diff --git a/source/dashboards/features.markdown b/source/dashboards/features.markdown index 55d238108a16..12fb0426c0fc 100644 --- a/source/dashboards/features.markdown +++ b/source/dashboards/features.markdown @@ -757,6 +757,27 @@ type: type: string {% endconfiguration %} +## Valve position + +Widget that displays a slider to control the position for a [valve](/integrations/valve). + +

+ Screenshot of the tile card with the valve position feature + Screenshot of the tile card with the valve position feature +

+ +```yaml +features: + - type: "valve-position" +``` + +{% configuration features %} +type: + required: true + description: "`valve-position`" + type: string +{% endconfiguration %} + ## Water heater operation modes Widget that displays buttons to control the operation mode of a [water heater](/integrations/water_heater). diff --git a/source/images/dashboards/features/valve_position.png b/source/images/dashboards/features/valve_position.png new file mode 100644 index 0000000000000000000000000000000000000000..f107c44cec01a9a93d40449e66f9bb8f7a96cee6 GIT binary patch literal 9279 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 gDoaq@`FcZyEM~0ROFHga7~l literal 0 HcmV?d00001 From 449e20d314fea157a128867e6e5aedbdb33c5c3a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20BOU=C3=89?= Date: Wed, 13 Aug 2025 15:57:18 +0200 Subject: [PATCH 41/63] Extend UnitOfApparentPower with 'mVA' (#40381) --- source/_integrations/number.markdown | 2 +- source/_integrations/sensor.markdown | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_integrations/number.markdown b/source/_integrations/number.markdown index 4450b475058a..151567000490 100644 --- a/source/_integrations/number.markdown +++ b/source/_integrations/number.markdown @@ -40,7 +40,7 @@ The following device classes are supported for numbers: - **None**: Generic number. This is the default and doesn't need to be set. - **absolute_humidity**: Absolute humidity in g/m³, mg/m³. -- **apparent_power**: Apparent power in VA. +- **apparent_power**: Apparent power in mVA or VA. - **aqi**: Air Quality Index (unitless). - **area**: Area in m², cm², km², mm², in², ft², yd², mi², ac, ha - **atmospheric_pressure**: Atmospheric pressure in cbar, bar, hPa, mmHg, inHg, kPa, mbar, Pa or psi diff --git a/source/_integrations/sensor.markdown b/source/_integrations/sensor.markdown index 45c414951696..7872acccee9a 100644 --- a/source/_integrations/sensor.markdown +++ b/source/_integrations/sensor.markdown @@ -49,7 +49,7 @@ The following device classes are supported for sensors: - **None**: Generic sensor. This is the default and doesn't need to be set. - **absolute_humidity**: Absolute humidity in g/m³, mg/m³. -- **apparent_power**: Apparent power in VA. +- **apparent_power**: Apparent power in mVA or VA. - **aqi**: Air Quality Index (unitless). - **area**: Area in m², cm², km², mm², in², ft², yd², mi², ac, ha - **atmospheric_pressure**: Atmospheric pressure in cbar, bar, hPa, mmHg, inHg, kPa, mbar, Pa or psi From 4913f31ed557e501278957e26fbbc9e06acce030 Mon Sep 17 00:00:00 2001 From: Samuel Xiao <40679757+XiaoLing-git@users.noreply.github.com> Date: Thu, 14 Aug 2025 12:13:48 +0800 Subject: [PATCH 42/63] Switchbot Cloud: Add cover entity description 0718 (#40060) --- source/_integrations/switchbot_cloud.markdown | 55 +++++++++++++++++++ 1 file changed, 55 insertions(+) diff --git a/source/_integrations/switchbot_cloud.markdown b/source/_integrations/switchbot_cloud.markdown index bb1b639a7d90..52ea4e6f276d 100644 --- a/source/_integrations/switchbot_cloud.markdown +++ b/source/_integrations/switchbot_cloud.markdown @@ -4,6 +4,7 @@ description: Instructions on how to set up SwitchBot Devices. ha_category: - Binary Sensor - Button + - Cover - Fan - Hub - Light @@ -23,6 +24,7 @@ ha_domain: switchbot_cloud ha_platforms: - binary_sensor - button + - cover - climate - light - fan @@ -56,6 +58,14 @@ Please note, device names configured in the SwitchBot app are transferred into H - [Plug Mini (HomeKit Enabled)](https://www.switch-bot.com/products/switchbot-plug-mini-homekit-enabled) - Plug (Wi-Fi only, only available in Japan) +### Cover + +- [Curtain (WoCurtain)](https://switch-bot.com/pages/switchbot-curtain) (version 1 & 2) +- [Curtain 3 (WoCtn3)](https://switch-bot.com/pages/switchbot-curtain-3) +- [Blind Tilt (WoBlindTilt)](https://switch-bot.com/pages/switchbot-blind-tilt) +- [Roller Shade](https://www.switch-bot.com/products/switchbot-roller-shade) +- [Garage Door Opener](https://www.switch-bot.com/products/switchbot-garage-door-opener) + ### Lights - [LED Strip Light 3](https://www.switch-bot.com/products/switchbot-led-strip-light-3) @@ -134,6 +144,51 @@ Features: Features: - turn on or off +### Cover + +#### Curtain + +Features: +- open/close/pause +- set position +- get position +- get battery level +- get calibration state + +#### Curtain 3 + +Features: +- open/close/pause +- set position +- get position +- get battery level +- get calibration state + +#### Blind Tilt + +Features: +- close up/close down +- set position +- get position +- get battery level +- get calibration state + +#### Roller Shade + +Features: +- open/close +- set position +- get position +- get battery level +- get calibration state + +#### Garage Door Opener + +Features: +- open/close +- set position +- get position +- get calibration state ### Sensors From c3a68e87efb40bc6b4f3bd4abe75038d103c1823 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20BOU=C3=89?= Date: Thu, 14 Aug 2025 11:46:52 +0200 Subject: [PATCH 43/63] Extend UnitOfReactivePower with 'mvar' (#40377) Co-authored-by: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com> --- source/_integrations/number.markdown | 2 +- source/_integrations/sensor.markdown | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_integrations/number.markdown b/source/_integrations/number.markdown index 151567000490..0cb18cb533cc 100644 --- a/source/_integrations/number.markdown +++ b/source/_integrations/number.markdown @@ -77,7 +77,7 @@ The following device classes are supported for numbers: - **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 or psi - **reactive_energy**: Reactive energy in varh or kvarh -- **reactive_power**: Reactive power in var or kvar +- **reactive_power**: Reactive power in mvar, var, or kvar - **signal_strength**: Signal strength in dB or dBm - **sound_pressure**: Sound pressure in dB or dBA - **speed**: Generic speed in ft/s, in/d, in/h, in/s, km/h, kn, m/s, mph, mm/d, or mm/s diff --git a/source/_integrations/sensor.markdown b/source/_integrations/sensor.markdown index 7872acccee9a..01e491e56978 100644 --- a/source/_integrations/sensor.markdown +++ b/source/_integrations/sensor.markdown @@ -88,7 +88,7 @@ The following device classes are supported for sensors: - **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 or psi - **reactive_energy**: Reactive energy in varh or kvarh -- **reactive_power**: Reactive power in var or kvar +- **reactive_power**: Reactive power in mvar, var, or kvar - **signal_strength**: Signal strength in dB or dBm - **sound_pressure**: Sound pressure in dB or dBA - **speed**: Generic speed in ft/s, in/d, in/h, in/s, km/h, kn, m/s, mph, mm/d, or mm/s From 9d62af7ff67761a4fde150ea3ded50c05e4ce01b Mon Sep 17 00:00:00 2001 From: Arie Catsman <120491684+catsmanac@users.noreply.github.com> Date: Fri, 15 Aug 2025 07:14:40 +0200 Subject: [PATCH 44/63] Add enphase envoy collar and combiner descriptions (#40452) --- source/_integrations/enphase_envoy.markdown | 30 +++++++++++++++++- .../enphase_envoy_collar_and_ccc_data.png | Bin 0 -> 54965 bytes 2 files changed, 29 insertions(+), 1 deletion(-) create mode 100644 source/images/integrations/enphase_envoy/enphase_envoy_collar_and_ccc_data.png diff --git a/source/_integrations/enphase_envoy.markdown b/source/_integrations/enphase_envoy.markdown index 18ab15d7f4c7..96dbe1f8304d 100644 --- a/source/_integrations/enphase_envoy.markdown +++ b/source/_integrations/enphase_envoy.markdown @@ -91,7 +91,7 @@ This integration follows standard integration removal. No extra steps are requir ## Capabilities -This integration offers various entities depending on the configuration of your Enphase system. The Envoy can communicate with Enphase IQ micro-inverters, Enphase ACB and IQ batteries, Enphase Ensemble Enpower switch and load shedding relays and Enphase compatible generators. +This integration offers various entities depending on the configuration of your Enphase system. The Envoy can communicate with Enphase IQ micro-inverters, Enphase ACB and IQ batteries, Enphase Ensemble Enpower switch and load shedding relays, Enphase compatible generators and the IQ Meter Collar. {% note %} @@ -242,6 +242,8 @@ When the Envoy Metered is equipped with a [net-consumption CT](#current-transfor - **Envoy SN Lifetime net energy consumption**: Lifetime energy consumed / imported from the grid in Wh, default display in MWh. - **Envoy SN Lifetime net energy production**: Lifetime energy produced / exported to the grid in Wh, default display in MWh. +When using an IQ Metered Collar, the net-consumption CT's are integrated in the collar. + When used with [multiphase CT phase data](#ct-aggregate-and-phase-data), disabled phase entities are available as well. #### Grid Balanced import/export sensor entities @@ -408,6 +410,32 @@ The names of entities and devices are derived from the load_name configured in t
Envoy Enpower dry-contact entities.
+### IQ Meter Collar data + +The IQ Meter Collar has the net-consumption CT integrated. The CT data is reported in the [net-consumption data](#net-consumption-ct-sensor-entities) and [grid sensors](#grid-sensor-entities). In addition the status of the collar is available in entities. + +#### 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 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. + +### C6 Combiner Controller data + +The Enphase C6 combiner controller (C6CC) provides some status information to the Envoy which are available in entities. + +#### C6CC status entities + +- **C6CC SN Last reported**: Time when Envoy received last update from the combiner device. +- **C6CC SN Communicating**: Communication status of C6 Combiner, Connected / Disconnected. This is a diagnostics entity. + +
+ envoy collar and c6cc +
Envoy IQ Metered Collar and C6 Combiner Controller entities.
+
+ ## Data polling interval All data is collected in one coordinated collection cycle and sourced from a limited set of endpoints on the Envoy. For example, three different values sourced from the same endpoint are not pulled in three different requests but provided from the same single request. This method minimizes the number of requests to the Envoy. The local REST API of the Envoy is used. Only when the 1-year valid token is to expire, 1 month before due data, a new token is requested from the Enphase Enlighten website. diff --git a/source/images/integrations/enphase_envoy/enphase_envoy_collar_and_ccc_data.png b/source/images/integrations/enphase_envoy/enphase_envoy_collar_and_ccc_data.png new file mode 100644 index 0000000000000000000000000000000000000000..32d7f6371f83282fb219111e35931ad4d14dfd46 GIT binary patch literal 54965 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

_iUkXiBZ@dnn` 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 Date: Fri, 15 Aug 2025 15:37:50 +0200 Subject: [PATCH 45/63] Add binary sensor to 1-Wire DS2405 (#40455) --- source/_integrations/onewire.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_integrations/onewire.markdown b/source/_integrations/onewire.markdown index be33f9dfd27f..2705356ad9a8 100644 --- a/source/_integrations/onewire.markdown +++ b/source/_integrations/onewire.markdown @@ -34,6 +34,7 @@ Each 1-wire component data sheet describes the different properties the componen | Family | Device | Physical Quantity | | -------|:-----|:-----| +| 05 | [DS2405](https://datasheets.maximintegrated.com/en/ds/DS2405.pdf) | 1 sensed [4](#note_4) | | 12 | [DS2406](https://datasheets.maximintegrated.com/en/ds/DS2406.pdf) | 2 sensed (sensed.A/B) [4](#note_4) | | 29 | [DS2408](https://datasheets.maximintegrated.com/en/ds/DS2408.pdf) | 8 sensed (sensed.0-7) [4](#note_4) | | 3A | [DS2413](https://datasheets.maximintegrated.com/en/ds/DS2413.pdf) | 2 sensed (sensed.A/B) [4](#note_4) | From 026a803eff24c91fa5202459e4123bc44a60e283 Mon Sep 17 00:00:00 2001 From: Tom Date: Sat, 16 Aug 2025 08:58:58 +0200 Subject: [PATCH 46/63] Add additional sensors for airOS (#40467) --- source/_integrations/airos.markdown | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/source/_integrations/airos.markdown b/source/_integrations/airos.markdown index 68a49979df75..3633ed581d86 100644 --- a/source/_integrations/airos.markdown +++ b/source/_integrations/airos.markdown @@ -93,6 +93,18 @@ Active if the device is configured for PPPoE and the PPPoE link state is active. Indicates the role of the device in your network, either 'bridge' or 'router' (see [operating roles](#operating-roles) for more information. +### Wireless Role + +Indicates the role of the device in relation to your wireless network, either 'Access point' or 'Station'. + +### Wireless Mode + +Indicates the mode your device is in 'point-to-point' just two devices connecting to eachother or 'point-to-multipoint' for multiple devices connecting to this device. + +### Wireless Distance + +The reported distance between your devices. + ### Wireless Frequency The base frequency set for this device. @@ -113,6 +125,10 @@ These sensors show the actual data transfer rate (receive and transmit) for this Performance in dB for the device antenna. See [Gain](https://en.wikipedia.org/wiki/Gain_(antenna)) on Wikipedia. +### Uptime + +Time since the device was last started. + ## Data updates Data is polled from devices every 60 seconds. From 87d3c47b00efeef9987741faf71dbb86737f144d Mon Sep 17 00:00:00 2001 From: Thomas D <11554546+thomasddn@users.noreply.github.com> Date: Sat, 16 Aug 2025 09:02:49 +0200 Subject: [PATCH 47/63] Add binary sensor platform to qbus integration (#40273) --- source/_integrations/qbus.markdown | 3 +++ 1 file changed, 3 insertions(+) diff --git a/source/_integrations/qbus.markdown b/source/_integrations/qbus.markdown index 63bbec40cc07..df3d57020956 100644 --- a/source/_integrations/qbus.markdown +++ b/source/_integrations/qbus.markdown @@ -2,6 +2,7 @@ title: Qbus description: Instructions on how to integrate your Qbus installation with Home Assistant. ha_category: + - Binary sensor - Climate - Cover - Hub @@ -10,6 +11,7 @@ ha_category: - Sensor - Switch ha_platforms: + - binary_sensor - climate - cover - light @@ -50,6 +52,7 @@ There is currently support for the following **Qbus** products within Home Assis ## Available entities +- **Binary sensor**: display values from weather stations and controller information. - **Climate**: manage thermostats by setting temperature and choosing presets. - **Cover**: operate covers with support for actions like open, close, stop, position adjustment, and tilt — depending on your setup. - **Light**: control dimmer lights, allowing both on/off functionality and brightness adjustment. From 1834466c5d328c4411c58dd9029ea2c7a5895a8f Mon Sep 17 00:00:00 2001 From: Pete Sage <76050312+PeteRager@users.noreply.github.com> Date: Sun, 17 Aug 2025 11:16:32 -0400 Subject: [PATCH 48/63] Add Sonos speech enhancement select (#40453) --- source/_integrations/sonos.markdown | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/source/_integrations/sonos.markdown b/source/_integrations/sonos.markdown index 7cae6b2e9bc8..52eec562cb69 100644 --- a/source/_integrations/sonos.markdown +++ b/source/_integrations/sonos.markdown @@ -30,7 +30,7 @@ The `sonos` integration allows you to control your [Sonos](https://www.sonos.com ## Feature controls & sensors -Speaker-level controls are exposed as `number` or `switch` entities. Additionally, various `sensor` and `binary_sensor` entities are provided. +Speaker-level controls are exposed as `number`, `select` or `switch` entities. Additionally, various `sensor` and `binary_sensor` entities are provided. ### Controllable features @@ -45,6 +45,14 @@ Speaker-level controls are exposed as `number` or `switch` entities. Additionall - **Home theater devices**: Audio Input Format - **Voice-enabled devices**: Microphone Enabled +### Select + +The following select entities are created: + +- **Dialog Level** + Lets you set the dialog mode on your **Sonos Arc Ultra** soundbar. You can choose from None, Low, Medium, High, or Max. + + ### Battery support notes Battery sensors are fully supported for the `Sonos Roam` and `Sonos Move` devices on S2 firmware. `Sonos Move` speakers still on S1 firmware are supported but may update infrequently. From a3426a23b3f5203a6874c79fa78fdb816b3300b5 Mon Sep 17 00:00:00 2001 From: Joakim Plate Date: Mon, 18 Aug 2025 07:59:11 +0200 Subject: [PATCH 49/63] Add mention of number entity (#40426) Co-authored-by: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com> --- source/_integrations/togrill.markdown | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/source/_integrations/togrill.markdown b/source/_integrations/togrill.markdown index 95178fd98f9e..53d061f4a940 100644 --- a/source/_integrations/togrill.markdown +++ b/source/_integrations/togrill.markdown @@ -6,10 +6,12 @@ ha_config_flow: true ha_release: '2025.9' ha_category: - Sensor + - Number ha_domain: togrill ha_bluetooth: true ha_platforms: - sensor + - number ha_integration_type: device ha_codeowners: - '@elupus' @@ -45,6 +47,11 @@ Many ToGrill compatible devices exist from many different vendors. Only a subset **Probe X**: The current temperature of the given temperature probe **Battery**: The current battery level of the device. +## Numbers + +**Target X**: The target temperature of the given temperature probe. Set value to 0 to disable target alarm. +**Alarm interval**: The interval in minutes between successive alarms. + ## Removing the integration This integration follows standard integration removal. No extra steps are required. From 2a96ef1e022e31b2d55921955cd23e646977bc12 Mon Sep 17 00:00:00 2001 From: dontinelli <73341522+dontinelli@users.noreply.github.com> Date: Mon, 18 Aug 2025 11:15:59 +0200 Subject: [PATCH 50/63] Add documentation for new extra attributes for fyta (#40410) Co-authored-by: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com> --- source/_integrations/fyta.markdown | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/_integrations/fyta.markdown b/source/_integrations/fyta.markdown index a391e4f19263..5b233edcc509 100644 --- a/source/_integrations/fyta.markdown +++ b/source/_integrations/fyta.markdown @@ -101,6 +101,8 @@ For plant measurements, the following status scale is applied: - High - Too High +For the measurement sensors (light, moisture, salinity, and temperature), the maximal/minimal values that define the ranges of what is considered acceptable and good for the plant are saved as an extra attribute of the sensor. For example: Below 10 it's too cold, that could be the minimum acceptable. 15 could be the minimum of the good range. Between 15 and 30 is perfect. 30 would be maximum good and 35 would be the maximum acceptable. Above 35 it's too hot. These values can be used for automations or visualizations on the dashboard. + ## Data updates The integration fetches data from the device every 4 minutes. From 888b1f77d8d41b0b0d43303d39a52ec1ef267731 Mon Sep 17 00:00:00 2001 From: Aidan Timson Date: Mon, 18 Aug 2025 13:59:10 +0100 Subject: [PATCH 51/63] Add date card feature docs (#40441) --- source/dashboards/features.markdown | 21 +++++++++++++++++++++ source/images/dashboards/features/date.png | Bin 0 -> 9925 bytes 2 files changed, 21 insertions(+) create mode 100644 source/images/dashboards/features/date.png diff --git a/source/dashboards/features.markdown b/source/dashboards/features.markdown index 12fb0426c0fc..7405663ef210 100644 --- a/source/dashboards/features.markdown +++ b/source/dashboards/features.markdown @@ -322,6 +322,27 @@ type: type: string {% endconfiguration %} +## Date + +Widget that displays a button to select a date using the date picker dialog for the [date](/integrations/date), [datetime](/integrations/datetime), and [input datetime](/integrations/input_datetime) entities. + +

+ Screenshot of the tile card with the date feature + Screenshot of the tile card with the date feature +

+ +```yaml +features: + - type: "date" +``` + +{% configuration features %} +type: + required: true + description: "`date`" + type: string +{% endconfiguration %} + ## Fan direction Widget that displays controls to change direction for a [fan](/integrations/fan). diff --git a/source/images/dashboards/features/date.png b/source/images/dashboards/features/date.png new file mode 100644 index 0000000000000000000000000000000000000000..8359ba146cbbdede1dfe87d7c2487d98fc21f248 GIT binary patch literal 9925 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 W+A+Pa(6BEJOHoc0RdCNF@c#jb{eyD= literal 0 HcmV?d00001 From c886bdd6c7dfca30835dbda21c4c736d163fd62a Mon Sep 17 00:00:00 2001 From: Andrew Jackson Date: Mon, 18 Aug 2025 16:47:06 +0100 Subject: [PATCH 52/63] Add bronze quality scale to Mastodon (#40491) --- source/_integrations/mastodon.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_integrations/mastodon.markdown b/source/_integrations/mastodon.markdown index f606ec06e265..a5ea676728e1 100644 --- a/source/_integrations/mastodon.markdown +++ b/source/_integrations/mastodon.markdown @@ -16,6 +16,7 @@ ha_platforms: - sensor ha_integration_type: service ha_config_flow: true +ha_quality_scale: bronze --- The `mastodon` platform uses [Mastodon](https://joinmastodon.org/) to post status updates and get account statistics. From 910ef0489d4cce04f9b535f71c5d132f6effdf31 Mon Sep 17 00:00:00 2001 From: Matrix Date: Tue, 19 Aug 2025 20:10:42 +0800 Subject: [PATCH 53/63] Updated the list of models supported by YoLink integration (#40510) --- source/_integrations/yolink.markdown | 3 +++ 1 file changed, 3 insertions(+) diff --git a/source/_integrations/yolink.markdown b/source/_integrations/yolink.markdown index 9d3888052c6f..b4c434131286 100644 --- a/source/_integrations/yolink.markdown +++ b/source/_integrations/yolink.markdown @@ -24,6 +24,7 @@ ha_platforms: - light - lock - number + - select - sensor - siren - switch @@ -102,6 +103,8 @@ The integration is tested and verified for the following devices from YoLink: - YS8015-UC (X3 Outdoor Temperature & Humidity Sensor) - YS8017-UC (Thermometer) - YS8023-UC (Hygrometer Thermometer) +- YS4102-UC (Sprinkler) +- YS4103-UC (Sprinkler Timer) ## Actions From 2f1135ecabbe350ae17e33b67512a0d69b34ef08 Mon Sep 17 00:00:00 2001 From: Joakim Plate Date: Tue, 19 Aug 2025 15:02:45 +0200 Subject: [PATCH 54/63] Add mention of event entity (#40488) Co-authored-by: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com> --- source/_integrations/togrill.markdown | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/source/_integrations/togrill.markdown b/source/_integrations/togrill.markdown index 53d061f4a940..1571e6de3a5c 100644 --- a/source/_integrations/togrill.markdown +++ b/source/_integrations/togrill.markdown @@ -5,11 +5,13 @@ ha_iot_class: Local Push ha_config_flow: true ha_release: '2025.9' ha_category: + - Event - Sensor - Number ha_domain: togrill ha_bluetooth: true ha_platforms: + - event - sensor - number ha_integration_type: device @@ -42,6 +44,10 @@ Many ToGrill compatible devices exist from many different vendors. Only a subset |----------------------------------|--------| | Rubicson - BBQ probe thermometer | Pro-05 | +## Events + +**Probe X**: The most recently triggered alarm or event on the probe. The following event types are expected: `alarm`, `acknowledge`, `disconnected`. + ## Sensors **Probe X**: The current temperature of the given temperature probe From 8901a650568067b3f00358dc6b3cc383ef611cf4 Mon Sep 17 00:00:00 2001 From: karwosts <32912880+karwosts@users.noreply.github.com> Date: Tue, 19 Aug 2025 22:09:23 -0700 Subject: [PATCH 55/63] Update todo-list.markdown (#40473) --- source/_dashboards/todo-list.markdown | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/source/_dashboards/todo-list.markdown b/source/_dashboards/todo-list.markdown index 0ba350db3f00..bae5752cd4a7 100644 --- a/source/_dashboards/todo-list.markdown +++ b/source/_dashboards/todo-list.markdown @@ -76,6 +76,11 @@ display_order: description: "Optionally sorts the items in the to-do list for display. Options are: `none`: Show the list in its original order. `alpha_asc`: Sort the list in alphabetical order. `alpha_desc`: Sort the list in reverse alphabetical order. `duedate_asc`: Sort the list by due date (soonest first). `duedate_desc`: Sort the list by reverse due date (soonest last)." type: string default: "none" +item_tap_action: + required: false + description: "Defines the behavior when an item's body is clicked. Options are: `edit` (opens the edit dialog), `toggle` (marks or unmarks the item as completed, hiding the edit dialog)." + type: string + default: "edit" {% endconfiguration %} ### Examples From 748dec54971c1a448eaa4556f35b84bd2f4073ef Mon Sep 17 00:00:00 2001 From: pcan08 <155250376+pcan08@users.noreply.github.com> Date: Wed, 20 Aug 2025 10:52:52 +0200 Subject: [PATCH 56/63] Add fan-oscillate dashboard feature documentation (#40403) --- source/dashboards/features.markdown | 21 ++++++++++++++++++ .../dashboards/features/fan_oscillate.png | Bin 0 -> 5094 bytes 2 files changed, 21 insertions(+) create mode 100644 source/images/dashboards/features/fan_oscillate.png diff --git a/source/dashboards/features.markdown b/source/dashboards/features.markdown index 7405663ef210..963c98c215a7 100644 --- a/source/dashboards/features.markdown +++ b/source/dashboards/features.markdown @@ -364,6 +364,27 @@ type: type: string {% endconfiguration %} +## Fan oscillate + +Widget that displays controls to change oscillation state for a [fan](/integrations/fan). + +

+ Screenshot of the tile card with the fan oscillate feature + Screenshot of the tile card with the fan oscillate feature +

+ +```yaml +features: + - type: "fan-oscillate" +``` + +{% configuration features %} +type: + required: true + description: "`fan-oscillate`" + type: string +{% endconfiguration %} + ## Fan preset modes Widget that displays buttons or icons to control the preset mode for a [fan](/integrations/fan). diff --git a/source/images/dashboards/features/fan_oscillate.png b/source/images/dashboards/features/fan_oscillate.png new file mode 100644 index 0000000000000000000000000000000000000000..e72300bfb11258b406ea3e8f506e317e58a2449e GIT binary patch literal 5094 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�-02=M0D|vi-&rjX4*QVuSMa&PdX# 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 Date: Wed, 20 Aug 2025 13:36:55 +0300 Subject: [PATCH 57/63] Add history chart card feature docs (#40461) --- source/dashboards/features.markdown | 22 ++++++++++++++++++ .../features/history-chart-line.png | Bin 0 -> 12376 bytes .../features/history-chart-timeline.png | Bin 0 -> 10327 bytes 3 files changed, 22 insertions(+) create mode 100644 source/images/dashboards/features/history-chart-line.png create mode 100644 source/images/dashboards/features/history-chart-timeline.png diff --git a/source/dashboards/features.markdown b/source/dashboards/features.markdown index 963c98c215a7..5c1f141da604 100644 --- a/source/dashboards/features.markdown +++ b/source/dashboards/features.markdown @@ -42,6 +42,28 @@ Features can be enabled on the following cards: ![Screen recording showing how you can now reorder the HVAC modes on the thermostat shown in a tile card.](/images/blog/2024-05/tile-card-reorder-features.gif) +## History chart + +Widget that displays the history of a [sensor](/integrations/sensor) or [binary_sensor](/integrations/binary_sensor). + +

+ Screenshot of the tile card with the history chart feature for a numeric entity + Screenshot of the tile card with the history chart feature for a non-numeric entity + Screenshots of the tile card with the history chart feature +

+ +```yaml +features: + - type: "history-chart" +``` + +{% configuration features %} +type: + required: true + description: "`history-chart`" + type: string +{% endconfiguration %} + ## Alarm modes Widget that displays buttons to arm and disarm an [alarm](/integrations/alarm_control_panel). diff --git a/source/images/dashboards/features/history-chart-line.png b/source/images/dashboards/features/history-chart-line.png new file mode 100644 index 0000000000000000000000000000000000000000..5b19fc379e2144ae908ebc6ac7b5cf65a5021ee4 GIT binary patch literal 12376 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 Date: Wed, 20 Aug 2025 17:27:20 +0300 Subject: [PATCH 58/63] Add bar gauge card feature docs (#40495) --- source/dashboards/features.markdown | 21 ++++++++++++++++++ .../images/dashboards/features/bar-gauge.png | Bin 0 -> 9861 bytes 2 files changed, 21 insertions(+) create mode 100644 source/images/dashboards/features/bar-gauge.png diff --git a/source/dashboards/features.markdown b/source/dashboards/features.markdown index 5c1f141da604..d053217ec668 100644 --- a/source/dashboards/features.markdown +++ b/source/dashboards/features.markdown @@ -96,6 +96,27 @@ modes: type: list {% endconfiguration %} +## Bar gauge + +Widget that displays the state of a numeric [sensor](/integrations/sensor), with unit of measurement %, as a horizontal bar. + +

+ Screenshot of the tile card with the bar gauge feature + Screenshots of the tile card with the bar gauge feature +

+ +```yaml +features: + - type: "bar-gauge" +``` + +{% configuration features %} +type: + required: true + description: "`bar-gauge`" + type: string +{% endconfiguration %} + ## Button Widget that displays buttons to control [button](/integrations/button) or [script](/integrations/script). diff --git a/source/images/dashboards/features/bar-gauge.png b/source/images/dashboards/features/bar-gauge.png new file mode 100644 index 0000000000000000000000000000000000000000..7dad15d5f7d52e85719a03e9cf484a6bac788476 GIT binary patch literal 9861 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 e@ZkBm!xY{aN7T!xLV$N=Oa^*JSIREI!~Yk* Date: Wed, 20 Aug 2025 15:34:42 +0100 Subject: [PATCH 59/63] Card clock no background docs (#40518) Co-authored-by: Petar Petrov --- source/_dashboards/clock.markdown | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/_dashboards/clock.markdown b/source/_dashboards/clock.markdown index e46deac1691e..cf201a7625d7 100644 --- a/source/_dashboards/clock.markdown +++ b/source/_dashboards/clock.markdown @@ -29,6 +29,8 @@ Clock Size: description: Adjusts the size of the text allowing a wider range of use with different types of dashboards. Defaults to small. Display Seconds: description: Shows seconds alongside the clock, providing the time format is in a 12-hour format. +No Background: + description: Removes the background of the clock card. Time Format: description: Allows the time format to be changed on a per-card level. Defaults to the user profile setting. Time Zone: From d8e4f98502f80a791b98ab6c5358d739895fe080 Mon Sep 17 00:00:00 2001 From: Andrea Turri Date: Thu, 21 Aug 2025 10:19:23 +0200 Subject: [PATCH 60/63] Mention coffee machine profiles in Miele docs (#40462) --- source/_integrations/miele.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_integrations/miele.markdown b/source/_integrations/miele.markdown index e34a0916f4b6..d57cef93c732 100644 --- a/source/_integrations/miele.markdown +++ b/source/_integrations/miele.markdown @@ -151,7 +151,7 @@ Climate entities are used to control target temperatures in refrigerators, freez - **Operation state**: - **Status**: Represents the current operation state of the device. The default entity name is just the appliance type. For example, "Dishwasher". - - **Program**: Shows the currently active program. + - **Program**: Shows the currently active program. On coffee machines, the program sensor also provides an extra state attribute `profile` in order to distinguish which profile is in use on the machine. - **Program phase**: Shows the current phase in the running program. - **Program type**: Shows the current program type. - **Spin speed**: Shows the spin speed selected for the current washing machine program. From bee9b34891d2d616e0a1507d4525a9db1df0fa34 Mon Sep 17 00:00:00 2001 From: Aidan Timson Date: Thu, 21 Aug 2025 13:35:04 +0100 Subject: [PATCH 61/63] Media player playback controls card feature (#40522) --- source/dashboards/features.markdown | 21 ++++++++++++++++++ .../features/media_player_playback.png | Bin 0 -> 8436 bytes 2 files changed, 21 insertions(+) create mode 100644 source/images/dashboards/features/media_player_playback.png diff --git a/source/dashboards/features.markdown b/source/dashboards/features.markdown index d053217ec668..22cb4343ecbd 100644 --- a/source/dashboards/features.markdown +++ b/source/dashboards/features.markdown @@ -652,6 +652,27 @@ type: type: string {% endconfiguration %} +## Media player playback controls + +Widget that displays playback controls for a [media player](/integrations/media_player). + +

+ Screenshot of the tile card with media player playback feature + Screenshot of the tile card with media player playback feature +

+ +```yaml +features: + - type: "media-player-playback" +``` + +{% configuration features %} +type: + required: true + description: "`media-player-playback`" + type: string +{% endconfiguration %} + ## Media player volume slider Widget that displays a slider to control the volume for a [media player](/integrations/media_player). diff --git a/source/images/dashboards/features/media_player_playback.png b/source/images/dashboards/features/media_player_playback.png new file mode 100644 index 0000000000000000000000000000000000000000..ef5d4ecd5d3f0e7c562b917b06423ff3dad305a8 GIT binary patch literal 8436 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 n1!1rvC#D#imuRzo{r Date: Thu, 21 Aug 2025 16:50:16 +0100 Subject: [PATCH 62/63] Alexa Devices - Remove Outdated Troubleshooting Section (#40540) --- source/_integrations/alexa_devices.markdown | 20 -------------------- 1 file changed, 20 deletions(-) diff --git a/source/_integrations/alexa_devices.markdown b/source/_integrations/alexa_devices.markdown index 147d58615694..1b5ebfe626df 100644 --- a/source/_integrations/alexa_devices.markdown +++ b/source/_integrations/alexa_devices.markdown @@ -49,8 +49,6 @@ This integration requires multifactor authentication using an authentication app {% include integrations/config_flow.md %} {% configuration_basic %} - country: - description: The country of your Amazon account. username: description: The email address of your Amazon account. password: @@ -59,12 +57,6 @@ This integration requires multifactor authentication using an authentication app description: One-time password via Authenticator App. {% endconfiguration_basic %} -{% note %} -When trying to set up the integration, the form may show the message "Cannot connect". -This means that the specified country may need a special setting. -Open a issue with all details to investigate -{% endnote %} - ## Examples ### Automation: Announce welcome when you arrive home @@ -106,18 +98,6 @@ This integration requires multifactor authentication using an authentication app ### Can’t set up the integration -#### Symptom: "Wrong Country" - -When trying to set up the integration, the form shows the message "Wrong Country". - -##### Description - -This means that the settings in your Amazon account are not aligned to the country you specified. -To fix it, please go to (replace XX with your country domain. For example **co.uk**): - -- "Kindle payment": check your default address is in your country -- "Country/Region": check your country - #### Symptom: "Not found" When trying to set up the integration, the form shows the message "Not found". From a6bf8989ea969881b56c1305faaf3ebee7e22633 Mon Sep 17 00:00:00 2001 From: puddly <32534428+puddly@users.noreply.github.com> Date: Thu, 21 Aug 2025 23:33:35 -0400 Subject: [PATCH 63/63] Add Home Assistant Connect ZBT-2 integration (#40557) --- .../homeassistant_connect_zbt2.markdown | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 source/_integrations/homeassistant_connect_zbt2.markdown diff --git a/source/_integrations/homeassistant_connect_zbt2.markdown b/source/_integrations/homeassistant_connect_zbt2.markdown new file mode 100644 index 000000000000..ab8b7899a33a --- /dev/null +++ b/source/_integrations/homeassistant_connect_zbt2.markdown @@ -0,0 +1,24 @@ +--- +title: Home Assistant Connect ZBT-2 +description: Home Assistant Connect ZBT-2 provides hardware information for the hardware configuration page. +ha_release: 2025.9 +ha_category: + - Other + - Update +ha_codeowners: + - '@home-assistant/core' +ha_domain: homeassistant_connect_zbt2 +ha_integration_type: hardware +ha_config_flow: true +ha_platforms: + - update +--- + +The Home Assistant Connect ZBT-2 integration provides hardware information for the hardware configuration page. + +For documentation on the Home Assistant Connect ZBT-2, please visit the [documentation page](https://support.nabucasa.com/hc/en-us/categories/24734620813469). +If you are looking to buy one, please visit the [product page](https://home-assistant.io/connectzbt2) + +## Configuration + +This integration is not user configurable.