From e9973f7a69f9eb1a0c1630c2988f48a7cbeb89ed Mon Sep 17 00:00:00 2001 From: Kendell R Date: Thu, 1 Aug 2024 00:34:49 -0700 Subject: [PATCH 001/122] tweak mold indicator wording (#34054) * tweak mold indicator wording * Apply suggestions from code review Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * tiny tweak --------- Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> Co-authored-by: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com> --- source/_integrations/mold_indicator.markdown | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/source/_integrations/mold_indicator.markdown b/source/_integrations/mold_indicator.markdown index e3ca94b0825..45b97b01247 100644 --- a/source/_integrations/mold_indicator.markdown +++ b/source/_integrations/mold_indicator.markdown @@ -15,9 +15,9 @@ related: title: Configuration file --- -The Mold Indicator sensor {% term integration %} consumes information of two temperature sensors and a humidity sensor to give an indication for possible mold growth in your home. In case of bad ventilation and insulation, the indoor humidity may lead to condensation on cold surfaces as the windows or even walls. Condensation or a high relative humidity near those cold surfaces leads to a higher risk for mold growth. This sensor integration estimates the temperature at a pre-calibrated critical point in the room (the coldest surface) and calculates the relative humidity of the air at that point. If the sensor value rises above approximately 70 percent, mold growth might occur and the room should be ventilated. At 100%, the air humidity condensates at the critical point. +The Mold Indicator sensor {% term integration %} uses data from two temperature sensors and a humidity sensor to predict the humidity near a cold surface. High humidity may lead to mold growth at more than ~70% and causes condensation at 100%. -The sensor data may be used e.g., to signal bad air quality (too high air humidity) or to automate operation of indoor air humidifiers to keep the indoor humidity at an optimum. +The sensor data may be used, for example, to detect bad air quality (high humidity) or automate the operation of indoor air humidifiers to keep the indoor humidity at an optimum. ## Configuration @@ -59,9 +59,16 @@ calibration_factor: In this case, the weather forecast temperature sensor is used for the outside temperature. +## Background + +First, this sensor predicts the temperature near the given surface by estimating it from the indoor and outdoor temperatures. The predicted temperature starts with the indoor temperature, then either brings it closer to the outdoor temperature (if the calibration factor is positive, indicating the surface is influenced by the outdoors) or away (if the calibration factor is negative, indicating the surface is inversely correlated with the outdoor temperature). + +From there, the sensor calculates the relative humidity near the given surface based on the dew point. + ## Calibration The Mold Indicator sensor integration needs to be calibrated in order to estimate the temperature at the critical point from the outdoor and indoor temperature. First find the coldest surface in the room (critical point), which is typically near the window frames, but depends on the insulation of your home. For calibration you need to measure the temperature at this critical point and simultaneously write down the values for the indoor- and outdoor temperature sensors used for the Mold Indicator. Be sure that there is a significant indoor to outdoor temperature difference to get the best calibration results. + With the three measured temperatures (in Celsius or Fahrenheit), the calibration_factor for your configuration file is given by: ```text From 3d46eb719f837b0a66f61e003aa9653dfc390946 Mon Sep 17 00:00:00 2001 From: Nikola Kovic Date: Thu, 1 Aug 2024 10:15:01 +0200 Subject: [PATCH 002/122] Add Home Assistant Green on Amazon link to buy box (#33865) * I added Amazon shop to our list of distributors * Update source/green/index.html * Apply suggestions from code review --------- Co-authored-by: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com> Co-authored-by: Paulus Schoutsen --- source/green/index.html | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/source/green/index.html b/source/green/index.html index 179dc2d3ace..f5be07b3259 100644 --- a/source/green/index.html +++ b/source/green/index.html @@ -2312,11 +2312,11 @@ dark_header: true
Shipping to America
- +
πŸ‡ΊπŸ‡Έ
-
ameriDroid
+
Amazon US
Shipping from US
@@ -2326,7 +2326,22 @@ dark_header: true
- + + +
+
+
πŸ‡ΊπŸ‡Έ
+
ameriDroid
+
Shipping from US
+
+ + + +
+
+
From 5a06c155b515fcf66f13f90a5476f6d3e9f8a20a Mon Sep 17 00:00:00 2001 From: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com> Date: Thu, 1 Aug 2024 10:38:03 +0200 Subject: [PATCH 003/122] Yellow product page: add FAQ and update Options (#34037) * Yellow product page: add FAQ * rephrase text about standard variant * Tweaks * Fix typo * Fix syntax * rephrase * rephrase * Remove note on chip shortage * Re-add note about rpilocator * remove note about rpi locator * Apply suggestions from code review * rephrase * rephrase * rephrase * Update source/yellow/index.html --- source/yellow/index.html | 31 ++++++++++++++++++------------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/source/yellow/index.html b/source/yellow/index.html index 4b7f339bb93..fe824d402fe 100644 --- a/source/yellow/index.html +++ b/source/yellow/index.html @@ -168,17 +168,6 @@ frontpage_image: /images/frontpage/yellow-frontpage.jpg @@ -212,8 +209,6 @@ frontpage_image: /images/frontpage/yellow-frontpage.jpg

Buying a Raspberry Pi Compute Module 4 (CM4)

If you bought the Home Assistant Yellow Kit, you need to bring your own Raspberry Pi Compute Module 4.

-

A chip shortage still impacts the availability of the CM4. Our recommendation is to use rpilocator. This website tracks the stock of official Raspberry Pi distributors. Follow them on X and enable push notifications. You will be notified as soon as the bot tweets that products are in stock. -

We recommend purchasing a Raspberry Pi Compute Module 4 with the following characteristics:

    @@ -315,6 +310,16 @@ frontpage_image: /images/frontpage/yellow-frontpage.jpg
+

FAQs

+
+ {% details "Can I buy the Home Assistant Yellow pre-assembled?" %}

No. We previously offered a Home Assistant Yellow Standard model that came pre-assembled with a Raspberry Pi CM4, but this model is no longer manufactured. It is now recommended that if you want a more plug-and-play experience, you purchase a Home Assistant Green, as it requires no assembly and matches many of the capabilities of the Yellow, especially if you add a Home Assistant Connect ZBT-1 to give it Zigbee/Thread capability. +

+ {% enddetails %} + + {% details "What happened to Home Assistant Yellow Standard, and will it still be supported?" %}

The Home Assistant Yellow Standard was originally designed to be the beginner option in our product line, as it was pre-assembled and easier to get started with. In 2023, we launched the Home Assistant Green, which offered similar features, including easy setup, but at a lower price point. This led us to end the manufacture of the Home Assistant Yellow Standard and focus on Yellow Kit versions for advanced users. Rest assured, it will continue to receive the same support and software updates as the Yellow Kit variants. +

+ {% enddetails %} +
πŸ‡¨πŸ‡³
Seeed Studio
-
Shipping from China, US and Germany. Also sells CM4 modules.
+
Shipping from China, US and Germany
πŸ‡¨πŸ‡³
Seeed Studio
-
Shipping from China, US and Germany. Also sells CM4 modules.
+
Shipping from China, US and Germany
πŸ‡΅πŸ‡±
Botland
-
Shipping from Poland. Yellow Kit versions only. Also sells CM4 modules.
+
Shipping from Poland
πŸ‡΅πŸ‡Ή
Mauser
-
Shipping from Portugal. Yellow Kit versions only. Also sells CM4 modules.
+
Shipping from Portugal
πŸ‡¨πŸ‡­
Pi-Shop.ch
-
Shipping from Switzerland. Also sells CM4 modules.
+
Shipping from Switzerland
πŸ‡©πŸ‡°
RaspberryPi.dk
-
Shipping from Denmark. Also sells CM4 modules.
+
Shipping from Denmark
πŸ‡¨πŸ‡³
Seeed Studio
-
Shipping from China, US and Germany. Kit versions only. Also sells CM4 modules.
+
Shipping from China, US and Germany
πŸ‡¬πŸ‡§
The Pi Hut
-
Shipping from the United Kingdom. Kit versions only. Also sells CM4 modules.
+
Shipping from the United Kingdom
Date: Thu, 1 Aug 2024 15:50:55 +0000 Subject: [PATCH 005/122] Add generate content service for OpenAI to match Google AI --- .../openai_conversation.markdown | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/source/_integrations/openai_conversation.markdown b/source/_integrations/openai_conversation.markdown index 95b5ff82af4..1b54129c5ca 100644 --- a/source/_integrations/openai_conversation.markdown +++ b/source/_integrations/openai_conversation.markdown @@ -158,3 +158,50 @@ template: ``` {% endraw %} + +### Service `openai_conversation.generate_content` + +Allows you to ask OpenAI to generate an content based on a prompt. This service +populates [Response Data](/docs/scripts/service-calls#use-templates-to-handle-response-data) +with the response from OpenAI. + +| Service data attribute | Optional | Description | Example | +| ---------------------- | -------- | ------------------------------------------------------- | ---------------- | +| `config_entry` | no | Integration entry ID to use. | | +| `prompt` | no | The text to turn into an image. | Picture of a dog | +| `image_filename` | yes | List of file names for images to include in the prompt. | /tmp/image.jpg | + +{% raw %} +```yaml +service: openai.generate_content +data: + config_entry: abce6b8696a15e107b4bd843de722249 + prompt: >- + Very briefly describe what you see in this image from my doorbell camera. + Your message needs to be short to fit in a phone notification. Don't + describe stationary objects or buildings. + image_filename: + - /tmp/doorbell_snapshot.jpg +response_variable: generated_content +``` +{% endraw %} + +The response data field `text` will contain the generated content. + +Another example with multiple images: + +{% raw %} +```yaml +service: openai.generate_content +data: + prompt: >- + Briefly describe what happened in the following sequence of images + from my driveway camera. + image_filename: + - /tmp/driveway_snapshot1.jpg + - /tmp/driveway_snapshot2.jpg + - /tmp/driveway_snapshot3.jpg + - /tmp/driveway_snapshot4.jpg +response_variable: generated_content +``` +{% endraw %} \ No newline at end of file From 6d8d8c79a37e0525d072028f074bf5ac686d0d6c Mon Sep 17 00:00:00 2001 From: Tim Laing Date: Thu, 1 Aug 2024 16:03:02 +0000 Subject: [PATCH 006/122] Fixed issue with grammer spotted by CodeRabbit. --- source/_integrations/openai_conversation.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_integrations/openai_conversation.markdown b/source/_integrations/openai_conversation.markdown index 1b54129c5ca..6c973aa11c4 100644 --- a/source/_integrations/openai_conversation.markdown +++ b/source/_integrations/openai_conversation.markdown @@ -161,7 +161,7 @@ template: ### Service `openai_conversation.generate_content` -Allows you to ask OpenAI to generate an content based on a prompt. This service +Allows you to ask OpenAI to generate a content based on a prompt. This service populates [Response Data](/docs/scripts/service-calls#use-templates-to-handle-response-data) with the response from OpenAI. From 1f17b1814a386a2fb045e91c28d5bb3ebfe6d363 Mon Sep 17 00:00:00 2001 From: Tim Laing Date: Thu, 1 Aug 2024 16:19:01 +0000 Subject: [PATCH 007/122] Fixed CodeRebbit comments --- .../_integrations/openai_conversation.markdown | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/source/_integrations/openai_conversation.markdown b/source/_integrations/openai_conversation.markdown index 6c973aa11c4..b46af7edfc4 100644 --- a/source/_integrations/openai_conversation.markdown +++ b/source/_integrations/openai_conversation.markdown @@ -165,13 +165,14 @@ Allows you to ask OpenAI to generate a content based on a prompt. This service populates [Response Data](/docs/scripts/service-calls#use-templates-to-handle-response-data) with the response from OpenAI. -| Service data attribute | Optional | Description | Example | -| ---------------------- | -------- | ------------------------------------------------------- | ---------------- | -| `config_entry` | no | Integration entry ID to use. | | -| `prompt` | no | The text to turn into an image. | Picture of a dog | -| `image_filename` | yes | List of file names for images to include in the prompt. | /tmp/image.jpg | +| Service data attribute | Optional | Description | Example | +| ---------------------- | -------- | ------------------------------------------------------- | -------------------- | +| `config_entry` | no | Integration entry ID to use. | | +| `prompt` | no | The text to generate content from. | Describe the weather | +| `image_filename` | yes | List of file names for images to include in the prompt. | /tmp/image.jpg | {% raw %} + ```yaml service: openai.generate_content data: @@ -184,6 +185,7 @@ data: - /tmp/doorbell_snapshot.jpg response_variable: generated_content ``` + {% endraw %} The response data field `text` will contain the generated content. @@ -191,6 +193,7 @@ The response data field `text` will contain the generated content. Another example with multiple images: {% raw %} + ```yaml service: openai.generate_content data: @@ -204,4 +207,5 @@ data: - /tmp/driveway_snapshot4.jpg response_variable: generated_content ``` -{% endraw %} \ No newline at end of file + +{% endraw %} From fcc5842fd493e5629d77f8341d5fabd5ccda6434 Mon Sep 17 00:00:00 2001 From: adam-the-hero Date: Wed, 15 Jan 2025 12:52:56 +0000 Subject: [PATCH 008/122] Add Event platform description to watergate documentation --- source/_integrations/watergate.markdown | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/source/_integrations/watergate.markdown b/source/_integrations/watergate.markdown index 3283539fccd..5354e810ca2 100644 --- a/source/_integrations/watergate.markdown +++ b/source/_integrations/watergate.markdown @@ -14,6 +14,7 @@ ha_domain: watergate ha_platforms: - valve - sensor + - event --- The **Watergate** integration integrates your Watergate Devices (currently Sonic Wi-Fi) with your Home Assistant. @@ -22,6 +23,7 @@ With this integration, you are able to: - Control your valve - Monitor live telemetry (water flow, water pressure, water temperature) - Monitor water usage +- Receive information when Sonic shuts off the valve due to potential leak ## Prerequisites @@ -69,6 +71,16 @@ The Watergate integration provides the following entities. - **Water valve state** - **Description**: The current state of the water valve (open/closed). - **Remarks**: It is automatically updated when the valve state is changed. + +#### Events + +- **Auto Shut-Off** + - **Description**: Event triggered when the valve automatically shuts off due to detected leak. + - **Event Type**: Either `volume_threshold` or `duration_threshold` + - **Event Data**: + - `volume`: The volume of water that triggered the shut-off + - `duration`: The duration of leak that triggered the shut-off + - **Remarks**: Historical events are not preserved across Home Assistant restarts. ## Data updates @@ -77,7 +89,7 @@ Thanks to the webhook option, Sonic will provide live telemetry every second whe ## Known limitations -The integration does not provide the ability to set auto shut-off thresholds and does not report any events regarding automatically closed valves. +The integration does not provide the ability to set auto shut-off thresholds. {% include integrations/config_flow.md %} From b9c4e20f8db2abf7df9c61fa7fe9099e36f81c0e Mon Sep 17 00:00:00 2001 From: Thomas D <11554546+thomasddn@users.noreply.github.com> Date: Wed, 26 Feb 2025 10:23:25 +0000 Subject: [PATCH 009/122] Add climate documentation --- source/_integrations/qbus.markdown | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/_integrations/qbus.markdown b/source/_integrations/qbus.markdown index c7b4882f1f7..6725112d2b5 100644 --- a/source/_integrations/qbus.markdown +++ b/source/_integrations/qbus.markdown @@ -37,11 +37,13 @@ There is currently support for the following **Qbus** products within Home Assis - **CTD01E to CTD03E (CTD 3.0)**: main controllers (yellow). - **CTD10 to CTDMax (CTD 3.5)**: main controllers (black). - **Toggle**: toggle outputs on controllers. +- **Dimmer**: dimmer outputs on controllers. ## Available entities - **Switch**: toggles on/off outputs. - **Light**: controls dimmer lights, allowing both on/off functionality and brightness adjustment. +- **Climate**: manages thermostats by setting temperature and choosing presets. ## Removing the integration From 6374fcadf02882b26d36518882794d1f4441941b Mon Sep 17 00:00:00 2001 From: Thomas D <11554546+thomasddn@users.noreply.github.com> Date: Wed, 26 Feb 2025 11:23:23 +0000 Subject: [PATCH 010/122] Update metadata --- source/_integrations/qbus.markdown | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/source/_integrations/qbus.markdown b/source/_integrations/qbus.markdown index 6725112d2b5..61591a1cd3f 100644 --- a/source/_integrations/qbus.markdown +++ b/source/_integrations/qbus.markdown @@ -2,8 +2,12 @@ title: Qbus description: Instructions on how to integrate your Qbus installation with Home Assistant. ha_category: + - Climate + - Light - Switch ha_platforms: + - climate + - light - switch ha_iot_class: Local Push ha_codeowners: @@ -41,9 +45,9 @@ There is currently support for the following **Qbus** products within Home Assis ## Available entities -- **Switch**: toggles on/off outputs. -- **Light**: controls dimmer lights, allowing both on/off functionality and brightness adjustment. - **Climate**: manages thermostats by setting temperature and choosing presets. +- **Light**: controls dimmer lights, allowing both on/off functionality and brightness adjustment. +- **Switch**: toggles on/off outputs. ## Removing the integration From 89f297479a3a64145b41f72fd97380361941e69f Mon Sep 17 00:00:00 2001 From: Simon Lamon <32477463+silamon@users.noreply.github.com> Date: Wed, 26 Feb 2025 20:15:24 +0100 Subject: [PATCH 011/122] Correct release for linak (#37727) --- source/_integrations/linak.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_integrations/linak.markdown b/source/_integrations/linak.markdown index fbf77cbb16d..b915dee0c60 100644 --- a/source/_integrations/linak.markdown +++ b/source/_integrations/linak.markdown @@ -8,7 +8,7 @@ ha_iot_class: Local Push ha_integration_type: virtual ha_supporting_domain: idasen_desk ha_supporting_integration: IKEA IdΓ₯sen Desk -ha_release: '2025.03' +ha_release: '2025.3' ha_codeowners: - '@abmantis' ha_config_flow: true From f4545703bb3932a47a7ba5852069a07e17d42e86 Mon Sep 17 00:00:00 2001 From: Josef Zweck Date: Thu, 27 Feb 2025 06:22:34 +0100 Subject: [PATCH 012/122] update onedrive docs (#37726) --- source/_integrations/onedrive.markdown | 68 ++++++++++++++------------ 1 file changed, 37 insertions(+), 31 deletions(-) diff --git a/source/_integrations/onedrive.markdown b/source/_integrations/onedrive.markdown index 04589228cf2..9ab8230ffd7 100644 --- a/source/_integrations/onedrive.markdown +++ b/source/_integrations/onedrive.markdown @@ -49,7 +49,15 @@ Delete files permanently: The backup folder is `root:\Apps\[Home Assistant | Graph]\backups_{id}`. This is not configurable because otherwise the integration would need permissions to write into your entire drive. You can, however, rename the application folder which is called `Home Assistant` or `Graph` in your OneDrive. -The last folder in the hierarchy (`backups_{id}`) is always a unique folder per Home Assistant instance to ensure that backups from different instances are not mixed. The name of this folder can be set during integration setup and can be changed later through reconfiguring the integration or by renaming the folder OneDrive. +The last folder in the hierarchy (`backups_{id}`) is always a unique folder per Home Assistant instance to ensure that backups from different instances are not mixed. The name of this folder can be set during integration setup and can be changed later through reconfiguring the integration or by renaming the folder in OneDrive. + +### Backup folder is called `Graph` + +This integration uses Microsoft's Graph API to communicate with your OneDrive. Because of an [issue](https://github.com/OneDrive/onedrive-api-docs/issues/1866) in that API, the application folder is often not named with the name of the application (`Home Assistant`), but `Graph` instead. + +There is no risk of different applications mixing in that `Graph` folder, if you already have such a `Graph` folder from a different application, the next folders will just be called `Graph 1`, `Graph 2` and so on. + +You should be able to manually rename the folder to something else, without the integration breaking. ## Requested permissions by the integration @@ -62,36 +70,6 @@ The integration will request the following permissions on your OneDrive for the Lists of permissions that the application will request. -## Getting application credentials - -This integration comes with a predefined set of [application credentials](https://www.home-assistant.io/integrations/application_credentials/) through Home Assistant account linking. -Nobody will ever have access to your data except you, as the app does not have permission to do anything on its own. It only works with a signed-in user (it only has `delegated` not `application permissions`). -However, if you want to use your own credentials, follow [this guide](https://learn.microsoft.com/en-us/entra/identity-platform/quickstart-register-app?tabs=certificate) to create your own client ID and secret. - -{% tip %} -You will need an Azure tenant with an active Azure subscription to create your own client credentials. -{% endtip %} - -Make sure to configure the following settings on the app registration: - -- **Supported account types**: Personal Microsoft accounts only -- **Redirect URI**: Type: `Web`, URL: `https://my.home-assistant.io/redirect/oauth` - -Configuring a custom app. - - -{% note %} -If you set the integration up with the default credentials and switch to custom credentials later, your backup folder will change inside your OneDrive, and you will have to manually copy existing backups from the old folder to the new one. -{% endnote %} - -## Backup folder is called `Graph` - -This integration uses Microsoft's Graph API to communicate with your OneDrive. Because of an [issue](https://github.com/OneDrive/onedrive-api-docs/issues/1866) in that API, the application folder is often not named with the name of the application (`Home Assistant`), but `Graph` instead. - -There is no risk of different applications mixing in that `Graph` folder, if you already have such a `Graph` folder from a different application, the next folders will just be called `Graph 1`, `Graph 2` and so on. - -You should be able to manually rename the folder to something else, without the integration breaking. - ## Sensors The integration provides the following sensors, which are updated every 5 minutes: @@ -145,6 +123,30 @@ mode: single {% enddetails %} +## Getting application credentials + +This integration comes with a predefined set of [application credentials](https://www.home-assistant.io/integrations/application_credentials/) through Home Assistant account linking. This means you should not need to provide credentials, but get redirected to Microsoft's sign-in page. + +Even if you use the default credentials, nobody will ever have access to your data except you, as the app does not have permission to do anything on its own. It only works with a signed-in user (it only has `delegated` not `application permissions`). + +However, if you want to use your own credentials, follow [this guide](https://learn.microsoft.com/en-us/entra/identity-platform/quickstart-register-app?tabs=certificate) to create your own client ID and secret. + +{% tip %} +You will need an Azure tenant with an active Azure subscription to create your own client credentials. +{% endtip %} + +Make sure to configure the following settings on the app registration: + +- **Supported account types**: Personal Microsoft accounts only +- **Redirect URI**: Type: `Web`, URL: `https://my.home-assistant.io/redirect/oauth` + +Configuring a custom app. + + +{% note %} +If you set the integration up with the default credentials and switch to custom credentials later, your backup folder will change inside your OneDrive, and you will have to manually copy existing backups from the old folder to the new one. +{% endnote %} + ## Known limitations - Only personal OneDrives are supported at the moment. @@ -160,3 +162,7 @@ This integration follows standard integration removal. No extra steps are requir {% details "Unknown error while adding the integration" %} Make sure that your OneDrive is not frozen. This can happen if you haven't used it for a longer period of time, or went over your data quota. {% enddetails %} + +{% details "Default credentials not available" %} + +If the integration asks you for a `client ID` and a `client secret`, that likely means you disabled part of the `default_config` in your Home Assistant configuration. For account linking to work you'll need `my` & `cloud` integrations loaded. {% enddetails %} From 6977e5a8ed41eac52febc18f8528757930fedaa2 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Thu, 27 Feb 2025 15:33:52 +0000 Subject: [PATCH 013/122] Document how to obtain device logs for ESPHome (#37739) Co-authored-by: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com> --- source/_integrations/esphome.markdown | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/source/_integrations/esphome.markdown b/source/_integrations/esphome.markdown index 0eef4080528..11c0552bdc1 100644 --- a/source/_integrations/esphome.markdown +++ b/source/_integrations/esphome.markdown @@ -95,3 +95,18 @@ sensor: ``` The entity will be named `Temperature` and will default to having an entity_id of `sensor.temperature`. + +## Obtaining logs from the device + +1. To have the device send logs to Home Assistant, in the [options flow](#options), enable `Subscribe to logs from the device`. + - They are logged under the `homeassistant.components.esphome` logger at the equivalent level. + +2. To adjust the logging level, there are two options: + - enable [debug logging](/docs/configuration/troubleshooting/#debug-logs-and-diagnostics), + - or use the [Developer Tools](/docs/tools/dev-tools/#actions-tab) to call the [`logger.set_level`](/integrations/logger/#action-set_level) action to specify the desired level: + + ```yaml + action: logger.set_level + data: + homeassistant.components.esphome: debug + ``` From 88a414060119a5be0a75de699833f8484a73a028 Mon Sep 17 00:00:00 2001 From: Dan Raper Date: Thu, 27 Feb 2025 20:24:11 +0000 Subject: [PATCH 014/122] Add a missing state to enum for ohme (#37736) --- source/_integrations/ohme.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_integrations/ohme.markdown b/source/_integrations/ohme.markdown index aa533eb3987..09e0fa7251a 100644 --- a/source/_integrations/ohme.markdown +++ b/source/_integrations/ohme.markdown @@ -77,7 +77,7 @@ The Ohme integration provides the following entities. #### Sensors - **Status** - - **Description**: Current status of the charger. Possible states: `Unplugged`, `Pending approval`, `Plugged in`, `Charging`. + - **Description**: Current status of the charger. Possible states: `Unplugged`, `Pending approval`, `Plugged in`, `Charging`, `Finished charging`. - **Available for devices**: all - **Power** - **Description**: Power draw from the charger in kW. From fa99f8120c7179e592badd5226aec5f26b8e66a1 Mon Sep 17 00:00:00 2001 From: Artur Pragacz <49985303+arturpragacz@users.noreply.github.com> Date: Fri, 28 Feb 2025 08:10:45 +0100 Subject: [PATCH 015/122] Add sound mode support to Onkyo (#37746) * Add sound mode support to Onkyo * tiny tweak --------- Co-authored-by: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com> --- source/_integrations/onkyo.markdown | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/source/_integrations/onkyo.markdown b/source/_integrations/onkyo.markdown index 034d8cf0cf5..600cae4a25a 100644 --- a/source/_integrations/onkyo.markdown +++ b/source/_integrations/onkyo.markdown @@ -28,9 +28,11 @@ Volume Resolution: description: Number of steps it takes for the receiver to go from the lowest to the highest possible volume. Possible values are 50, 80, 100, 200. For older Onkyo receivers, this typically is 80; newer Onkyo receivers use 200. Input sources: description: List of input sources supported by the receiver. +Listening modes: + description: List of listening modes supported by the receiver. {% endconfiguration_basic %} -The above settings can also be adjusted later. To do this, click the three-dot menu on the integration entry and select **Reconfigure**. +The above settings can also be adjusted later. To change **Host** or **Volume Resolution**, select the three-dot menu on the integration entry and select **Reconfigure**. {% include integrations/option_flow.md %} @@ -39,6 +41,8 @@ Max Volume: description: Maximum volume limit as a percentage. Often the maximum volume of the receiver is far too loud. Setting this will set Home Assistant's 100% volume to be this setting on the amp, i.e., if you set this to 50%, when you set Home Assistant to be 100%, then your receiver will be set to 50% of its maximum volume. Input sources: description: Mappings of input sources to their names. +Listening modes: + description: Mappings of listening modes to their names. {% endconfiguration_basic %} ## Zones From 880c5e5569912a1209d1db45590f801438a73e4e Mon Sep 17 00:00:00 2001 From: Petro31 <35082313+Petro31@users.noreply.github.com> Date: Fri, 28 Feb 2025 07:32:13 -0500 Subject: [PATCH 016/122] add-floor-entities (#37107) --- source/_docs/configuration/templating.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_docs/configuration/templating.markdown b/source/_docs/configuration/templating.markdown index 0ee7d7c73f1..b68cd1d7c6b 100644 --- a/source/_docs/configuration/templating.markdown +++ b/source/_docs/configuration/templating.markdown @@ -473,6 +473,7 @@ The same thing can also be expressed as a test: - `floor_id(lookup_value)` returns the floor ID for a given device ID, entity ID, area ID, or area name. Can also be used as a filter. - `floor_name(lookup_value)` returns the floor name for a given device ID, entity ID, area ID, or floor ID. Can also be used as a filter. - `floor_areas(floor_name_or_id)` returns the list of area IDs tied to a given floor ID or name. Can also be used as a filter. +- `floor_entities(floor_name_or_id)` returns the list of entity IDs tied to a given floor ID or name. Can also be used as a filter. #### Floors examples From a85152e4b7d1c045d6a965177880c546e854c0dc Mon Sep 17 00:00:00 2001 From: pglab-electronics <89299919+pglab-electronics@users.noreply.github.com> Date: Fri, 28 Feb 2025 18:15:48 +0100 Subject: [PATCH 017/122] Add support for sensor in PG LAB documentation. (#37555) Co-authored-by: Pierluigi --- source/_integrations/pglab.markdown | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/source/_integrations/pglab.markdown b/source/_integrations/pglab.markdown index c0c989eaa7c..5cbe441f2f1 100644 --- a/source/_integrations/pglab.markdown +++ b/source/_integrations/pglab.markdown @@ -3,6 +3,7 @@ title: PG LAB Electronics description: Instructions on how to integrate PG LAB Electronics with Home Assistant. ha_category: - Switch + - Sensor ha_release: "2025.3" ha_iot_class: Local Push ha_config_flow: true @@ -11,6 +12,7 @@ ha_codeowners: ha_domain: pglab ha_platforms: - switch + - sensor ha_integration_type: integration --- @@ -49,9 +51,10 @@ Configure each PG LAB Electronics devices following these steps: ## Supported features -PG LAB Electronics relays, shutters, and switches are supported. +PG LAB Electronics relays, sensors, and switches are supported. - PG LAB Relays will be added as Home Assistant `switch` entities. +- PG LAB Sensors will be added as Home Assistant `sensor` entities. - The integration will also create diagnostic status sensors, with device different information. ## Removing the integration From 2a0d4ed38f1a6bf2abbc42267de37c3137430bd1 Mon Sep 17 00:00:00 2001 From: Chris <1105672+firstof9@users.noreply.github.com> Date: Fri, 28 Feb 2025 12:00:48 -0700 Subject: [PATCH 018/122] fix Nextcloud WebDAV example URL (#37752) --- source/_integrations/webdav.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_integrations/webdav.markdown b/source/_integrations/webdav.markdown index b8d622f8532..aa59e525f78 100644 --- a/source/_integrations/webdav.markdown +++ b/source/_integrations/webdav.markdown @@ -36,8 +36,8 @@ Verify SSL: ### Common WebDAV URLs -- [Nextcloud](https://nextcloud.com/): `https:///remote.php/dav/files//` -- [Owncloud](https://owncloud.com/): `https:///remote.php/dav/files//` +- [Nextcloud](https://nextcloud.com/): `https:///remote.php/webdav/` +- [Owncloud](https://owncloud.com/): `https:///remote.php/webdav/` - [Hetzner Storage Box](https://www.hetzner.com/storage/storage-box): `https://.your-storagebox.de` - [Strato HiDrive](https://www.strato.de/): `https://webdav.hidrive.strato.com` From 2e606b8fd2f15d2f36e93adc4a1bec0f117a68a1 Mon Sep 17 00:00:00 2001 From: Jan Bouwhuis Date: Sat, 1 Mar 2025 21:14:18 +0100 Subject: [PATCH 019/122] Improved MQTT broker certificate configuration (#37277) * Improved MQTT broker certificate configuration * Improve --- source/_integrations/mqtt.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_integrations/mqtt.markdown b/source/_integrations/mqtt.markdown index b00d3ac5dfe..1bc09a99b2d 100644 --- a/source/_integrations/mqtt.markdown +++ b/source/_integrations/mqtt.markdown @@ -185,7 +185,7 @@ The time in seconds between sending keep alive messages for this client. The def #### Broker certificate validation -To enable a secure connection to the broker, the broker certificate should be validated. If your broker uses a trusted certificate, then choose `Auto`. This will allow validation against certificate CAs bundled certificates. If a self-signed certificate is used, select `Custom`. A custom PEM-encoded CA certificate can be uploaded. Click `NEXT` to show the control to upload the CA certificate. +To enable a secure connection to the broker, the broker certificate should be validated. If your broker uses a trusted certificate, then choose `Auto`. This will allow validation against certificate CAs bundled certificates. If a self-signed certificate is used, select `Custom`. A custom PEM- or DER-encoded CA certificate can be uploaded. Click `NEXT` to show the control to upload the CA certificate. If the server certificate does not match the hostname then validation will fail. To allow a connection without the verification of the hostname, turn the `Ignore broker certificate validation` switch on. #### MQTT Protocol @@ -194,7 +194,7 @@ The MQTT protocol setting defaults to version `3.1.1`. If your MQTT broker suppo #### Securing the connection -With a secure broker connection it is possible to use a client certificate for authentication. To set the client certificate and private key turn on the option `Use a client certificate` and click "Next" to show the controls to upload the files. Only a PEM encoded client certificates together with a PEM encoded private key can be uploaded. Make sure the private key has no password set. +With a secure broker connection, it is possible to use a client certificate for authentication. To set the client certificate and private key turn on the option `Use a client certificate` and click "Next" to reveal file upload controls. A client certificate and the corresponding private key must be uploaded together. Both client certificate and private key must be either PEM- or DER-encoded. If the private key is encrypted with a password, ensure you supply the correct password when uploading the client certificate and key files. #### Using WebSockets as transport From 3b2fa32a1230be2957152259e9f6281d83f56578 Mon Sep 17 00:00:00 2001 From: Manu <4445816+tr4nt0r@users.noreply.github.com> Date: Sat, 1 Mar 2025 22:27:40 +0100 Subject: [PATCH 020/122] Add create_rewards action to Habitica (#37705) --- source/_integrations/habitica.markdown | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/source/_integrations/habitica.markdown b/source/_integrations/habitica.markdown index db20615549f..4ff8ffc1e86 100644 --- a/source/_integrations/habitica.markdown +++ b/source/_integrations/habitica.markdown @@ -296,6 +296,19 @@ Updates a specific reward for the selected Habitica character. | `remove_tag` | yes | Remove tags from the Habitica reward. | | `alias` | yes | A task alias can be used instead of the name or task ID. Only dashes, underscores, and alphanumeric characters are supported. The task alias must be unique among all your tasks. | +### Action `habitica.create_reward` + +Creates a reward for the selected Habitica character. + +| Data attribute | Optional | Description | +| -------------- | -------- | -------------------------------------------------------------------------------------------- | +| `config_entry` | no | Select the Habitica account to create a reward. | +| `name` | no | The title for the Habitica reward. | +| `notes` | yes | The notes for the Habitica reward. | +| `cost` | no | The cost of the reward. | +| `tag` | yes | Add tags to the Habitica reward. If a tag does not already exist, a new one will be created. | +| `alias` | yes | A task alias can be used instead of the name or task ID. Only dashes, underscores, and alphanumeric characters are supported. The task alias must be unique among all your tasks. | + ## Automations Get started with these automation examples for Habitica, each featuring ready-to-use blueprints! From d22a7e2173e61ef6c461dd155584f1aeb395a0c8 Mon Sep 17 00:00:00 2001 From: Tatham Oddie Date: Sun, 2 Mar 2025 09:10:32 +1000 Subject: [PATCH 021/122] Introduce demo valve (#37391) --- source/_integrations/demo.markdown | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/_integrations/demo.markdown b/source/_integrations/demo.markdown index 51220503363..0e40663f820 100644 --- a/source/_integrations/demo.markdown +++ b/source/_integrations/demo.markdown @@ -42,6 +42,7 @@ ha_platforms: - tts - update - vacuum + - valve - water_heater - weather ha_integration_type: integration @@ -81,6 +82,7 @@ Available demo platforms: - [Text-to-speech](/integrations/tts/) (`tts`) - [Update](/integrations/update/) (`update`) - [Vacuum](/integrations/vacuum/) (`vacuum`) +- [Valve](/integrations/valve/) (`valve`) - [Water heater](/integrations/water_heater/) (`water_heater`) - [Weather](/integrations/weather/) (`weather`) From 4e3e838830fa091c11f4cef047363b070a3452b3 Mon Sep 17 00:00:00 2001 From: Joris Drenth Date: Sun, 2 Mar 2025 12:15:27 +0100 Subject: [PATCH 022/122] Update Wallbox integration docs with solar charging (#37700) --- source/_integrations/wallbox.markdown | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/source/_integrations/wallbox.markdown b/source/_integrations/wallbox.markdown index 0e12fa7f446..a820877b9ae 100644 --- a/source/_integrations/wallbox.markdown +++ b/source/_integrations/wallbox.markdown @@ -9,6 +9,7 @@ ha_domain: wallbox ha_platforms: - lock - number + - select - sensor - switch ha_config_flow: true @@ -54,6 +55,10 @@ The number {% term entity %} is only loaded if the supplied username has suffici The {% term integration %} adds a lock {% term entity %}, allowing you to lock the charger. Please note, this only works with a user with admin rights. +## Select + +The {% term integration %} adds a select {% term entity %} to control Solar Charging options, allowing you to choose between Eco Mode, Full Solar or disable Solar Charging. + ## Switch The {% term integration %} adds a switch {% term entity %}, allowing you to pause/resume the charging process. From 0f44f20ea18c7f2912821ea73c8b5750151b2006 Mon Sep 17 00:00:00 2001 From: Manu <4445816+tr4nt0r@users.noreply.github.com> Date: Sun, 2 Mar 2025 14:04:31 +0100 Subject: [PATCH 023/122] Add update_habit action (#37707) --- source/_integrations/habitica.markdown | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/source/_integrations/habitica.markdown b/source/_integrations/habitica.markdown index 4ff8ffc1e86..877cb5fc445 100644 --- a/source/_integrations/habitica.markdown +++ b/source/_integrations/habitica.markdown @@ -309,6 +309,25 @@ Creates a reward for the selected Habitica character. | `tag` | yes | Add tags to the Habitica reward. If a tag does not already exist, a new one will be created. | | `alias` | yes | A task alias can be used instead of the name or task ID. Only dashes, underscores, and alphanumeric characters are supported. The task alias must be unique among all your tasks. | +### Action `habitica.update_habit` + +Updates a specific habit for the selected Habitica character. + +| Data attribute | Optional | Description | +| -------------- | -------- | -------------------------------------------------------------------------------------------- | +| `config_entry` | no | Select the Habitica account to update a habit. | +| `task` | no | The name (or task ID) of the habit you want to update. | +| `rename` | yes | The new title for the Habitica habit. | +| `notes` | yes | The new notes for the Habitica habit. | +| `up_down` | yes | Update if the habit is good and rewarding (positive), bad and penalizing (negative) or both. Valid values: `up`, `down`, or `[up, down]` | +| `priority` | yes | Update the difficulty of a habit. Valid values: `trivial`, `easy`, `medium`, `hard` | +| `frequency` | yes | Update when a habit's counter resets. Valid values: `daily`, `weekly`, `monthly` | +| `tag` | yes | Add tags to the Habitica habit. If a tag does not already exist, a new one will be created. | +| `remove_tag` | yes | Remove tags from the Habitica habit. | +| `counter_up` | yes | Update the up counter of a positive habit. | +| `counter_down` | yes | Update the down counter of a negative habit. | +| `alias` | yes | A task alias can be used instead of the name or task ID. Only dashes, underscores, and alphanumeric characters are supported. The task alias must be unique among all your tasks. | + ## Automations Get started with these automation examples for Habitica, each featuring ready-to-use blueprints! From 5b2c2385ce77edaa89be41c52e191bdb405b5672 Mon Sep 17 00:00:00 2001 From: Maciej Bieniek Date: Sun, 2 Mar 2025 14:16:49 +0100 Subject: [PATCH 024/122] Add FrankEver virtual integration docs (#37773) * Add FrankEver virtual integration docs * Update source/_integrations/frankever.markdown --------- Co-authored-by: Franck Nijhof --- source/_integrations/frankever.markdown | 49 +++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 source/_integrations/frankever.markdown diff --git a/source/_integrations/frankever.markdown b/source/_integrations/frankever.markdown new file mode 100644 index 00000000000..4da40a21c3e --- /dev/null +++ b/source/_integrations/frankever.markdown @@ -0,0 +1,49 @@ +--- +title: FrankEver +description: Integrate FrankEver (Powered by Shelly) devices +ha_category: + - Binary sensor + - Climate + - Cover + - Energy + - Event + - Light + - Number + - Select + - Sensor + - Switch + - Text + - Update + - Valve +ha_release: '0.115' +ha_codeowners: + - '@balloob' + - '@bieniu' + - '@thecode' + - '@chemelli74' + - '@bdraco' +ha_iot_class: Local Push +ha_domain: frankever +ha_config_flow: true +ha_zeroconf: true +ha_platforms: + - binary_sensor + - button + - climate + - cover + - diagnostics + - event + - light + - number + - select + - sensor + - switch + - text + - update + - valve +ha_integration_type: virtual +ha_supporting_domain: shelly +ha_supporting_integration: Shelly +--- + +{% include integrations/supported_brand.md %} From eefe03e3d1ad4ec9127c9405d5092da7e58fe1ee Mon Sep 17 00:00:00 2001 From: Maciej Bieniek Date: Sun, 2 Mar 2025 14:20:42 +0100 Subject: [PATCH 025/122] Add LinkedGo virtual integration docs (#37772) * Add LinkedGo virtual integration docs * Remove empty line * Add Powered by Shelly * Fix ha_release --- source/_integrations/linkedgo.markdown | 49 ++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 source/_integrations/linkedgo.markdown diff --git a/source/_integrations/linkedgo.markdown b/source/_integrations/linkedgo.markdown new file mode 100644 index 00000000000..96243799b2c --- /dev/null +++ b/source/_integrations/linkedgo.markdown @@ -0,0 +1,49 @@ +--- +title: LinkedGo +description: Integrate LinkedGo (Powered by Shelly) devices +ha_category: + - Binary sensor + - Climate + - Cover + - Energy + - Event + - Light + - Number + - Select + - Sensor + - Switch + - Text + - Update + - Valve +ha_release: '0.115' +ha_codeowners: + - '@balloob' + - '@bieniu' + - '@thecode' + - '@chemelli74' + - '@bdraco' +ha_iot_class: Local Push +ha_domain: linkedgo +ha_config_flow: true +ha_zeroconf: true +ha_platforms: + - binary_sensor + - button + - climate + - cover + - diagnostics + - event + - light + - number + - select + - sensor + - switch + - text + - update + - valve +ha_integration_type: virtual +ha_supporting_domain: shelly +ha_supporting_integration: Shelly +--- + +{% include integrations/supported_brand.md %} From 56f6e5cbf8b41149d83a7ef1a3ebb700d8c10d9d Mon Sep 17 00:00:00 2001 From: Manu <4445816+tr4nt0r@users.noreply.github.com> Date: Sun, 2 Mar 2025 16:46:05 +0100 Subject: [PATCH 026/122] Update pyLoad configuration parameters (#37680) * Update pyLoad configuration parameters * uppcase http * typo --- source/_integrations/pyload.markdown | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/source/_integrations/pyload.markdown b/source/_integrations/pyload.markdown index 451c4be167f..16f022aae31 100644 --- a/source/_integrations/pyload.markdown +++ b/source/_integrations/pyload.markdown @@ -39,8 +39,7 @@ If you haven't set up pyLoad yet, an easy way to get it up and running is by ins - During the setup process in Home Assistant, you will need: - pyLoad account credentials – A valid *username* and *password* to authenticate with pyLoad. - - The {% term host %} of the device running pyLoad. - - The port number that pyLoad is listening on (default is usually `8000`). + - The full URL of your pyLoad web interface, including the protocol (HTTP or HTTPS), hostname or IP address, port (pyLoad uses 8000 by default), and any path prefix if applicable. {% note %} @@ -53,12 +52,8 @@ The account used for integration must either be an admin account or one with at ### Configuration parameters {% configuration_basic %} -Host: - description: "The hostname or IP address of the device running your pyLoad instance." -Port: - description: "The port of the pyLoad instance. pyLoad uses port 8000 by default." -Uses an SSL Certificate: - description: "If enabled, the connection to the pyLoad instance will use HTTPS." +URL: + description: "The full URL of the pyLoad web interface, including the protocol (HTTP or HTTPS), hostname or IP address, port, and any path prefix if applicable. Example: `https://example.com:8000/path`" Verify SSL certificate: description: "If checked, the SSL certificate will be validated to ensure a secure connection." Username: From 6b2e98bbba613f683f2a759842e9a32172ad6fc4 Mon Sep 17 00:00:00 2001 From: karwosts <32912880+karwosts@users.noreply.github.com> Date: Sun, 2 Mar 2025 12:16:06 -0800 Subject: [PATCH 027/122] Add model_id to device filters (#36926) * Update selectors.markdown * tiny rephrase * Update source/_docs/blueprint/selectors.markdown --------- Co-authored-by: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com> --- source/_docs/blueprint/selectors.markdown | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/source/_docs/blueprint/selectors.markdown b/source/_docs/blueprint/selectors.markdown index ea5d7f82503..822ded95bb0 100644 --- a/source/_docs/blueprint/selectors.markdown +++ b/source/_docs/blueprint/selectors.markdown @@ -150,6 +150,12 @@ device: the set model. type: string required: false + model_id: + description: > + When set, the list of areas is limited to areas with devices that have + the set model ID. + type: string + required: false entity: description: > When entity options are provided, the list of areas is filtered by areas @@ -485,7 +491,7 @@ devices based on the selector configuration. The value of the input will contain the device ID or a list of device IDs, based on if `multiple` is set to `true`. A device selector can filter the list of devices, based on things like the -manufacturer or model of the device, the entities the device provides or based +manufacturer, model, or model ID of the device, the entities the device provides or based on the domain that provided the device. ![Screenshot of a device selector](/images/blueprints/selector-device.png) @@ -561,6 +567,11 @@ filter: When set, it limits the list of devices to devices that have the set model. type: string required: false + model_id: + description: > + When set, the list of devices is limited to devices that have the set model ID. + type: string + required: false multiple: description: > Allows selecting multiple devices. If set to `true`, the resulting value of @@ -792,6 +803,12 @@ device: the set model. type: string required: false + model_id: + description: > + When set, the list only includes floors with devices that have + the set model ID. + type: string + required: false entity: description: > When entity options are provided, the list only includes floors @@ -1342,6 +1359,10 @@ device: description: When set, it limits the targets to devices by the set model. type: string required: false + model_id: + description: When set, the targets are limited to devices that have the set model ID. + type: string + required: false entity: description: > When entity options are provided, the targets are limited by entities From 8a8556449e8fea1275492036022b3515ff17efcb Mon Sep 17 00:00:00 2001 From: hydazz <53986978+hydazz@users.noreply.github.com> Date: Mon, 3 Mar 2025 07:59:50 +1100 Subject: [PATCH 028/122] add mysleep$aver switch (#37319) --- source/_integrations/advantage_air.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_integrations/advantage_air.markdown b/source/_integrations/advantage_air.markdown index 45ec2fb5538..b3abacc71e6 100644 --- a/source/_integrations/advantage_air.markdown +++ b/source/_integrations/advantage_air.markdown @@ -68,7 +68,7 @@ The integration will create a binary sensor for each zone that has a motion sens ### Switch -The integration will create switch entities to toggle the MyFan/ezFan setting, and to toggle air conditioning fresh air mode, if they are supported by your hardware. +The integration will create switch entities to toggle the MyFan/ezFan setting, to toggle air conditioning fresh air mode, and to toggle MySleep$aver, if they are supported by your hardware. With MyPlace, any relays will be created as switch entities. From afe0c0a07b78bc0f9841e15bdb0ea6e0970a09c1 Mon Sep 17 00:00:00 2001 From: Nathan Spencer Date: Sun, 2 Mar 2025 14:28:10 -0700 Subject: [PATCH 029/122] Update balboa docs to include fault event entity (#37484) * Update balboa docs to include fault sensor entity * Use event instead of sensor --- source/_integrations/balboa.markdown | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/_integrations/balboa.markdown b/source/_integrations/balboa.markdown index 584eaf61077..a5f3624f350 100644 --- a/source/_integrations/balboa.markdown +++ b/source/_integrations/balboa.markdown @@ -13,6 +13,7 @@ ha_domain: balboa ha_platforms: - binary_sensor - climate + - event - fan - light - select @@ -32,6 +33,7 @@ There is currently support for the following device types within Home Assistant: - Binary sensor (Filter cycles and circulation pumps) - Climate +- Event (Last known fault, if any) - Fan (Pumps/Jets) - Light - Select (Low/high temperature range) From 353228cbe2d43bf5cae8d1bf1acc63807b78434e Mon Sep 17 00:00:00 2001 From: StaleLoafOfBread <45444205+StaleLoafOfBread@users.noreply.github.com> Date: Mon, 3 Mar 2025 14:22:09 -0500 Subject: [PATCH 030/122] Add charging binary_sensor documentation (#37777) --- source/_integrations/roborock.markdown | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/_integrations/roborock.markdown b/source/_integrations/roborock.markdown index f76fc31e916..9a5bfd35c49 100644 --- a/source/_integrations/roborock.markdown +++ b/source/_integrations/roborock.markdown @@ -57,6 +57,8 @@ Mop intensity - How hard you would like your vacuum to mop. ### Binary sensor +Charging - States if the vacuum is currently charging or not. + Cleaning - States if the vacuum has a clean currently active. This is on when the robot is actively moving around or when the robot returns to the dock when the battery is low but a clean is still active and will resume later. Mop attached - States if the mop is currently attached. From d050c857eb77ec149842582f4d39631197817430 Mon Sep 17 00:00:00 2001 From: Joshua Leaper Date: Tue, 4 Mar 2025 14:30:55 +1030 Subject: [PATCH 031/122] Add Support for 8 Aux Outputs (#37785) --- source/_integrations/ness_alarm.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_integrations/ness_alarm.markdown b/source/_integrations/ness_alarm.markdown index 999d7a4e498..6dcdadea4c7 100644 --- a/source/_integrations/ness_alarm.markdown +++ b/source/_integrations/ness_alarm.markdown @@ -124,7 +124,7 @@ Trigger an aux output. This requires PCB version 7.8 or higher. | Data attribute | Optional | Description | | ---------------------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `output_id` | No | The aux output you wish to change. A number from 1-4. | +| `output_id` | No | The aux output you wish to change. A number from 1-8. | | `state` | Yes | The On/Off State, represented as true/false. Default is true. If P14xE 8E is enabled then a value of true will pulse output x for the time specified in P14(x+4)E. | ### Action `panic` From 1a2f6cf65fbcba05d5d4dab8f6dff8dbbc40c20f Mon Sep 17 00:00:00 2001 From: Joost Lekkerkerker Date: Tue, 4 Mar 2025 15:17:48 +0100 Subject: [PATCH 032/122] Add Apollo Automation documentation (#37791) * Add Apollo Automation documentation * Add Apollo Automation documentation * Apply suggestions from code review Co-authored-by: Franck Nijhof * Update source/_integrations/apollo_automation.markdown Co-authored-by: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com> * Update source/_integrations/apollo_automation.markdown Co-authored-by: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com> --------- Co-authored-by: Franck Nijhof Co-authored-by: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com> --- .../_integrations/apollo_automation.markdown | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 source/_integrations/apollo_automation.markdown diff --git a/source/_integrations/apollo_automation.markdown b/source/_integrations/apollo_automation.markdown new file mode 100644 index 00000000000..5024f83245f --- /dev/null +++ b/source/_integrations/apollo_automation.markdown @@ -0,0 +1,31 @@ +--- +title: Apollo Automation +description: Connect and control your Apollo Automation ESPHome devices using the ESPHome integration +ha_release: '2025.3' +ha_iot_class: Local Push +ha_category: + - Sensor + - Presence detection +ha_domain: apollo_automation +ha_integration_type: brand +ha_supporting_domain: esphome +ha_supporting_integration: ESPHome +ha_platforms: + - sensor +works_with: + - local +--- + +[Apollo automation](https://apolloautomation.com/) is a member of the Made for ESPHome program. + +Apollo Automation devices work locally and integrate seamlessly with the [ESPHome](/integrations/esphome/) {% term integration %} in Home Assistant. As all connectivity is done locally, status updates and device control from Home Assistant happen instantly. + +{% include integrations/supported_brand.md %} + +## Supported devices + +The following devices are known to be supported by the integration. They are certified under the [Works with Home Assistant](https://partner.home-assistant.io/) program. + +- [MTR-1 Multi-Target Radar Multisensor For Home Assistant (LD2450)](https://apolloautomation.com/products/mtr-1) - A tiny, but powerful radar-based (mmWave) presence sensor that can pack in many other sensors. +- [MSR-2 mmWave Multisensor For Home Assistant (LD2410B)](https://apolloautomation.com/products/msr-2) - An even smaller multisensor that is the successor of the initial community feedback-driven design. +- [AIR-1 Air Quality Sensor For Home Assistant](https://apolloautomation.com/products/air-1) - A small air quality multisensor that can be extended to incorporate a huge variety of sensors. From 4f1c48313c5f21ec98c679b2f578c8a81e4f6d36 Mon Sep 17 00:00:00 2001 From: Manu <4445816+tr4nt0r@users.noreply.github.com> Date: Wed, 5 Mar 2025 06:39:33 +0100 Subject: [PATCH 033/122] create_habit action (#37776) --- source/_integrations/habitica.markdown | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/source/_integrations/habitica.markdown b/source/_integrations/habitica.markdown index 877cb5fc445..73231240cf7 100644 --- a/source/_integrations/habitica.markdown +++ b/source/_integrations/habitica.markdown @@ -328,6 +328,21 @@ Updates a specific habit for the selected Habitica character. | `counter_down` | yes | Update the down counter of a negative habit. | | `alias` | yes | A task alias can be used instead of the name or task ID. Only dashes, underscores, and alphanumeric characters are supported. The task alias must be unique among all your tasks. | +### Action `habitica.create_habit` + +Creates a habit for the selected Habitica character. + +| Data attribute | Optional | Description | +| -------------- | -------- | -------------------------------------------------------------------------------------------- | +| `config_entry` | no | Select the Habitica account to create a habit. | +| `name` | no | The title for the Habitica habit. | +| `notes` | yes | The notes for the Habitica habit. | +| `up_down` | yes | Defines if the habit is good and rewarding (positive), bad and penalizing (negative) or both. Valid values: `up`, `down`, or `[up, down]` | +| `priority` | yes | Sets the difficulty of the habit. Valid values: `trivial`, `easy`, `medium`, `hard`. Default: `easy` | +| `frequency` | yes | Defines when the habit's counter resets. Valid values: `daily`, `weekly`, `monthly`. Default: `daily` | +| `tag` | yes | Add tags to the Habitica habit. If a tag does not already exist, a new one will be created. | +| `alias` | yes | A task alias can be used instead of the name or task ID. Only dashes, underscores, and alphanumeric characters are supported. The task alias must be unique among all your tasks. | + ## Automations Get started with these automation examples for Habitica, each featuring ready-to-use blueprints! From 08c25a036537aa7d1e142ed3607ad5f12b73eb64 Mon Sep 17 00:00:00 2001 From: SteveDiks <126147459+SteveDiks@users.noreply.github.com> Date: Wed, 5 Mar 2025 10:37:31 +0100 Subject: [PATCH 034/122] Updated the Weheat data rate documentation (#37715) * Updated the Weheat data rate documentation * Update source/_integrations/weheat.markdown Co-authored-by: Franck Nijhof --------- Co-authored-by: Franck Nijhof --- source/_integrations/weheat.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_integrations/weheat.markdown b/source/_integrations/weheat.markdown index 4be775ebe6c..8723fe86250 100644 --- a/source/_integrations/weheat.markdown +++ b/source/_integrations/weheat.markdown @@ -67,7 +67,7 @@ Depending on the model/installation, states for the Indoor Unit states are avail ## Data updates -The integration is {% term polling %} and retrieves data every 30 seconds from the cloud. +The integration uses {% term polling %} to retrieve data every 120 seconds for a single heat pump. This interval increases proportionally with the number of heat pumps, for example, to 240 seconds for two heat pumps. Additionally, energy data is retrieved from the cloud every 1800 seconds. ## Actions From 3abd427227d665827126f50c6a2146ef5731670b Mon Sep 17 00:00:00 2001 From: Michael <35783820+mib1185@users.noreply.github.com> Date: Wed, 5 Mar 2025 11:04:07 +0100 Subject: [PATCH 035/122] Remove beta flag from Matter integration (#37810) * remove beta flag from matter integration * Update water.markdown --- source/_docs/energy/water.markdown | 2 +- source/_integrations/matter.markdown | 16 ++++++---------- 2 files changed, 7 insertions(+), 11 deletions(-) diff --git a/source/_docs/energy/water.markdown b/source/_docs/energy/water.markdown index 1db39015429..e26f36e6519 100644 --- a/source/_docs/energy/water.markdown +++ b/source/_docs/energy/water.markdown @@ -35,7 +35,7 @@ There are also products for water usage monitoring that are based on existing co - [Z-Wave](/integrations/zwave_js) - [Zigbee](/integrations/zha) -- [Matter (BETA)](/integrations/matter) +- [Matter](/integrations/matter) ## Community-made sensors diff --git a/source/_integrations/matter.markdown b/source/_integrations/matter.markdown index 58237d17116..63fd2b3bfba 100644 --- a/source/_integrations/matter.markdown +++ b/source/_integrations/matter.markdown @@ -1,5 +1,5 @@ --- -title: Matter (BETA) +title: Matter description: Instructions on how to integrate Matter with Home Assistant. ha_category: - Binary sensor @@ -54,10 +54,6 @@ The Matter integration allows you to control Matter devices on your local Wi-Fi For communicating with Matter devices, the Home Assistant integration runs its own "Matter controller" as add-on. This Matter Server add-on runs the controller software as a separate process and connects your Matter network (called Fabric in technical terms) and Home Assistant. The Home Assistant Matter integration connects to this server via a WebSocket connection. -{% warning %} -The integration is marked BETA: Both the Matter standard itself and its implementation within Home Assistant are in an early stage. You may run into compatibility issues and/or other bugs. -{% endwarning %} - # Introduction - What is Matter? Matter is a new smart home connectivity standard for home automation products and IoT (Internet of Things) devices, see its [Wikipedia article](https://en.wikipedia.org/wiki/Matter_(standard)). @@ -125,7 +121,7 @@ Make sure you have all these components ready before trying to add a Matter devi - Make sure you have the latest version of Home Assistant [installed](/installation/). - In Home Assistant, have the Matter integration installed. - Go to {% my integrations title="**Settings** > **Devices & services**" %}. - - Add the **Matter (BETA)** integration. + - Add the **Matter** integration. - When prompted to **Select the connection method**: - If you run Home Assistant OS in a regular setup: select **Submit**. - This will install the official Matter server add-on. @@ -250,7 +246,7 @@ Use one of these methods if your Matter device was added to Apple Home or Google - Have the Matter device integrated to Apple Home or Google Home respectively - In Home Assistant, have the Matter integration installed. - Go to {% my integrations title="**Settings** > **Devices & services**" %}. - - Add the **Matter (BETA)** integration. + - Add the **Matter** integration. - When prompted to **Select the connection method**: - If you run Home Assistant OS in a regular setup: select **Submit**. - This will install the official Matter server add-on. @@ -297,7 +293,7 @@ In some cases, bridging devices into Home Assistant via Matter might not bring y Follow these steps if you have added a Matter device to Home Assistant and you want to make it available in an other platform, such as Google Home or Apple Home. -1. Go to {% my integrations title="**Settings** > **Devices & services**" %} and on the **Matter (BETA)** integration card, select **Devices**. +1. Go to {% my integrations title="**Settings** > **Devices & services**" %} and on the **Matter** integration card, select **Devices**. 2. From the list of devices, select the device you want to share. 3. Select **Share device**, then in the dialog, select **Share device** again. - There is no need to press a hardware button on the device to set it to commissioning mode. @@ -312,7 +308,7 @@ Follow these steps if you have added a Matter device to Home Assistant and you w Follow these steps if you want to remove a device from a particular Matter controller. -1. Go to {% my integrations title="**Settings** > **Devices & services**" %} and on the **Matter (BETA)** integration card, select **Devices**. +1. Go to {% my integrations title="**Settings** > **Devices & services**" %} and on the **Matter** integration card, select **Devices**. 2. From the list of devices, select the device you want to remove from a controller. 3. In the **Device info** section, next to **Share device**, select the three-dot menu. Then, select **Manage fabrics**. 4. From the list, remove the controller of interest. @@ -324,7 +320,7 @@ Follow these steps if you want to remove a device from a particular Matter contr The device information section provides some diagnostic information of a device. -1. To view the device details, go to {% my integrations title="**Settings** > **Devices & services**" %} and on the **Matter (BETA)** integration card, select **Devices**. +1. To view the device details, go to {% my integrations title="**Settings** > **Devices & services**" %} and on the **Matter** integration card, select **Devices**. 2. From the list of devices, select the device you want to look at.

From 08a4567b3c86b11688c7b71eeda6a63eac0ac25e Mon Sep 17 00:00:00 2001 From: Dan Raper Date: Wed, 5 Mar 2025 10:25:56 +0000 Subject: [PATCH 036/122] Add vehicle select to ohme (#37799) --- source/_integrations/ohme.markdown | 3 +++ 1 file changed, 3 insertions(+) diff --git a/source/_integrations/ohme.markdown b/source/_integrations/ohme.markdown index 09e0fa7251a..0213752b0eb 100644 --- a/source/_integrations/ohme.markdown +++ b/source/_integrations/ohme.markdown @@ -73,6 +73,9 @@ The Ohme integration provides the following entities. - **Charger mode** - **Description**: Sets the mode of the charger. Possible options: `Smart charge`, `Max charge`, `Paused`. This is only available with a vehicle plugged in. - **Available for devices**: all +- **Vehicle** + - **Description**: Select the vehicle to charge. This will show vehicles configured in the Ohme app. + - **Available for devices**: all #### Sensors From 4be127d7e19906720f28d8b8410cf7a5b83df4e7 Mon Sep 17 00:00:00 2001 From: Allen Porter Date: Wed, 5 Mar 2025 05:53:26 -0800 Subject: [PATCH 037/122] Revert "add roborock scene support (#37286)" (#37814) This reverts commit dc1c2ba09ca3b6065ff914412418fbd448655a6e. --- source/_integrations/roborock.markdown | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/source/_integrations/roborock.markdown b/source/_integrations/roborock.markdown index 9a5bfd35c49..a3b7aa0ae43 100644 --- a/source/_integrations/roborock.markdown +++ b/source/_integrations/roborock.markdown @@ -34,7 +34,7 @@ ha_integration_type: integration The Roborock integration allows you to control your [Roborock](https://us.roborock.com/pages/robot-vacuum-cleaner) vacuum while using the Roborock app. -This integration requires a continuous cloud connection while using the device. However, excluding map data and scenes, communication between the integration and the device is conducted locally. +This integration requires a continuous cloud connection while using the device. However, excluding map data, communication between the integration and the device is conducted locally. Once you log in with your Roborock account, the integration will automatically discover your Roborock devices and get the needed information to communicate locally with them. Please ensure your Home Assistant instance can communicate with the local IP of your device. We recommend setting a static IP for your Roborock Vacuum to help prevent future issues. The device communicates on port 58867. Depending on your firewall, you may need to allow communication from Home Assistant to your vacuum on that port. @@ -132,10 +132,6 @@ Reset main brush consumable - The main brush/ roller is expected to be replaced Reset air filter - The air filter is expected to be replaced every 150 hours. -### Scene - -For every scene/routine/program you define for your vacuum, a scene entity will be created to activate it. - ### Actions #### Action `roborock.set_vacuum_goto_position` From 6bad0b297f63377e37477b7c9c5387cd807b8208 Mon Sep 17 00:00:00 2001 From: Paul Bottein Date: Wed, 5 Mar 2025 15:06:07 +0100 Subject: [PATCH 038/122] Add view header (#37813) * Add view header documentation * Update source/_dashboards/sections.markdown * Update source/_dashboards/sections.markdown * Tiny tweaks --------- Co-authored-by: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com> --- source/_dashboards/sections.markdown | 36 +++++++++++++++++- .../dashboards/sections_view_header_edit.png | Bin 0 -> 9025 bytes .../sections_view_header_editor.png | Bin 0 -> 40102 bytes 3 files changed, 35 insertions(+), 1 deletion(-) create mode 100644 source/images/dashboards/sections_view_header_edit.png create mode 100644 source/images/dashboards/sections_view_header_editor.png diff --git a/source/_dashboards/sections.markdown b/source/_dashboards/sections.markdown index 9e8b8c621f9..c1eff44d04e 100644 --- a/source/_dashboards/sections.markdown +++ b/source/_dashboards/sections.markdown @@ -40,9 +40,24 @@ You can group cards without using horizontal or vertical stack cards. - You are now presented with a new, empty view. - If you chose a background image, the page is filled with that image. +Once you have created a sections view, you can populate it sections and cards. You can also add a header with a title and badges. + +## Editing the header + +

+ Editing the header + Editing the header +

+ +1. To add a title, select the **Add title** button. The title supports [Markdown](https://commonmark.org/help/) and [templating](/docs/configuration/templating/). +2. To add badges, elect the **Add badge** button. Follow [steps on adding badges](/dashboards/badges) to see the different possible options. +3. To change the title and badges disposition, select the edit {% icon "mdi:edit" %} button to access header settings. + +![Edit view heading section button](/images/dashboards/sections_view_header_editor.png) + ## Adding sections and cards to a sections view -Once you have created a sections view, you can populate it with sections and cards. The new section comes with one section to which you can directly add a card. +The view comes with one section to which you can directly add a card. 1. To add a card, select the **Add card** button. - Follow the [steps on adding cards](/dashboards/cards/#adding-cards-to-your-dashboard). @@ -109,3 +124,22 @@ type: description: "`sections`" type: string {% endconfiguration %} + +## Header YAML configuration + +{% configuration %} +layout: + required: false + description: Layout of the different elements. Can be `start`, `center`, or `responsive`. `responsive` is the same as `start` on mobile devices. It places badges and title side by side on desktop. + type: string + default: center +badges_position: + required: false + description: Badges position. Can be `bottom` or `top`. + type: string + default: bottom +card: + required: true + description: Card to be used as title. If you are configuring the view using the visual editor, the configuration of the [Markdown card](/dashboards/markdown) is used. + type: map +{% endconfiguration %} diff --git a/source/images/dashboards/sections_view_header_edit.png b/source/images/dashboards/sections_view_header_edit.png new file mode 100644 index 0000000000000000000000000000000000000000..b0d158be37e06c632afa167e49a785fe42cda439 GIT binary patch literal 9025 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 A%K!iX literal 0 HcmV?d00001 diff --git a/source/images/dashboards/sections_view_header_editor.png b/source/images/dashboards/sections_view_header_editor.png new file mode 100644 index 0000000000000000000000000000000000000000..efb9cbd856af9786d3979b7e5ad7f6acdb209ea3 GIT binary patch literal 40102 zcmeEu^;=Zk`!z9?fP_+lG}7JO-O}A4B@IJ&Dj?kmN_Tg6BVE$cHFU%G_<6$TFL-}? zy=J_|Idk^jXYYI8vDVs#D=A2#zIgKj3JMBUT1xCa6cmg(@Ww-g2fjhkJkNxJg4VJW z6;+ZJ6(v@3v@^G~F@u7ligEeU&M2zn=SkNVpWlj~avS%JSU zuWA!&#z#FB(chU+BK!K!%d=N4k&{RE*d(?DZ}ZfP>uiuy?l`sIW;!Xp{4rJRq<;ld zkQ|j;S_Z1Gs}_Ey<%49SnIzAojJ_&LeTUp;?bZ;jWa^z9SKXCAj8W~O�PDx{zVC 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 Su)j?J_)N~Bj4O Date: Wed, 5 Mar 2025 15:25:57 +0100 Subject: [PATCH 039/122] Update SmartThings documentation (#37780) * Update SmartThings documentation * Update SmartThings documentation * Update SmartThings documentation * Apply suggestions from code review Co-authored-by: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com> * Update SmartThings documentation * change heading level to fix linter * Fix * Fix * Apply suggestions from code review Co-authored-by: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com> * Fix * Apply suggestions from code review --------- Co-authored-by: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com> --- source/_integrations/smartthings.markdown | 349 ++++++---------------- 1 file changed, 97 insertions(+), 252 deletions(-) diff --git a/source/_integrations/smartthings.markdown b/source/_integrations/smartthings.markdown index b0cac8beefe..b4ee518509b 100644 --- a/source/_integrations/smartthings.markdown +++ b/source/_integrations/smartthings.markdown @@ -31,100 +31,17 @@ ha_dhcp: true ha_integration_type: integration --- -{% warning %} -The Samsung SmartThings integration currently does not allow new installations. We are working directly with Samsung to get this resolved. -{% endwarning %} - -SmartThings is integrated into Home Assistant through the SmartThings Cloud API. The features of this integration include: - -1. Controlling SmartThings devices as Home Assistant entities ([see platforms for supported devices and capabilities](#platforms)). -2. Entities automatically synchronized upon restart of Home Assistant when changed in SmartThings. -3. Support for multiple SmartThings accounts and locations with each represented as an integration instance in Home Assistant. -4. No brokers, bridges, or additional dependencies. +[SmartThings](https://www.samsung.com/smartthings/) is a home automation platform for connecting with Samsung or third-party devices. ## Prerequisites -1. A SmartThings [personal access token](https://account.smartthings.com/tokens). -2. An internet accessible incoming webhook or active Home Assistant Cloud subscription. - -### Personal Access Token (PAT) - -The PAT is used to create a Home Assistant SmartApp in your SmartThings account during setup of the integration. - -1. Log into the [personal access tokens page](https://account.smartthings.com/tokens) and select **[Generate new token](https://account.smartthings.com/tokens/new)**. -2. Enter a token name (can be whatever you want), for example, 'Home Assistant' and select the following authorized scopes: - - Devices (all) - - Installed Applications (all) - - Apps (all) - - Locations (all) - - Scenes (all) - - Schedules (all) -3. Select **Generate token**. When the token is displayed copy and save it somewhere safe (such as your keystore) as you will not be able to retrieve it again. - -### Webhook - -This integration requires an internet accessible incoming webhook to receive push updates from SmartThings. The preferred approach is to subscribe to [Home Assistant Cloud (Nabu Casa)](https://www.nabucasa.com/) and the integration will configure and use a cloudhook automatically. Alternatively, you will have to configure and setup an internet accessible webhook in Home Assistant as described below: - -1. Setup [remote access](/docs/configuration/remote/) via a domain name secured with SSL. - 1. *Self-signed SSL certificates are not supported by the SmartThings Cloud API.* - 2. *SmartThings Cloud API requires SSL connection with **maximum** TLS version 1.2* -2. Set the external URL in the Home Assistant [configuration](/integrations/homeassistant/#external_url) to the URL that Home Assistant is available on the internet (this must start with `https://`). If you do not use Nabu Casa you must configure your network to allow TCP traffic from the internet to reach the IP address and port of the device running Home Assistant. - -## Setup instructions - -After completing the prerequisite steps above, you are ready to setup the integration! See [troubleshooting](#troubleshooting) if you are having issues setting up the integration. - +- You need a Samsung account and account credentials. +- To connect devices, you need the SmartThings app installed on your phone. {% include integrations/config_flow.md %} -1. Confirm the callback URL is correct. If using Home Assistant Cloud, it will start with `https://hooks.nabu.casa`. If the URL is not correct, update your Home Assistant configuration, restart, and try again. -2. Enter your Personal Access Token. -3. Select the SmartThings Location to add to Home Assistant. -4. On the window that opens: - 1. Login with your SmartThings account (if not already logged in). - 2. Optionally change the display name and select **Done** at the bottom of the screen. - 3. Authorize the integration by selecting **Allow** on the bottom right of the screen. - 4. Select **Close Window** or close it manually. -5. Back in Home Assistant select **Finish**. - -{% note %} -If you want to integrate additional SmartThings accounts or locations, repeat the steps above. -{% endnote %} - -## Removal instructions - -To remove the integration from Home Assistant, select the instance from the Home Assistant Integrations page and select the trash icon on the upper right corner. Alternatively, you can remove the SmartApp from the location within the SmartThings application. If the Home Assistant instance that setup the integration is no longer running or functioning, you will need to use this [utility to remove the orphaned SmartApps in your SmartThings account](https://pypi.org/project/hass-smartthings-remove/). - -## Events - -The SmartThings integration triggers events for select device capabilities. - -### smartthings.button - -The integration will trigger an event when a device with the [button](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#button) capability is actuated and can be used to trigger automations within Home Assistant. Below is an example of the data payload: - -```json -{ - "component_id": "main", - "device_id": "42a16cf2-fef7-4ee8-b4a6-d32cb65474b7", - "location_id": "2a54b9fa-f66c-42d9-8488-d8f036b980c8", - "value": "pushed", - "name": "Scene Button" -} -``` - -| Attribute | Description | -| -------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `component_id` | Describes which integration of the device triggered the event. `main` represents the parent device. For devices with child-devices, this attribute identifies the child that raised the event. For multi-button devices, the current SmartThings API will no longer pass the ButtonNumber but use a child component_id for each button. The device handler installed on SmartThings must be able to create those child components. | -| `device_id` | The unique id of the device in SmartThings. This can be located in the Home Assistant device registry or in the [SmartThings Developer Workspace](https://smartthings.developer.samsung.com/workspace/). | -| `location_id` | The unique id of the location the device is part of. This can be found in the configuration entry registry or in the [SmartThings Developer Workspace](https://smartthings.developer.samsung.com/workspace/). | -| `value` | Describes the action taken on the button. See the [button](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#button) capability reference for a list of possible values (not all are supported by every device). | -| `name` | The name given to the device in SmartThings. | - -Event data payloads are logged at the debug level, see [debugging](#debugging) for more information. - ## Platforms -SmartThings represents devices as a set of [capabilities](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference) and the SmartThings integration maps those to entity platforms in Home Assistant. A single device may be represented by one or more platforms. +SmartThings represents devices as a set of [capabilities](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference). The SmartThings integration maps those capabilities to entities in Home Assistant. A single device may be represented by one or more entities. - [Binary sensor](#binary-sensor) - [Climate](#climate) @@ -136,22 +53,20 @@ SmartThings represents devices as a set of [capabilities](https://developer.smar - [Scene](#scene) - [Switch](#switch) -Support for additional platforms will be added in the future. - ### Binary sensor -The SmartThings binary sensor platform lets you view devices that have binary sensor-related capabilities. A binary sensor entity will be created for each attribute (below) supported by the device. +In Home Assistant, a binary sensor entity will be created for each of the following SmartThings capabilities: -| Capability | Attribute | On-Value | -| ----------------------------------------------------------------------------------------------------------------------------- | -------------- | ---------- | -| [`accelerationSensor`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#accelerationSensor) | `acceleration` | `active` | -| [`contactSensor`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#contactSensor) | `contact` | `open` | -| [`filterStatus`](https://developer.smartthings.com/docs/devices/capabilities/proposed#filterStatus) | `filterStatus` | `replace` | -| [`motionSensor`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#motionSensor) | `motion` | `active` | -| [`presenceSensor`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#presenceSensor) | `presence` | `present` | -| [`tamperAlert`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#tamperAlert) | `tamper` | `detected` | -| [`valve`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#valve) | `valve` | `open` | -| [`waterSensor`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#waterSensor) | `water` | `wet` | +| SmartThings capability | +|-------------------------------------------------------------------------------------------------------------------------------| +| `accelerationSensor`| +| [`contactSensor`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#contactSensor) | +| [`filterStatus`](https://developer.smartthings.com/docs/devices/capabilities/proposed#filterStatus) | +| [`motionSensor`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#motionSensor) | +| [`presenceSensor`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#presenceSensor) | +| [`tamperAlert`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#tamperAlert) | +| [`valve`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#valve) | +| [`waterSensor`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#waterSensor) | ### Climate @@ -161,8 +76,8 @@ The SmartThings Climate platform lets you control devices that have air conditio For a SmartThings Air Conditioner to be represented by the climate platform, it must have all of the following required capabilities: -| Capability | Climate Features | -| ------------------------------------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| SmartThings capability | Climate Features | +|--------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------| | [`airConditionerMode`](https://developer.smartthings.com/docs/devices/capabilities/proposed#airConditionerMode) (required) | `hvac mode`, `hvac action` | | [`airConditionerFanMode`](https://developer.smartthings.com/docs/devices/capabilities/proposed#airConditionerFanMode) (required) | `fan mode` | | [`temperatureMeasurement`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#temperatureMeasurement) (required) | `temperature` | @@ -173,8 +88,8 @@ For a SmartThings Air Conditioner to be represented by the climate platform, it For a SmartThings thermostat to be represented by the climate platform, it must have all the capabilities from either "set a" _or_ "set b": -| Capability | Climate Features | -| --------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | +| SmartThings capability | Climate Features | +|-----------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------| | [`thermostat`](https://developer.smartthings.com/docs/devices/capabilities/deprecated#thermostat) (set a) | `hvac mode`, `hvac action`, `target temp high`, `target temp low` and `fan mode` | | [`thermostatMode`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#thermostatMode) (set b) | `hvac mode` | | [`thermostatHeatingSetpoint`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#thermostatHeatingSetpoint) (set b) | `target temp high` | @@ -185,13 +100,12 @@ For a SmartThings thermostat to be represented by the climate platform, it must ### Cover -The SmartThings Cover platform lets you control devices that have open/close related capabilities. For a device to be represented by the cover platform, it must have one of the capabilities from "set a" below. +The SmartThings Cover platform lets you control devices that have open/close related capabilities. For a device to be represented by the cover platform, it must either have the `doorControl` or `windowShade` capability. -| Capability | Cover Features | -| -------------------------------------------------------------------------------------------------------------------------- | --------------------------------- | -| [`doorControl`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#doorControl) (set a) | `open` and `close` | -| [`garageDoorControl`](https://developer.smartthings.com/docs/devices/capabilities/deprecated#garageDoorControl) (seb a) | `open` and `close` | -| [`windowShade`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#windowShade) (set a) | `open` and `close` | +| SmartThings capability | Cover Features | +|----------------------------------------------------------------------------------------------------------------------------|-----------------------------------| +| [`doorControl`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#doorControl) | `open` and `close` | +| [`windowShade`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#windowShade) | `open` and `close` | | [`switchLevel`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#switchLevel) | `position` | | [`windowShadeLevel`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference/#windowShadeLevel) | `position` | | [`battery`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#battery) | `battery_level` (state attribute) | @@ -200,19 +114,19 @@ The SmartThings Cover platform lets you control devices that have open/close rel The SmartThings Fan platform lets you control devices that have fan-related capabilities. For a SmartThings device to be represented by the fan platform, it must have one or more of the capabilities below in addition to the [`switch`](https://smartthings.developer.samsung.com/develop/api-ref/capabilities.html#Switch) capability. -| Capability | Fan Features | -| --------------------------------------------------------------------------------------------------------- | -------------------------------------------- | +| SmartThings capability | Related fan features in Home Assistant | +|-----------------------------------------------------------------------------------------------------------|----------------------------------------------| | [`fanSpeed`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#fanSpeed) | `speed` (`off`, `low`, `medium`, and `high`) | ### Light The SmartThings Light platform lets you control devices that have light-related capabilities. For a SmartThings device to be represented by the light platform, it must have one or more of the capabilities below in addition to the [`switch`](https://smartthings.developer.samsung.com/develop/api-ref/capabilities.html#Switch) capability. -| Capability | Light Features | -| ------------------------------------------------------------------------------------------------------------------------- | ----------------------------- | -| [`switchLevel`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#switchLevel) | `brightness` and `transition` | -| [`colorControl`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#colorControl) | `color` | -| [`colorTemperature`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#colorTemperature) | `color_temp` | +| SmartThings capability | Related light features in Home Assistant | +|---------------------------------------------------------------------------------------------------------------------------|------------------------------------------| +| [`switchLevel`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#switchLevel) | `brightness` and `transition` | +| [`colorControl`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#colorControl) | `color` | +| [`colorTemperature`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#colorTemperature) | `color_temp` | ### Lock @@ -222,62 +136,61 @@ The SmartThings Lock platform lets you control devices that have the [`lock`](ht The SmartThings Sensor platform lets your view devices that have sensor-related capabilities. A Sensor entity is created for each attribute (below) supported by the device. -| Capability | Attributes | -| ------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------- | -| [`activityLightingMode`](https://developer.smartthings.com/docs/devices/capabilities/proposed#activityLightingMode) | `lightingMode` | -| [`airConditionerMode`](https://developer.smartthings.com/docs/devices/capabilities/proposed#airConditionerMode) | `airConditionerMode` | -| [`airQualitySensor`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#airQualitySensor) | `airQuality` | -| [`alarm`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#alarm) | `alarm` | -| [`audioVolume`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#audioVolume) | `volume` | -| [`battery`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#battery) | `battery` | -| [`bodyMassIndexMeasurement`](https://developer.smartthings.com/docs/devices/capabilities/proposed#bodyMassIndexMeasurement) | `bmiMeasurement` | -| [`bodyWeightMeasurement`](https://developer.smartthings.com/docs/devices/capabilities/proposed#bodyWeightMeasurement) | `bodyWeightMeasurement` | -| [`carbonDioxideMeasurement`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#carbonDioxideMeasurement) | `carbonDioxide` | -| [`carbonMonoxideDetector`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#carbonMonoxideDetector) | `carbonMonoxide` | -| [`carbonMonoxideMeasurement`](https://developer.smartthings.com/docs/devices/capabilities/proposed#carbonMonoxideMeasurement) | `carbonMonoxideLevel` | -| [`dishwasherOperatingState`](https://developer.smartthings.com/docs/devices/capabilities/proposed#dishwasherOperatingState) | `machineState`, `dishwasherJobState` and `completionTime` | -| [`dryerMode`](https://developer.smartthings.com/docs/devices/capabilities/proposed#dryerMode) | `dryerMode` | -| [`dryerOperatingState`](https://developer.smartthings.com/docs/devices/capabilities/proposed#dryerOperatingState) | `machineState`, `dryerJobState` and `completionTime` | -| [`dustSensor`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#dustSensor) | `fineDustLevel` and `dustLevel` | -| [`energyMeter`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#energyMeter) | `energy` | -| [`equivalentCarbonDioxideMeasurement`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#equivalentCarbonDioxideMeasurement) | `equivalentCarbonDioxideMeasurement` | -| [`formaldehydeMeasurement`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#formaldehydeMeasurement) | `formaldehydeLevel` | -| [`gasMeter`](https://developer.smartthings.com/docs/devices/capabilities/proposed#gasMeter) | `gasMeter`, `meterCalorific`, `meterTime`, and `meterVolume` | -| [`illuminanceMeasurement`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#illuminanceMeasurement) | `illuminance` | -| [`infraredLevel`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#infraredLevel) | `infraredLevel` | -| [`lock`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#lock) | `lock` | -| [`mediaInputSource`](https://developer.smartthings.com/docs/devices/capabilities/proposed#mediaInputSource) | `inputSource` | -| [`mediaPlaybackRepeat`](https://developer.smartthings.com/docs/devices/capabilities/proposed#mediaPlaybackRepeat) | `playbackRepeatMode` | -| [`mediaPlaybackShuffle`](https://developer.smartthings.com/docs/devices/capabilities/proposed#mediaPlaybackShuffle) | `playbackShuffle` | -| [`mediaPlayback`](https://developer.smartthings.com/docs/devices/capabilities/proposed#mediaPlayback) | `playbackStatus` | -| [`odorSensor`](https://developer.smartthings.com/docs/devices/capabilities/proposed#odorSensor) | `odorLevel` | -| [`ovenMode`](https://developer.smartthings.com/docs/devices/capabilities/proposed#ovenMode) | `ovenMode` | -| [`ovenOperatingState`](https://developer.smartthings.com/docs/devices/capabilities/proposed#ovenOperatingState) | `machineState`, `ovenJobState` and `completionTime` | -| [`ovenSetpoint`](https://developer.smartthings.com/docs/devices/capabilities/proposed#ovenSetpoint) | `ovenSetpoint` | -| [`powerConsumptionReport`](https://developer.smartthings.com/docs/devices/capabilities/proposed#powerConsumptionReport) | `deltaEnergy`, `energy`, `energySaved`, `power`, `powerEnergy` | -| [`powerMeter`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#powerMeter) | `power` | -| [`powerSource`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#powerSource) | `powerSource` | -| [`refrigerationSetpoint`](https://developer.smartthings.com/docs/devices/capabilities/proposed#refrigerationSetpoint) | `refrigerationSetpoint` | -| [`relativeHumidityMeasurement`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#relativeHumidityMeasurement) | `humidity` | -| [`robotCleanerCleaningMode`](https://developer.smartthings.com/docs/devices/capabilities/proposed#robotCleanerCleaningMode) | `robotCleanerCleaningMode` | -| [`robotCleanerMovement`](https://developer.smartthings.com/docs/devices/capabilities/proposed#robotCleanerMovement) | `robotCleanerMovement` | -| [`robotCleanerTurboMode`](https://developer.smartthings.com/docs/devices/capabilities/proposed#robotCleanerTurboMode) | `robotCleanerTurboMode` | -| [`signalStrength`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#signalStrength) | `lqi` and `rssi` | -| [`smokeDetector`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#smokeDetector) | `smoke` | -| [`temperatureMeasurement`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#temperatureMeasurement) | `temperature` | -| [`thermostatCoolingSetpoint`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#thermostatCoolingSetpoint) | `coolingSetpoint` | -| [`thermostatFanMode`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#thermostatFanMode) | `thermostatFanMode` | -| [`thermostatHeatingSetpoint`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#thermostatHeatingSetpoint) | `heatingSetpoint` | -| [`thermostatMode`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#thermostatMode) | `thermostatMode` | -| [`thermostatOperatingState`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#thermostatOperatingState) | `thermostatOperatingState` | -| [`thermostatSetpoint`](https://developer.smartthings.com/docs/devices/capabilities/deprecated#thermostatSetpoint) | `thermostatSetpoint` | -| [`threeAxis`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#threeAxis) | `threeAxis` (as discrete sensors `X`, `Y` and `Z`) | -| [`tvChannel`](https://developer.smartthings.com/docs/devices/capabilities/proposed#tvChannel) | `tvChannel` and `tvChannelName` | -| [`tvocMeasurement`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#tvocMeasurement) | `tvocLevel` | -| [`ultravioletIndex`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#ultravioletIndex) | `ultravioletIndex` | -| [`voltageMeasurement`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#voltageMeasurement) | `voltage` | -| [`washerMode`](https://developer.smartthings.com/docs/devices/capabilities/proposed#washerMode) | `washerMode` | -| [`washerOperatingState`](https://developer.smartthings.com/docs/devices/capabilities/proposed#washerOperatingState) | `machineState`, `washerJobState` and `completionTime` | +| SmartThings capability | Related entities in Home Assistant | +|---------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------| +| [`activityLightingMode`](https://developer.smartthings.com/docs/devices/capabilities/proposed#activityLightingMode) | Activity lighting mode | +| [`airConditionerMode`](https://developer.smartthings.com/docs/devices/capabilities/proposed#airConditionerMode) | Air conditioner mode | +| [`airQualitySensor`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#airQualitySensor) | Air quality | +| [`alarm`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#alarm) | Alarm | +| [`audioVolume`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#audioVolume) | Volume | +| [`battery`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#battery) | Battery | +| [`bodyMassIndexMeasurement`](https://developer.smartthings.com/docs/devices/capabilities/proposed#bodyMassIndexMeasurement) | Body mass index | +| [`bodyWeightMeasurement`](https://developer.smartthings.com/docs/devices/capabilities/proposed#bodyWeightMeasurement) | Body weight | +| [`carbonDioxideMeasurement`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#carbonDioxideMeasurement) | Carbon dioxide | +| [`carbonMonoxideDetector`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#carbonMonoxideDetector) | Carbon monoxide detector | +| [`carbonMonoxideMeasurement`](https://developer.smartthings.com/docs/devices/capabilities/proposed#carbonMonoxideMeasurement) | Carbon monoxide | +| [`dishwasherOperatingState`](https://developer.smartthings.com/docs/devices/capabilities/proposed#dishwasherOperatingState) | Machine state
Job state
Completion time | +| [`dryerMode`](https://developer.smartthings.com/docs/devices/capabilities/proposed#dryerMode) | Dryer mode | +| [`dryerOperatingState`](https://developer.smartthings.com/docs/devices/capabilities/proposed#dryerOperatingState) | Machine state
Job state
Completion time | +| [`dustSensor`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#dustSensor) | PM10
PM2.5 | +| [`energyMeter`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#energyMeter) | Energy | +| [`equivalentCarbonDioxideMeasurement`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#equivalentCarbonDioxideMeasurement) | Equivalent carbon dioxide | +| [`formaldehydeMeasurement`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#formaldehydeMeasurement) | Formaldehyde | +| [`gasMeter`](https://developer.smartthings.com/docs/devices/capabilities/proposed#gasMeter) | Gas meter
Gas meter calorific
Gas meter time
Gas | +| [`illuminanceMeasurement`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#illuminanceMeasurement) | Illuminance | +| [`infraredLevel`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#infraredLevel) | Infrared level | +| [`mediaInputSource`](https://developer.smartthings.com/docs/devices/capabilities/proposed#mediaInputSource) | Media input source | +| [`mediaPlaybackRepeat`](https://developer.smartthings.com/docs/devices/capabilities/proposed#mediaPlaybackRepeat) | Media playback repeat | +| [`mediaPlaybackShuffle`](https://developer.smartthings.com/docs/devices/capabilities/proposed#mediaPlaybackShuffle) | Media playback shuffle | +| [`mediaPlayback`](https://developer.smartthings.com/docs/devices/capabilities/proposed#mediaPlayback) | Media playback status | +| [`odorSensor`](https://developer.smartthings.com/docs/devices/capabilities/proposed#odorSensor) | Odor sensor | +| [`ovenMode`](https://developer.smartthings.com/docs/devices/capabilities/proposed#ovenMode) | Oven mode | +| [`ovenOperatingState`](https://developer.smartthings.com/docs/devices/capabilities/proposed#ovenOperatingState) | Machine state
Job state
Completion time | +| [`ovenSetpoint`](https://developer.smartthings.com/docs/devices/capabilities/proposed#ovenSetpoint) | Set point | +| [`powerConsumptionReport`](https://developer.smartthings.com/docs/devices/capabilities/proposed#powerConsumptionReport) | Energy difference
Power energy
Energy saved
Power
Energy | +| [`powerMeter`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#powerMeter) | Power | +| [`powerSource`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#powerSource) | Power source | +| [`refrigerationSetpoint`](https://developer.smartthings.com/docs/devices/capabilities/proposed#refrigerationSetpoint) | Set point | +| [`relativeHumidityMeasurement`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#relativeHumidityMeasurement) | Humidity | +| [`robotCleanerCleaningMode`](https://developer.smartthings.com/docs/devices/capabilities/proposed#robotCleanerCleaningMode) | Cleaning mode | +| [`robotCleanerMovement`](https://developer.smartthings.com/docs/devices/capabilities/proposed#robotCleanerMovement) | Movement | +| [`robotCleanerTurboMode`](https://developer.smartthings.com/docs/devices/capabilities/proposed#robotCleanerTurboMode) | Turbo mode | +| [`signalStrength`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#signalStrength) | Link quality
Signal strength | +| [`smokeDetector`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#smokeDetector) | Smoke detector | +| [`temperatureMeasurement`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#temperatureMeasurement) | Temperature | +| [`thermostatCoolingSetpoint`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#thermostatCoolingSetpoint) | Cooling set point | +| [`thermostatFanMode`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#thermostatFanMode) | Fan mode | +| [`thermostatHeatingSetpoint`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#thermostatHeatingSetpoint) | Heating set point | +| [`thermostatMode`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#thermostatMode) | Mode | +| [`thermostatOperatingState`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#thermostatOperatingState) | Operating state | +| [`thermostatSetpoint`](https://developer.smartthings.com/docs/devices/capabilities/deprecated#thermostatSetpoint) | Set point | +| [`threeAxis`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#threeAxis) | X coordinate
Y coordinate
Z coordinate | +| [`tvChannel`](https://developer.smartthings.com/docs/devices/capabilities/proposed#tvChannel) | TV channel
TV channel name | +| [`tvocMeasurement`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#tvocMeasurement) | Volatile organic compounds | +| [`ultravioletIndex`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#ultravioletIndex) | UV index | +| [`voltageMeasurement`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#voltageMeasurement) | Voltage | +| [`washerMode`](https://developer.smartthings.com/docs/devices/capabilities/proposed#washerMode) | Washer mode | +| [`washerOperatingState`](https://developer.smartthings.com/docs/devices/capabilities/proposed#washerOperatingState) | Machine state
Job state
Completion time | ### Scene @@ -285,88 +198,20 @@ The SmartThings Scene platform lets you activate scenes defined in SmartThings w ### Switch -The SmartThings Switch platform lets you control devices that have the [`switch`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#switch) capability that are not already represented by a more specific platform. The following optional capabilities will provide energy and power utilization information: - -| Capability | Switch Features | -| --------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------- | -| [`energyMeter`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#energyMeter) | energy consumption (`today_energy_kwh` state attribute) | -| [`powerMeter`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#powerMeter) | power consumption (`current_power_w` state attribute) | +The SmartThings Switch platform lets you control devices that have the [`switch`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#switch) capability that are not already represented by a more specific platform. ## Troubleshooting -### Setup - -#### Aborted: Home Assistant is not configured correctly to receive updates from SmartThings - -This error message occurs when you do not have an active Home Assistant Cloud (Nabu Casa) subscription and the external URL is not configured correctly (it must start with `https`). Update your Home Assistant configuration per the prerequisites above, and try again. - -#### Error: The token must be in the UID/GUID format - -The personal access token does not match the expected format. Make sure you are copying the entire token and that there are no extraneous characters (such as trailing whitespace) and try again. - -#### Error: `pysmartthings.errors.APIInvalidGrant: Invalid refresh token:` (after a restore) - -You can fix this by using the SmartThings App to re-grant authorization to the API token you created before. -1. Open SmartThings app on your mobile device (not HA). -2. Select **Routines** from bottom. -3. Select your Home Assistant automation from the list. -4. Select **Done**, then select **Allow**. -5. Reload your SmartThings integration from Home Assistant Devices panel. - -#### Error: The token is invalid or no longer authorized (not solved by above) - -The personal access token entered is not valid or has been deleted. Create a new token per the instructions in the prerequisites and try again. - -#### Error: The token does not have the required OAuth scopes - -The personal access token entered is valid but does not have the required scopes as outlined in the prerequisites. Create a new token per the instructions in the prerequisites and try again. - -#### Error: SmartThings could not validate the webhook URL - -SmartThings was unable to reach your Home Assistant instance using the webhook URL. Enable debug logging to see the specific issue and follow the webhook troubleshooting checklist below. - -#### Aborted: There are no available SmartThings Locations - -This error message occurs when all of the SmartThings locations under the account linked to the personal access token are already setup in Home Assistant. Ensure you are using the correct personal access token or create an additional location in SmartThings to integrate and try again. - -#### Webhook Troubleshooting Checklist - -1. Ensure external URL is properly set to the _external address_ that Home Assistant is available to the internet. SmartThings must be able to reach this address. -2. Validate there are no problems with your certificate or SSL configuration by using an online checker, such as [https://www.digicert.com/help/](https://www.digicert.com/help/). -3. Some reverse proxy configuration settings can interfere with communication from SmartThings. For example, TLSv1.3 is not supported. Setting the supported cipher suite too restrictly will prevent handshaking. The following NGINX SSL configuration is known to work: - ```nginx - # cert.crt also contains intermediate certificates - ssl_certificate /path/to/cert.crt; - ssl_certificate_key /path/to/cert.key; - ssl_dhparam /path/to/dhparam.pem; - ssl_protocols TLSv1.2; - ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH'; - ssl_prefer_server_ciphers on; - ssl_ecdh_curve secp384r1; - ssl_session_timeout 10m; - ssl_session_cache shared:SSL:10m; - ssl_session_tickets off; - ``` -4. While the error message (above) is being displayed, run the following command from outside your local network to confirm it is responding to the ping lifecycle event: - ```bash - curl -X POST https://{EXTERNAL_URL}/api/webhook/{WEBHOOK_ID} -H "Content-Type: application/json; charset=utf-8" -d $'{"lifecycle": "PING", "executionId": "00000000-0000-0000-0000-000000000000", "locale": "en", "version": "1.0.0", "pingData": { "challenge": "00000000-0000-0000-0000-000000000000"}}' - ``` - Where `{EXTERNAL_URL}` is your external address and `{WEBHOOK_ID}` is the value of `webhook_id` from `.storage/smartthings` in your Home Assistant configuration directory. - - The expected response is: - ```bash - {"pingData": {"challenge": "00000000-0000-0000-0000-000000000000"}} - ``` - -If you have completed the checklist above and are still unable to setup the platform, [activate debug logging](#debugging) for the SmartThings integration and include the log messages up until the point of failure in [a new issue](https://github.com/home-assistant/home-assistant/issues). - ### Debugging -The SmartThings integration will log additional information about push updates received, events fired, and other messages when the log level is set to `debug`. Add the relevant line below to the {% term "`configuration.yaml`" %}: +If debug logging is enabled, the integration shows all the received events in the logs. -```yaml -logger: - default: info - logs: - homeassistant.components.smartthings: debug -``` +It will capture events for that device for 5 seconds, after which it will return a JSON file with the state of the device and the events. +This can be helpful for diagnosing state updates, for example by selecting the button and then turning on the device physically. + +- Follow these steps to [enable debug logs and diagnostics](/docs/configuration/troubleshooting/#debug-logs-and-diagnostics) + +## Removing the integration + +{% include integrations/remove_device_service.md %} +4. Open the SmartThings app and delete the Home Assistant application from SmartThings. \ No newline at end of file From 7b723381a7d6fc0fdc809e39c8a5d69e2b8304c0 Mon Sep 17 00:00:00 2001 From: Joost Lekkerkerker Date: Wed, 5 Mar 2025 16:34:32 +0100 Subject: [PATCH 040/122] Replace Ecobee with Matter on featured integrations (#37818) --- source/_integrations/ecobee.markdown | 1 - source/_integrations/matter.markdown | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_integrations/ecobee.markdown b/source/_integrations/ecobee.markdown index d7baa7c6a61..d90c107318c 100644 --- a/source/_integrations/ecobee.markdown +++ b/source/_integrations/ecobee.markdown @@ -10,7 +10,6 @@ ha_category: - Sensor - Switch - Weather -featured: true ha_release: 0.9 ha_iot_class: Cloud Polling ha_config_flow: true diff --git a/source/_integrations/matter.markdown b/source/_integrations/matter.markdown index 63fd2b3bfba..676bc5e097f 100644 --- a/source/_integrations/matter.markdown +++ b/source/_integrations/matter.markdown @@ -16,6 +16,7 @@ ha_category: - Update - Vacuum - Valve +featured: true ha_release: '2022.12' ha_iot_class: Local Push ha_config_flow: true From 81dcb158d0951606ce37d8865c5a1bf873aed1df Mon Sep 17 00:00:00 2001 From: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com> Date: Wed, 5 Mar 2025 16:42:59 +0100 Subject: [PATCH 041/122] SmartThings: style tweaks (#37815) --- source/_integrations/smartthings.markdown | 77 +++++++++++------------ 1 file changed, 38 insertions(+), 39 deletions(-) diff --git a/source/_integrations/smartthings.markdown b/source/_integrations/smartthings.markdown index b4ee518509b..a7c8b6c0cd6 100644 --- a/source/_integrations/smartthings.markdown +++ b/source/_integrations/smartthings.markdown @@ -37,9 +37,10 @@ ha_integration_type: integration - You need a Samsung account and account credentials. - To connect devices, you need the SmartThings app installed on your phone. + {% include integrations/config_flow.md %} -## Platforms +## Supported functionality SmartThings represents devices as a set of [capabilities](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference). The SmartThings integration maps those capabilities to entities in Home Assistant. A single device may be represented by one or more entities. @@ -57,16 +58,16 @@ SmartThings represents devices as a set of [capabilities](https://developer.smar In Home Assistant, a binary sensor entity will be created for each of the following SmartThings capabilities: -| SmartThings capability | -|-------------------------------------------------------------------------------------------------------------------------------| -| `accelerationSensor`| -| [`contactSensor`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#contactSensor) | -| [`filterStatus`](https://developer.smartthings.com/docs/devices/capabilities/proposed#filterStatus) | -| [`motionSensor`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#motionSensor) | -| [`presenceSensor`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#presenceSensor) | -| [`tamperAlert`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#tamperAlert) | -| [`valve`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#valve) | -| [`waterSensor`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#waterSensor) | +| SmartThings capability | +| --------------------------------------------------------------------------------------------------------------------- | +| `accelerationSensor` | +| [`contactSensor`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#contactSensor) | +| [`filterStatus`](https://developer.smartthings.com/docs/devices/capabilities/proposed#filterStatus) | +| [`motionSensor`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#motionSensor) | +| [`presenceSensor`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#presenceSensor) | +| [`tamperAlert`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#tamperAlert) | +| [`valve`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#valve) | +| [`waterSensor`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#waterSensor) | ### Climate @@ -74,10 +75,10 @@ The SmartThings Climate platform lets you control devices that have air conditio #### Air Conditioners -For a SmartThings Air Conditioner to be represented by the climate platform, it must have all of the following required capabilities: +For a SmartThings Air Conditioner to be represented by the climate entity, it must have all of the following required capabilities. If it does not have all the capabilities, the features will be represented in Home Assistant as individual sensors instead of a climate entity. -| SmartThings capability | Climate Features | -|--------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| SmartThings capability | Related climate features in Home Assistant | +| ------------------------------------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | | [`airConditionerMode`](https://developer.smartthings.com/docs/devices/capabilities/proposed#airConditionerMode) (required) | `hvac mode`, `hvac action` | | [`airConditionerFanMode`](https://developer.smartthings.com/docs/devices/capabilities/proposed#airConditionerFanMode) (required) | `fan mode` | | [`temperatureMeasurement`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#temperatureMeasurement) (required) | `temperature` | @@ -86,10 +87,10 @@ For a SmartThings Air Conditioner to be represented by the climate platform, it #### Thermostats -For a SmartThings thermostat to be represented by the climate platform, it must have all the capabilities from either "set a" _or_ "set b": +For a SmartThings thermostat to be represented by the climate entity, it must have all the capabilities from either "set a" _or_ "set b". If it does not have all the capabilities, the features will be represented in Home Assistant as individual sensors instead of a climate entity. -| SmartThings capability | Climate Features | -|-----------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------| +| SmartThings capability | Related climate features in Home Assistant | +| --------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | | [`thermostat`](https://developer.smartthings.com/docs/devices/capabilities/deprecated#thermostat) (set a) | `hvac mode`, `hvac action`, `target temp high`, `target temp low` and `fan mode` | | [`thermostatMode`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#thermostatMode) (set b) | `hvac mode` | | [`thermostatHeatingSetpoint`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#thermostatHeatingSetpoint) (set b) | `target temp high` | @@ -100,30 +101,30 @@ For a SmartThings thermostat to be represented by the climate platform, it must ### Cover -The SmartThings Cover platform lets you control devices that have open/close related capabilities. For a device to be represented by the cover platform, it must either have the `doorControl` or `windowShade` capability. +The SmartThings Cover platform lets you control devices that have open/close related capabilities. For a device to be represented by the cover entity, it must either have the `doorControl` or `windowShade` capability. Otherwise the features will be represented as individual sensors in Home Assistant. -| SmartThings capability | Cover Features | -|----------------------------------------------------------------------------------------------------------------------------|-----------------------------------| -| [`doorControl`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#doorControl) | `open` and `close` | -| [`windowShade`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#windowShade) | `open` and `close` | -| [`switchLevel`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#switchLevel) | `position` | -| [`windowShadeLevel`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference/#windowShadeLevel) | `position` | -| [`battery`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#battery) | `battery_level` (state attribute) | +| SmartThings capability | Related cover features in Home Assistant | +| -------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------- | +| [`doorControl`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#doorControl) | `open` and `close` | +| [`windowShade`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#windowShade) | `open` and `close` | +| [`switchLevel`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#switchLevel) | `position` | +| [`windowShadeLevel`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference/#windowShadeLevel) | `position` | +| [`battery`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#battery) | `battery_level` (state attribute) | ### Fan -The SmartThings Fan platform lets you control devices that have fan-related capabilities. For a SmartThings device to be represented by the fan platform, it must have one or more of the capabilities below in addition to the [`switch`](https://smartthings.developer.samsung.com/develop/api-ref/capabilities.html#Switch) capability. +The SmartThings Fan lets you control devices that have fan-related capabilities. For a SmartThings device to be represented by the fan entity, it must have one or more of the capabilities below in addition to the [`switch`](https://smartthings.developer.samsung.com/develop/api-ref/capabilities.html#Switch) capability. | SmartThings capability | Related fan features in Home Assistant | -|-----------------------------------------------------------------------------------------------------------|----------------------------------------------| +| --------------------------------------------------------------------------------------------------------- | -------------------------------------------- | | [`fanSpeed`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#fanSpeed) | `speed` (`off`, `low`, `medium`, and `high`) | ### Light -The SmartThings Light platform lets you control devices that have light-related capabilities. For a SmartThings device to be represented by the light platform, it must have one or more of the capabilities below in addition to the [`switch`](https://smartthings.developer.samsung.com/develop/api-ref/capabilities.html#Switch) capability. +The SmartThings Light lets you control devices that have light-related capabilities. For a SmartThings device to be represented by the light entity, it must have one or more of the capabilities below in addition to the [`switch`](https://smartthings.developer.samsung.com/develop/api-ref/capabilities.html#Switch) capability. | SmartThings capability | Related light features in Home Assistant | -|---------------------------------------------------------------------------------------------------------------------------|------------------------------------------| +| ------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------- | | [`switchLevel`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#switchLevel) | `brightness` and `transition` | | [`colorControl`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#colorControl) | `color` | | [`colorTemperature`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#colorTemperature) | `color_temp` | @@ -137,7 +138,7 @@ The SmartThings Lock platform lets you control devices that have the [`lock`](ht The SmartThings Sensor platform lets your view devices that have sensor-related capabilities. A Sensor entity is created for each attribute (below) supported by the device. | SmartThings capability | Related entities in Home Assistant | -|---------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------| +| ------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------ | | [`activityLightingMode`](https://developer.smartthings.com/docs/devices/capabilities/proposed#activityLightingMode) | Activity lighting mode | | [`airConditionerMode`](https://developer.smartthings.com/docs/devices/capabilities/proposed#airConditionerMode) | Air conditioner mode | | [`airQualitySensor`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#airQualitySensor) | Air quality | @@ -194,24 +195,22 @@ The SmartThings Sensor platform lets your view devices that have sensor-related ### Scene -The SmartThings Scene platform lets you activate scenes defined in SmartThings with a scene entity representing each SmartThings scenes within the location. +The SmartThings Scene lets you activate scenes defined in SmartThings. A scene entity is created for each SmartThings scene. ### Switch -The SmartThings Switch platform lets you control devices that have the [`switch`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#switch) capability that are not already represented by a more specific platform. +The SmartThings Switch lets you control devices that have the [`switch`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#switch) capability that are not already represented by a more specific platform. ## Troubleshooting -### Debugging +### Enabling debug logs and diagnostics -If debug logging is enabled, the integration shows all the received events in the logs. +If debug logging is enabled, the integration shows all the received events in the logs. The log captures events for that device for 5 seconds, and return a JSON file with the state of the device and the events. +Debug logs can be helpful for diagnosing state updates, for example by selecting the button and then turning on the device physically. -It will capture events for that device for 5 seconds, after which it will return a JSON file with the state of the device and the events. -This can be helpful for diagnosing state updates, for example by selecting the button and then turning on the device physically. - -- Follow these steps to [enable debug logs and diagnostics](/docs/configuration/troubleshooting/#debug-logs-and-diagnostics) +- To enable debug logs, follow the [steps to enable debug logs](/docs/configuration/troubleshooting/#debug-logs-and-diagnostics). ## Removing the integration {% include integrations/remove_device_service.md %} -4. Open the SmartThings app and delete the Home Assistant application from SmartThings. \ No newline at end of file +4. Open the SmartThings app and delete the Home Assistant application from SmartThings. From 5f048b6d94aae73c9d0d9140e8d344ac2f73fa38 Mon Sep 17 00:00:00 2001 From: Manu <4445816+tr4nt0r@users.noreply.github.com> Date: Thu, 6 Mar 2025 12:20:41 +0100 Subject: [PATCH 042/122] Add IronOS v2.23 features to IronOS integration (#37831) --- source/_integrations/iron_os.markdown | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/source/_integrations/iron_os.markdown b/source/_integrations/iron_os.markdown index b6ac0a69b78..ff8129f796c 100644 --- a/source/_integrations/iron_os.markdown +++ b/source/_integrations/iron_os.markdown @@ -102,6 +102,8 @@ The following controls allow you to customize the settings and options for your - **Button locking mode:** Configures whether buttons can be locked to prevent accidental presses, with options for disabled, full locking, or boost only. - **Display orientation mode:** Sets the display orientation with options for left-handed, right-handed, or automatic adjustment. - **Startup behavior:** Defines the mode the device enters on power-up: disabled, sleeping mode, idle mode (heat-off until moved), or soldering mode. +- **Soldering tip type:** Select the type of soldering tip in use: TS100 long/Hakko T12, Pinecil short, or PTS200 short. The auto-sense option enables automatic detection of the tip type. This feature requires IronOS v2.23 or higher. +- **Hall effect sleep timeout:** Specifies the duration of inactivity after which the device enters sleep mode when a hall effect sensor (if present) detects proximity to a magnet. This feature requires IronOS v2.23 or higher. ### User interface settings @@ -126,7 +128,7 @@ The following controls allow you to customize the settings and options for your - **Power Delivery timeout:** Defines how long the firmware will attempt to negotiate USB-PD before switching to Quick Charge. Lower values are recommended for faster PD negotiation. - **Power limit:** Sets a custom wattage cap for the device to maintain the **average** power below this value. Note: Peak power cannot be controlled. When using USB-PD, the limit will be the lower of this setting and the power supply's advertised wattage. - **Quick Charge voltage:** Adjusts the maximum voltage for Quick Charge negotiation. Does not affect USB-PD. Ensure the setting aligns with the current rating of your power supply for safety. -- **Power Delivery 3.1 EPR (Extended Power Range):** Enables EPR mode, allowing input voltages up to 28V with a [compatible USB-C power supply](https://wiki.pine64.org/wiki/Pinecil_Power_Supplies#EPR_PD3.1,_140W_Chargers) +- **Power Delivery 3.1 EPR (Extended Power Range):** Enables EPR mode, allowing input voltages up to 28V with a [compatible USB-C power supply](https://wiki.pine64.org/wiki/Pinecil_Power_Supplies#EPR_PD3.1,_140W_Chargers). Options are *on*, *off*, and *safe* (does not dynamically request more power). The *safe* option requires IronOS v2.23 or higher. ### Advanced settings @@ -149,7 +151,7 @@ Get started with this automation example for IronOS with a ready-to-use blueprin Automatically activate the fume extractor when soldering begins and deactivate it when the soldering iron is idle. -{% my blueprint_import badge blueprint_url="https://community.home-assistant.io/t/ironos-soldering-fume-extractor-automation-pinecil-v2/802156" %} +{% my blueprint_import badge blueprint_url="" %} {% details "Example YAML configuration" %} From e2228ab54dc1bae82789f07b05f56afd60e30140 Mon Sep 17 00:00:00 2001 From: Markus Adrario Date: Fri, 7 Mar 2025 09:22:12 +0100 Subject: [PATCH 043/122] add select platform to homee (#37756) --- source/_integrations/homee.markdown | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/_integrations/homee.markdown b/source/_integrations/homee.markdown index d1fcbcb2c09..59368a18227 100644 --- a/source/_integrations/homee.markdown +++ b/source/_integrations/homee.markdown @@ -14,6 +14,7 @@ ha_platforms: - cover - light - number + - select - sensor - switch - valve @@ -30,6 +31,7 @@ There is currently support for the following device types in Home Assistant: - light - number - sensor +- select - switch - valve From 26bb2cc20e4afb3d07db7706a20d57156e8789e3 Mon Sep 17 00:00:00 2001 From: Regev Brody Date: Fri, 7 Mar 2025 17:51:52 +0200 Subject: [PATCH 044/122] Add documentation for Roborock buttons for routines (#37817) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * add roborock scene support * add roborock scene support * Update roborock.markdown * Update roborock.markdown * Update roborock.markdown * Update source/_integrations/roborock.markdown Co-authored-by: AbΓ­lio Costa --------- Co-authored-by: AbΓ­lio Costa --- source/_integrations/roborock.markdown | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/source/_integrations/roborock.markdown b/source/_integrations/roborock.markdown index dd2cd8c4709..9f58156cb02 100644 --- a/source/_integrations/roborock.markdown +++ b/source/_integrations/roborock.markdown @@ -35,7 +35,7 @@ ha_integration_type: integration The Roborock integration allows you to control your [Roborock](https://us.roborock.com/pages/robot-vacuum-cleaner) vacuum while using the Roborock app. -This integration requires a continuous cloud connection while using the device. However, excluding map data, communication between the integration and the device is conducted locally. +This integration requires a continuous cloud connection while using the device. However, excluding map data and routines, communication between the integration and the device is conducted locally. Once you log in with your Roborock account, the integration will automatically discover your Roborock devices and get the needed information to communicate locally with them. Please ensure your Home Assistant instance can communicate with the local IP of your device. We recommend setting a static IP for your Roborock Vacuum to help prevent future issues. The device communicates on port 58867. Depending on your firewall, you may need to allow communication from Home Assistant to your vacuum on that port. @@ -133,6 +133,8 @@ Reset main brush consumable - The main brush/ roller is expected to be replaced Reset air filter - The air filter is expected to be replaced every 150 hours. +In addition, some vacuums allow routines to be set up in the app. For each of those routines, a button entity will be created, allowing you to trigger it. + ### Actions #### Action `roborock.set_vacuum_goto_position` From c231846cab357a23b7554d110703039a00de346f Mon Sep 17 00:00:00 2001 From: Josef Zweck Date: Fri, 7 Mar 2025 20:05:51 +0100 Subject: [PATCH 045/122] Add upload service docs to OneDrive (#37637) * add service docs * Update onedrive.markdown * Fix OneDrive config entry description * Apply suggestions from code review * Apply suggestions from code review --------- Co-authored-by: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com> --- source/_integrations/onedrive.markdown | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/source/_integrations/onedrive.markdown b/source/_integrations/onedrive.markdown index 891a7893090..28e1986e52a 100644 --- a/source/_integrations/onedrive.markdown +++ b/source/_integrations/onedrive.markdown @@ -18,7 +18,7 @@ ha_platforms: - sensor --- -This integration allows you to use [Microsoft OneDrive](https://www.microsoft.com/en-us/microsoft-365/onedrive/online-cloud-storage) for [Home Assistant Backups](/common-tasks/general/#backups). +This integration allows you to use [OneDrive](https://www.microsoft.com/en-us/microsoft-365/onedrive/online-cloud-storage) for [Home Assistant Backups](/common-tasks/general/#backups) as well as uploading generic files to your OneDrive. Backups will be created in a folder called `Home Assistant\backups_` in the `App Folder` of your OneDrive by default. `id` is part of your Home Assistant instance's unique id to allow backups from multiple instances to the same OneDrive account. @@ -85,6 +85,25 @@ The integration provides the following sensors, which are updated every 5 minute A drive that is in **Drive state** `Exceeded` will be automatically frozen (meaning you can't upload any more backups & files), until you clear up enough storage. {% endnote %} +## Actions + +This integration provides the following actions: + +### Action `onedrive.upload` + +You can use the `onedrive.upload` action to upload files from Home Assistant +to OneDrive. For example, to upload `camera` snapshots. + +{% details "Upload action details" %} + +| Data attribute | Optional | Description | Example | +| ---------------------- | -------- | ----------- | --------| +| `filename` | no | Path to the file to upload. | /media/image.jpg | +| `destination_folder` | no | Folder inside your `Apps/Home Assistant` app folder that is the destination for the uploaded content. Will be created if it does not exist. Supports subfolders. | Snapshots/2025 | +| `config_entry_id` | no | The ID of the OneDrive config entry (the OneDrive you want to upload to). | a1bee602deade2b09bc522749bbce48e | + +{% enddetails %} + ## Automations Get started with these automation examples. From f872e128a32b053a6d49991d5c29e73a1b678daa Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Sat, 8 Mar 2025 07:12:10 +0100 Subject: [PATCH 046/122] Add template function: shuffle (#37864) * Add template function: shuffle * Use 'reproducible' instead * tiny tweak --------- Co-authored-by: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com> --- .../_docs/configuration/templating.markdown | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/source/_docs/configuration/templating.markdown b/source/_docs/configuration/templating.markdown index b68cd1d7c6b..39a38bc7efb 100644 --- a/source/_docs/configuration/templating.markdown +++ b/source/_docs/configuration/templating.markdown @@ -1185,6 +1185,28 @@ See: [Python regular expression operations](https://docs.python.org/3/library/re - Filter `value | regex_findall(find='', ignorecase=False)` will find all regex matches of the find expression in `value` and return the array of matches. - Filter `value | regex_findall_index(find='', index=0, ignorecase=False)` will do the same as `regex_findall` and return the match at index. +### Shuffling + +The template engine contains a filter and function to shuffle a list. + +Shuffling can happen randomly or reproducibly using a seed. When using a seed +it will always return the same shuffled list for the same seed. + +Some examples: + +{% raw %} + +- `{{ [1, 2, 3] | shuffle }}` - renders as `[3, 1, 2]` (_random_) +- `{{ shuffle([1, 2, 3]) }}` - renders as `[3, 1, 2]` (_random_) +- `{{ shuffle(1, 2, 3) }}` - renders as `[3, 1, 2]` (_random_) + +- `{{ [1, 2, 3] | shuffle("random seed") }}` - renders as `[2, 3, 1] (_reproducible_) +- `{{ shuffle([1, 2, 3], seed="random seed") }}` - renders as `[2, 3, 1] (_reproducible_) +- `{{ shuffle([1, 2, 3], "random seed") }}`- renders as `[2, 3, 1] (_reproducible_) +- `{{ shuffle(1, 2, 3, seed="random seed") }}` - renders as `[2, 3, 1] (_reproducible_) + +{% endraw %} + ## Merge action responses Using action responses we can collect information from various entities at the same time. From 02130aeb0c85ab9d4381f523f1a66e31008190ec Mon Sep 17 00:00:00 2001 From: Manu <4445816+tr4nt0r@users.noreply.github.com> Date: Sat, 8 Mar 2025 07:13:54 +0100 Subject: [PATCH 047/122] Add `update_todo` action to Habitica (#37801) * add update_todo * typos --- source/_integrations/habitica.markdown | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/source/_integrations/habitica.markdown b/source/_integrations/habitica.markdown index 3c05561c08b..e0f6717a25c 100644 --- a/source/_integrations/habitica.markdown +++ b/source/_integrations/habitica.markdown @@ -344,6 +344,30 @@ Creates a habit for the selected Habitica character. | `tag` | yes | Add tags to the Habitica habit. If a tag does not already exist, a new one will be created. | | `alias` | yes | A task alias can be used instead of the name or task ID. Only dashes, underscores, and alphanumeric characters are supported. The task alias must be unique among all your tasks. | +### Action `habitica.update_todo` + +Updates a specific to-do for the selected Habitica character. + +| Data attribute | Optional | Description | +| -------------- | -------- | -------------------------------------------------------------------------------------------- | +| `config_entry` | no | Select the Habitica account to update a to-do. | +| `task` | no | The name (or task ID) of the to-do you want to update. | +| `rename` | yes | The new title for the Habitica to-do. | +| `notes` | yes | The new notes for the Habitica to-do. | +| `add_checklist_item` | yes | The items to add to the to-do's checklist. | +| `remove_checklist_item` | yes | Remove items from a to-do's checklist. | +| `score_checklist_item` | yes | Mark items from a to-do's checklist as completed. | +| `unscore_checklist_item` | yes | Undo completion of items of a to-do's checklist. | +| `priority` | yes | Update the difficulty of a to-do. Valid values: `trivial`, `easy`, `medium`, `hard` | +| `date` | yes | The to-do's due date. | +| `clear_date` | yes | Remove the due date from a to-do. | +| `reminder` | yes | Add reminders to a Habitica to-do. | +| `remove_reminder` | yes | Remove specific reminders from a Habitica to-do. | +| `clear_reminder` | yes | Remove all reminders from a Habitica to-do. | +| `tag` | yes | Add tags to the Habitica to-do. If a tag does not already exist, a new one will be created. | +| `remove_tag` | yes | Remove tags from the Habitica to-do. | +| `alias` | yes | A task alias can be used instead of the name or task ID. Only dashes, underscores, and alphanumeric characters are supported. The task alias must be unique among all your tasks. | + ## Automations Get started with these automation examples for Habitica, each featuring ready-to-use blueprints! From f5644f746fad50fb4ed4ef8c4b5fa570b431e776 Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Sun, 9 Mar 2025 11:04:09 +0100 Subject: [PATCH 048/122] Add template function: typeof (#37872) * Add template function: typeof * Tweak * Tweak output format --- .../_docs/configuration/templating.markdown | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/source/_docs/configuration/templating.markdown b/source/_docs/configuration/templating.markdown index 39a38bc7efb..a47d5992ef2 100644 --- a/source/_docs/configuration/templating.markdown +++ b/source/_docs/configuration/templating.markdown @@ -1537,6 +1537,44 @@ When a command template renders to a valid `bytes` literal, then MQTT will publi - Template {% raw %}`{{ 16 }}`{% endraw %} renders to payload encoded string `"16"`. - Template {% raw %}`{{ pack(0x10, ">B") }}`{% endraw %} renders to a raw 1 byte payload `0x10`. +### Determining types + +When working with templates, it can be useful to determine the type of +the returned value from a method or the type of a variable at times. + +For this, Home Assistant provides the `typeof()` template function and filter, +which is inspired by the [JavaScript](https://en.wikipedia.org/wiki/JavaScript) +`typeof` operator. It reveals the type of the given value. + +This is mostly useful when you are debugging or playing with templates in +the developer tools of Home Assistant. However, it might be useful in some +other cases as well. + +Some examples: + +{% raw %} + +- `{{ typeof(42) }}` - renders as `int` +- `{{ typeof(42.0) }}` - renders as `float` +- `{{ typeof("42") }}` - renders as `str` +- `{{ typeof([1, 2, 3]) }}` - renders as `list` +- `{{ typeof({"key": "value"}) }}` - renders as `dict` +- `{{ typeof(True) }}` - renders as `bool` +- `{{ typeof(None) }}` - renders as `NoneType` + +- `{{ 42 | typeof }}` - renders as `int` +- `{{ 42.0 | typeof }}` - renders as `float` +- `{{ "42" | typeof }}` - renders as `str` +- `{{ [1, 2, 3] | typeof }}` - renders as `list` +- `{{ {"key": "value"} | typeof }}` - renders as `dict` +- `{{ True | typeof }}` - renders as `bool` +- `{{ None | typeof }}` - renders as `NoneType` + +- `{{ some_variable | typeof }}` - renders the type of `some_variable` +- `{{ states("sensor.living_room") | typeof }}` - renders the type of the result of `states()` function + +{% endraw %} + ## Some more things to keep in mind ### `entity_id` that begins with a number From ba458c6415476c9bfd2b5c58773ffff2c29da341 Mon Sep 17 00:00:00 2001 From: Manu <4445816+tr4nt0r@users.noreply.github.com> Date: Sun, 9 Mar 2025 13:59:47 +0100 Subject: [PATCH 049/122] Add create_todo action to Habitica integration (#37869) --- source/_integrations/habitica.markdown | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/source/_integrations/habitica.markdown b/source/_integrations/habitica.markdown index e0f6717a25c..f05460279ae 100644 --- a/source/_integrations/habitica.markdown +++ b/source/_integrations/habitica.markdown @@ -368,6 +368,22 @@ Updates a specific to-do for the selected Habitica character. | `remove_tag` | yes | Remove tags from the Habitica to-do. | | `alias` | yes | A task alias can be used instead of the name or task ID. Only dashes, underscores, and alphanumeric characters are supported. The task alias must be unique among all your tasks. | +### Action `habitica.create_todo` + +Creates a to-do for the selected Habitica character. + +| Data attribute | Optional | Description | +| -------------- | -------- | -------------------------------------------------------------------------------------------- | +| `config_entry` | no | Select the Habitica account to create a to-do. | +| `name` | no | The title for the Habitica to-do. | +| `notes` | yes | The notes for the Habitica to-do. | +| `add_checklist_item` | yes | The items to add to the to-do's checklist. | +| `priority` | yes | The difficulty of the to-do. Valid values: `trivial`, `easy`, `medium`, `hard` | +| `date` | yes | The to-do's due date. | +| `reminder` | yes | Add reminders to a Habitica to-do. | +| `tag` | yes | Add tags to the Habitica to-do. If a tag does not already exist, a new one will be created. | +| `alias` | yes | A task alias can be used instead of the name or task ID. Only dashes, underscores, and alphanumeric characters are supported. The task alias must be unique among all your tasks. | + ## Automations Get started with these automation examples for Habitica, each featuring ready-to-use blueprints! From 3e11933f99883855255d545d28cf02e024ece3ef Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Sun, 9 Mar 2025 14:01:30 +0100 Subject: [PATCH 050/122] Add template function: flatten (#37879) --- .../_docs/configuration/templating.markdown | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/source/_docs/configuration/templating.markdown b/source/_docs/configuration/templating.markdown index a47d5992ef2..59bf5d3d6bf 100644 --- a/source/_docs/configuration/templating.markdown +++ b/source/_docs/configuration/templating.markdown @@ -1207,6 +1207,30 @@ Some examples: {% endraw %} +### Flatten a list of lists + +The template engine provides a filter to flatten a list of lists: `flatten`. + +It will take a list of lists and return a single list with all the elements. +The depth of the flattening can be controlled using the `levels` parameter. +The flattening process is recursive, so it will flatten all nested lists, until +the number of levels (if specified) is reached. + +Some examples: + +{% raw %} + +- `{{ flatten([1, [2, [3]], 4, [5 , 6]]) }}` - renders as `[1, 2, 3, 4, 5, 6]` +- `{{ [1, [2, [3]], 4, [5 , 6]] | flatten }}` - renders as `[1, 2, 3, 4, 5, 6]` + +- `{{ flatten([1, [2, [3]]], levels=1) }}` - renders as `[1, 2, [3]]` +- `{{ [1, [2, [3]]], flatten(levels=1) }}` - renders as `[1, 2, [3]]` + +- `{{ flatten([1, [2, [3]]], 1) }}` - renders as `[1, 2, [3]]` +- `{{ [1, [2, [3]]], flatten(1) }}` - renders as `[1, 2, [3]]` + +{% endraw %} + ## Merge action responses Using action responses we can collect information from various entities at the same time. From 5f7d7fee8fe13f170789afa458d44d545ff1352c Mon Sep 17 00:00:00 2001 From: Maciej Bieniek Date: Sun, 9 Mar 2025 14:05:27 +0100 Subject: [PATCH 051/122] Add Ogemray virtual integration docs (#37882) --- source/_integrations/ogemray.markdown | 49 +++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 source/_integrations/ogemray.markdown diff --git a/source/_integrations/ogemray.markdown b/source/_integrations/ogemray.markdown new file mode 100644 index 00000000000..ffbc2e4f5cc --- /dev/null +++ b/source/_integrations/ogemray.markdown @@ -0,0 +1,49 @@ +--- +title: Ogemray +description: Integrate Ogemray (Powered by Shelly) devices +ha_category: + - Binary sensor + - Climate + - Cover + - Energy + - Event + - Light + - Number + - Select + - Sensor + - Switch + - Text + - Update + - Valve +ha_release: '0.115' +ha_codeowners: + - '@balloob' + - '@bieniu' + - '@thecode' + - '@chemelli74' + - '@bdraco' +ha_iot_class: Local Push +ha_domain: ogemray +ha_config_flow: true +ha_zeroconf: true +ha_platforms: + - binary_sensor + - button + - climate + - cover + - diagnostics + - event + - light + - number + - select + - sensor + - switch + - text + - update + - valve +ha_integration_type: virtual +ha_supporting_domain: shelly +ha_supporting_integration: Shelly +--- + +{% include integrations/supported_brand.md %} From 280e45776ceffd10496a4d1787167062aae67411 Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Mon, 10 Mar 2025 07:38:25 +0100 Subject: [PATCH 052/122] Add template functions: md5, sha1, sha256, sha512 (#37884) --- .../_docs/configuration/templating.markdown | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/source/_docs/configuration/templating.markdown b/source/_docs/configuration/templating.markdown index 59bf5d3d6bf..50dc2689067 100644 --- a/source/_docs/configuration/templating.markdown +++ b/source/_docs/configuration/templating.markdown @@ -1174,6 +1174,31 @@ Some examples: +### Hashing + +The template engine contains a few filters and functions to hash a string of +data. A few very common hashing algorithms are supported: `md5`, `sha1`, +`sha256`, and `sha512`. + +Some examples: + +{% raw %} + +- `{{ md5("Home Assistant") }}` - renders as `f3f2b8b3b40084aa87e92b7ffb02ed13885fea2d07` +- `{{ "Home Assistant" | md5 }}` - renders as `f3f2b8b3b40084aa87e92b7ffb02ed13885fea2d07` + +- `{{ sha1("Home Assistant") }}` - renders as `14bffd017c73917bfda2372aaf287570597b8e82` +- `{{ "Home Assistant" | sha1 }}` - renders as `14bffd017c73917bfda2372aaf287570597b8e82` + +- `{{ sha256("Home Assistant") }}` - renders as `a18f473c9d3ed968a598f996dcf0b9de84de4ee04c950d041b61297a25bcea49` +- `{{ "Home Assistant" | sha256 }}` - renders as `a18f473c9d3ed968a598f996dcf0b9de84de4ee04c950d041b61297a25bcea49` + +- `{{ sha512("Home Assistant") }}` - renders as `f251e06eb7d3439e1a86d6497d6a4531c3e8c809f538be62f89babf147d7d63aca4e77ae475b94c654fd38d8f543f778ce80007d6afef379d8a0e5d3ddf7349d` +- `{{ "Home Assistant" | sha512 }}` - renders as `f251e06eb7d3439e1a86d6497d6a4531c3e8c809f538be62f89babf147d7d63aca4e77ae475b94c654fd38d8f543f778ce80007d6afef379d8a0e5d3ddf7349d` + +{% endraw %} + + ### Regular expressions For more information on regular expressions From e73c435268eb48b66401dbe3f3174a72b5cd8072 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Sun, 9 Mar 2025 22:16:11 -1000 Subject: [PATCH 053/122] Add ITH-13-B and ITH-21-B models to inkbird (#37893) https://github.com/home-assistant/core/pull/140244 --- source/_integrations/inkbird.markdown | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/_integrations/inkbird.markdown b/source/_integrations/inkbird.markdown index 2dacbd1c3ef..340ca10ab60 100644 --- a/source/_integrations/inkbird.markdown +++ b/source/_integrations/inkbird.markdown @@ -26,6 +26,8 @@ Integrates [INKBIRD](https://www.inkbird.com/) devices into Home Assistant. - [INKBIRD Bluetooth BBQ Thermometer IBT-6XS](https://inkbird.com/products/bluetooth-bbq-thermometer-ibt-6xs) - [INKBIRD Bluetooth Grill Thermometer IBT-4XS](https://inkbird.com/products/bluetooth-grill-thermometer-ibt-4xs) - [INKBIRD Bluetooth Grill Thermometer IBT-2X](https://inkbird.com/products/bluetooth-grill-thermometer-ibt-2x) +- [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) - [Nutrichef Smart Wireless Grill Thermometer](https://nutrichefkitchen.com/products/pwirbbq40) - [Nutrichef Smart Bluetooth BBQ Grill Thermometer](https://nutrichefkitchen.com/products/pwirbbq80-1) From 366c890c9985c1887d85053b64aef03baf972548 Mon Sep 17 00:00:00 2001 From: Keith <22891515+keithle888@users.noreply.github.com> Date: Mon, 10 Mar 2025 09:24:44 +0100 Subject: [PATCH 054/122] Added documentation for igloohome lock/unlocking feature (#37000) * - Added feature documentation for bridge locking/unlocking - Added troubleshooting steps * - Minor grammer change * - Added mention of igloodeveloper API * - Minor formatting fixes * - Minor grammatical fix * - Minor documentation change. --------- Co-authored-by: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com> --- source/_integrations/igloohome.markdown | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/source/_integrations/igloohome.markdown b/source/_integrations/igloohome.markdown index e82d39cf611..9a606b4a7e8 100644 --- a/source/_integrations/igloohome.markdown +++ b/source/_integrations/igloohome.markdown @@ -15,9 +15,10 @@ ha_integration_type: integration ha_quality_scale: bronze --- -The **igloohome** {% term integration %} grants Home Assistant access to paired [smart access device\(s\)](https://www.igloohome.co/#products). The features of this integration includes: +The **igloohome** {% term integration %} grants Home Assistant access to paired [smart access device\(s\)](https://www.igloohome.co/#products) via the [igloodeveloper API](https://igloocompany.stoplight.io/docs/igloohome-api/1w1cuv56ge5xq-overview). The features of this integration include: - For [Bridge](https://www.igloohome.co/products/bridge) owners: + - Lock/Unlock/Open locks that are linked to a bridge. - Regular updates of all linked devices' battery level. - For non-bridge owners: @@ -76,3 +77,11 @@ Some generic troubleshooting steps: - Verify that your [API credentials](https://access.igloocompany.co/api-access) are correctly filled in. - Ensure your API credentials have not expired or been revoked. + +### Unable to lock/unlock/open lock + +- Verify that the bridge is: + - powered on + - has an active internet connection + - and is within Bluetooth range of the lock +- If you've changed the link between the bridge and the lock, reload the config entry. From 7681ee50eacca29513170c266ad5d34e806cc035 Mon Sep 17 00:00:00 2001 From: Galorhallen <12990764+Galorhallen@users.noreply.github.com> Date: Mon, 10 Mar 2025 09:35:02 +0100 Subject: [PATCH 055/122] Update list of supported Govee lights (#37885) --- .../_integrations/govee_light_local.markdown | 250 +++++++++--------- 1 file changed, 130 insertions(+), 120 deletions(-) diff --git a/source/_integrations/govee_light_local.markdown b/source/_integrations/govee_light_local.markdown index aeaf27f7cc5..c9cd5832d01 100644 --- a/source/_integrations/govee_light_local.markdown +++ b/source/_integrations/govee_light_local.markdown @@ -22,126 +22,136 @@ To enable local control on your Govee device, refer to the instructions availabl ## Supported devices -H600D, -H6046, -H6047, -H6051, -H6052, -H6056, -H6059, -H6061, -H6062, -H6065, -H6066, -H6067, -H6069, -H606A, -H6072, -H6073, -H6076, -H6078, -H6079, -H607C, -H6087, -H6088, -H608A, -H608B, -H608D, -H60A1, -H610A, -H610B, -H6110, -H6117, -H612A, -H612F, -H6144, -H6159, -H615A, -H615B, -H615C, -H615D, -H615E, -H6163, -H6168, -H6172, -H6173, -H6175, -H6176, -H618A, -H618C, -H618E, -H618F, -H619A, -H619B, -H619C, -H619D, -H619E, -H619Z, -H61A0, -H61A1, -H61A2, -H61A3, -H61A5, -H61A8, -H61B2, -H61B5, -H61BA, -H61BC, -H61BE, -H61C3, -H61C5, -H61D3, -H61D5, -H61E0, -H61E1, -H61E5, -H61E6, -H61F5, -H6640, -H6641, -H7012, -H7013, -H7020, -H7021, -H7028, -H7033, -H7037, -H7038, -H7039, -H7041, -H7042, -H7050, -H7051, -H7052, -H7055, -H705A, -H705B, -H705C, -H705D, -H705E, -H705F, -H7060, -H7061, -H7062, -H7063, -H7065, -H7066, -H706A, -H706B, -H706C, -H7075, -H70A1, -H70A2, -H70A3, -H70B1, -H70B3, -H70BC, -H70C1, -H70C2, -H70C4, -H70C5, -H70D1, -H805C +"H6008", +"H600D", +"H6022", +"H6042", +"H6046", +"H6047", +"H6051", +"H6052", +"H6056", +"H6059", +"H605D", +"H6061", +"H6062", +"H6065", +"H6066", +"H6067", +"H6069", +"H606A", +"H6072", +"H6073", +"H6076", +"H6078", +"H6079", +"H607C", +"H6087", +"H6088", +"H608A", +"H608B", +"H608D", +"H60A1", +"H610A", +"H610B", +"H6110", +"H6117", +"H612A", +"H612B", +"H612F", +"H6144", +"H6159", +"H615A", +"H615B", +"H615C", +"H615D", +"H615E", +"H6163", +"H6167", +"H6168", +"H6172", +"H6173", +"H6175", +"H6176", +"H618A", +"H618C", +"H618E", +"H618F", +"H619A", +"H619B", +"H619C", +"H619D", +"H619E", +"H619Z", +"H61A0", +"H61A1", +"H61A2", +"H61A3", +"H61A5", +"H61A8", +"H61B2", +"H61B3", +"H61B5", +"H61BA", +"H61BC", +"H61BE", +"H61C2", +"H61C3", +"H61C5", +"H61D3", +"H61D5", +"H61E0", +"H61E1", +"H61E5", +"H61E6", +"H61F5", +"H6609", +"H6640", +"H6641", +"H7012", +"H7013", +"H7020", +"H7021", +"H7028", +"H7033", +"H7037", +"H7038", +"H7039", +"H7041", +"H7042", +"H7050", +"H7051", +"H7052", +"H7055", +"H705A", +"H705B", +"H705C", +"H705D", +"H705E", +"H705F", +"H7060", +"H7061", +"H7062", +"H7063", +"H7065", +"H7066", +"H706A", +"H706B", +"H706C", +"H7075", +"H70A1", +"H70A2", +"H70A3", +"H70B1", +"H70B3", +"H70BC", +"H70C1", +"H70C2", +"H70C4", +"H70C5", +"H70D1", +"H805C", +"H8072" {% note %} Some scenes may not be supported from all devices. If you find a scene that's not working with a specific model, please open an issue at the [underling library](https://github.com/Galorhallen/govee-local-api/issues) From a0b7d0a4ca061e40af3487a296f6257a1bb00b4a Mon Sep 17 00:00:00 2001 From: Maciej Bieniek Date: Mon, 10 Mar 2025 09:45:29 +0100 Subject: [PATCH 056/122] Update nam.markdown (#37890) --- source/_integrations/nam.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_integrations/nam.markdown b/source/_integrations/nam.markdown index 31ac3af9705..3bbb420f726 100644 --- a/source/_integrations/nam.markdown +++ b/source/_integrations/nam.markdown @@ -21,6 +21,7 @@ The Nettigo Air Monitor integration allows you to read temperature, humidity, pr The integration currently has support for the following sensors: +- BH1750 - BME280 - BMP180 - BMP280 From bf80d747d60e2bb3328bbe79df1fbdbb8bd93d6f Mon Sep 17 00:00:00 2001 From: Denis Shulyaka Date: Mon, 10 Mar 2025 11:57:17 +0300 Subject: [PATCH 057/122] Anthropic conversation extended thinking support (#37775) * Anthropic conversation extended thinking support * Update anthropic.markdown * Update anthropic.markdown --- source/_integrations/anthropic.markdown | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/source/_integrations/anthropic.markdown b/source/_integrations/anthropic.markdown index cdc18254cdf..3bb8c935176 100644 --- a/source/_integrations/anthropic.markdown +++ b/source/_integrations/anthropic.markdown @@ -67,5 +67,7 @@ Model: Maximum Tokens to Return in Response: description: The maximum number of tokens to generate before stopping. Note that our models may stop _before_ reaching this maximum. This parameter only specifies the absolute maximum number of tokens to generate. Different models have different maximum values for this parameter. See [models](https://docs.anthropic.com/en/docs/models-overview) for details. Temperature: - description: Amount of randomness injected into the response. Use `temperature` closer to `0.0` for analytical / multiple choice, and closer to `1.0` for creative and generative tasks. Note that even with `temperature` of `0.0`, the results will not be fully deterministic. + description: Amount of randomness injected into the response. Use `temperature` closer to `0.0` for analytical / multiple choice, and closer to `1.0` for creative and generative tasks. Note that even with `temperature` of `0.0`, the results will not be fully deterministic. This parameter is ignored if extended thinking is enabled (see below). +Thinking budget: + description: For models with [extending thinking](https://docs.anthropic.com/en/docs/build-with-claude/extended-thinking) support, such as Claude 3.7 Sonnet, this parameter determines the maximum number of tokens Claude is allowed use for its internal reasoning process. Larger budgets can improve response quality by enabling more thorough analysis for complex problems, although Claude may not use the entire budget allocated, especially at ranges above 32K. Anthropic suggests starting at the minimum and increasing the thinking budget incrementally to find the optimal range for Claude to perform well for your use case. Higher token counts may allow you to achieve more comprehensive and nuanced reasoning, but there may also be diminishing returns depending on the task. Be prepared for potentially longer response times due to the additional processing required for the reasoning process. The value must always be less than the `Maximum Tokens` specified. If the value is below `1024`, then extended thinking is disabled. This parameter is ignored if the model does not support extended thinking. {% endconfiguration_basic %} From e8e6bcba7986e8d5938312977ecd72c81959e92e Mon Sep 17 00:00:00 2001 From: Galorhallen <12990764+Galorhallen@users.noreply.github.com> Date: Mon, 10 Mar 2025 11:12:42 +0100 Subject: [PATCH 058/122] Removed wrong quotes from govee light local (#37897) --- .../_integrations/govee_light_local.markdown | 260 +++++++++--------- 1 file changed, 130 insertions(+), 130 deletions(-) diff --git a/source/_integrations/govee_light_local.markdown b/source/_integrations/govee_light_local.markdown index c9cd5832d01..183270944d6 100644 --- a/source/_integrations/govee_light_local.markdown +++ b/source/_integrations/govee_light_local.markdown @@ -22,136 +22,136 @@ To enable local control on your Govee device, refer to the instructions availabl ## Supported devices -"H6008", -"H600D", -"H6022", -"H6042", -"H6046", -"H6047", -"H6051", -"H6052", -"H6056", -"H6059", -"H605D", -"H6061", -"H6062", -"H6065", -"H6066", -"H6067", -"H6069", -"H606A", -"H6072", -"H6073", -"H6076", -"H6078", -"H6079", -"H607C", -"H6087", -"H6088", -"H608A", -"H608B", -"H608D", -"H60A1", -"H610A", -"H610B", -"H6110", -"H6117", -"H612A", -"H612B", -"H612F", -"H6144", -"H6159", -"H615A", -"H615B", -"H615C", -"H615D", -"H615E", -"H6163", -"H6167", -"H6168", -"H6172", -"H6173", -"H6175", -"H6176", -"H618A", -"H618C", -"H618E", -"H618F", -"H619A", -"H619B", -"H619C", -"H619D", -"H619E", -"H619Z", -"H61A0", -"H61A1", -"H61A2", -"H61A3", -"H61A5", -"H61A8", -"H61B2", -"H61B3", -"H61B5", -"H61BA", -"H61BC", -"H61BE", -"H61C2", -"H61C3", -"H61C5", -"H61D3", -"H61D5", -"H61E0", -"H61E1", -"H61E5", -"H61E6", -"H61F5", -"H6609", -"H6640", -"H6641", -"H7012", -"H7013", -"H7020", -"H7021", -"H7028", -"H7033", -"H7037", -"H7038", -"H7039", -"H7041", -"H7042", -"H7050", -"H7051", -"H7052", -"H7055", -"H705A", -"H705B", -"H705C", -"H705D", -"H705E", -"H705F", -"H7060", -"H7061", -"H7062", -"H7063", -"H7065", -"H7066", -"H706A", -"H706B", -"H706C", -"H7075", -"H70A1", -"H70A2", -"H70A3", -"H70B1", -"H70B3", -"H70BC", -"H70C1", -"H70C2", -"H70C4", -"H70C5", -"H70D1", -"H805C", -"H8072" +H6008, +H600D, +H6022, +H6042, +H6046, +H6047, +H6051, +H6052, +H6056, +H6059, +H605D, +H6061, +H6062, +H6065, +H6066, +H6067, +H6069, +H606A, +H6072, +H6073, +H6076, +H6078, +H6079, +H607C, +H6087, +H6088, +H608A, +H608B, +H608D, +H60A1, +H610A, +H610B, +H6110, +H6117, +H612A, +H612B, +H612F, +H6144, +H6159, +H615A, +H615B, +H615C, +H615D, +H615E, +H6163, +H6167, +H6168, +H6172, +H6173, +H6175, +H6176, +H618A, +H618C, +H618E, +H618F, +H619A, +H619B, +H619C, +H619D, +H619E, +H619Z, +H61A0, +H61A1, +H61A2, +H61A3, +H61A5, +H61A8, +H61B2, +H61B3, +H61B5, +H61BA, +H61BC, +H61BE, +H61C2, +H61C3, +H61C5, +H61D3, +H61D5, +H61E0, +H61E1, +H61E5, +H61E6, +H61F5, +H6609, +H6640, +H6641, +H7012, +H7013, +H7020, +H7021, +H7028, +H7033, +H7037, +H7038, +H7039, +H7041, +H7042, +H7050, +H7051, +H7052, +H7055, +H705A, +H705B, +H705C, +H705D, +H705E, +H705F, +H7060, +H7061, +H7062, +H7063, +H7065, +H7066, +H706A, +H706B, +H706C, +H7075, +H70A1, +H70A2, +H70A3, +H70B1, +H70B3, +H70BC, +H70C1, +H70C2, +H70C4, +H70C5, +H70D1, +H805C, +H8072 {% note %} Some scenes may not be supported from all devices. If you find a scene that's not working with a specific model, please open an issue at the [underling library](https://github.com/Galorhallen/govee-local-api/issues) From f2c8b75a8e5bc220c6024414e936a9374751409a Mon Sep 17 00:00:00 2001 From: Maciej Bieniek Date: Tue, 11 Mar 2025 12:52:52 +0100 Subject: [PATCH 059/122] Update GIOS docs to remove information about the measuring station ID (#37835) * Update GIOS docs to remove information about the measuring station ID * Update source/_integrations/gios.markdown * tiny tweak --------- Co-authored-by: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com> --- source/_integrations/gios.markdown | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/source/_integrations/gios.markdown b/source/_integrations/gios.markdown index 789f8f9720a..fe712f2b20d 100644 --- a/source/_integrations/gios.markdown +++ b/source/_integrations/gios.markdown @@ -17,8 +17,11 @@ ha_integration_type: service The `gios` integration uses the [GIOŚ](http://powietrze.gios.gov.pl/pjp/current) web service as a source for air quality data for your location. -## Setup - -To obtain ID of the measuring station, go to [GIOŚ](http://powietrze.gios.gov.pl/pjp/current) page, select the measuring station on the map and click the "More Info" link. The address of the opened page will look like this: `http://powietrze.gios.gov.pl/pjp/current/station_details/chart/291` and `291` will be ID of the measuring station. - {% include integrations/config_flow.md %} + +{% configuration_basic %} +Measuring station: + description: "Select a measuring station from the list." +Name: + description: "Service name in Home Assistant, by default, this is the name of your Home Assistant instance. For example `Home`." +{% endconfiguration_basic %} From 73200d6eda6fbef44f6396b8f4553152f6e4829c Mon Sep 17 00:00:00 2001 From: Lincoln Kirchoff Date: Tue, 11 Mar 2025 10:28:40 -0500 Subject: [PATCH 060/122] Add modbus hvac action documentation (#37823) * Added documentation for modbus climate attribute hvac_action. * added documentation for hvac action input_type. * Updated labels to match the parent pull request. --- source/_integrations/modbus.markdown | 53 +++++++++++++++++++++++++++- 1 file changed, 52 insertions(+), 1 deletion(-) diff --git a/source/_integrations/modbus.markdown b/source/_integrations/modbus.markdown index 417dbd730a9..bcf7bf9c2af 100644 --- a/source/_integrations/modbus.markdown +++ b/source/_integrations/modbus.markdown @@ -527,7 +527,7 @@ The master configuration like device_class are automatically copied to the slave ## Configuring climate entities -The Modbus climate platform allows you to monitor a thermostat or heaters as well as set a target temperature, HVAC mode, swing mode, and fan state. +The Modbus climate platform allows you to monitor a thermostat or heaters as well as set a target temperature, HVAC action, HVAC mode, swing mode, and fan state. Please refer to [Parameter usage](#parameters-usage-matrix) for conflicting parameters. @@ -652,6 +652,57 @@ climates: description: "Swap word ABCD -> CDAB, **not valid with data types: `int16`, `uint16`**" word_byte: description: "Swap word ABCD -> DCBA, **not valid with data types: `int16`, `uint16`**" + hvac_action_register: + description: "Configuration of register for HVAC action" + required: false + type: map + keys: + address: + description: "Address of HVAC action register." + required: true + type: integer + input_type: + description: "Type of register, either `holding` or `input`" + required: false + default: holding + type: string + values: + description: "Mapping between the register values and HVAC actions" + required: true + type: map + keys: + action_off: + description: "Value corresponding to HVAC Off action." + required: false + type: [integer, list] + action_cooling: + description: "Value corresponding to HVAC Cooling action." + required: false + type: [integer, list] + action_defrosting: + description: "Value corresponding to HVAC Defrosting action." + required: false + type: [integer, list] + action_drying: + description: "Value corresponding to HVAC Drying action." + required: false + type: [integer, list] + action_fan: + description: "Value corresponding to HVAC Fan action." + required: false + type: [integer, list] + action_heating: + description: "Value corresponding to HVAC Heating action." + required: false + type: [integer, list] + action_idle: + description: "Value corresponding to HVAC Idle action." + required: false + type: [integer, list] + action_preheating: + description: "Value corresponding to HVAC Preheating action." + required: false + type: [integer, list] hvac_mode_register: description: "Configuration of register for HVAC mode" required: false From 2ac4e7f9f8e2a318099ac7efe48e28a8b9e1ac4b Mon Sep 17 00:00:00 2001 From: Tsvi Mostovicz Date: Tue, 11 Mar 2025 20:24:06 +0200 Subject: [PATCH 061/122] Update Jewish calendar docs based on updated library (#37507) * Update holidays based on new version * Update jewish_calendar.markdown --- source/_integrations/jewish_calendar.markdown | 93 ++++++++++--------- 1 file changed, 48 insertions(+), 45 deletions(-) diff --git a/source/_integrations/jewish_calendar.markdown b/source/_integrations/jewish_calendar.markdown index 4fcfd3116d9..80cd540a228 100644 --- a/source/_integrations/jewish_calendar.markdown +++ b/source/_integrations/jewish_calendar.markdown @@ -84,53 +84,56 @@ Time sensor states are represented as ISO8601 formatted *UTC time*. ### Holiday sensor -The holiday sensor includes 3 attributes: *type*, *type_id*, and *id*. -The *type_id* is useful for cases to condition automations based on a range of types. +The holiday sensor includes 2 attributes: *type*, and *id*. + +The *id* is useful for automations so they're not language-dependent. On Rosh Chodesh Tevet, which always falls on Chanukah, the sensor will report both values: "Rosh Chodesh, Chanukah". +In Israel, on the 30th of Shvat, the sensor will report: "Rosh Chodesh, Family day". On the 22nd of Tishrei it will report: "Shmini Atzeret, Simchat Torah". + The following is the list of holidays the sensor knows about with their selected type: -| ID | English | Hebrew | Type | Type_ID | -|----------------------|----------------------------|-----------------------|---------------------------|:-------:| -| erev_rosh_hashana | Erev Rosh Hashana | Χ’Χ¨Χ‘ ראש Χ”Χ©Χ Χ” | EREV_YOM_TOV | 2 | -| rosh_hashana_i | Rosh Hashana I | א' ראש Χ”Χ©Χ Χ” | YOM_TOV | 1 | -| rosh_hashana_ii | Rosh Hashana II | Χ‘' ראש Χ”Χ©Χ Χ” | YOM_TOV | 1 | -| tzom_gedaliah | Tzom Gedaliah | צום Χ’Χ“ΧœΧ™Χ” | FAST_DAY | 5 | -| erev_yom_kippur | Erev Yom Kippur | Χ’Χ™Χ•Χ”"Χ› | EREV_YOM_TOV | 2 | -| yom_kippur | Yom Kippur | יום הכ׀ורים | YOM_TOV | 1 | -| erev_sukkot | Erev Sukkot | Χ’Χ¨Χ‘ Χ‘Χ•Χ›Χ•Χͺ | EREV_YOM_TOV | 2 | -| sukkot | Sukkot | Χ‘Χ•Χ›Χ•Χͺ | YOM_TOV | 1 | -| sukkot_ii | Sukkot II | Χ©Χ Χ™ של Χ‘Χ•Χ›Χ•Χͺ | YOM_TOV | 1 | -| hol_hamoed_sukkot | Hol hamoed Sukkot | Χ—Χ•Χœ Χ”ΧžΧ•Χ’Χ“ Χ‘Χ•Χ›Χ•Χͺ | HOL_HAMOED | 3 | -| hoshana_raba | Hoshana Raba | הושגנא Χ¨Χ‘Χ” | EREV_YOM_TOV | 2 | -| shmini_atzeret | Shmini Atzeret | Χ©ΧžΧ™Χ Χ™ Χ’Χ¦Χ¨Χͺ | YOM_TOV | 1 | -| simchat_torah | Simchat Torah | Χ©ΧžΧ—Χͺ ΧͺΧ•Χ¨Χ” | YOM_TOV | 1 | -| chanukah | Chanukah | Χ—Χ Χ•Χ›Χ” | MELACHA_PERMITTED_HOLIDAY | 4 | -| rabin_memorial_day | Yitzhak Rabin memorial day | יום Χ”Χ–Χ›Χ¨Χ•ΧŸ ΧœΧ™Χ¦Χ—Χ§ Χ¨Χ‘Χ™ΧŸ | MEMORIAL_DAY | 8 | -| asara_btevet | Asara B'Tevet | צום Χ’Χ©Χ¨Χ” Χ‘Χ˜Χ‘Χͺ | FAST_DAY | 5 | -| tu_bshvat | Tu B'Shvat | ט"Χ• Χ‘Χ©Χ‘Χ˜ | MINOR_HOLIDAY | 7 | -| family_day | Family Day | יום Χ”ΧžΧ©Χ€Χ—Χ” | ISRAEL_NATIONAL_HOLIDAY | 9 | -| memorial_day_unknown | Memorial day for fallen whose place of burial is unknown | יום Χ”Χ–Χ™Χ›Χ¨Χ•ΧŸ ΧœΧ—ΧœΧœΧ™ ΧžΧ’Χ¨Χ›Χ•Χͺ Χ™Χ©Χ¨ΧΧœ Χ©ΧžΧ§Χ•Χ Χ§Χ‘Χ•Χ¨Χͺם לא Χ Χ•Χ“Χ’ | MEMORIAL_DAY | 8 | -| taanit_esther | Ta'anit Esther | ΧͺΧ’Χ Χ™Χͺ אבΧͺΧ¨ | FAST_DAY | 5 | -| purim | Purim | ׀ורים | MELACHA_PERMITTED_HOLIDAY | 4 | -| shushan_purim | Shushan Purim | Χ©Χ•Χ©ΧŸ ׀ורים | MELACHA_PERMITTED_HOLIDAY | 4 | -| erev_pesach | Erev Pesach | Χ’Χ¨Χ‘ Χ€Χ‘Χ— | EREV_YOM_TOV | 2 | -| pesach | Pesach | Χ€Χ‘Χ— | YOM_TOV | 1 | -| pesach_ii | Pesach II | Χ©Χ Χ™ של Χ€Χ‘Χ— | YOM_TOV | 1 | -| hol_hamoed_pesach | Hol hamoed Pesach | Χ—Χ•Χœ Χ”ΧžΧ•Χ’Χ“ Χ€Χ‘Χ— | HOL_HAMOED | 3 | -| pesach_vii | Pesach VII | Χ©Χ‘Χ™Χ’Χ™ Χ€Χ‘Χ— | YOM_TOV | 1 | -| pesach_viii | Pesach VIII | ΧΧ—Χ¨Χ•ΧŸ של Χ€Χ‘Χ— | YOM_TOV | 1 | -| yom_hashoah | Yom HaShoah | יום השואה | MEMORIAL_DAY | 8 | -| yom_hazikaron | Yom HaZikaron | יום Χ”Χ–Χ›Χ¨Χ•ΧŸ | MEMORIAL_DAY | 8 | -| yom_haatzmaut | Yom HaAtzma'ut | יום Χ”Χ’Χ¦ΧžΧΧ•Χͺ | MODERN_HOLIDAY | 6 | -| lag_bomer | Lag B'Omer | ל"Χ’ Χ‘Χ’Χ•ΧžΧ¨ | MINOR_HOLIDAY | 7 | -| yom_yerushalayim | Yom Yerushalayim | יום Χ™Χ¨Χ•Χ©ΧœΧ™Χ | MODERN_HOLIDAY | 6 | -| erev_shavuot | Erev Shavuot | Χ’Χ¨Χ‘ Χ©Χ‘Χ•Χ’Χ•Χͺ | EREV_YOM_TOV | 2 | -| shavuot | Shavuot | Χ©Χ‘Χ•Χ’Χ•Χͺ | YOM_TOV | 1 | -| shavuot_ii | Shavuot II | Χ©Χ Χ™ של Χ©Χ‘Χ•Χ’Χ•Χͺ | YOM_TOV | 1 | -| tzom_tammuz | Tzom Tammuz | צום Χ©Χ‘Χ’Χ” Χ’Χ©Χ¨ Χ‘ΧͺΧžΧ•Χ– | FAST_DAY | 5 | -| zeev_zhabotinsky_day | Zeev Zhabotinsky day | יום זאב Χ–'Χ‘Χ•Χ˜Χ™Χ Χ‘Χ§Χ™ | MEMORIAL_DAY | 8 | -| tisha_bav | Tish'a B'Av | ΧͺΧ©Χ’Χ” באב | FAST_DAY | 5 | -| tu_bav | Tu B'Av | ט"Χ• באב | MINOR_HOLIDAY | 7 | -| rosh_chodesh | Rosh Chodesh | ראש Χ—Χ•Χ“Χ© | ROSH_CHODESH | 10 | +| ID | English | Hebrew | Type | +|----------------------|----------------------------|-----------------------|---------------------------| +| erev_rosh_hashana | Erev Rosh Hashana | Χ’Χ¨Χ‘ ראש Χ”Χ©Χ Χ” | EREV_YOM_TOV | +| rosh_hashana_i | Rosh Hashana I | א' ראש Χ”Χ©Χ Χ” | YOM_TOV | +| rosh_hashana_ii | Rosh Hashana II | Χ‘' ראש Χ”Χ©Χ Χ” | YOM_TOV | +| tzom_gedaliah | Tzom Gedaliah | צום Χ’Χ“ΧœΧ™Χ” | FAST_DAY | +| erev_yom_kippur | Erev Yom Kippur | Χ’Χ™Χ•Χ”"Χ› | EREV_YOM_TOV | +| yom_kippur | Yom Kippur | יום הכ׀ורים | YOM_TOV | +| erev_sukkot | Erev Sukkot | Χ’Χ¨Χ‘ Χ‘Χ•Χ›Χ•Χͺ | EREV_YOM_TOV | +| sukkot | Sukkot | Χ‘Χ•Χ›Χ•Χͺ | YOM_TOV | +| sukkot_ii | Sukkot II | Χ©Χ Χ™ של Χ‘Χ•Χ›Χ•Χͺ | YOM_TOV | +| hol_hamoed_sukkot | Hol hamoed Sukkot | Χ—Χ•Χœ Χ”ΧžΧ•Χ’Χ“ Χ‘Χ•Χ›Χ•Χͺ | HOL_HAMOED | +| hoshana_raba | Hoshana Raba | הושגנא Χ¨Χ‘Χ” | EREV_YOM_TOV | +| shmini_atzeret | Shmini Atzeret | Χ©ΧžΧ™Χ Χ™ Χ’Χ¦Χ¨Χͺ | YOM_TOV | +| simchat_torah | Simchat Torah | Χ©ΧžΧ—Χͺ ΧͺΧ•Χ¨Χ” | YOM_TOV | +| chanukah | Chanukah | Χ—Χ Χ•Χ›Χ” | MELACHA_PERMITTED_HOLIDAY | +| rabin_memorial_day | Yitzhak Rabin memorial day | יום Χ”Χ–Χ›Χ¨Χ•ΧŸ ΧœΧ™Χ¦Χ—Χ§ Χ¨Χ‘Χ™ΧŸ | MEMORIAL_DAY | +| asara_btevet | Asara B'Tevet | צום Χ’Χ©Χ¨Χ” Χ‘Χ˜Χ‘Χͺ | FAST_DAY | +| tu_bshvat | Tu B'Shvat | ט"Χ• Χ‘Χ©Χ‘Χ˜ | MINOR_HOLIDAY | +| family_day | Family Day | יום Χ”ΧžΧ©Χ€Χ—Χ” | ISRAEL_NATIONAL_HOLIDAY | +| memorial_day_unknown | Memorial day for fallen whose place of burial is unknown | יום Χ”Χ–Χ™Χ›Χ¨Χ•ΧŸ ΧœΧ—ΧœΧœΧ™ ΧžΧ’Χ¨Χ›Χ•Χͺ Χ™Χ©Χ¨ΧΧœ Χ©ΧžΧ§Χ•Χ Χ§Χ‘Χ•Χ¨Χͺם לא Χ Χ•Χ“Χ’ | MEMORIAL_DAY | +| taanit_esther | Ta'anit Esther | ΧͺΧ’Χ Χ™Χͺ אבΧͺΧ¨ | FAST_DAY | +| purim | Purim | ׀ורים | MELACHA_PERMITTED_HOLIDAY | +| shushan_purim | Shushan Purim | Χ©Χ•Χ©ΧŸ ׀ורים | MELACHA_PERMITTED_HOLIDAY | +| erev_pesach | Erev Pesach | Χ’Χ¨Χ‘ Χ€Χ‘Χ— | EREV_YOM_TOV | +| pesach | Pesach | Χ€Χ‘Χ— | YOM_TOV | +| pesach_ii | Pesach II | Χ©Χ Χ™ של Χ€Χ‘Χ— | YOM_TOV | +| hol_hamoed_pesach | Hol hamoed Pesach | Χ—Χ•Χœ Χ”ΧžΧ•Χ’Χ“ Χ€Χ‘Χ— | HOL_HAMOED | +| pesach_vii | Pesach VII | Χ©Χ‘Χ™Χ’Χ™ Χ€Χ‘Χ— | YOM_TOV | +| pesach_viii | Pesach VIII | ΧΧ—Χ¨Χ•ΧŸ של Χ€Χ‘Χ— | YOM_TOV | +| yom_hashoah | Yom HaShoah | יום השואה | MEMORIAL_DAY | +| yom_hazikaron | Yom HaZikaron | יום Χ”Χ–Χ›Χ¨Χ•ΧŸ | MEMORIAL_DAY | +| yom_haatzmaut | Yom HaAtzma'ut | יום Χ”Χ’Χ¦ΧžΧΧ•Χͺ | MODERN_HOLIDAY | +| lag_bomer | Lag B'Omer | ל"Χ’ Χ‘Χ’Χ•ΧžΧ¨ | MINOR_HOLIDAY | +| yom_yerushalayim | Yom Yerushalayim | יום Χ™Χ¨Χ•Χ©ΧœΧ™Χ | MODERN_HOLIDAY | +| erev_shavuot | Erev Shavuot | Χ’Χ¨Χ‘ Χ©Χ‘Χ•Χ’Χ•Χͺ | EREV_YOM_TOV | +| shavuot | Shavuot | Χ©Χ‘Χ•Χ’Χ•Χͺ | YOM_TOV | +| shavuot_ii | Shavuot II | Χ©Χ Χ™ של Χ©Χ‘Χ•Χ’Χ•Χͺ | YOM_TOV | +| tzom_tammuz | Tzom Tammuz | צום Χ©Χ‘Χ’Χ” Χ’Χ©Χ¨ Χ‘ΧͺΧžΧ•Χ– | FAST_DAY | +| zeev_zhabotinsky_day | Zeev Zhabotinsky day | יום זאב Χ–'Χ‘Χ•Χ˜Χ™Χ Χ‘Χ§Χ™ | MEMORIAL_DAY | +| tisha_bav | Tish'a B'Av | ΧͺΧ©Χ’Χ” באב | FAST_DAY | +| tu_bav | Tu B'Av | ט"Χ• באב | MINOR_HOLIDAY | +| rosh_chodesh | Rosh Chodesh | ראש Χ—Χ•Χ“Χ© | ROSH_CHODESH | From 6cb9d7811a7aaae640f1f6b3ca615818238a69e2 Mon Sep 17 00:00:00 2001 From: Andrew Sayre <6730289+andrewsayre@users.noreply.github.com> Date: Tue, 11 Mar 2025 13:25:45 -0500 Subject: [PATCH 062/122] Document autofailover behavior (#37916) --- source/_integrations/heos.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_integrations/heos.markdown b/source/_integrations/heos.markdown index 956cb00c9fd..06edfcab4fc 100644 --- a/source/_integrations/heos.markdown +++ b/source/_integrations/heos.markdown @@ -40,12 +40,12 @@ Add this integration to automate playback and group configuration of HEOS-capabl {% include integrations/config_flow.md %} {% note %} -Only a single instance of the integration is needed to access the entire HEOS system on the network. It will only connect to a single {% term host %}. +A single instance of the integration adds all devices in the HEOS system to Home Assistant. When setup through discovery, it will automatically select the best {% term host %}. The integration will automatically reconnect and fail over to other hosts in the HEOS system if the configured host goes offline. {% endnote %} {% configuration_basic %} Host: - description: "The host name or IP address (e.g., \"192.168.1.2\") of your HEOS-capable product. If you have more than one device, select, or enter a host, that is connected to the LAN via wire or has the strongest wireless signal." + description: "The host name or IP address (e.g., \"192.168.1.2\") of your HEOS-capable product. If you have more than one device, enter a host that is connected to the LAN via wire and is always powered on." {% endconfiguration_basic %} ## Configuration options From 057a20cde3e787e5dc259deffa7952be254aa67c Mon Sep 17 00:00:00 2001 From: victorclaessen Date: Tue, 11 Mar 2025 22:48:44 +0100 Subject: [PATCH 063/122] =?UTF-8?q?Add=20=C2=B5s=20to=20duration=20device?= =?UTF-8?q?=20class=20for=20sensor=20and=20number=20components=20(#37922)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Update number.markdown add Β΅s to duration * Update sensor.markdown add Β΅s to duration --- 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 2bb26928969..8d04222722a 100644 --- a/source/_integrations/number.markdown +++ b/source/_integrations/number.markdown @@ -51,7 +51,7 @@ The following device classes are supported for numbers: - **data_rate**: Data rate in bit/s, kbit/s, Mbit/s, Gbit/s, B/s, kB/s, MB/s, GB/s, KiB/s, MiB/s or GiB/s - **data_size**: Data size in bit, kbit, Mbit, Gbit, B, kB, MB, GB, TB, PB, EB, ZB, YB, KiB, MiB, GiB, TiB, PiB, EiB, ZiB or YiB - **distance**: Generic distance in km, m, cm, mm, mi, nmi, yd, or in -- **duration**: Duration in d, h, min, s, or ms +- **duration**: Duration in d, h, min, s, ms, or Β΅s - **energy**: Energy in J, kJ, MJ, GJ, mWh, Wh, kWh, MWh, GWh, TWh, cal, kcal, Mcal, or Gcal - **energy_distance**: Energy per distance in kWh/100km, mi/kWh or km/kWh. - **energy_storage**: Stored energy in J, kJ, MJ, GJ, mWh, Wh, kWh, MWh, GWh, TWh, cal, kcal, Mcal, or Gcal diff --git a/source/_integrations/sensor.markdown b/source/_integrations/sensor.markdown index 5c94339fbf2..d535faa6d62 100644 --- a/source/_integrations/sensor.markdown +++ b/source/_integrations/sensor.markdown @@ -61,7 +61,7 @@ The following device classes are supported for sensors: - **data_size**: Data size in bit, kbit, Mbit, Gbit, B, kB, MB, GB, TB, PB, EB, ZB, YB, KiB, MiB, GiB, TiB, PiB, EiB, ZiB or YiB - **date**: Date string (ISO 8601) - **distance**: Generic distance in km, m, cm, mm, mi, nmi, yd, or in -- **duration**: Duration in d, h, min, s, or ms +- **duration**: Duration in d, h, min, s, ms, or Β΅s - **energy**: Energy in J, kJ, MJ, GJ, mWh, Wh, kWh, MWh, GWh, TWh, cal, kcal, Mcal, or Gcal - **energy_distance**: Energy per distance in kWh/100km, mi/kWh or km/kWh. - **energy_storage**: Stored energy in J, kJ, MJ, GJ, mWh, Wh, kWh, MWh, GWh, TWh, cal, kcal, Mcal, or Gcal From 2065f39e62a3db6bfe5554cc9ab49441f8b25a5e Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Tue, 11 Mar 2025 12:58:08 -1000 Subject: [PATCH 064/122] Add InkBird ITH-11-B model (#37925) https://github.com/home-assistant/core/pull/140423 --- source/_integrations/inkbird.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_integrations/inkbird.markdown b/source/_integrations/inkbird.markdown index 340ca10ab60..867e3b68454 100644 --- a/source/_integrations/inkbird.markdown +++ b/source/_integrations/inkbird.markdown @@ -26,6 +26,7 @@ Integrates [INKBIRD](https://www.inkbird.com/) devices into Home Assistant. - [INKBIRD Bluetooth BBQ Thermometer IBT-6XS](https://inkbird.com/products/bluetooth-bbq-thermometer-ibt-6xs) - [INKBIRD Bluetooth Grill Thermometer IBT-4XS](https://inkbird.com/products/bluetooth-grill-thermometer-ibt-4xs) - [INKBIRD Bluetooth Grill Thermometer IBT-2X](https://inkbird.com/products/bluetooth-grill-thermometer-ibt-2x) +- [INKBIRD Bluetooth Hygrometer Thermometer ITH-11-B](https://inkbird.com/products/bluetooth-hygrometer-thermometer-ith-11-b) - [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) - [Nutrichef Smart Wireless Grill Thermometer](https://nutrichefkitchen.com/products/pwirbbq40) From 593d5caef35f4ca1fbdb704c9cc6e96ed4da29ca Mon Sep 17 00:00:00 2001 From: Paul Bottein Date: Thu, 13 Mar 2025 21:27:22 +0100 Subject: [PATCH 065/122] Add lawn mower support to homekit (#37932) --- source/_integrations/homekit.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_integrations/homekit.markdown b/source/_integrations/homekit.markdown index 0d8c72b7bf3..e04c82fe4a0 100644 --- a/source/_integrations/homekit.markdown +++ b/source/_integrations/homekit.markdown @@ -406,7 +406,7 @@ The following integrations are currently supported: | Integration | Type Name | Description | | ------------------------------------------------------------- | ---------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | alarm_control_panel | SecuritySystem | All security systems. | -| automation / input_boolean / remote / scene / script / vacuum | Switch | All represented as switches. | +| automation / input_boolean / lawn_mower / remote / scene / script / vacuum | Switch | All represented as switches. | | input_select / select | Switch | Represented as a power strip with buttons for each option. | | binary_sensor | Sensor | Support for `co2`, `door`, `garage_door`, `gas`, `moisture`, `motion`, `occupancy`, `opening`, `smoke` and `window` device classes. Defaults to the `occupancy` device class for everything else. | | camera | Camera | All camera devices. **HomeKit Secure Video is not supported at this time.** | From c4724201d5993b2a389f4e162a9a0c659edd9c32 Mon Sep 17 00:00:00 2001 From: Jan-Philipp Benecke Date: Fri, 14 Mar 2025 13:16:23 +0100 Subject: [PATCH 066/122] Add yaml option to disable sandbox to iframe documentation --- source/_dashboards/iframe.markdown | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/source/_dashboards/iframe.markdown b/source/_dashboards/iframe.markdown index 089db8e9bb2..0bd7daf027b 100644 --- a/source/_dashboards/iframe.markdown +++ b/source/_dashboards/iframe.markdown @@ -61,6 +61,11 @@ allow: description: The [Permissions Policy](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Permissions-Policy#iframes) of the iframe, that is, the value of the [`allow`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe#allow) attribute. type: string default: "fullscreen" +disable_sandbox: + required: false + description: Disables the [sandbox](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe#attr-sandbox) attribute of the iframe, e.g. required for Chrome when viewing PDFs. This is less secure and should only be used if you trust the content of the iframe. + type: boolean + default: false {% endconfiguration %} ### Examples From a4afb5b6ca801e55ca507b7971733cd8a95d4ffe Mon Sep 17 00:00:00 2001 From: Jan Bouwhuis Date: Fri, 14 Mar 2025 14:04:15 +0100 Subject: [PATCH 067/122] Add initial support for MQTT subentries with notify platform support (#37473) * Add initial support for MQTT subentries for notify platform * Apply changes from code review * tiny tweak * Update source/_integrations/mqtt.markdown * Move removing instructions to the end of the document --------- Co-authored-by: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com> --- source/_integrations/mqtt.markdown | 43 +++++++++++++++++++++--------- 1 file changed, 30 insertions(+), 13 deletions(-) diff --git a/source/_integrations/mqtt.markdown b/source/_integrations/mqtt.markdown index 1bc09a99b2d..32e12424d3b 100644 --- a/source/_integrations/mqtt.markdown +++ b/source/_integrations/mqtt.markdown @@ -51,19 +51,7 @@ MQTT (aka MQ Telemetry Transport) is a machine-to-machine or "Internet of Things {% include integrations/config_flow.md %} -### Removing the MQTT integration - -The MQTT integration and its entities can be removed by following these steps: - -1. Navigate to **Settings** > **Devices & Services** -2. Find the MQTT integration and click on it -3. Click the delete button to remove the MQTT config entry - -Note: This action does not remove the [MQTT broker](#setting-up-a-broker) or its data. If you want to completely remove MQTT: - -1. Check your `configuration.yaml` and other YAML files for MQTT-related configurations and remove them -2. Review your automations and scripts for any MQTT dependencies -3. Consider backing up your configuration before making these changes +MQTT Devices and entities can be set up through [MQTT -discovery](#mqtt-discovery) or [added manually](#manual-configured-mqtt-items) via YAML or subentries.
{% details "Configuration of MQTT components via MQTT discovery" %} @@ -131,6 +119,21 @@ Note: This action does not remove the [MQTT broker](#setting-up-a-broker) or its {% enddetails %} + +{% details "Configuration of MQTT components via Subentries" %} + +- [Notify](/integrations/notify.mqtt/) + +To add an MQTT device via a Subentry, follow these steps: + +1. Go to **{% my integrations title="Settings > Devices & services" %}**. +2. Select the MQTT integration. +3. Add a subentry via {% my integrations title="**Settings** > **Devices & services**" %}, click {% icon "mdi:dots-vertical" %} and select **Add MQTT device**. + +A device context and one or more entities can be added to the subentry. + +{% enddetails %} + Your first step to get MQTT and Home Assistant working is to choose a broker. The easiest option is to install the official Mosquitto Broker add-on. You can choose to set up and configure this add-on automatically when you set up the MQTT integration. Home Assistant will automatically generate and assign a safe username and password, and no further attention is required. This also works if you have already set up this add-on yourself in advance. @@ -163,6 +166,8 @@ Add the MQTT integration, then provide your broker's hostname (or IP address) an 2. Select the MQTT integration. 3. Reconfigure the MQTT broker settings via {% my integrations title="**Settings** > **Devices & services**" %}, click {% icon "mdi:dots-vertical" %} and select **Reconfigure**. +MQTT subentries can also be reconfigured. Additional entities can be added, or an entity can bve removed from the sub entry. Each MQTT subentry holds one MQTT device. The MQTT device must have at least one entity. + {% important %} If you experience an error message like `Failed to connect due to exception: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed`, then turn on `Advanced options` and set [Broker certificate validation](/integrations/mqtt/#broker-certificate-validation) to `Auto`. {% endimportant %} @@ -1371,6 +1376,8 @@ Compatibility and features will vary, and not all devices may work. ## Manual configured MQTT items +Support to add manual items is added for the MQTT Notify entities, other platforms will follow later. + For most integrations, it is also possible to manually set up MQTT items in {% term "`configuration.yaml`" %}. Read more [about configuration in YAML](/docs/configuration/yaml). MQTT supports two styles for configuring items in YAML. All configuration items are placed directly under the `mqtt` integration key. Note that you cannot mix these styles. Use the *YAML configuration listed per item* style when in doubt. @@ -1578,3 +1585,13 @@ logger: Event `event_mqtt_reloaded` is fired when Manually configured MQTT entities have been reloaded and entities thus might have changed. This event has no additional data. + +## Removing the integration + +{% include integrations/remove_device_service_steps.md %} + +Note: This action does not remove the [MQTT broker](#setting-up-a-broker) or its data. If you want to completely remove MQTT: + +1. Check your {% term "`configuration.yaml`" %} and other YAML files for MQTT-related configurations and remove them +2. Review your automations and scripts for any MQTT dependencies +3. Consider backing up your configuration before making these changes From 5313d30e3a3cf0b59127fee043df84b14cf1c96a Mon Sep 17 00:00:00 2001 From: Paul Bottein Date: Fri, 14 Mar 2025 17:19:10 +0100 Subject: [PATCH 068/122] Add lawn mower support to google assistant (#37958) --- source/_integrations/google_assistant.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_integrations/google_assistant.markdown b/source/_integrations/google_assistant.markdown index 876c71e4b48..fc3cda1d2c1 100644 --- a/source/_integrations/google_assistant.markdown +++ b/source/_integrations/google_assistant.markdown @@ -259,6 +259,7 @@ Currently, the following domains are available to be used with Google Assistant, - input_button - input_select (option/setting/mode/value) - light (on/off/brightness/rgb color/color temp) +- lawn_mower (dock/start/pause) - lock - media_player (on/off/set volume (via set volume)/source (via set input source)/control playback) - scene (on) From 14a797fd32a9a84f8e5071036b3deb7b706e73ce Mon Sep 17 00:00:00 2001 From: Manu <4445816+tr4nt0r@users.noreply.github.com> Date: Fri, 14 Mar 2025 17:20:41 +0100 Subject: [PATCH 069/122] Add update_daily action to Habitica integration (#37912) * Add update_daily action * typos --- source/_integrations/habitica.markdown | 28 ++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/source/_integrations/habitica.markdown b/source/_integrations/habitica.markdown index f05460279ae..83c8ec6b2b9 100644 --- a/source/_integrations/habitica.markdown +++ b/source/_integrations/habitica.markdown @@ -384,6 +384,34 @@ Creates a to-do for the selected Habitica character. | `tag` | yes | Add tags to the Habitica to-do. If a tag does not already exist, a new one will be created. | | `alias` | yes | A task alias can be used instead of the name or task ID. Only dashes, underscores, and alphanumeric characters are supported. The task alias must be unique among all your tasks. | +### Action `habitica.update_daily` + +Updates a specific daily for the selected Habitica character. + +| Data attribute | Optional | Description | +| -------------- | -------- | -------------------------------------------------------------------------------------------- | +| `config_entry` | no | Select the Habitica account to update a daily. | +| `task` | no | The name (or task ID) of the daily you want to update. | +| `rename` | yes | The new title for the Habitica daily. | +| `notes` | yes | The new notes for the Habitica daily. | +| `add_checklist_item` | yes | The items to add to the daily's checklist. | +| `remove_checklist_item` | yes | Remove items from a daily's checklist. | +| `score_checklist_item` | yes | Mark items from a daily's checklist as completed. | +| `unscore_checklist_item` | yes | Undo completion of items of a daily's checklist. | +| `priority` | yes | Update the difficulty of a daily. Valid values: `trivial`, `easy`, `medium`, `hard` | +| `start_date` | yes | Defines when the daily task becomes active and specifies the exact weekday or day of the month it repeats on. | +| `frequency` | yes | The repetition interval of a daily. Valid values: `daily`, `weekly`, `monthly`, `yearly`. | +| `every_x` | yes | The number of intervals (`days`, `weeks`, `months`, or `years`) after which the daily repeats, based on the chosen repetition interval. A value of 0 makes the daily inactive (a *Gray Daily*). | +| `repeat` | yes | The days of the week the daily repeats. Applicable when the repetition interval is set to weekly. | +| `repeat_monthly` | yes | Whether a monthly recurring task repeats on the same calendar day each month (`day_of_month`), or on the same weekday and week of the month (`day_of_week`), based on the start date. Applicable when the repetition interval is set to monthly. | +| `reminder` | yes | Add reminders to a Habitica daily. | +| `remove_reminder` | yes | Remove specific reminders from a Habitica daily. | +| `clear_reminder` | yes | Remove all reminders from a Habitica daily. | +| `tag` | yes | Add tags to the Habitica daily. If a tag does not already exist, a new one will be created. | +| `remove_tag` | yes | Remove tags from the Habitica daily. | +| `streak` | yes | Adjust or reset the streak counter of the daily. | +| `alias` | yes | A task alias can be used instead of the name or task ID. Only dashes, underscores, and alphanumeric characters are supported. The task alias must be unique among all your tasks. | + ## Automations Get started with these automation examples for Habitica, each featuring ready-to-use blueprints! From 279bdf32b04f3232d06742e26f22946adfbfebc9 Mon Sep 17 00:00:00 2001 From: Joost Lekkerkerker Date: Sun, 16 Mar 2025 08:47:51 +0100 Subject: [PATCH 070/122] Add Valve platform to SmartThings (#37994) --- source/_integrations/smartthings.markdown | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/source/_integrations/smartthings.markdown b/source/_integrations/smartthings.markdown index a7c8b6c0cd6..9043204862a 100644 --- a/source/_integrations/smartthings.markdown +++ b/source/_integrations/smartthings.markdown @@ -13,6 +13,7 @@ ha_category: - Scene - Sensor - Switch + - Valve ha_release: 0.87 ha_iot_class: Cloud Push ha_config_flow: true @@ -27,6 +28,7 @@ ha_platforms: - scene - sensor - switch + - valve ha_dhcp: true ha_integration_type: integration --- @@ -53,6 +55,7 @@ SmartThings represents devices as a set of [capabilities](https://developer.smar - [Sensor](#sensor) - [Scene](#scene) - [Switch](#switch) +- [Valve](#valve) ### Binary sensor @@ -201,6 +204,10 @@ The SmartThings Scene lets you activate scenes defined in SmartThings. A scene e The SmartThings Switch lets you control devices that have the [`switch`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#switch) capability that are not already represented by a more specific platform. +### Valve + +The SmartThings Valve platform lets you control devices that have the [`valve`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#valve) capability, showing the valve status and opening and closing. + ## Troubleshooting ### Enabling debug logs and diagnostics From a5d3f9198d841bd1beef526d1b21b429b17d4290 Mon Sep 17 00:00:00 2001 From: Thomas55555 <59625598+Thomas55555@users.noreply.github.com> Date: Sun, 16 Mar 2025 12:52:56 +0100 Subject: [PATCH 071/122] Add Remote calendar integration (#37568) * Add remote calendar --- source/_integrations/remote_calendar.markdown | 60 +++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 source/_integrations/remote_calendar.markdown diff --git a/source/_integrations/remote_calendar.markdown b/source/_integrations/remote_calendar.markdown new file mode 100644 index 00000000000..c051bbafdf7 --- /dev/null +++ b/source/_integrations/remote_calendar.markdown @@ -0,0 +1,60 @@ +--- +title: Remote calendar +description: Instructions on how to use remote calendars in Home Assistant. +ha_category: + - Calendar +ha_iot_class: Cloud Polling +ha_release: 2025.04 +ha_config_flow: true +ha_domain: remote_calendar +ha_platforms: + - calendar +ha_codeowners: + - '@Thomas55555' +ha_integration_type: service +--- + +The **Remote calendar** {% term integration %} allows you to read a calendar in Home Assistant for powering automations. + +## Known limitations + +The integration does not provide the ability to connect to an resource that requires authentication or special headers. + +## Installation instructions + +{% include integrations/config_flow.md %} + +Please provide the following information to the config flow. + +{% configuration_basic %} +Calendar Name: + description: "A name for your calendar, you can choose a name you want. + Example: `Home Assistant Events`" +Calendar URL: + description: "The URL of the remote calendar. Example: `https://calendar.google.com/calendar/ical/p07n98go11onamd08d0kmq6jhs%40group.calendar.google.com/public/basic.ics`" +{% endconfiguration_basic %} + +## Data updates + +At the start of the integration, we fetch data from the remote. If the update fails, the integration tries again to fetch the data. After that, the update interval of the calendar is set to every 24 hours. + +### Defining a custom polling interval + +{% include common-tasks/define_custom_polling.md %} +## Supported functionality + +The integration only supports reading a calendar. A calendar entity has a state and attributes that represent the next upcoming event (only). All the events of the calendar can be displayed in the Calendar dashboard. + +## Calendar Event Automations + +Individual Calendar *Events* are what powers automations such as: + +- Notify me *12 hours before* the *start* of the event named *Garbage collection*. + +See [Calendar Automations](/integrations/calendar#automation) for an overview, and read more about [Calendar Trigger Variables](/docs/automation/templating/#calendar) for the available information you can use in a condition or action such as the event `summary`, `description`, `location` and more. + +## Removing the integration + +This integration follows standard integration removal. No extra steps are required. + +{% include integrations/remove_device_service.md %} From 8ec4cd95b8c4a74d6e525a7fdefe6fa50d93b7f8 Mon Sep 17 00:00:00 2001 From: Luke Lashley Date: Sun, 16 Mar 2025 12:12:41 -0400 Subject: [PATCH 072/122] Add Binary Sensor to Snoo (#38014) * Add Binary Sensor to Snoo * combine safety clips * Update snoo.markdown Co-authored-by: Joost Lekkerkerker --------- Co-authored-by: Joost Lekkerkerker --- source/_integrations/snoo.markdown | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/source/_integrations/snoo.markdown b/source/_integrations/snoo.markdown index fc5a2e516d5..1576236f115 100644 --- a/source/_integrations/snoo.markdown +++ b/source/_integrations/snoo.markdown @@ -2,6 +2,7 @@ title: Happiest Baby Snoo description: Instructions on how to integrate Snoo into Home Assistant ha_category: + - Binary Sensor - Sensor ha_iot_class: Cloud Push ha_release: 2025.3 @@ -10,6 +11,7 @@ ha_codeowners: - '@Lash-L' ha_domain: snoo ha_platforms: + - binary_sensor - sensor ha_integration_type: integration ha_quality_scale: bronze @@ -23,6 +25,12 @@ This integration follows standard integration installation. No extra steps are r {% include integrations/config_flow.md %} +## Binary Sensors + +### Left and right safety clips + +States if the left or right safety clip is connected to the baby's swaddle. + ## Sensors ### State From 37339b0af1849bf1ac5e2625809c3c4b3352b560 Mon Sep 17 00:00:00 2001 From: Luke Lashley Date: Sun, 16 Mar 2025 12:17:31 -0400 Subject: [PATCH 073/122] Add select entity for Snoo (#37987) --- source/_integrations/snoo.markdown | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/source/_integrations/snoo.markdown b/source/_integrations/snoo.markdown index 1576236f115..68b519f491b 100644 --- a/source/_integrations/snoo.markdown +++ b/source/_integrations/snoo.markdown @@ -4,6 +4,7 @@ description: Instructions on how to integrate Snoo into Home Assistant ha_category: - Binary Sensor - Sensor + - Select ha_iot_class: Cloud Push ha_release: 2025.3 ha_config_flow: true @@ -13,6 +14,7 @@ ha_domain: snoo ha_platforms: - binary_sensor - sensor + - select ha_integration_type: integration ha_quality_scale: bronze --- @@ -48,6 +50,19 @@ The Snoo can have one of 8 states ## Time left This describes how long until the Snoo will change levels or it is Unknown if it is not currently planning to change levels. +## Select + +### Intensity + +This allows you to set the soothing level of your Snoo. + +1. Baseline - This is the basic state the snoo starts with. It has not detected the need to do any further soothing. +2. Level 1 - This is the lowest level of soothing. +3. Level 2 +4. Level 3 +5. Level 4 +6. Stop - The snoo is no longer running. + ## Removing the integration {% include integrations/remove_device_service.md %} From 6dba021f335c72cc72caf90830000316efabedcd Mon Sep 17 00:00:00 2001 From: Markus Adrario Date: Sun, 16 Mar 2025 20:17:21 +0100 Subject: [PATCH 074/122] Add Homee binary sensor platform (#37867) * Add Homee binary sensor * Apply suggestions from code review --------- Co-authored-by: Joost Lekkerkerker --- source/_integrations/homee.markdown | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/_integrations/homee.markdown b/source/_integrations/homee.markdown index 59368a18227..3ec752e1fda 100644 --- a/source/_integrations/homee.markdown +++ b/source/_integrations/homee.markdown @@ -10,6 +10,7 @@ ha_codeowners: - '@Taraman17' ha_domain: homee ha_platforms: + - binary_sensor - button - cover - light @@ -26,6 +27,7 @@ ha_quality_scale: bronze There is currently support for the following device types in Home Assistant: +- binary sensor - button - cover - light From 138da6d1d8d57b039fc3c88eacffa03c5ea67377 Mon Sep 17 00:00:00 2001 From: Dan Raper Date: Sun, 16 Mar 2025 19:39:31 +0000 Subject: [PATCH 075/122] Add price cap section to Ohme (#37959) * Add price cap sections to Ohme * Reword price cap service for ohme * Typo * Typo --------- Co-authored-by: Franck Nijhof --- source/_integrations/ohme.markdown | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/source/_integrations/ohme.markdown b/source/_integrations/ohme.markdown index 0213752b0eb..faf7853281f 100644 --- a/source/_integrations/ohme.markdown +++ b/source/_integrations/ohme.markdown @@ -103,6 +103,9 @@ The Ohme integration provides the following entities. #### Switches +- **Price cap** + - **Description**: Prevents charging when the electricity price exceeds a defined threshold. The threshold can be set by the service `ohme.set_price_cap`. ***Not available with some energy providers and tariffs.*** + - **Available for devices**: all - **Lock buttons** - **Description**: Disable the controls on the device. - **Available for devices**: all @@ -131,6 +134,14 @@ The `ohme.list_charge_slots` action is used to fetch a list of charge slots from |------------------------|----------|--------------------------------------------------------------| | `config_entry` | No | The config entry of the account to get the charge list from. | +### Action: Set price cap + +The `ohme.set_price_cap` action is used to set the price cap threshold. This can be toggled by the switch **Price cap**. + +| Data attribute | Optional | Description | +|------------------------|----------|-------------------------------------------------------------| +| `config_entry` | No | The config entry of the account to apply the price cap to. | +| `price_cap` | No | Threshold in 1/100ths of your local currency. | ## Removing the integration From 83f32bd42c7f9eb8686b4008ee73ee2577056a52 Mon Sep 17 00:00:00 2001 From: Ivaylo Iliev <43753631+iiliev-nemetschek@users.noreply.github.com> Date: Sun, 16 Mar 2025 22:51:26 +0200 Subject: [PATCH 076/122] Update nibe_heatpump.markdown (#38017) --- source/_integrations/nibe_heatpump.markdown | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/source/_integrations/nibe_heatpump.markdown b/source/_integrations/nibe_heatpump.markdown index 57bb0023744..79b433b6374 100644 --- a/source/_integrations/nibe_heatpump.markdown +++ b/source/_integrations/nibe_heatpump.markdown @@ -25,25 +25,26 @@ The Nibe Heat Pump integration allows you to control and monitor [Nibe Heat Pump Supported devices: -- F1145/F1155 -- S1145/S1155 -- F1245/F1255 -- F1355/F1355 +- F1145/F1245 +- F1155/F1255 +- S1155/S1255 +- F1345 +- F1355 - S2125 - S320/S325 +- S330/S332 - F370 - F470 - F730 - S735 - F750 +- S1156 - S1255 +- S1256 - SMO40 - SMOS40 -- VVM225 -- VVM310 -- VVM320 -- VVM325 -- VVM500 +- VVM225/VVM320/VVM325 +- VVM310/VVM500 {% include integrations/config_flow.md %} From 22ecf9f68e0fafc77c8a6c1d016b52d64339d748 Mon Sep 17 00:00:00 2001 From: Luke Lashley Date: Sun, 16 Mar 2025 17:26:40 -0400 Subject: [PATCH 077/122] Add Switch to Snoo (#38016) * Add Switch to Snoo * Update snoo.markdown --- source/_integrations/snoo.markdown | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/source/_integrations/snoo.markdown b/source/_integrations/snoo.markdown index 68b519f491b..563e14e2e66 100644 --- a/source/_integrations/snoo.markdown +++ b/source/_integrations/snoo.markdown @@ -5,6 +5,7 @@ ha_category: - Binary Sensor - Sensor - Select + - Switch ha_iot_class: Cloud Push ha_release: 2025.3 ha_config_flow: true @@ -15,6 +16,7 @@ ha_platforms: - binary_sensor - sensor - select + - switch ha_integration_type: integration ha_quality_scale: bronze --- @@ -63,6 +65,16 @@ This allows you to set the soothing level of your Snoo. 5. Level 4 6. Stop - The snoo is no longer running. +## Switch + +### Level lock + +Keep SNOO’s rhythms locked on your baby’s favorite level (Baseline, Level 1, or Level 2). + +### Sleepytime sounds + +Allows you to turn on SNOO’s soothing sounds before you put your baby in SNOO or after you took your baby out of SNOO for a diaper change or feeding. + ## Removing the integration {% include integrations/remove_device_service.md %} From d84a6142506a6ee3cec77a1d13e5db3a174b8919 Mon Sep 17 00:00:00 2001 From: Indu Prakash <6459774+iprak@users.noreply.github.com> Date: Mon, 17 Mar 2025 04:33:20 -0500 Subject: [PATCH 078/122] Add night light level select for fan in VeSync (#37986) * Added humidifiers * Fixes * Add night_light_level for fan --- source/_integrations/vesync.markdown | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/source/_integrations/vesync.markdown b/source/_integrations/vesync.markdown index 43b6c3d8676..5c38c564d19 100644 --- a/source/_integrations/vesync.markdown +++ b/source/_integrations/vesync.markdown @@ -134,6 +134,10 @@ VeSync air purifiers will expose the following details depending on the features | `night_light` | The current status of the night light (Core200S/Core400s) | off | | `child_lock` | The current status of the child lock (Core200S/300s/400s) | off | +| Select | Description | Example | +| ----------------------- | ---------------------------------------------------------------------------------- | --------- | +| `night_light_level` | Night light brightness level (Values: off, dim, on). | off | + ## Humidifier Sensors and settings exposed by VeSync humidifiers. @@ -148,7 +152,7 @@ Sensors and settings exposed by VeSync humidifiers. | Select | Description | Example | | ----------------------- | ---------------------------------------------------------------------------------- | --------- | -| `night_light_level`| Night light brightness level (Values: off, dim, bright). | off | +| `night_light_level` | Night light brightness level (Values: off, dim, bright). | off | ## Binary Sensors From 12ca014ae96bb911c528283a79a172ee26ca7fc2 Mon Sep 17 00:00:00 2001 From: starkillerOG Date: Mon, 17 Mar 2025 15:57:14 +0100 Subject: [PATCH 079/122] Add Reolink smart ai binary sensors docs (#37920) --- source/_integrations/reolink.markdown | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/source/_integrations/reolink.markdown b/source/_integrations/reolink.markdown index c25c8c7bad7..33946d04488 100644 --- a/source/_integrations/reolink.markdown +++ b/source/_integrations/reolink.markdown @@ -100,6 +100,17 @@ Depending on the supported features of the camera, binary sensors are added for: - AI face detection++ - AI package detection++ - AI baby crying detection+ (sound detection) +- AI crossline person+ (up to 3 lines) +- AI crossline vehicle+ (up to 3 lines) +- AI crossline animal+ (up to 3 lines) +- AI intrusion person+ (up to 3 zones) +- AI intrusion vehicle+ (up to 3 zones) +- AI intrusion animal+ (up to 3 zones) +- AI linger person+ (up to 3 zones) +- AI linger vehicle+ (up to 3 zones) +- AI linger animal+ (up to 3 zones) +- AI item forgotten+ (up to 3 zones) +- AI item taken+ (up to 3 zones) - Sleep status+ \++ These sensors receive events using the following 4 methods (in order): TCP push, ONVIF push, ONVIF long polling or fast polling (every 5 seconds). @@ -107,6 +118,8 @@ The latency for receiving the events is the best for TCP push and the worst for For redundancy, these sensors are polled every 60 seconds together with the update of all other entities. To ensure you have the best latency possible, refer to the [Reducing latency of motion events](#reducing-latency-of-motion-events) section. +For the **crossline**, **intrusion**, **linger**, **item forgotten**, and **item taken** entities, you first need to configure the lines/zones in the Reolink app (**Settings** > **Detection alarm** > **Smart event detection**). In the Reolink app, you can add up to 3 zones/lines, and for each zone/line, you can enable/disable the person/vehicle/animal detection. Within 60 seconds after making a change in the Reolink app, the corresponding entities will automatically show up in Home Assistant. + ### Number entities Depending on the supported features of the camera, number entities are added for: From e37c6b6a4d2b3990d907b61f91481d0f24524c7e Mon Sep 17 00:00:00 2001 From: Andrew Sayre <6730289+andrewsayre@users.noreply.github.com> Date: Mon, 17 Mar 2025 19:19:48 +0000 Subject: [PATCH 080/122] Add browse --- source/_integrations/heos.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_integrations/heos.markdown b/source/_integrations/heos.markdown index 06edfcab4fc..d774a3ccc47 100644 --- a/source/_integrations/heos.markdown +++ b/source/_integrations/heos.markdown @@ -29,6 +29,7 @@ Add this integration to automate playback and group configuration of HEOS-capabl - Controlling play mode (e.g., play/pause), volume, mute, and shuffle - Playing HEOS favorites, playlists, quick selects, URLs - Setting the source to physical inputs (e.g., `AUX1`) +- Browsing HEOS music services (e.g., Tidal) and sources (.e.g., Favorites) - Grouping and ungrouping HEOS devices - Clearing playlists From b9e43aec695a06c2693564efc802d93538c5cb75 Mon Sep 17 00:00:00 2001 From: Luke Lashley Date: Mon, 17 Mar 2025 17:06:58 -0400 Subject: [PATCH 081/122] Add events to Snoo --- source/_integrations/snoo.markdown | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/source/_integrations/snoo.markdown b/source/_integrations/snoo.markdown index 563e14e2e66..be3326f2e86 100644 --- a/source/_integrations/snoo.markdown +++ b/source/_integrations/snoo.markdown @@ -3,6 +3,7 @@ title: Happiest Baby Snoo description: Instructions on how to integrate Snoo into Home Assistant ha_category: - Binary Sensor + - Event - Sensor - Select - Switch @@ -14,6 +15,7 @@ ha_codeowners: ha_domain: snoo ha_platforms: - binary_sensor + - event - sensor - select - switch @@ -35,6 +37,24 @@ This integration follows standard integration installation. No extra steps are r States if the left or right safety clip is connected to the baby's swaddle. +## Events + +### Snoo events + +These are the events broadcasted by your device. The most notable event is your baby crying. + +They can be: + +- Timer - A timer has started or updated for the current Snoo level. +- Cry - The Snoo has detected your baby crying. +- Command sent - A command has been received by the Snoo. +- Safety clip changed - The left or right safety clip has been disconnected or connected. +- Long activity press - The activity button has been held down. +- Activity press - The activity button has been pressed. +- Power button pressed - The power button has been pressed. +- Status requested - Either the integration or your mobile app has requested a status update. +- Sleepytime sounds updated - The Sleepytime sounds were turned on or off. + ## Sensors ### State From 98b6a4f9d748db374c1651b9350d732c23ea3083 Mon Sep 17 00:00:00 2001 From: Allen Porter Date: Mon, 17 Mar 2025 14:38:45 -0700 Subject: [PATCH 082/122] Update MCP server Assist API documentation now that the stateless API is implicitly used (#38019) --- source/_integrations/mcp_server.markdown | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/source/_integrations/mcp_server.markdown b/source/_integrations/mcp_server.markdown index 95d031b5e83..d5ff3723b2e 100644 --- a/source/_integrations/mcp_server.markdown +++ b/source/_integrations/mcp_server.markdown @@ -35,10 +35,8 @@ The integration provides the following configuration options: {% configuration_basic %} Control Home Assistant: - description: The API to use to expose tools over the Model Context Protocol. It is recommended - to use **Stateless Assist** which is a version of the **Assist** API where the - prompt does not contain any state information. Clients can only control or - provide information about entities that are [exposed](/voice_control/voice_remote_expose_devices/) to it. + description: If MCP clients are allowed to control Home Assistant. Clients can only + control or provide information about entities that are [exposed](/voice_control/voice_remote_expose_devices/) to it. {% endconfiguration_basic %} ## Architecture overview @@ -132,11 +130,6 @@ The [MCP Prompts](https://modelcontextprotocol.io/docs/concepts/prompts) provide inform LLMs how to call the tools. The tools used by the configured LLM API are exposed. -It is recommended to use the **Stateless Assist** API since the prompt does -not contain any state information, which will be incorrect after any actions -are performed. - - ## Known Limitations The Home Assistant Model Context Protocol integration currently only supports a From a2776fb9bdfcde2e2d57f38f63cc392100b4c836 Mon Sep 17 00:00:00 2001 From: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com> Date: Tue, 18 Mar 2025 06:42:16 +0100 Subject: [PATCH 083/122] tweak --- source/_integrations/heos.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_integrations/heos.markdown b/source/_integrations/heos.markdown index d774a3ccc47..4c358912588 100644 --- a/source/_integrations/heos.markdown +++ b/source/_integrations/heos.markdown @@ -29,7 +29,7 @@ Add this integration to automate playback and group configuration of HEOS-capabl - Controlling play mode (e.g., play/pause), volume, mute, and shuffle - Playing HEOS favorites, playlists, quick selects, URLs - Setting the source to physical inputs (e.g., `AUX1`) -- Browsing HEOS music services (e.g., Tidal) and sources (.e.g., Favorites) +- Browsing HEOS music services (for example, **Tidal**) and sources (such as **Favorites**) - Grouping and ungrouping HEOS devices - Clearing playlists From ee63e4780433554a4b5b71408d229d74d52a51c1 Mon Sep 17 00:00:00 2001 From: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com> Date: Tue, 18 Mar 2025 07:12:18 +0100 Subject: [PATCH 084/122] convert table to list --- .../openai_conversation.markdown | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/source/_integrations/openai_conversation.markdown b/source/_integrations/openai_conversation.markdown index b46af7edfc4..34e0607a7c1 100644 --- a/source/_integrations/openai_conversation.markdown +++ b/source/_integrations/openai_conversation.markdown @@ -165,11 +165,20 @@ Allows you to ask OpenAI to generate a content based on a prompt. This service populates [Response Data](/docs/scripts/service-calls#use-templates-to-handle-response-data) with the response from OpenAI. -| Service data attribute | Optional | Description | Example | -| ---------------------- | -------- | ------------------------------------------------------- | -------------------- | -| `config_entry` | no | Integration entry ID to use. | | -| `prompt` | no | The text to generate content from. | Describe the weather | -| `image_filename` | yes | List of file names for images to include in the prompt. | /tmp/image.jpg | +- **Service data attribute**: `config_entry` + - **Description**: Integration entry ID to use. + - **Example**: + - **Optional**: no + +- **Service data attribute**: `prompt` + - **Description**: The text to generate content from. + - **Example**: Describe the weather + - **Optional**: no + +- **Service data attribute**: `image_filename` + - **Description**: List of file names for images to include in the prompt. + - **Example**: /tmp/image.jpg + - **Optional**: yes {% raw %} From f3df85d4f84995fc1d59c1dc0fafb4058e791e8d Mon Sep 17 00:00:00 2001 From: starkillerOG Date: Tue, 18 Mar 2025 10:20:05 +0100 Subject: [PATCH 085/122] Add day night state sensor docs (#38039) --- source/_integrations/reolink.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_integrations/reolink.markdown b/source/_integrations/reolink.markdown index 33946d04488..ec876b806d5 100644 --- a/source/_integrations/reolink.markdown +++ b/source/_integrations/reolink.markdown @@ -294,6 +294,7 @@ Depending on the supported features of the camera, the following sensor entities - PTZ pan position - PTZ tilt position +- Day night state+ - Wi-Fi signal* - CPU usage* - HDD/SD storage* From 00f6d9ff13256a7f1775a92c94ab253a268492aa Mon Sep 17 00:00:00 2001 From: Luke Lashley Date: Tue, 18 Mar 2025 17:10:51 -0400 Subject: [PATCH 086/122] Add current room to Roborock --- source/_integrations/roborock.markdown | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/_integrations/roborock.markdown b/source/_integrations/roborock.markdown index 9f58156cb02..cbcf3509a77 100644 --- a/source/_integrations/roborock.markdown +++ b/source/_integrations/roborock.markdown @@ -79,6 +79,8 @@ Cleaning time - How long the vacuum has been cleaning for. If the vacuum is not Cleaning progress - Only available on some newer devices - what percent of the current cleaning is completed. +Current room - This is the room the vacuum currently is in. It utilizes the currently selected map, so if the map is incorrect, the room will be incorrect as well. + Dock error - Only available on the non-basic docks - The current error of the vacuum or 'Ok' if none exist Main brush time left - How much time is left before Roborock recommends you replace your main brush. From bec649595042870c6497c8fc550feaaf073e1c13 Mon Sep 17 00:00:00 2001 From: starkillerOG Date: Wed, 19 Mar 2025 14:35:45 +0100 Subject: [PATCH 087/122] Add Reolink Home Hub scene docs (#38038) * Add Reolink Home Hub scene docs * tiny tweak --------- Co-authored-by: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com> --- source/_integrations/reolink.markdown | 3 +++ 1 file changed, 3 insertions(+) diff --git a/source/_integrations/reolink.markdown b/source/_integrations/reolink.markdown index ec876b806d5..6715df6ceda 100644 --- a/source/_integrations/reolink.markdown +++ b/source/_integrations/reolink.markdown @@ -220,11 +220,14 @@ Depending on the supported features of the camera, select entities are added for - Chime visitor ringtone - Hub alarm ringtone - Hub visitor ringtone +- Hub scene mode (Off, Disarmed, Home, Away) **PTZ preset** positions can be set in the Reolink app/windows/web client, the names of the presets will be loaded into Home Assistant at the start of the integration. When adding new preset positions, please restart the Reolink integration. **Play quick reply messages**/**Auto quick reply messages** can be recorded in the Reolink phone app where a name is also supplied. New or updated quick reply messages will be loaded into Home Assistant at the start of the integration. When adding new quick reply messages, please restart the Reolink integration. +**Hub scene modes** can be set in the Reolink app/client. The scene names are loaded into Home Assistant at the start of the integration. After adding new custom scenes, restart the Reolink integration. + #### Action reolink.play_chime To play a ringtone on a Reolink chime, the `reolink.play_chime` action can be used. From 68850281245ea0c93c60c17fc4b2a15551c6cd13 Mon Sep 17 00:00:00 2001 From: Joost Lekkerkerker Date: Wed, 19 Mar 2025 21:07:51 +0100 Subject: [PATCH 088/122] Add remoteControlStatus to SmartThings (#37995) --- source/_integrations/smartthings.markdown | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/source/_integrations/smartthings.markdown b/source/_integrations/smartthings.markdown index 9043204862a..57b6014f848 100644 --- a/source/_integrations/smartthings.markdown +++ b/source/_integrations/smartthings.markdown @@ -61,16 +61,17 @@ SmartThings represents devices as a set of [capabilities](https://developer.smar In Home Assistant, a binary sensor entity will be created for each of the following SmartThings capabilities: -| SmartThings capability | -| --------------------------------------------------------------------------------------------------------------------- | -| `accelerationSensor` | -| [`contactSensor`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#contactSensor) | -| [`filterStatus`](https://developer.smartthings.com/docs/devices/capabilities/proposed#filterStatus) | -| [`motionSensor`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#motionSensor) | -| [`presenceSensor`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#presenceSensor) | -| [`tamperAlert`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#tamperAlert) | -| [`valve`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#valve) | -| [`waterSensor`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#waterSensor) | +| SmartThings capability | +|---------------------------------------------------------------------------------------------------------------------------------| +| `accelerationSensor` | +| [`contactSensor`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#contactSensor) | +| [`filterStatus`](https://developer.smartthings.com/docs/devices/capabilities/proposed#filterStatus) | +| [`motionSensor`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#motionSensor) | +| [`presenceSensor`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#presenceSensor) | +| [`remoteControlStatus`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#remoteControlStatus) | +| [`tamperAlert`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#tamperAlert) | +| [`valve`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#valve) | +| [`waterSensor`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#waterSensor) | ### Climate From 03ed223cf2d66fad2bfdbf7f8c84d84db2b0d3b2 Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Thu, 20 Mar 2025 11:05:04 +0100 Subject: [PATCH 089/122] Add template function: combine (#38094) --- .../_docs/configuration/templating.markdown | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/source/_docs/configuration/templating.markdown b/source/_docs/configuration/templating.markdown index 50dc2689067..42f9b68c86d 100644 --- a/source/_docs/configuration/templating.markdown +++ b/source/_docs/configuration/templating.markdown @@ -1256,6 +1256,26 @@ Some examples: {% endraw %} +### Combining dictionaries + +The template engine provides a function and filter to merge multiple dictionaries: `combine`. + +It will take multiple dictionaries and merge them into a single dictionary. When used as a filter, +the filter value is used as the first dictionary. The optional `recursive` parameter determines +whether nested dictionaries should be merged (defaults to `False`). + +Some examples: + +{% raw %} + +- `{{ {'a': 1, 'b': 2} | combine({'b': 3, 'c': 4}) }}` - renders as `{'a': 1, 'b': 3, 'c': 4}` +- `{{ combine({'a': 1, 'b': 2}, {'b': 3, 'c': 4}) }}` - renders as `{'a': 1, 'b': 3, 'c': 4}` + +- `{{ combine({'a': 1, 'b': {'x': 1}}, {'b': {'y': 2}, 'c': 4}, recursive=True) }}` - renders as `{'a': 1, 'b': {'x': 1, 'y': 2}, 'c': 4}` +- `{{ combine({'a': 1, 'b': {'x': 1}}, {'b': {'y': 2}, 'c': 4}) }}` - renders as `{'a': 1, 'b': {'y': 2}, 'c': 4}` + +{% endraw %} + ## Merge action responses Using action responses we can collect information from various entities at the same time. From d825ded62b5e9b97774bcf12048d7c40d9fc5452 Mon Sep 17 00:00:00 2001 From: jukrebs <76174575+MaestroOnICe@users.noreply.github.com> Date: Thu, 20 Mar 2025 15:07:53 +0100 Subject: [PATCH 090/122] Add connection and attachment status documentation --- source/_integrations/iometer.markdown | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/_integrations/iometer.markdown b/source/_integrations/iometer.markdown index ddbdcb376f9..3e0cc47ed6f 100644 --- a/source/_integrations/iometer.markdown +++ b/source/_integrations/iometer.markdown @@ -51,6 +51,8 @@ The following sensors are supported: - Core power status: Battery or USB-C power for the IOmeter Core - Signal strength WiFi: WiFi connection strength of the Bridge - Signal strength Core/Bridge: Sub-GHz connection strength between Core and Bridge +- Core/Bridge connection status: If Core and Bridge are connected +- Core attachment status: If the IOmeter Core is attached to the electricty meter ## Troubleshooting From 24cbb150681ac995530fe3a3657db2e14cdf4eeb Mon Sep 17 00:00:00 2001 From: jukrebs <76174575+MaestroOnICe@users.noreply.github.com> Date: Thu, 20 Mar 2025 15:17:35 +0100 Subject: [PATCH 091/122] fix typo Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> --- source/_integrations/iometer.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_integrations/iometer.markdown b/source/_integrations/iometer.markdown index 3e0cc47ed6f..f0fc0adf516 100644 --- a/source/_integrations/iometer.markdown +++ b/source/_integrations/iometer.markdown @@ -52,7 +52,7 @@ The following sensors are supported: - Signal strength WiFi: WiFi connection strength of the Bridge - Signal strength Core/Bridge: Sub-GHz connection strength between Core and Bridge - Core/Bridge connection status: If Core and Bridge are connected -- Core attachment status: If the IOmeter Core is attached to the electricty meter +- Core attachment status: If the IOmeter Core is attached to the electricity meter ## Troubleshooting From 2cb08faba0256e3e113e21795bea966d48585806 Mon Sep 17 00:00:00 2001 From: jukrebs <76174575+MaestroOnICe@users.noreply.github.com> Date: Thu, 20 Mar 2025 15:23:57 +0100 Subject: [PATCH 092/122] fix trailing whitespace --- source/_integrations/iometer.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_integrations/iometer.markdown b/source/_integrations/iometer.markdown index f0fc0adf516..19159751bd8 100644 --- a/source/_integrations/iometer.markdown +++ b/source/_integrations/iometer.markdown @@ -51,7 +51,7 @@ The following sensors are supported: - Core power status: Battery or USB-C power for the IOmeter Core - Signal strength WiFi: WiFi connection strength of the Bridge - Signal strength Core/Bridge: Sub-GHz connection strength between Core and Bridge -- Core/Bridge connection status: If Core and Bridge are connected +- Core/Bridge connection status: If Core and Bridge are connected - Core attachment status: If the IOmeter Core is attached to the electricity meter ## Troubleshooting From 7de735db173315d6afc1c2c302b6b379673779da Mon Sep 17 00:00:00 2001 From: peteS-UK <64092177+peteS-UK@users.noreply.github.com> Date: Thu, 20 Mar 2025 16:47:01 +0000 Subject: [PATCH 093/122] Add button platform and associated buttons to Squeezebox (#38042) * initial * quotes * remove blank * review --- source/_integrations/squeezebox.markdown | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/source/_integrations/squeezebox.markdown b/source/_integrations/squeezebox.markdown index 9da6779dda2..69dbe2d9d98 100644 --- a/source/_integrations/squeezebox.markdown +++ b/source/_integrations/squeezebox.markdown @@ -147,6 +147,13 @@ data: - **Needs restart**: Server Service needs to be restarted (typically, this is needed to apply updates). - **Library rescan**: The music library is currently being scanned by LMS (depending on the type of scan, some content may be unavailable). +### Buttons + +- **Preset 1 ... Preset 6**: Play media stored in Preset 1 to Preset 6 on Squeezebox. +- **Brightness Up, Brightness Down**: Adjust the brightness on Logitech Squeezebox players with built-in screen, such as Radio and Boom. +- **Bass Up, Bass Down**: Adjust the bass on Logitech Squeezebox players, such as Radio and Boom. +- **Treble Up, Treble Down**: Adjust the treble on Logitech Squeezebox players, such as Radio and Boom. + ### Sensors - **Last scan**: Date of the last library scan. @@ -188,10 +195,9 @@ When specifying additional parameters in the Visual Editor, each parameter must For example, to create an automation to mute playback, use the command `mixer` and the parameter `muting`: -| Row | Parameter | Description | -| --- | -------- | ----------- | -| 1 | - muting | Toggle muting on / off | -| 2 | | | +| Row | Parameter | Description | +| --- | --------- | ---------------------- | +| 1 | - muting | Toggle muting on / off | resulting in the YAML: @@ -209,10 +215,10 @@ Where a parameter is an increment or decrement, it is necessary to place the val For example, to increase the playback volume, use the command `mixer` and the parameters `volume` and the amount to increment: -| Row | Parameter | Description | -| --- | -------- | ----------- | -| 1 | - volume | Parameter to change | -| 2 | - "+5" | Increment volume by 5 percent | +| Row | Parameter | Description | +| --- | --------- | ----------------------------- | +| 1 | - volume | Parameter to change | +| 2 | - "+5" | Increment volume by 5 percent | resulting in the YAML: @@ -227,7 +233,6 @@ data: - "+5" ``` - ### Action `call_query` Call a custom Squeezebox JSON-RPC API. The result of the query will be stored in the 'query_result' attribute of the player. From 93a396b1d7a12d97356616d8a63a2ff050d0a82c Mon Sep 17 00:00:00 2001 From: poucz Date: Thu, 20 Mar 2025 19:21:16 +0100 Subject: [PATCH 094/122] Add tilt stop feature to MQTT cover (#37857) * Update mqtt cover. * Sort by key * Update source/_integrations/cover.mqtt.markdown Co-authored-by: Jan Bouwhuis * append abbreviations --------- Co-authored-by: Jan Bouwhuis --- source/_integrations/cover.mqtt.markdown | 5 +++++ source/_integrations/mqtt.markdown | 1 + 2 files changed, 6 insertions(+) diff --git a/source/_integrations/cover.mqtt.markdown b/source/_integrations/cover.mqtt.markdown index f847fd28ad5..bac1bdb1a9d 100644 --- a/source/_integrations/cover.mqtt.markdown +++ b/source/_integrations/cover.mqtt.markdown @@ -203,6 +203,11 @@ payload_stop: required: false type: string default: STOP +payload_stop_tilt: + description: The command payload that stops the tilt. + required: false + type: string + default: stop platform: description: Must be `cover`. Only allowed and required in [MQTT auto discovery device messages](/integrations/mqtt/#device-discovery-payload). required: true diff --git a/source/_integrations/mqtt.markdown b/source/_integrations/mqtt.markdown index 32e12424d3b..b12c43ed440 100644 --- a/source/_integrations/mqtt.markdown +++ b/source/_integrations/mqtt.markdown @@ -838,6 +838,7 @@ support_url: 'pl_rst_pct': 'payload_reset_percentage', 'pl_rst_pr_mode': 'payload_reset_preset_mode', 'pl_stop': 'payload_stop', + 'pl_stop_tilt': 'payload_stop_tilt', 'pl_stpa': 'payload_start_pause', 'pl_strt': 'payload_start', 'pl_toff': 'payload_turn_off', From 75b0a7762a43d785a7c36017486dd01e4df60033 Mon Sep 17 00:00:00 2001 From: Joost Lekkerkerker Date: Fri, 21 Mar 2025 17:00:38 +0100 Subject: [PATCH 095/122] Add kids lock to SmartThings (#37996) * Add kids lock to SmartThings * Add kids lock to SmartThings --- source/_integrations/smartthings.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_integrations/smartthings.markdown b/source/_integrations/smartthings.markdown index 57b6014f848..32bbd9301b6 100644 --- a/source/_integrations/smartthings.markdown +++ b/source/_integrations/smartthings.markdown @@ -68,6 +68,7 @@ In Home Assistant, a binary sensor entity will be created for each of the follow | [`filterStatus`](https://developer.smartthings.com/docs/devices/capabilities/proposed#filterStatus) | | [`motionSensor`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#motionSensor) | | [`presenceSensor`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#presenceSensor) | +| `samsungce.kidsLock` | | [`remoteControlStatus`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#remoteControlStatus) | | [`tamperAlert`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#tamperAlert) | | [`valve`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#valve) | From facac91f152a5f2b586952e72e9e86dc04e57bb1 Mon Sep 17 00:00:00 2001 From: Joost Lekkerkerker Date: Fri, 21 Mar 2025 17:00:47 +0100 Subject: [PATCH 096/122] Add event platform to SmartThings (#38115) --- source/_integrations/smartthings.markdown | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/source/_integrations/smartthings.markdown b/source/_integrations/smartthings.markdown index 32bbd9301b6..58b70f0a25c 100644 --- a/source/_integrations/smartthings.markdown +++ b/source/_integrations/smartthings.markdown @@ -6,6 +6,7 @@ ha_category: - Binary sensor - Climate - Cover + - Event - Fan - Hub - Light @@ -22,6 +23,7 @@ ha_platforms: - binary_sensor - climate - cover + - event - fan - light - lock @@ -116,6 +118,10 @@ The SmartThings Cover platform lets you control devices that have open/close rel | [`windowShadeLevel`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference/#windowShadeLevel) | `position` | | [`battery`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#battery) | `battery_level` (state attribute) | +### Event + +The SmartThings Event platform will create entities for every button. It will show any button presses and allows you to automate on these events. + ### Fan The SmartThings Fan lets you control devices that have fan-related capabilities. For a SmartThings device to be represented by the fan entity, it must have one or more of the capabilities below in addition to the [`switch`](https://smartthings.developer.samsung.com/develop/api-ref/capabilities.html#Switch) capability. From 6af338b53d2446b246550c6ee6bb7ec4c11e8832 Mon Sep 17 00:00:00 2001 From: Joost Lekkerkerker Date: Fri, 21 Mar 2025 17:00:51 +0100 Subject: [PATCH 097/122] Add PM1.0 to SmartThings (#38113) --- source/_integrations/smartthings.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_integrations/smartthings.markdown b/source/_integrations/smartthings.markdown index 58b70f0a25c..7ea6e5bdafa 100644 --- a/source/_integrations/smartthings.markdown +++ b/source/_integrations/smartthings.markdown @@ -200,6 +200,7 @@ The SmartThings Sensor platform lets your view devices that have sensor-related | [`tvChannel`](https://developer.smartthings.com/docs/devices/capabilities/proposed#tvChannel) | TV channel
TV channel name | | [`tvocMeasurement`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#tvocMeasurement) | Volatile organic compounds | | [`ultravioletIndex`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#ultravioletIndex) | UV index | +| [`veryFineDustSensor`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#veryFineDustSensor) | PM1.0 | | [`voltageMeasurement`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#voltageMeasurement) | Voltage | | [`washerMode`](https://developer.smartthings.com/docs/devices/capabilities/proposed#washerMode) | Washer mode | | [`washerOperatingState`](https://developer.smartthings.com/docs/devices/capabilities/proposed#washerOperatingState) | Machine state
Job state
Completion time | From cf5ec326359c98334765078323518dadd2fe8413 Mon Sep 17 00:00:00 2001 From: G Johansson Date: Fri, 21 Mar 2025 17:01:42 +0100 Subject: [PATCH 098/122] Update Sensibo integration documentation (#36984) * Update Sensibo integration documentation * Update * Mod * nitpicks * Fix yaml examples * Remove tables * Fix links * last fix * nitpicks * tiny tweaks * Apply suggestions from code review * Mods * structure --------- Co-authored-by: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com> --- source/_integrations/sensibo.markdown | 345 ++++++++++++++++++++------ 1 file changed, 266 insertions(+), 79 deletions(-) diff --git a/source/_integrations/sensibo.markdown b/source/_integrations/sensibo.markdown index 3eb3796896e..0a74fa8525f 100644 --- a/source/_integrations/sensibo.markdown +++ b/source/_integrations/sensibo.markdown @@ -33,7 +33,7 @@ ha_dhcp: true ha_integration_type: integration --- -Integrates [Sensibo](https://sensibo.com) devices into Home Assistant. +The **Sensibo** {% term integration %} integrates [Sensibo](https://sensibo.com) devices into Home Assistant. ## Prerequisites @@ -45,127 +45,180 @@ then in the Sensibo app log you will be able to distinguish between actions done in the app and actions done by Home Assistant. {% endtip %} +## Supported devices + +The **Sensibo** {% term integration %} supports the following devices and accessories. + +- **Sensibo Sky**: Smart AC control device. +- **Sensibo Air**: Smart AC control device. +- **Sensibo Air Pro**: Smart AC control device with air quality monitoring. +- **Sensibo Pure**: Smart air purifier. +- **Sensibo Elements**: Smart air quality monitoring. +- **Sensibo Room Sensor**: Motion sensor and temperature readings (needs to be connected with an Air device). + {% include integrations/config_flow.md %} -## Binary sensors +{% configuration_basic %} +API key: + description: The previously created API key. +{% endconfiguration_basic %} -For motion sensors (supported by Sensibo Air devices), this integration provides the following sensors: +## Supported functionality -- Motion -- Alive -- Main sensor +{% note %} -For climate devices, these sensors are available: +Some entities are disabled by default, so you need to [enable them](/common-tasks/general/#to-enable-or-disable-a-single-entity) to use them. -- Room presence (for Air devices with an attached motion sensor) +Depending on device support, some entities might not be available as the device does not support them. -For Pure devices, these sensors are available: +{% endnote %} -- Pure Boost Enabled -- Pure Boost linked with AC -- Pure Boost linked with Presence -- Pure Boost linked with Outdoor Air Quality +### Sensibo Sky, Air, Air Pro, Pure, Elements and Room sensor -For all devices, these sensors are available: +#### Numbers -- Filter Clean Required +- **Temperature calibration**: Calibrate the temperature reading of the device. +- **Humidity calibration**: Calibrate the humidity reading of the device. -## Button +#### Updates -You can reset your filter check by using the button available on climate devices. +- **Firmware**: Firmware update available. -By pressing the button, you tell your device that you have cleaned or replaced the filter. +### Sensibo Sky, Air, Air Pro, Pure, and Elements -## Number entities +#### Binary sensors -By using the number entities you can calibrate the temperature and hunmidity of your device. +- **Filter clean required**: Does the A/C's filter need cleaning. -These entities are disabled by default. +#### Buttons -## Select entities +- **Reset filter**: Reset the filter timer after cleaning. -For supported devices, this integration provides support to set the following modes by the select entity: +#### Climates -- Light +- **[Name of device]**: The main climate entity for the device to control HVAC mode. -## Sensor entities +#### Selects -For all devices, these sensors are available: +- **Light**: Turn the light on/off or dim for the device. -- Filter last reset -- Feels Like -- Timer end time +#### Sensors -For motion sensors (supported by Sensibo Air devices), this integration provides the following sensors: +- **Filter last reset**: Last reset of the filter cleaning. -- Temperature -- Humidity +### Sensibo Sky, Air, and Air Pro -For diagnostics, not automatically displayed on dashboards, these sensors are available for motion sensors: +#### Sensors -- Voltage -- Rssi +- **Feels like**: Feels like temperature. +- **Timer end time**: End time of timer. +- **Climate React type**: Climate React type: Temperature, Feels like, or Humidity. +- **Climate React low temperature threshold**: Low temperature threshold setting for Climate react. +- **Climate React high temperature threshold**: High temperature threshold setting for Climate react. -For Pure devices, these sensors are available: +#### Switches -- PM2.5 -- Pure Boost Sensitivity +- **Timer**: Timer on/off. Enabling the timer, sets it to 10 minutes. +- **Climate React**: Enable/Disable Climate React. -For AirQ device, these sensors are available: +### Sensibo Air, Air Pro, and Elements -- TVOC -- CO2 +#### Sensors -For Element device, these sensors are available: +- **TVOC**: TVOC reading from device. +- **Co2**: Co2 reading from device. -- PM 2.5 -- TVOC -- CO2 -- Ethanol -- Air quality +### Sensibo Elements -For climate devices, these sensors are available: +#### Sensors -- Climate React low temperature threshold -- Climate React high temperature threshold +- **PM2.5**: PM2.5 reading from device. +- **Ethanol**: Ethanol reading from device. +- **Air quality**: Air quality based on readings from device. -## Switch entities +### Sensibo Pure -For climate devices, these switches are available: +#### Binary sensors -Support to enable/disable a timer to delay a start or stop (depending on the current state) of your device. +- **Pure Boost linked with AC**: Is Pure Boost linked with an A/C device. +- **Pure Boost linked with presence**: Is Pure Boost linked to presence. +- **Pure Boost linked with indoor air quality**: Is Pure Boost linked with indoor air quality. +- **Pure Boost linked with outdoor air quality**: Is Pure Boost linked with outdoor air quality. -The switch uses a timer of 60 minutes delay. You can choose a custom delay using the custom `sensibo.enable_timer` action. See [Timer](#timer). +#### Sensors -Support to enable/disable Climate React +- **Pure AQI**: PM2.5 level indicated as 'Good', 'Moderate', and 'Bad'. +- **Pure Boost Sensitivity**: Sensitivity for Pure Boost. -Usage of the Climate React switch requires that the action has been configured previously in the app or by using the custom `sensibo.enable_climate_react` action. See [Climate React](#climate-react) +#### Switches -For Pure devices, this integration provides support to enable/disable Pure Boost. +- **Pure Boost**: Enable/Disable Pure Boost. -To customize the settings of Pure Boost, you can use the custom `sensibo.enable_pure_boost` action. See [Pure Boost](#pure-boost) +### Sensibo Room sensor -## Custom actions +#### Binary sensors + +- **Motion**: Is there motion +- **Connectivity**: Is the motion sensor alive and connected +- **Main sensor**: Is the connected motion sensor the main sensor for the connected Air device. +- **Room occupied**: Is there presence in the room of the connected Air device. + +## Actions ### Get device mode capabilities -As the below custom actions [Full state](#full-state) and [Climate react](#climate-react) both require their inputs to be exactly what the API requires, this custom action will provide the capabilities for the device for a certain HVAC mode to help the users on using those actions properly. +As the below custom actions [Full state](#set-full-state) and [Climate react](#enable-climate-react) both require their inputs to match the API requirements precisely, this custom action will provide the capabilities for the device for a certain HVAC mode to help the users on using those actions properly. + +**Action configuration:** + +{% configuration_basic %} +Target: + description: Select the Sensibo climate entity. +HVAC mode: + description: Select the HVAC mode for which you want to get the capabilities. +{% endconfiguration_basic %} + +**Proposed action use:** 1. Go to [Developer Tools](https://my.home-assistant.io/redirect/server_controls/). 2. Switch to the **Actions** page. 3. Use the `sensibo.get_device_capabilities` action. 4. Select the `climate` entity as the target. 5. Select the `hvac_mode` from the available list. -6. Select **Perform action** to retrieve the available options per capability for that particular `climate` entity. +6. Select **Perform action** to retrieve the available options. +7. Copy the case-sensitive options as needed to other action calls, automations or scripts. -From the provided dictionary, copy the case-sensitive options as needed into other action calls used in automations or scripts. +### Set full state -### Full state +You can send a full state command to **Sensibo** instead of single commands using the `sensibo.full_state` action. -You can send a full state command to Sensibo instead of single commands using the `sensibo.full_state` action. +{% note %} All fields are required to be according to Sensibo API specifications and are case-sensitive. +Only provide the fields which are supported by the device. + +{% endnote %} + +**Action configuration:** + +{% configuration_basic %} +Target: + description: Select the Sensibo climate entity. +HVAC mode: + description: Select the HVAC mode for which you want to get the capabilities. +Target temperature: + description: Provide a target temperature if applicable. +Fan mode: + description: Provide a fan mode if applicable. +Swing mode: + description: Provide a swing mode if applicable. +Horizontal swing mode: + description: Provide a horizontal swing mode if applicable. +Light: + description: Provide a setting for the light if applicable. +{% endconfiguration_basic %} + {% tip %} Use the [Get device mode capabilities](#get-device-mode-capabilities) action to provide a list of capabilities. @@ -174,29 +227,88 @@ Use the [Get device mode capabilities](#get-device-mode-capabilities) action to ### Assume state -For devices which are also controlled in other ways or often goes out of sync with Sensibo there is a `sensibo.assume_state` action. +An HVAC device often has a manual remote or other means of control which can put **Sensibo** out of sync with the HVAC device. -With this action you can tell Sensibo if your device is currently running or not without sending a new command to you device. +Use the `sensibo.assume_state` action to tell **Sensibo** if the HVAC device is currently on or off without sending a control to the actual device. -### Pure Boost +**Action configuration:** + +{% configuration_basic %} +Target: + description: Select the Sensibo climate entity. +State: + description: Select if the HVAC device is on or off. +{% endconfiguration_basic %} + +### Enable Pure Boost You can configure your Pure Boost settings using the `sensibo.enable_pure_boost` action. -- Enable Pure Boost will enable the action with configured settings +{% note %} -Using Geo integration for Pure Boost is only possible by pre-configuration of Presence within the app. +AC integration and Geo integration needs to be pre-configured via the app before first use. -### Timer +{% endnote %} -You can enable a timer with a custom delay using the `sensibo.enable_timer` action that is provided. +**Action configuration:** -### Climate React +{% configuration_basic %} +Target: + description: Select the Sensibo climate entity. +AC integration: + description: Integrate with a HVAC device. +Geo integration: + description: Integrate with presence. +Indoor air quality: + description: Integrate with indoor air quality. +Outdoor air quality: + description: Integrate with outdoor air quality. +Sensitivity: + description: Set the sensitivity to `Normal` or `Sensitive`. +{% endconfiguration_basic %} + +### Enable timer + +You can enable a timer to turn the HVAC device on or off for a certain time, using the `sensibo.enable_timer` action that is provided. + +**Action configuration:** + +{% configuration_basic %} +Target: + description: Select the Sensibo climate entity. +Minutes: + description: Number of minutes to turn the device on or off. + mandatory: true +{% endconfiguration_basic %} + +### Enable Climate React You can configure your Climate React settings using the `sensibo.enable_climate_react` action. -- Configuring this action also turns Climate React on +{% note %} -When using the action, the state needs to be set to precisely what Sensibo API expects. The first time it's recommended to use the app to configure it. +Configuring this action also turns Climate React on. + +When using the action, the state needs to be set to precisely what Sensibo API expects. The first time, it's recommended to use the app to configure it. + +{% endnote %} + +**Action configuration:** + +{% configuration_basic %} +Target: + description: Select the Sensibo climate entity. +Threshold high: + description: When the trigger goes above this value. +State high threshold: + description: The full state to configure above the high threshold. +Threshold low: + description: When the trigger goes below this value. +State low threshold: + description: The full state to configure below the low threshold. +Trigger type: + description: The trigger type (`temperature`, `feelsLike`, or `humidity`). +{% endconfiguration_basic %} {% tip %} @@ -204,7 +316,7 @@ Use the [Get device mode capabilities](#get-device-mode-capabilities) action to {% endtip %} -Example for low threshold state: +**Example full state:** {% raw %} @@ -221,9 +333,11 @@ light: "on" {% endraw %} -## Adding a quick switch example +## Examples -If you want a "Quick Switch" to turn your AC On / Off, you can do that using the following `Switch Template`: +### Template switch to turn HVAC device on or off + +A simple switch which has `heat` or `off` as mode. {% raw %} @@ -233,13 +347,13 @@ switch: switches: ac: friendly_name: "AC" - value_template: "{{ is_state('climate.ac', 'cool') or is_state('climate.ac', 'heat') or is_state('climate.ac', 'dry') or is_state('climate.ac', 'fan_only') }}" + value_template: "{{ is_state('climate.ac', 'heat') }}" turn_on: action: climate.set_hvac_mode target: entity_id: climate.ac data: - hvac_mode: "cool" + hvac_mode: "heat" turn_off: action: climate.set_hvac_mode target: @@ -249,3 +363,76 @@ switch: ``` {% endraw %} + +### Start the timer for 30 minutes when I get home + +{% raw %} + +```yaml +automation: + alias: "Example timer" + triggers: + - trigger: zone + entity_id: person.me + zone: zone.home + event: enter + actions: + - action: sensibo.enable_timer + data: + minutes: 30 + target: + entity_id: climate.hvac_device +``` + +{% endraw %} + +### Set a full state of the HVAC device at 6pm + +{% raw %} + +```yaml +automation: + alias: "Example full state" + triggers: + - trigger: time + at: "18:00:00" + actions: + - action: sensibo.full_state + data: + mode: "heat" + target_temperature: 23 + fan_mode: "medium" + swing_mode: "fixedMiddleTop" + horizontal_swing_mode: "fixedCenter" + light: "off" + target: + entity_id: climate.hvac_device +``` + +{% endraw %} + +## Data fetching and limitations + +Data is {% term polling polled %} from the **Sensibo** API once every minute for all devices. + +If {% term polling %} cannot happen because of no connectivity or a malfunctioning API, it will retry a few times before failing. +The user can use the [`homeassistant.update_entity`](homeassistant#action-homeassistantupdate_entity) action to manually try again later, in the case the user has solved the connectivity issue. + +## Troubleshooting + +This service is reliant on an internet connection and that the **Sensibo** API is available. Here are the things you can try before raising an issue: + +- Check that internet is available in your Home Assistant instance. +- Check that the **Sensibo** API is available by accessing the [Sensibo API page](https://home.sensibo.com/api/v1/users/me). If you have previously logged in to Sensibo web, you will get a JSON back with the provided information about your account. If not logged in, the API will respond with `login_required`. +- Use `curl` in a terminal on your Home Assistant instance using the same URL as previously opened in the browser. `curl https://home.sensibo.com/api/v1/users/me` + +### Specific log entries + +**Log entry:** `Device [name of device] not correctly registered with remote on Sensibo cloud.` + +When setting up a device the first time, a `remote` needs to be defined for the device in the **Sensibo** app, either automatically or manually. +The device will appear in Home Assistant, but won't be usable as no HVAC modes can be selected. + +## Remove the integration + +{% include integrations/remove_device_service.md %} From f2124690d5c3fb2ad90440ceb47af46caffeb062 Mon Sep 17 00:00:00 2001 From: Joost Lekkerkerker Date: Fri, 21 Mar 2025 17:02:17 +0100 Subject: [PATCH 099/122] Add update platform to SmartThings (#38120) --- source/_integrations/smartthings.markdown | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/source/_integrations/smartthings.markdown b/source/_integrations/smartthings.markdown index 7ea6e5bdafa..457aa63f434 100644 --- a/source/_integrations/smartthings.markdown +++ b/source/_integrations/smartthings.markdown @@ -14,6 +14,7 @@ ha_category: - Scene - Sensor - Switch + - Update - Valve ha_release: 0.87 ha_iot_class: Cloud Push @@ -30,6 +31,7 @@ ha_platforms: - scene - sensor - switch + - update - valve ha_dhcp: true ha_integration_type: integration @@ -213,6 +215,10 @@ The SmartThings Scene lets you activate scenes defined in SmartThings. A scene e The SmartThings Switch lets you control devices that have the [`switch`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#switch) capability that are not already represented by a more specific platform. +### Update + +The SmartThings update platform lets you update the firmware of devices that have the [`firmwareUpdate`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#firmwareUpdate) capability. + ### Valve The SmartThings Valve platform lets you control devices that have the [`valve`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#valve) capability, showing the valve status and opening and closing. From bb978ffa5cd5ce88a924328094567dac753e895a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=2E=20Diego=20Rodr=C3=ADguez=20Royo?= Date: Sat, 22 Mar 2025 16:20:48 +0100 Subject: [PATCH 100/122] Add missing Home Connect chiller doors (#38131) --- source/_integrations/home_connect.markdown | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/source/_integrations/home_connect.markdown b/source/_integrations/home_connect.markdown index 311e22273a6..b4bb9b33e81 100644 --- a/source/_integrations/home_connect.markdown +++ b/source/_integrations/home_connect.markdown @@ -117,9 +117,18 @@ The integration configuration will ask for the *Client ID* and *Client Secret* c - **Bottle cooler door**: - **Description**: Indicates if the bottle cooler door is open. - **Availability**: Fridge freezer, Refrigerator +- **Common chiller door**: + - **Description**: Indicates if the common chiller door is open. + - **Availability**: Fridge freezer, Refrigerator - **Chiller door**: - **Description**: Indicates if the chiller door is open. - **Availability**: Fridge freezer, Refrigerator +- **Left chiller door**: + - **Description**: Indicates if the left chiller door is open. + - **Availability**: Fridge freezer, Refrigerator +- **Right chiller door**: + - **Description**: Indicates if the right chiller door is open. + - **Availability**: Fridge freezer, Refrigerator - **Flex compartment door**: - **Description**: Indicates if the flex compartment door is open. - **Availability**: Fridge freezer From 1fe6879998359eb8616223977343cf93fcf0aa16 Mon Sep 17 00:00:00 2001 From: ildar170975 <71872483+ildar170975@users.noreply.github.com> Date: Sat, 22 Mar 2025 18:28:36 +0300 Subject: [PATCH 101/122] label_mode = attribute --- source/_dashboards/map.markdown | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/source/_dashboards/map.markdown b/source/_dashboards/map.markdown index 3588acf9540..aa9960f40e6 100644 --- a/source/_dashboards/map.markdown +++ b/source/_dashboards/map.markdown @@ -130,7 +130,11 @@ name: label_mode: required: false default: name - description: When set to `icon`, renders the entity's icon in the marker instead of text. When set to `state`, renders the entity's state as the label for the map marker instead of the entity's name. This option doesn't apply to [zone](/integrations/zone/) entities because they don't use a label but an icon. + description: When set to `icon`, renders the entity's icon in the marker instead of text. When set to `state` or `attribute`, renders the entity's state or attribute as the label for the map marker instead of the entity's name. This option doesn't apply to [zone](/integrations/zone/) entities because they don't use a label but an icon. + type: string +attribute: + required: false + description: An entity's attribute when `label_mode` set to `attribute`. type: string focus: required: false @@ -151,8 +155,12 @@ source: label_mode: required: false default: name - description: When set to `icon`, renders the geolocation entity's icon in the marker instead of text. When set to `state`, renders the entity's state as the label for the map marker instead of the entity's name. - type: string + description: When set to `icon`, renders the entity's icon in the marker instead of text. When set to `state` or `attribute`, renders the entity's state or attribute as the label for the map marker instead of the entity's name. This option doesn't apply to [zone](/integrations/zone/) entities because they don't use a label but an icon. + type: string +attribute: + required: false + description: An entity's attribute when `label_mode` set to `attribute`. + type: string focus: required: false default: true From 48f604a834dc6daa3d1db3fc9945573d60895d4a Mon Sep 17 00:00:00 2001 From: Joost Lekkerkerker Date: Sat, 22 Mar 2025 19:57:44 +0100 Subject: [PATCH 102/122] Add button platform to SmartThings (#38143) --- source/_integrations/smartthings.markdown | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/source/_integrations/smartthings.markdown b/source/_integrations/smartthings.markdown index 457aa63f434..0eb3a7e01c2 100644 --- a/source/_integrations/smartthings.markdown +++ b/source/_integrations/smartthings.markdown @@ -4,6 +4,7 @@ description: Instructions on setting up SmartThings within Home Assistant. featured: true ha_category: - Binary sensor + - Button - Climate - Cover - Event @@ -22,6 +23,7 @@ ha_config_flow: true ha_domain: smartthings ha_platforms: - binary_sensor + - button - climate - cover - event @@ -51,6 +53,7 @@ ha_integration_type: integration SmartThings represents devices as a set of [capabilities](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference). The SmartThings integration maps those capabilities to entities in Home Assistant. A single device may be represented by one or more entities. - [Binary sensor](#binary-sensor) +- [Button](#button) - [Climate](#climate) - [Cover](#cover) - [Fan](#fan) @@ -78,6 +81,10 @@ In Home Assistant, a binary sensor entity will be created for each of the follow | [`valve`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#valve) | | [`waterSensor`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#waterSensor) | +### Button + +The SmartThings Button platform provides stop buttons for devices with the `ovenOperatingState` capability. + ### Climate The SmartThings Climate platform lets you control devices that have air conditioner or thermostat related capabilities. From ff32614829539173d138b6a7d82f7cdd4f2b3c45 Mon Sep 17 00:00:00 2001 From: Joost Lekkerkerker Date: Sat, 22 Mar 2025 21:28:32 +0100 Subject: [PATCH 103/122] Add dryer wrinkle prevent switch to SmartThings (#38138) --- source/_integrations/smartthings.markdown | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/source/_integrations/smartthings.markdown b/source/_integrations/smartthings.markdown index 0eb3a7e01c2..75fe6ee2bf4 100644 --- a/source/_integrations/smartthings.markdown +++ b/source/_integrations/smartthings.markdown @@ -222,6 +222,13 @@ The SmartThings Scene lets you activate scenes defined in SmartThings. A scene e The SmartThings Switch lets you control devices that have the [`switch`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#switch) capability that are not already represented by a more specific platform. +It will also create switches for the following capabilities: + +| SmartThings capability | +|------------------------------| +| `custom.dryerWrinklePrevent` | + + ### Update The SmartThings update platform lets you update the firmware of devices that have the [`firmwareUpdate`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#firmwareUpdate) capability. From ce0427250dee38dd835e329ea8dd82631218327e Mon Sep 17 00:00:00 2001 From: Joost Lekkerkerker Date: Sat, 22 Mar 2025 21:28:51 +0100 Subject: [PATCH 104/122] Add select platform to SmartThings (#38135) --- source/_integrations/smartthings.markdown | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/source/_integrations/smartthings.markdown b/source/_integrations/smartthings.markdown index 75fe6ee2bf4..019145d95c5 100644 --- a/source/_integrations/smartthings.markdown +++ b/source/_integrations/smartthings.markdown @@ -13,6 +13,7 @@ ha_category: - Light - Lock - Scene + - Select - Sensor - Switch - Update @@ -31,6 +32,7 @@ ha_platforms: - light - lock - scene + - select - sensor - switch - update @@ -59,6 +61,7 @@ SmartThings represents devices as a set of [capabilities](https://developer.smar - [Fan](#fan) - [Light](#light) - [Lock](#lock) +- [Select](#select) - [Sensor](#sensor) - [Scene](#scene) - [Switch](#switch) @@ -153,6 +156,10 @@ The SmartThings Light lets you control devices that have light-related capabilit The SmartThings Lock platform lets you control devices that have the [`lock`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#lock) capability, showing current lock status and supporting lock and unlock commands. +### Select + +The SmartThings Select platform can be used to remotely turn on a dryer and washer. Be aware that for them to work, the Remote control has to be turned on. + ### Sensor The SmartThings Sensor platform lets your view devices that have sensor-related capabilities. A Sensor entity is created for each attribute (below) supported by the device. From 3ce7394fb481db8f2e67812dc6a2a78098be83d4 Mon Sep 17 00:00:00 2001 From: Joost Lekkerkerker Date: Sat, 22 Mar 2025 21:28:59 +0100 Subject: [PATCH 105/122] Add power binary sensor to SmartThings (#38139) --- source/_integrations/smartthings.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_integrations/smartthings.markdown b/source/_integrations/smartthings.markdown index 019145d95c5..1a962bc5eac 100644 --- a/source/_integrations/smartthings.markdown +++ b/source/_integrations/smartthings.markdown @@ -79,6 +79,7 @@ In Home Assistant, a binary sensor entity will be created for each of the follow | [`motionSensor`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#motionSensor) | | [`presenceSensor`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#presenceSensor) | | `samsungce.kidsLock` | +| `switch` (only for dryers and washers) | | [`remoteControlStatus`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#remoteControlStatus) | | [`tamperAlert`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#tamperAlert) | | [`valve`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#valve) | From 675d19b9d208fecfe20e55cea1cb83af996e0e50 Mon Sep 17 00:00:00 2001 From: tdfountain <174762217+tdfountain@users.noreply.github.com> Date: Sat, 22 Mar 2025 16:10:12 -0700 Subject: [PATCH 106/122] Document new buttons platform and PDU dynamic outlet buttons in NUT (#38140) * Document dynamic PDU buttons * Close important block * Fix ha_category and ha_platforms to be singular --- source/_integrations/nut.markdown | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/source/_integrations/nut.markdown b/source/_integrations/nut.markdown index 3b8db3c2717..86e3d168b70 100644 --- a/source/_integrations/nut.markdown +++ b/source/_integrations/nut.markdown @@ -2,6 +2,7 @@ title: Network UPS Tools (NUT) description: Instructions on how to set up NUT sensors within Home Assistant. ha_category: + - Button - System monitor ha_iot_class: Local Polling ha_release: 0.34 @@ -14,6 +15,7 @@ ha_codeowners: - '@tdfountain' ha_zeroconf: true ha_platforms: + - button - diagnostics - sensor ha_integration_type: device @@ -23,6 +25,27 @@ The Network UPS Tools (NUT) integration allows you to monitor and manage a UPS ( {% include integrations/config_flow.md %} +## Supported functionality + +### Buttons + +{% important %} +The username and password configured for the device must be granted +`instcmds` permissions on the NUT server to use buttons. Buttons will +not be available if user credentials are not specified. See the +[NUT server documentation](https://networkupstools.org/documentation.html) +for configuration information. +{% endimportant %} + +This NUT integration will add buttons for NUT server commands +available for your device. + +The following buttons are available for each switchable outlet: + +| name | Description | +|---------------------------|:------------------------------------------------| +| Power cycle outlet `name` | Power cycle the named outlet | + ## Example Resources Given the following example output from NUT (your variables may differ): From 1da15ee59e009bf8a52998658cb4291cd34c20ea Mon Sep 17 00:00:00 2001 From: tdfountain <174762217+tdfountain@users.noreply.github.com> Date: Sat, 22 Mar 2025 22:28:21 -0700 Subject: [PATCH 107/122] Document new switch platform and PDU dynamic outlet switches in NUT (#38146) --- source/_integrations/nut.markdown | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/source/_integrations/nut.markdown b/source/_integrations/nut.markdown index 86e3d168b70..6173191d4b4 100644 --- a/source/_integrations/nut.markdown +++ b/source/_integrations/nut.markdown @@ -4,6 +4,7 @@ description: Instructions on how to set up NUT sensors within Home Assistant. ha_category: - Button - System monitor + - Switch ha_iot_class: Local Polling ha_release: 0.34 ha_domain: nut @@ -18,6 +19,7 @@ ha_platforms: - button - diagnostics - sensor + - switch ha_integration_type: device --- @@ -27,16 +29,17 @@ The Network UPS Tools (NUT) integration allows you to monitor and manage a UPS ( ## Supported functionality -### Buttons - {% important %} The username and password configured for the device must be granted -`instcmds` permissions on the NUT server to use buttons. Buttons will -not be available if user credentials are not specified. See the -[NUT server documentation](https://networkupstools.org/documentation.html) -for configuration information. +`instcmds` permissions on the NUT server to use buttons and +switches. Buttons and switches will not be available if user +credentials are not specified. See the [NUT server +documentation](https://networkupstools.org/documentation.html) for +configuration information. {% endimportant %} +### Buttons + This NUT integration will add buttons for NUT server commands available for your device. @@ -46,6 +49,17 @@ The following buttons are available for each switchable outlet: |---------------------------|:------------------------------------------------| | Power cycle outlet `name` | Power cycle the named outlet | +### Switches + +This NUT integration will add switches for NUT server commands +available for your device. + +The following switches are available for each switchable outlet: + +| name | Description | +|---------------------------|:------------------------------------------------| +| Power outlet `name` | Turn power on/off for named outlet | + ## Example Resources Given the following example output from NUT (your variables may differ): From 501db97ffc9791ac714d48e52481bcf0587873e9 Mon Sep 17 00:00:00 2001 From: Joost Lekkerkerker Date: Sun, 23 Mar 2025 09:51:01 +0100 Subject: [PATCH 108/122] Add number platform to SmartThings (#38118) --- source/_integrations/smartthings.markdown | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/source/_integrations/smartthings.markdown b/source/_integrations/smartthings.markdown index 1a962bc5eac..5a0179f784f 100644 --- a/source/_integrations/smartthings.markdown +++ b/source/_integrations/smartthings.markdown @@ -12,6 +12,7 @@ ha_category: - Hub - Light - Lock + - Number - Scene - Select - Sensor @@ -31,6 +32,7 @@ ha_platforms: - fan - light - lock + - number - scene - select - sensor @@ -61,6 +63,7 @@ SmartThings represents devices as a set of [capabilities](https://developer.smar - [Fan](#fan) - [Light](#light) - [Lock](#lock) +- [Number](#number) - [Select](#select) - [Sensor](#sensor) - [Scene](#scene) @@ -157,6 +160,10 @@ The SmartThings Light lets you control devices that have light-related capabilit The SmartThings Lock platform lets you control devices that have the [`lock`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#lock) capability, showing current lock status and supporting lock and unlock commands. +### Number + +The SmartThings number platform lets you control the amount of washer rinse cycles. + ### Select The SmartThings Select platform can be used to remotely turn on a dryer and washer. Be aware that for them to work, the Remote control has to be turned on. From e064781c909f562c61c4ae7eed40216df99da6f6 Mon Sep 17 00:00:00 2001 From: Artur Pragacz <49985303+arturpragacz@users.noreply.github.com> Date: Sun, 23 Mar 2025 22:49:38 +0100 Subject: [PATCH 109/122] Make variables action not restricted to local scopes (#38150) --- source/_docs/scripts.markdown | 35 ++++++++++++++++------------------- 1 file changed, 16 insertions(+), 19 deletions(-) diff --git a/source/_docs/scripts.markdown b/source/_docs/scripts.markdown index f6634872d2c..43727ded7df 100644 --- a/source/_docs/scripts.markdown +++ b/source/_docs/scripts.markdown @@ -62,7 +62,7 @@ The variables {% term action %} allows you to set/override variables that will b ```yaml - alias: "Set variables" variables: - entities: + entities: - light.kitchen - light.living_room brightness: 100 @@ -94,9 +94,7 @@ Variables can be templated. ### Scope of variables -Variables defined by the `variables` {% term action %} have local scope. This means that if a variable is changed in a nested sequence block, that change will not be visible in an outer sequence block. - -Inside the `if` sequence the `variables` {% term action %} will only alter the `people` variable for that sequence. +The `variables` {% term action %} assigns the values to previously defined variables with the same name. If a variable was not previously defined, it is assigned in the top-level (script run) scope. {% raw %} @@ -111,17 +109,17 @@ sequence: entity_id: device_tracker.paulus state: "home" then: - # At this scope and this point of the sequence, people == 0 - variables: people: "{{ people + 1 }}" - # At this scope, people will now be 1 ... + paulus_home: true - action: notify.notify data: message: "There are {{ people }} people home" # "There are 1 people home" - # ... but at this scope it will still be 0 + # Variable value is now updated - action: notify.notify data: - message: "There are {{ people }} people home" # "There are 0 people home" + message: "There are {{ people }} people home {% if paulus_home is defined %}(including Paulus){% endif %}" + # "There are 1 people home (including Paulus)" ``` {% endraw %} @@ -213,8 +211,8 @@ This {% term action %} evaluates the template, and if true, the script will cont The template is re-evaluated whenever an entity ID that it references changes state. If you use non-deterministic functions like `now()` in the template it will not be continuously re-evaluated, but only when an entity ID that is referenced is changed. If you need to periodically re-evaluate the template, reference a sensor from the [Time and Date](/integrations/time_date/) integration that will update minutely or daily. {% raw %} -```yaml +```yaml # Wait until media player is stopped - alias: "Wait until media player is stopped" wait_template: "{{ is_state('media_player.floor', 'stop') }}" @@ -258,8 +256,8 @@ With both types of waits it is possible to set a timeout after which the script You can also get the script to abort after the timeout by using optional `continue_on_timeout: false`. {% raw %} -```yaml +```yaml # Wait for IFTTT event or abort after specified timeout. - wait_for_trigger: - trigger: event @@ -322,6 +320,7 @@ This can be used to take different actions based on whether or not the condition target: entity_id: switch.some_light ``` + {% endraw %} ## Fire an event @@ -453,7 +452,7 @@ repeat: {% endraw %} Other types are accepted as list items, for example, each item can be a -template, or even an mapping of key/value pairs. +template, or even an mapping of key/value pairs. {% raw %} @@ -509,7 +508,7 @@ For example: - repeat: while: "{{ is_state('sensor.mode', 'Home') and repeat.index < 10 }}" sequence: - - ... + - ... ``` {% endraw %} @@ -559,8 +558,9 @@ For example: - repeat: until: "{{ is_state('device_tracker.iphone', 'home') }}" sequence: - - ... + - ... ``` + {% endraw %} ### Repeat loop variable @@ -691,7 +691,6 @@ automation: {% endraw %} - More `choose` can be used together. This is the case of an IF-IF. The following example shows how a single {% term automation %} can control entities that aren't related to each other but have in common the same trigger. @@ -856,10 +855,8 @@ Some of the caveats of running {% term actions %} in parallel: there is no guarantee that they will be completed in the same order. - If one {% term action %} fails or errors, the other {% term actions %} will keep running until they too have finished or errored. -- Variables created/modified in one parallelized {% term action %} are not available - in another parallelized {% term action %}. Each step in a parallelized has its own scope. -- The response data of a parallelized {% term action %} is however also available outside of its - own scope. This is especially useful for parallelizing execution of long-running {% term actions %}. +- Variables created/modified in one parallelized {% term action %} can conflict with variables + from another parallelized {% term action %}. Make sure to give them distinct names to prevent that. ## Stopping a script sequence @@ -963,7 +960,7 @@ blueprint: input: input_boolean: name: Boolean - selector: + selector: boolean: actions: From 74a84971a2fc0743207cca89496dbbeae4bf7f78 Mon Sep 17 00:00:00 2001 From: Michael <35783820+mib1185@users.noreply.github.com> Date: Mon, 24 Mar 2025 12:56:33 +0100 Subject: [PATCH 110/122] Add sensor platform to backup integration (#37764) --- source/_integrations/backup.markdown | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/source/_integrations/backup.markdown b/source/_integrations/backup.markdown index d814d9e57c2..59b82a5b5f9 100644 --- a/source/_integrations/backup.markdown +++ b/source/_integrations/backup.markdown @@ -3,12 +3,15 @@ title: Backup description: Allow creating backups of container and core installations. ha_category: - Other + - Sensor ha_release: 2022.4 ha_quality_scale: internal ha_domain: backup ha_codeowners: - '@home-assistant/core' ha_iot_class: Calculated +ha_platforms: + - sensor ha_integration_type: system related: - docs: /common-tasks/general/#backups @@ -80,3 +83,24 @@ automation: ## Restoring a backup To restore a backup, follow the steps described in [Restoring a backup](/common-tasks/general/#restoring-a-backup). + +## Sensors + +The **Backup** {% term integration %} provides several sensors. + +### Backup Manager State + +The current state of the backup system. Possible states are: + +- Idle +- Creating a backup +- Receiving a backup +- Restoring a backup + +### Next scheduled automatic backup + +The timestamp of the next scheduled automatic backup. + +### Last successful automatic backup + +The timestamp of the last successful automatic backup. From c44cfd7ad118e98df47b9076a83ccc2b236f6ebd Mon Sep 17 00:00:00 2001 From: Thomas55555 <59625598+Thomas55555@users.noreply.github.com> Date: Mon, 24 Mar 2025 17:12:45 +0100 Subject: [PATCH 111/122] Add down- and uptime sensors to Husqvarna Automower (#38034) --- source/_integrations/husqvarna_automower.markdown | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/_integrations/husqvarna_automower.markdown b/source/_integrations/husqvarna_automower.markdown index 35f2baed41b..90b2695470c 100644 --- a/source/_integrations/husqvarna_automower.markdown +++ b/source/_integrations/husqvarna_automower.markdown @@ -148,6 +148,7 @@ The integration will create the following sensors: - Battery level - Cutting blade usage time (if available) - Error. For example: *Mower tilted*, *outside geofence*. +- Downtime (if available) - Restricted reason. For example: *Week schedule*, *frost*, or *daily limit*. - Mode - Next start @@ -158,6 +159,7 @@ The integration will create the following sensors: - Total drive distance - Total running time - Total searching time +- Uptime (if available) - Work area (if available). For example: *My lawn*, *Front lawn*, *Back lawn* For each work area with activated systematic mowing these sensors are created: From 13b3477c7ef01da473a987bcc779174f4f58f5c0 Mon Sep 17 00:00:00 2001 From: hahn-th <15319212+hahn-th@users.noreply.github.com> Date: Mon, 24 Mar 2025 17:22:13 +0100 Subject: [PATCH 112/122] add event platform (#36981) --- source/_integrations/homematicip_cloud.markdown | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/source/_integrations/homematicip_cloud.markdown b/source/_integrations/homematicip_cloud.markdown index f78d2a88f1d..79957aa0a26 100644 --- a/source/_integrations/homematicip_cloud.markdown +++ b/source/_integrations/homematicip_cloud.markdown @@ -7,6 +7,7 @@ ha_category: - Button - Climate - Cover + - Event - Hub - Light - Lock @@ -42,6 +43,7 @@ There is currently support for the following device types within Home Assistant: - Button - Climate - Cover +- Event - Light - Lock - Sensor @@ -150,6 +152,9 @@ Within this delay the device registration should be completed in the App, otherw - Module for Hoermann drives (*HMIP-MOD-HO*) - Hunter Douglas & erfal window blinds (*HMIP-HDM1*) +- homematicip_cloud.event + - Doorbell Event for devices *HmIP-DSD-PCB* and others where ChannelRole equals DOOR_BELL_INPUT + - homematicip_cloud.light - Switch actuator and meter for brand switches (*HmIP-BSM*) - Dimming actuator for brand switches (*HmIP-BDT*) From 85b16fa89e675c7a7ff80d9cecec8ed7788db1b8 Mon Sep 17 00:00:00 2001 From: Clay Benson Date: Mon, 24 Mar 2025 12:23:12 -0400 Subject: [PATCH 113/122] Update documentation for adding new actions for heading entity badges (#38112) * feat: Add documentation to support hold_action and double_tap_action on heading entity badges. https://github.com/home-assistant/frontend/pull/24707 * chore: Add callout in Heading badges intro to note that they support actions (like the card intro does in this file) --- source/_dashboards/heading.markdown | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/source/_dashboards/heading.markdown b/source/_dashboards/heading.markdown index 3c325d36a6f..9a444048546 100644 --- a/source/_dashboards/heading.markdown +++ b/source/_dashboards/heading.markdown @@ -60,7 +60,7 @@ badges: ## Heading badges -In addition to the heading text, each heading card can show small badges. They are smaller than regular [badges](/dashboards/badges/) and don't have a background. The heading badges can display sensor information in a compact and minimal style. +In addition to the heading text, each heading card can show small badges. They are smaller than regular [badges](/dashboards/badges/) and don't have a background. The heading badges can display sensor information in a compact and minimal style. Heading badges also support [actions](/dashboards/actions/). ```yaml type: entity @@ -108,4 +108,12 @@ tap_action: required: false description: Action taken on card tap. See [action documentation](/dashboards/actions/#tap-action). By default, it will do nothing. type: map +hold_action: + required: false + description: Action taken on card hold. See [action documentation](/dashboards/actions/#hold-action). By default, it will do nothing. + type: map +double_tap_action: + required: false + description: Action taken on card double tap. See [action documentation](/dashboards/actions/#double-tap-action). By default, it will do nothing. + type: map {% endconfiguration %} From da1e668fcbcfa558abbdede73e03ed9cd6903314 Mon Sep 17 00:00:00 2001 From: Erik Montnemery Date: Mon, 24 Mar 2025 17:24:23 +0100 Subject: [PATCH 114/122] Remove documentation for the Zengge integration (#38171) --- source/_integrations/zengge.markdown | 51 ---------------------------- source/_redirects | 1 + 2 files changed, 1 insertion(+), 51 deletions(-) delete mode 100644 source/_integrations/zengge.markdown diff --git a/source/_integrations/zengge.markdown b/source/_integrations/zengge.markdown deleted file mode 100644 index e981d34fd2a..00000000000 --- a/source/_integrations/zengge.markdown +++ /dev/null @@ -1,51 +0,0 @@ ---- -title: Zengge -description: Instructions on how to integrate Zengge Bluetooth bulbs into Home Assistant. -ha_category: - - Light -ha_iot_class: Local Polling -ha_release: 0.36 -ha_domain: zengge -ha_platforms: - - light -ha_integration_type: integration -ha_codeowners: - - '@emontnemery' -related: - - docs: /docs/configuration/ - title: Configuration file -ha_quality_scale: legacy ---- - -The `zengge` {% term integration %} allows you to integrate your [Zengge Bluetooth bulbs](http://www.zengge.com/) into Home Assistant. - -## Configuration - -To enable the lights, add the following lines to your {% term "`configuration.yaml`" %} file. -{% include integrations/restart_ha_after_config_inclusion.md %} - -```yaml -# Example configuration.yaml entry -light: - - platform: zengge - devices: - "C4:BE:84:51:54:8B": - name: Living Room -``` - -{% configuration %} -devices: - description: The list of your devices/bulbs. - required: true - type: list - keys: - mac_address: - description: The MAC address of the bulb. - required: true - type: list - keys: - name: - description: The friendly name for the frontend. - required: false - type: string -{% endconfiguration %} diff --git a/source/_redirects b/source/_redirects index 3da3bae864f..675fcebea9f 100644 --- a/source/_redirects +++ b/source/_redirects @@ -648,6 +648,7 @@ layout: null /integrations/xfinity /more-info/removed-integration 301 /integrations/yessssms /more-info/removed-integration 301 /integrations/yweather /more-info/removed-integration 301 +/integrations/zengge /integrations/led_ble /components/zwave /integrations/zwave_js # Lovelace images From 543d597d383da8cf137ce08b355c36eee098c957 Mon Sep 17 00:00:00 2001 From: Piotr Machowski <6118709+PiotrMachowski@users.noreply.github.com> Date: Tue, 25 Mar 2025 04:29:59 +0100 Subject: [PATCH 115/122] Add media_player to SmartThings documentation --- source/_integrations/smartthings.markdown | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/source/_integrations/smartthings.markdown b/source/_integrations/smartthings.markdown index 5a0179f784f..4935069d6b0 100644 --- a/source/_integrations/smartthings.markdown +++ b/source/_integrations/smartthings.markdown @@ -12,6 +12,7 @@ ha_category: - Hub - Light - Lock + - Media player - Number - Scene - Select @@ -32,6 +33,7 @@ ha_platforms: - fan - light - lock + - media_player - number - scene - select @@ -63,6 +65,7 @@ SmartThings represents devices as a set of [capabilities](https://developer.smar - [Fan](#fan) - [Light](#light) - [Lock](#lock) +- [Media player](#media-player) - [Number](#number) - [Select](#select) - [Sensor](#sensor) @@ -160,6 +163,21 @@ The SmartThings Light lets you control devices that have light-related capabilit The SmartThings Lock platform lets you control devices that have the [`lock`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#lock) capability, showing current lock status and supporting lock and unlock commands. +### Media player + +The SmartThings Media player lets you control devices that have media player-related capabilities. For a SmartThings device to be represented by the media player entity, it must have all required capabilities. + +| SmartThings capability | Related media player features in Home Assistant | +| --------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| [`audioMute`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#audioMute) (required) | `volume_mute` | +| [`audioTrackData`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#audioTrackData) (required) | `media_title` and `media_artist` | +| [`audioVolume`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#audioVolume) (required) | `volume_up`, `volume_down`, `volume_set` | +| [`mediaPlayback`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#mediaPlayback) (required) | `media_play`, `media_pause`, `media_stop`, `media_next_track`, `media_previous_track` | +| [`mediaInputSource`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#mediaInputSource) | `select_source` | +| [`mediaPlaybackRepeat`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#mediaPlaybackRepeat) | `repeat_set` | +| [`mediaPlaybackShuffle`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#mediaPlaybackShuffle) | `shuffle_set` | +| [`switch`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#switch) | `turn_on`, `turn_off` | + ### Number The SmartThings number platform lets you control the amount of washer rinse cycles. From 570be7991ee83de3142c9dd37f30d1e882d63239 Mon Sep 17 00:00:00 2001 From: pglab-electronics <89299919+pglab-electronics@users.noreply.github.com> Date: Tue, 25 Mar 2025 09:55:43 +0100 Subject: [PATCH 116/122] Add cover to PG Lab documentation (#37903) --- source/_integrations/pglab.markdown | 3 +++ 1 file changed, 3 insertions(+) diff --git a/source/_integrations/pglab.markdown b/source/_integrations/pglab.markdown index 62694f4242e..65f50d672e7 100644 --- a/source/_integrations/pglab.markdown +++ b/source/_integrations/pglab.markdown @@ -2,6 +2,7 @@ title: PG LAB Electronics description: Instructions on how to integrate PG LAB Electronics with Home Assistant. ha_category: + - Cover - Switch - Sensor ha_release: '2025.3' @@ -11,6 +12,7 @@ ha_codeowners: - '@pglab-electronics' ha_domain: pglab ha_platforms: + - cover - switch - sensor ha_integration_type: integration @@ -55,6 +57,7 @@ Configure each PG LAB Electronics devices following these steps: PG LAB Electronics relays, sensors, and switches are supported. - PG LAB Relays will be added as Home Assistant `switch` entities. +- PG LAB Shutters will be added as Home Assistant `cover` entities. - PG LAB Sensors will be added as Home Assistant `sensor` entities. - The integration will also create diagnostic status sensors, with device different information. From 293d2611517e4d1129d58e63f4a3410ab1cf67bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=2E=20Diego=20Rodr=C3=ADguez=20Royo?= Date: Tue, 25 Mar 2025 10:18:20 +0100 Subject: [PATCH 117/122] Add missing events to Home Connect (#38176) * Add missing events to Home Connect * Fixes --- source/_integrations/home_connect.markdown | 130 +++++++++++++++++---- 1 file changed, 110 insertions(+), 20 deletions(-) diff --git a/source/_integrations/home_connect.markdown b/source/_integrations/home_connect.markdown index cff4c60d020..5fdae6f55f1 100644 --- a/source/_integrations/home_connect.markdown +++ b/source/_integrations/home_connect.markdown @@ -842,30 +842,120 @@ All the event sensors will have the following possible values: {% enddetails %} -- **Freezer door alarm**: - - **Description**: Represents the alarm state of the freezer door. - - **Availability**: Freezer, Fridge freezer -- **Refrigerator door alarm**: - - **Description**: Represents the alarm state of the refrigerator door. - - **Availability**: Fridge freezer, Refrigerator -- **Freezer temperature alarm**: - - **Description**: Represents the alarm state of the freezer temperature. - - **Availability**: Freezer, Fridge freezer -- **Bean container empty**: - - **Description**: Indicates whether the bean container is empty. - - **Availability**: Coffee maker -- **Water tank empty**: - - **Description**: Indicates whether the water tank is empty. - - **Availability**: Coffee maker -- **Drip tray full**: - - **Description**: Indicates whether the drip tray is full. - - **Availability**: Coffee maker +- **Program aborted**: + - **Description**: Event triggered each time a program is successfully canceled. + - **Availability**: Cook processor, Cleaning robot, Dishwasher +- **Program finished**: + - **Description**: Event triggered each time a program run is successfully finished. + - **Availability**: Cook processor, Cooktop, Hood, Oven, Cleaning robot, Dishwasher, Washer, Washer dryer +- **Alarm clock elapsed**: + - **Description**: Event triggered when the alarm clock has elapsed. + - **Availability**: Cooktop, Oven +- **Pre-heat finished**: + - **Description**: Event triggered when **Fast pre-heat** program option is active and the preheating phase is finished. + - **Availability**: Cooktop, Oven +- **Regular pre-heat finished**: + - **Description**: Event triggered when the preheating phase is finished (and the **Fast pre-heat** option is not active nor supported). + - **Availability**: Oven +- **Drying process finished**: + - **Description**: Event triggered when the drying process is finished. + - **Availability**: Dryer - **Salt nearly empty**: - - **Description**: Indicates whether the salt is nearly empty. + - **Description**: Event triggered when the salt supply is running low. - **Availability**: Dishwasher - **Rinse aid nearly empty**: - - **Description**: Indicates whether the rinse aid is nearly empty. + - **Description**: Event triggered when the rinse aid supply is running low. - **Availability**: Dishwasher +- **Bean container empty**: + - **Description**: Event triggered when the bean container is empty. + - **Availability**: Coffee maker +- **Water tank empty**: + - **Description**: Event triggered when the water tank is empty. + - **Availability**: Coffee maker +- **Drip tray full**: + - **Description**: Event triggered when the drip tray is full. + - **Availability**: Coffee maker +- **Keep milk tank cool**: + - **Description**: Event triggered when the user should remove the milk container and put it in a cool place so that the milk stays fresh. + - **Availability**: Coffee maker +- **Descaling in 20 cups**: + - **Description**: Event triggered when there are 20 cups left before the descaling process is required. + - **Availability**: Coffee maker +- **Descaling in 15 cups**: + - **Description**: Event triggered when there are 15 cups left before the descaling process is required. + - **Availability**: Coffee maker +- **Descaling in 10 cups**: + - **Description**: Event triggered when there are 10 cups left before the descaling process is required. + - **Availability**: Coffee maker +- **Descaling in 5 cups**: + - **Description**: Event triggered when there are 5 cups left before the descaling process is required. + - **Availability**: Coffee maker +- **Device should be descaled**: + - **Description**: Event triggered when the device should be descaled. + - **Availability**: Coffee maker +- **Device descaling overdue**: + - **Description**: Event triggered when the device descaling is overdue. + - **Availability**: Coffee maker +- **Device descaling blockage**: + - **Description**: Event triggered when the device descaling is blocked. + - **Availability**: Coffee maker +- **Device should be cleaned**: + - **Description**: Event triggered when the device should be cleaned. + - **Availability**: Coffee maker +- **Device cleaning overdue**: + - **Description**: Event triggered when the device cleaning is overdue. + - **Availability**: Coffee maker +- **Calc'N'Clean in 20 cups**: + - **Description**: Event triggered when there are 20 cups left before the Calc'N'Clean process is required. + - **Availability**: Coffee maker +- **Calc'N'Clean in 15 cups**: + - **Description**: Event triggered when there are 15 cups left before the Calc'N'Clean process is required. + - **Availability**: Coffee maker +- **Calc'N'Clean in 10 cups**: + - **Description**: Event triggered when there are 10 cups left before the Calc'N'Clean process is required. + - **Availability**: Coffee maker +- **Calc'N'Clean in 5 cups**: + - **Description**: Event triggered when there are 5 cups left before the Calc'N'Clean process is required. + - **Availability**: Coffee maker +- **Device should be Calc'N'Cleaned**: + - **Description**: Event triggered when the device should be Calc'N'Cleaned. + - **Availability**: Coffee maker +- **Device Calc'N'Clean overdue**: + - **Description**: Event triggered when the device Calc'N'Clean is overdue. + - **Availability**: Coffee maker +- **Device Calc'N'Clean blockage**: + - **Description**: Event triggered when the device Calc'N'Clean is blocked. + - **Availability**: Coffee maker +- **Freezer door alarm**: + - **Description**: Event triggered when the freezer door was left open too long. + - **Availability**: Freezer, Fridge freezer +- **Refrigerator door alarm**: + - **Description**: Event triggered when the refrigerator door was left open too long. + - **Availability**: Fridge freezer, Refrigerator +- **Freezer temperature alarm**: + - **Description**: Event triggered when the freezer temperature is too high. + - **Availability**: Freezer, Fridge freezer +- **Empty dust box and clean filter**: + - **Description**: Event triggered when the user has to empty the dust box and clean the filter. + - **Availability**: Cleaning robot +- **Cleaning robot is stuck**: + - **Description**: Event triggered when the cleaning robot is stuck and isn't able to continue its run. + - **Availability**: Cleaning robot +- **Docking station not found**: + - **Description**: Event triggered when the cleaning robot wasn't able to find the charging station. + - **Availability**: Cleaning robot +- **Poor i-Dos 1 fill level**: + - **Description**: Event triggered when i-Dos content 1 is poor. + - **Availability**: Washer +- **Poor i-Dos 2 fill level**: + - **Description**: Event triggered when i-Dos content 2 is poor. + - **Availability**: Washer +- **Grease filter max saturation nearly reached**: + - **Description**: Event triggered when the grease filters need to be cleaned soon + - **Availability**: Hood +- **Grease filter max saturation reached**: + - **Description**: Event triggered when the grease filters are saturated + - **Availability**: Hood {% enddetails %} From ee018fef7c261cafc95c45794ab7df172696d1dd Mon Sep 17 00:00:00 2001 From: Manu <4445816+tr4nt0r@users.noreply.github.com> Date: Tue, 25 Mar 2025 10:31:19 +0100 Subject: [PATCH 118/122] create_daily action (#37998) --- source/_integrations/habitica.markdown | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/source/_integrations/habitica.markdown b/source/_integrations/habitica.markdown index 83c8ec6b2b9..237adde36af 100644 --- a/source/_integrations/habitica.markdown +++ b/source/_integrations/habitica.markdown @@ -412,6 +412,26 @@ Updates a specific daily for the selected Habitica character. | `streak` | yes | Adjust or reset the streak counter of the daily. | | `alias` | yes | A task alias can be used instead of the name or task ID. Only dashes, underscores, and alphanumeric characters are supported. The task alias must be unique among all your tasks. | +### Action `habitica.create_daily` + +Creates a daily for the selected Habitica character. + +| Data attribute | Optional | Description | +| -------------- | -------- | -------------------------------------------------------------------------------------------- | +| `config_entry` | no | Select the Habitica account to create a daily. | +| `name` | no | The title for the Habitica daily. | +| `notes` | yes | The new notes for the Habitica daily. | +| `add_checklist_item` | yes | The items to add to the daily's checklist. | +| `priority` | yes | The difficulty of a daily. Valid values: `trivial`, `easy`, `medium`, `hard` | +| `start_date` | yes | The date when the daily becomes active and specifies the exact weekday or day of the month it repeats on. | +| `frequency` | yes | The repetition interval of a daily. Valid values: `daily`, `weekly`, `monthly`, `yearly`. | +| `every_x` | yes | The number of intervals (`days`, `weeks`, `months`, or `years`) after which the daily repeats, based on the chosen repetition interval. A value of 0 makes the daily inactive (a *Gray Daily*). | +| `repeat` | yes | The days of the week the daily repeats. Applicable when the repetition interval is set to weekly. | +| `repeat_monthly` | yes | Whether a monthly recurring task repeats on the same calendar day each month (`day_of_month`), or on the same weekday and week of the month (`day_of_week`), based on the start date. Applicable when the repetition interval is set to monthly. | +| `reminder` | yes | Add reminders to a Habitica daily. | +| `tag` | yes | Add tags to the Habitica daily. If a tag does not already exist, a new one will be created. | +| `alias` | yes | A task alias can be used instead of the name or task ID. Only dashes, underscores, and alphanumeric characters are supported. The task alias must be unique among all your tasks. | + ## Automations Get started with these automation examples for Habitica, each featuring ready-to-use blueprints! From a8efffb26e4f068bc9ade13ff91d272be0161c0b Mon Sep 17 00:00:00 2001 From: starkillerOG Date: Tue, 25 Mar 2025 10:50:36 +0100 Subject: [PATCH 119/122] Add Reolink smart ai number entities docs (#37923) --- source/_integrations/reolink.markdown | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/source/_integrations/reolink.markdown b/source/_integrations/reolink.markdown index e13e502d631..614ad9faa26 100644 --- a/source/_integrations/reolink.markdown +++ b/source/_integrations/reolink.markdown @@ -140,12 +140,21 @@ Depending on the supported features of the camera, number entities are added for - AI package sensitivity - AI pet sensitivity - AI animal sensitivity +- AI crossline sensitivity+ (up to 3 lines) +- AI intrusion sensitivity+ (up to 3 zones) +- AI linger sensitivity+ (up to 3 zones) +- AI item forgotten sensitivity+ (up to 3 zones) +- AI item taken sensitivity+ (up to 3 zones) - AI face delay* - AI person delay* - AI vehicle delay* - AI package delay* - AI pet delay* - AI animal delay* +- AI intrusion delay+ (up to 3 zones) +- AI linger delay+ (up to 3 zones) +- AI item forgotten delay+ (up to 3 zones) +- AI item taken delay+ (up to 3 zones) - Auto quick reply time - Auto track limit left - Auto track limit right From 46d9a17db79a4d9d7918a9f883146219d6b091ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ab=C3=ADlio=20Costa?= Date: Tue, 25 Mar 2025 10:38:08 +0000 Subject: [PATCH 120/122] Add Motionblinds Matter virtual integration (#38036) * Add Motionblinds Matter virtual integration * Add codeowner * Move to iot_standards * Add list of tested devices * Add WWHA statement --- CODEOWNERS | 1 + .../motionblinds_matter.markdown | 51 +++++++++++++++++++ 2 files changed, 52 insertions(+) create mode 100644 source/_integrations/motionblinds_matter.markdown diff --git a/CODEOWNERS b/CODEOWNERS index c4b0a384d57..95d57ed61b2 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -557,6 +557,7 @@ source/_integrations/moon.markdown @fabaff @frenck source/_integrations/mopeka.markdown @bdraco source/_integrations/motion_blinds.markdown @starkillerOG source/_integrations/motionblinds_ble.markdown @LennP @jerrybboy +source/_integrations/motionblinds_matter.markdown @home-assistant/matter source/_integrations/motioneye.markdown @dermotduffy source/_integrations/mqtt.markdown @emontnemery @jbouwh @bdraco source/_integrations/msteams.markdown @peroyvind diff --git a/source/_integrations/motionblinds_matter.markdown b/source/_integrations/motionblinds_matter.markdown new file mode 100644 index 00000000000..5415db4f82d --- /dev/null +++ b/source/_integrations/motionblinds_matter.markdown @@ -0,0 +1,51 @@ +--- +title: Motionblinds Matter +description: Control your Motionblinds Matter devices using the Matter integration. +ha_category: + - Cover +ha_brand: true +ha_domain: motionblinds +ha_release: '2025.4' +ha_codeowners: + - '@home-assistant/matter' +ha_config_flow: true +ha_platforms: + - cover +ha_iot_class: Local Push +ha_integration_type: virtual +works_with: + - matter +ha_iot_standard: + - matter +--- + +[Motionblinds](https://motionblinds.com) is a member of the Works with Home Assistant partner program for their Matter products. Motionblinds is committed to making sure their products are up-to-date and ready to use in Home Assistant. + +Motionblinds Matter devices work locally and integrate seamlessly with the Matter integration in Home Assistant. As all connectivity is happening locally, status updates and controlling your devices happen instantly in Home Assistant. + +{% my add_matter_device badge domain=page.ha_domain %} + +[Learn more about Matter in Home Assistant.](/integrations/matter/) + +## Supported devices + +The following devices are known to be supported by the integration: +- CMD-02 +- CMD-02-P +- CMD-03 +- CM-03 +- CM-04 +- CM-05 +- CM-06 +- CM-07 +- CM-07V2 +- CM-08 +- CM-09 +- CM-10 +- CM-34 +- CM-35 +- CM-36 +- CM-40 +- CM-45 +- CM-52 +- CM-57 From 99753ed538d11a7a55bd2b0f38c589af600d889d Mon Sep 17 00:00:00 2001 From: elmurato <1382097+elmurato@users.noreply.github.com> Date: Tue, 25 Mar 2025 20:50:23 +0100 Subject: [PATCH 121/122] Add Pterodactyl docs (#38158) * Add docs for Pterodactyl * Fix findings of coderabbitai * Fix findings of coderabbitai (part 2) * Correct ha_release * Replace Host with URL * Add brief description about the integration itself and not only about Pterodactyl in general * Rename client API key to account API key and fix review findings * Fix remaining review finding --- source/_integrations/pterodactyl.markdown | 58 +++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 source/_integrations/pterodactyl.markdown diff --git a/source/_integrations/pterodactyl.markdown b/source/_integrations/pterodactyl.markdown new file mode 100644 index 00000000000..61b299daaaa --- /dev/null +++ b/source/_integrations/pterodactyl.markdown @@ -0,0 +1,58 @@ +--- +title: Pterodactyl +description: Instructions on how to integrate a Pterodactyl server into Home Assistant. +ha_release: 2025.4 +ha_category: + - Binary sensor +ha_iot_class: Local Polling +ha_config_flow: true +ha_codeowners: + - '@elmurato' +ha_domain: pterodactyl +ha_platforms: + - binary_sensor +ha_integration_type: integration +ha_quality_scale: bronze +--- + +[Pterodactyl](https://www.pterodactyl.io) is a game server management panel designed to simplify the administration of game servers. It offers a user-friendly interface which allows users to manage multiple game servers from a single dashboard, supporting popular games like Minecraft. Its key features include an intuitive web-based control panel, automated server installation, real-time server monitoring, scheduled backups and more. Each game server runs in an isolated Docker container, ensuring security and stability. + +The Pterodactyl {% term integration %} allows you to monitor your game servers of your Pterodactyl server within Home Assistant. + +## Prerequisites + +To access your Pterodactyl server, an account API key is required. Follow these steps to create a new one: + +- Access your **Pterodactyl Panel** and log in with your user account. +- From the main dashboard, click your **username** or **profile icon** in the top-right corner, then select **API Credentials**. +- Enter a **Description** to identify the key (for example, "Home Assistant"). +- Optionally, specify **Allowed IPs** to restrict where the key can be used (leave blank to allow all IPs). +- Click **Create**. The panel will generate and display your new account API key. +- Copy the **account API key** immediately and store it securely. You won’t be able to view it again after leaving the page. + +{% important %} +Pterodactyl has two different types of API keys: Account and Application. Application API keys are not supported, an account API key as described above is required instead. +{% endimportant %} + +{% include integrations/config_flow.md %} + +During setup, you will be prompted to enter the **URL** and the **account API key** of the server. + +{% configuration_basic %} +URL: + description: "The URL of your Pterodactyl server, including the protocol (`http://` or `https://`) and optionally the port number. Example: `http://192.168.0.123:8080`" +Account API key: + description: "The account API key for accessing your Pterodactyl server (see prerequisites)." +{% endconfiguration_basic %} + +## Binary sensors + +This integration provides a binary sensor with the following information for each game server of your Pterodactyl server: + +- Status: `Running` or `Not running` + +## Removing the integration + +This integration follows standard integration removal. No extra steps are required. + +{% include integrations/remove_device_service.md %} From 989ce94fdce1cf4690b2a518aa914527d20990f1 Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Wed, 26 Mar 2025 07:51:43 +0100 Subject: [PATCH 122/122] Add template list functions: intersect, difference, symmetric_difference, union (#38190) --- .../_docs/configuration/templating.markdown | 65 +++++++++++++++++++ 1 file changed, 65 insertions(+) diff --git a/source/_docs/configuration/templating.markdown b/source/_docs/configuration/templating.markdown index 42f9b68c86d..4f75749683a 100644 --- a/source/_docs/configuration/templating.markdown +++ b/source/_docs/configuration/templating.markdown @@ -1256,6 +1256,71 @@ Some examples: {% endraw %} +### Find common elements between lists + +The template engine provides a filter to find common elements between two lists: `intersect`. + +This function returns a list containing all elements that are present in both input lists. + +Some examples: + +{% raw %} + +- `{{ intersect([1, 2, 5, 3, 4, 10], [1, 2, 3, 4, 5, 11, 99]) }}` - renders as `[1, 2, 3, 4, 5]` +- `{{ [1, 2, 5, 3, 4, 10] | intersect([1, 2, 3, 4, 5, 11, 99]) }}` - renders as `[1, 2, 3, 4, 5]` +- `{{ intersect(['a', 'b', 'c'], ['b', 'c', 'd']) }}` - renders as `['b', 'c']` +- `{{ ['a', 'b', 'c'] | intersect(['b', 'c', 'd']) }}` - renders as `['b', 'c']` + +{% endraw %} + +### Find elements in first list not in second list + +The template engine provides a filter to find elements that are in the first list but not in the second list: `difference`. +This function returns a list containing all elements that are present in the first list but absent from the second list. + +Some examples: + +{% raw %} + +- `{{ difference([1, 2, 5, 3, 4, 10], [1, 2, 3, 4, 5, 11, 99]) }}` - renders as `[10]` +- `{{ [1, 2, 5, 3, 4, 10] | difference([1, 2, 3, 4, 5, 11, 99]) }}` - renders as `[10]` +- `{{ difference(['a', 'b', 'c'], ['b', 'c', 'd']) }}` - renders as `['a']` +- `{{ ['a', 'b', 'c'] | difference(['b', 'c', 'd']) }}` - renders as `['a']` + +{% endraw %} + +### Find elements that are in either list but not in both + +The template engine provides a filter to find elements that are in either of the input lists but not in both: `symmetric_difference`. +This function returns a list containing all elements that are present in either the first list or the second list, but not in both. + +Some examples: + +{% raw %} + +- `{{ symmetric_difference([1, 2, 5, 3, 4, 10], [1, 2, 3, 4, 5, 11, 99]) }}` - renders as `[10, 11, 99]` +- `{{ [1, 2, 5, 3, 4, 10] | symmetric_difference([1, 2, 3, 4, 5, 11, 99]) }}` - renders as `[10, 11, 99]` +- `{{ symmetric_difference(['a', 'b', 'c'], ['b', 'c', 'd']) }}` - renders as `['a', 'd']` +- `{{ ['a', 'b', 'c'] | symmetric_difference(['b', 'c', 'd']) }}` - renders as `['a', 'd']` + +{% endraw %} + +### Combine all unique elements from two lists + +The template engine provides a filter to combine all unique elements from two lists: `union`. +This function returns a list containing all unique elements that are present in either the first list or the second list. + +Some examples: + +{% raw %} + +- `{{ union([1, 2, 5, 3, 4, 10], [1, 2, 3, 4, 5, 11, 99]) }}` - renders as `[1, 2, 3, 4, 5, 10, 11, 99]` +- `{{ [1, 2, 5, 3, 4, 10] | union([1, 2, 3, 4, 5, 11, 99]) }}` - renders as `[1, 2, 3, 4, 5, 10, 11, 99]` +- `{{ union(['a', 'b', 'c'], ['b', 'c', 'd']) }}` - renders as `['a', 'b', 'c', 'd']` +- `{{ ['a', 'b', 'c'] | union(['b', 'c', 'd']) }}` - renders as `['a', 'b', 'c', 'd']` + +{% endraw %} + ### Combining dictionaries The template engine provides a function and filter to merge multiple dictionaries: `combine`.