From 72735064abcbc782afa2e4f2291b08c299af4454 Mon Sep 17 00:00:00 2001
From: tronikos
Date: Wed, 26 Jul 2023 11:53:58 -0700
Subject: [PATCH 01/91] Opower: Fix link to the energy dashboard configuration
(#28343)
---
source/_integrations/opower.markdown | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/source/_integrations/opower.markdown b/source/_integrations/opower.markdown
index ae624c12f29..a57f57e7349 100644
--- a/source/_integrations/opower.markdown
+++ b/source/_integrations/opower.markdown
@@ -60,7 +60,7 @@ For gas:
Because utilities only release usage/cost data with a 48-hour delay, the integration inserts data into statistic objects. At the initial setup, the integration pulls historical monthly usage/cost since the account activation, daily usage/cost for the past 3 years, and for electricity hourly usage/cost for the past 2 months. After the initial setup, the integration keeps pulling hourly data for electricity and daily data for gas for the past 30 days to allow for any corrections in the data from the utilities.
-In the configuration of the energy dashboard (**{% my energy title="Settings > Dashboards > Energy" %}**):
+In the configuration of the energy dashboard (**{% my config_energy title="Settings > Dashboards > Energy" %}**):
For electricity:
From 4f89fb79e524331b8bcbb776fce2d2b875b27c5b Mon Sep 17 00:00:00 2001
From: David Knowles
Date: Thu, 27 Jul 2023 00:21:29 -0400
Subject: [PATCH 02/91] Add documentation for the new Schlage integration
(#27585)
Co-authored-by: J. Nick Koston
---
source/_integrations/schlage.markdown | 22 ++++++++++++++++++++++
1 file changed, 22 insertions(+)
create mode 100644 source/_integrations/schlage.markdown
diff --git a/source/_integrations/schlage.markdown b/source/_integrations/schlage.markdown
new file mode 100644
index 00000000000..f98bdcc6079
--- /dev/null
+++ b/source/_integrations/schlage.markdown
@@ -0,0 +1,22 @@
+---
+title: Schlage
+description: Instructions on how to integrate Schlage WiFi smart locks into Home Assistant.
+ha_category:
+ - Lock
+ha_release: 2023.9
+ha_iot_class: Cloud Polling
+ha_config_flow: true
+ha_codeowners:
+ - '@dknowles2'
+ha_platforms:
+ - lock
+ha_integration_type: integration
+---
+
+The Schlage integration provides connectivity with Schlage WiFi smart locks through Schlage's cloud API.
+
+There is currently support for the following device types within Home Assistant:
+
+- Lock
+
+{% include integrations/config_flow.md %}
From 8fe6ad530fd9cd9bfe4ba822c4b6ca6992af054d Mon Sep 17 00:00:00 2001
From: tronikos
Date: Thu, 27 Jul 2023 00:20:19 -0700
Subject: [PATCH 03/91] Opower: clarify 1 therm = 1 CCF (#28345)
---
source/_integrations/opower.markdown | 2 ++
1 file changed, 2 insertions(+)
diff --git a/source/_integrations/opower.markdown b/source/_integrations/opower.markdown
index a57f57e7349..7151f17fae5 100644
--- a/source/_integrations/opower.markdown
+++ b/source/_integrations/opower.markdown
@@ -56,6 +56,8 @@ For gas:
- Typical monthly gas usage
- Typical monthly gas cost
+Note the unit for gas is CCF (centum cubic feet). 1 CCF is one hundred cubic feet which is equivalent to 1 therm.
+
## Energy
Because utilities only release usage/cost data with a 48-hour delay, the integration inserts data into statistic objects. At the initial setup, the integration pulls historical monthly usage/cost since the account activation, daily usage/cost for the past 3 years, and for electricity hourly usage/cost for the past 2 months. After the initial setup, the integration keeps pulling hourly data for electricity and daily data for gas for the past 30 days to allow for any corrections in the data from the utilities.
From c3464e7248392ffd9d52ff65d049afd940c73388 Mon Sep 17 00:00:00 2001
From: Michael Hansen
Date: Thu, 27 Jul 2023 13:31:02 -0500
Subject: [PATCH 04/91] Document sentence trigger wildcards (#28332)
---
source/_docs/automation/templating.markdown | 11 +++++++++++
source/_docs/automation/trigger.markdown | 17 +++++++++++++++++
2 files changed, 28 insertions(+)
diff --git a/source/_docs/automation/templating.markdown b/source/_docs/automation/templating.markdown
index b3ed854a918..dc2c2d77723 100644
--- a/source/_docs/automation/templating.markdown
+++ b/source/_docs/automation/templating.markdown
@@ -92,6 +92,17 @@ These are the properties available for a [Numeric State trigger](/docs/automatio
| `trigger.to_state` | The new [state object] that triggered trigger.
| `trigger.for` | Timedelta object how long state has met above/below criteria, if any.
+### Sentence
+
+These are the properties available for a [Sentence trigger](/docs/automation/trigger/#sentence-trigger).
+
+| Template variable | Data |
+| ---- | ---- |
+| `trigger.platform` | Hardcoded: `conversation`
+| `trigger.sentence` | Text of the sentence that was matched
+| `trigger.slots` | Object with matched slot values
+| `trigger.details` | Object with matched slot details by name, such as [wildcards](/docs/automation/trigger/#sentence-wildcards). Each detail contains: - `name` - name of the slot
- `text` - matched text
- `value` - output value (see [lists](https://developers.home-assistant.io/docs/voice/intent-recognition/template-sentence-syntax/#lists))
+
### State
These are the properties available for a [State trigger](/docs/automation/trigger/#state-trigger).
diff --git a/source/_docs/automation/trigger.markdown b/source/_docs/automation/trigger.markdown
index fa8cdc5709c..049bc8ca85e 100644
--- a/source/_docs/automation/trigger.markdown
+++ b/source/_docs/automation/trigger.markdown
@@ -939,6 +939,23 @@ The sentences matched by this trigger will be:
Punctuation and casing are ignored, so "It's PARTY TIME!!!" will also match.
+### Sentence Wildcards
+
+Adding one or more `{lists}` to your trigger sentences will capture any text at that point in the sentence. A `slots` object will be [available in the trigger data](/docs/automation/templating#sentence).
+This allows you to match sentences with variable parts, such as album/artist names or a description of a picture.
+
+For example, the sentence `play {album} by {artist}` will match "play the white album by the beatles" and have the following variables available in the action templates:
+
+{% raw %}
+
+- `{{ trigger.slots.album }}` - "the white album"
+- `{{ trigger.slots.artist }}` - "the beatles"
+
+{% endraw %}
+
+Wildcards will match as much text as possible, which may lead to surprises: "play day by day by taken by trees" will match `album` as "day" and `artist` as "day by taken by trees".
+Including extra words in your template can help: `play {album} by artist {artist}` can now correctly match "play day by day by artist taken by trees".
+
## Multiple triggers
It is possible to specify multiple triggers for the same rule. To do so just prefix the first line of each trigger with a dash (-) and indent the next lines accordingly. Whenever one of the triggers fires, processing of your automation rule begins.
From 535fe7fb4d0c58d925cc08a4863fb123e3b0fcf1 Mon Sep 17 00:00:00 2001
From: David Knowles
Date: Sat, 29 Jul 2023 00:09:46 -0400
Subject: [PATCH 05/91] Update Schlage docs with battery sensor (#28357)
---
source/_integrations/schlage.markdown | 11 ++++++++++-
1 file changed, 10 insertions(+), 1 deletion(-)
diff --git a/source/_integrations/schlage.markdown b/source/_integrations/schlage.markdown
index f98bdcc6079..6cd84a80f19 100644
--- a/source/_integrations/schlage.markdown
+++ b/source/_integrations/schlage.markdown
@@ -3,6 +3,7 @@ title: Schlage
description: Instructions on how to integrate Schlage WiFi smart locks into Home Assistant.
ha_category:
- Lock
+ - Sensor
ha_release: 2023.9
ha_iot_class: Cloud Polling
ha_config_flow: true
@@ -10,13 +11,21 @@ ha_codeowners:
- '@dknowles2'
ha_platforms:
- lock
+ - sensor
ha_integration_type: integration
---
The Schlage integration provides connectivity with Schlage WiFi smart locks through Schlage's cloud API.
+{% include integrations/config_flow.md %}
+
There is currently support for the following device types within Home Assistant:
- Lock
+- Sensor
-{% include integrations/config_flow.md %}
+## Sensor
+
+Once you have enabled the Schlage integration, you should see the following sensors:
+
+- Lock Battery
From 6411bd111db4d26ec3160a0cc76564e02ed241e7 Mon Sep 17 00:00:00 2001
From: Jan-Philipp Benecke
Date: Sun, 30 Jul 2023 19:03:00 +0200
Subject: [PATCH 06/91] Change IoT class for ToD to calculated (#28366)
---
source/_integrations/tod.markdown | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/source/_integrations/tod.markdown b/source/_integrations/tod.markdown
index eb3ce072abe..a4af68d501d 100644
--- a/source/_integrations/tod.markdown
+++ b/source/_integrations/tod.markdown
@@ -5,7 +5,7 @@ ha_category:
- Binary Sensor
- Helper
ha_release: 0.89
-ha_iot_class: Local Push
+ha_iot_class: Calculated
ha_quality_scale: internal
ha_config_flow: true
ha_domain: tod
From 6dc4ed3e97c67210f5496bb7528baec4ebb8e550 Mon Sep 17 00:00:00 2001
From: Joost Lekkerkerker
Date: Sun, 30 Jul 2023 19:03:49 +0200
Subject: [PATCH 07/91] Change IoT class for Moon to calculated (#28363)
---
source/_integrations/moon.markdown | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/source/_integrations/moon.markdown b/source/_integrations/moon.markdown
index e5ec9508f68..1fb2fd86d0a 100644
--- a/source/_integrations/moon.markdown
+++ b/source/_integrations/moon.markdown
@@ -3,7 +3,7 @@ title: Moon
description: Instructions on how to integrate the moon sensor into Home Assistant.
ha_category:
- Environment
-ha_iot_class: Local Polling
+ha_iot_class: Calculated
ha_release: 0.38
ha_quality_scale: internal
ha_codeowners:
From 44d083b38eaa8b184e942acb901e39c1c23093ed Mon Sep 17 00:00:00 2001
From: Robert Svensson
Date: Tue, 1 Aug 2023 21:18:55 +0200
Subject: [PATCH 08/91] UniFi QR Code feature requires admin role (#28397)
---
source/_integrations/unifi.markdown | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/source/_integrations/unifi.markdown b/source/_integrations/unifi.markdown
index 0cf0847dab8..4ee76bcd89e 100644
--- a/source/_integrations/unifi.markdown
+++ b/source/_integrations/unifi.markdown
@@ -59,7 +59,7 @@ It is recommended that you run the UniFi Network application in a dedicated virt
## Image
-Provides QR Code images that can be scanned to easily join a specific WLAN. Entities are disabled by default.
+Provides QR Code images that can be scanned to easily join a specific WLAN. Entities are disabled by default. This feature requires admin privileges.
## Presence detection
From be6bf82097b9d4fa08871eb84fdbc113c8a81d7a Mon Sep 17 00:00:00 2001
From: "J. Nick Koston"
Date: Tue, 1 Aug 2023 09:19:18 -1000
Subject: [PATCH 09/91] Document friendly and legacy rules in ESPHome (#28396)
Co-authored-by: Franck Nijhof
---
source/_integrations/esphome.markdown | 43 +++++++++++++++++++++++++++
1 file changed, 43 insertions(+)
diff --git a/source/_integrations/esphome.markdown b/source/_integrations/esphome.markdown
index 864956d51b1..d495ab855a1 100644
--- a/source/_integrations/esphome.markdown
+++ b/source/_integrations/esphome.markdown
@@ -47,3 +47,46 @@ This integration allows [ESPHome](https://esphome.io) devices to connect directl
ESPHome devices can make service calls to any [Home Assistant service](https://esphome.io/components/api.html#homeassistant-service-action). This functionality is not enabled by default for newly configured device, but can be turned on the options flow on a per device basis.
{% include integrations/option_flow.md %}
+
+## Entity naming and IDs
+
+ESPHome uses different naming and entity ID rules based on the configuration of the ESPHome device. It is recommended to set a `friendly_name` in the ESPHome `configuration.yaml` to take advantage of the newer naming structure, which is consistent with Home Assistant naming standards and makes it much easier to tell similar devices apart. The legacy naming rules apply when the `friendly_name` is not set in the `configuration.yaml`.
+
+### Friendly naming
+
+- Entity name is a combination of the friendly name and component name
+- Device name is prepended to the entity ID
+- Entity ID uses the ESPHome ID
+
+Example:
+
+```yaml
+esphome:
+ name: "livingroomdesk"
+ friendly_name: "Living room desk"
+
+sensor:
+ name: "Temperature"
+ id: "temperature"
+```
+
+The entity will be named `Living room desk Temperature` and will default to having an entity ID of `sensor.livingroomdesk_temperature`.
+
+### Legacy naming
+
+- Entity name is the component name
+- Device name is not prepended to the entity name
+- Entity ID is derived solely from the entity name
+
+Example:
+
+```yaml
+esphome:
+ name: "livingroomdesk"
+
+sensor:
+ name: "Temperature"
+ id: "temperature"
+```
+
+The entity will be named `Temperature` and will default to having an entity_id of `sensor.temperature`.
From 312fc40981f5342c65ae08ebf3a0bd07f55a0250 Mon Sep 17 00:00:00 2001
From: Franck Nijhof
Date: Wed, 2 Aug 2023 09:28:23 +0200
Subject: [PATCH 10/91] Fix event documentation example (#28402)
---
source/_integrations/event.markdown | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/source/_integrations/event.markdown b/source/_integrations/event.markdown
index 049a9e01ebd..925a67d2df7 100644
--- a/source/_integrations/event.markdown
+++ b/source/_integrations/event.markdown
@@ -43,7 +43,7 @@ Besides the timestamp of the last event, the event entity also keeps track of th
This allows you, for example, to trigger a different action when the button on a remote control is pressed once or twice, if your remote control is capable of emitting these different types of events.
-When combining that with the [choose action](/docs/scripts/#choose-a-group-of-actions) script, you can assign multiple different actions to a single event entity. In the following example, pressing the button on the remote once or twice will trigger a different scene:
+When combining that with the [choose action](/docs/scripts/#choose-a-group-of-actions) script, you can assign multiple different actions to a single event entity. In the following example, pressing the button on the remote short or long will trigger a different scene:
```yaml
trigger:
@@ -53,19 +53,19 @@ action:
- alias: "Choose an action based on the type of event"
choose:
- conditions:
- - alias: "Normal evening scene if the button was pressed once"
+ - alias: "Normal evening scene if the button was pressed shortly"
condition: state
entity_id: event.hue_remote_control_on_button
attribute: "event_type"
- state: "single_press"
+ state: "short_release"
sequence:
- scene: scene.living_room_evening
- conditions:
- - alias: "Move"
+ - alias: "Scene for watching a movie if the button was pressed long"
condition: state
entity_id: event.hue_remote_control_on_button
attribute: "event_type"
- state: "single_press"
+ state: "long_release"
sequence:
- scene: scene.living_room_movie
```
From 5bbf9b7b40d326093fb3f194a59099d5aaabdb79 Mon Sep 17 00:00:00 2001
From: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com>
Date: Wed, 2 Aug 2023 10:21:16 +0200
Subject: [PATCH 11/91] Event: Terminology tweak on button long-press (#28403)
---
source/_integrations/event.markdown | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/source/_integrations/event.markdown b/source/_integrations/event.markdown
index 925a67d2df7..24ffc10e18e 100644
--- a/source/_integrations/event.markdown
+++ b/source/_integrations/event.markdown
@@ -43,7 +43,7 @@ Besides the timestamp of the last event, the event entity also keeps track of th
This allows you, for example, to trigger a different action when the button on a remote control is pressed once or twice, if your remote control is capable of emitting these different types of events.
-When combining that with the [choose action](/docs/scripts/#choose-a-group-of-actions) script, you can assign multiple different actions to a single event entity. In the following example, pressing the button on the remote short or long will trigger a different scene:
+When combining that with the [choose action](/docs/scripts/#choose-a-group-of-actions) script, you can assign multiple different actions to a single event entity. In the following example, short- or long-pressing the button on the remote will trigger a different scene:
```yaml
trigger:
@@ -53,7 +53,7 @@ action:
- alias: "Choose an action based on the type of event"
choose:
- conditions:
- - alias: "Normal evening scene if the button was pressed shortly"
+ - alias: "Normal evening scene if the button was pressed"
condition: state
entity_id: event.hue_remote_control_on_button
attribute: "event_type"
@@ -61,7 +61,7 @@ action:
sequence:
- scene: scene.living_room_evening
- conditions:
- - alias: "Scene for watching a movie if the button was pressed long"
+ - alias: "Scene for watching a movie if the button was long-pressed"
condition: state
entity_id: event.hue_remote_control_on_button
attribute: "event_type"
From 76b06fa78bae715bd0979de5185b0434f9ec5dbf Mon Sep 17 00:00:00 2001
From: Paul Bottein
Date: Thu, 3 Aug 2023 21:49:35 +0200
Subject: [PATCH 12/91] Add to sort options to select selector (#28428)
---
source/_docs/blueprint/selectors.markdown | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/source/_docs/blueprint/selectors.markdown b/source/_docs/blueprint/selectors.markdown
index 562e7ac7af8..357bab91c9d 100644
--- a/source/_docs/blueprint/selectors.markdown
+++ b/source/_docs/blueprint/selectors.markdown
@@ -986,6 +986,12 @@ translation_key:
for more information.
type: string
required: false
+sort:
+ description: >
+ Display options in alphabetical order.
+ type: boolean
+ required: false
+ default: false
{% endconfiguration %}
Alternatively, a mapping can be used for the options. When you want to return
From 51153bdaf908e44f7a6a37271579e2383b2feb93 Mon Sep 17 00:00:00 2001
From: G-Two <7310260+G-Two@users.noreply.github.com>
Date: Sat, 5 Aug 2023 09:52:47 -0400
Subject: [PATCH 13/91] Add device tracker documentation to Subaru (#24345)
Co-authored-by: Franck Nijhof
---
source/_integrations/subaru.markdown | 9 ++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)
diff --git a/source/_integrations/subaru.markdown b/source/_integrations/subaru.markdown
index 2061d966d12..a1b7d36679e 100644
--- a/source/_integrations/subaru.markdown
+++ b/source/_integrations/subaru.markdown
@@ -4,6 +4,7 @@ description: Instructions on how to setup your Subaru account with Home Assistan
ha_category:
- Car
- Lock
+ - Presence Detection
- Sensor
ha_release: 2021.3
ha_iot_class: Cloud Polling
@@ -12,6 +13,7 @@ ha_codeowners:
- '@G-Two'
ha_domain: subaru
ha_platforms:
+ - device tracker
- diagnostics
- lock
- sensor
@@ -34,7 +36,7 @@ Subaru has deployed two generations of telematics, Gen 1 and Gen 2. The latter o
| Outback | 2016-2019 | 2020+ |
| WRX | 2017+ | |
-In addition to the telematics generational differences, there are two levels of STARLINK subscriptions, "Safety Plus" and "Security Plus". All remote services (such as locks) require a "Security Plus" level subscription.
+In addition to the telematics generational differences, there are two levels of STARLINK subscriptions, "Safety Plus" and "Security Plus". All remote services (such as locks and location tracking) require a "Security Plus" level subscription.
{% include integrations/config_flow.md %}
@@ -67,6 +69,11 @@ This integration supports remote locking and unlocking of vehicle doors.
The current lock status is always unknown due to the fact that the Subaru API does not report this data.
+## Device Tracker
+
+Tracks the most recently reported location of the vehicle. The vehicle reports its location when it is turned off.
+
+
## Options
Subaru integration options are set via:
From 037c016485a900633ee0e48c0fc931c852833f0d Mon Sep 17 00:00:00 2001
From: Maikel Punie
Date: Sat, 5 Aug 2023 19:00:27 +0200
Subject: [PATCH 14/91] Add light platform to duotecno (#28399)
* Add light platform to duotecno
* Also add light to ha_category, add missing cover also
---
source/_integrations/duotecno.markdown | 3 +++
1 file changed, 3 insertions(+)
diff --git a/source/_integrations/duotecno.markdown b/source/_integrations/duotecno.markdown
index 6625edbc964..b034a5bf4aa 100644
--- a/source/_integrations/duotecno.markdown
+++ b/source/_integrations/duotecno.markdown
@@ -3,6 +3,8 @@ title: Duotecno
description: Access and control your Duotecno nodes.
ha_category:
- Switch
+ - Cover
+ - Light
ha_iot_class: Local Push
ha_release: '2023.8'
ha_config_flow: true
@@ -11,6 +13,7 @@ ha_codeowners:
ha_domain: duotecno
ha_platforms:
- cover
+ - light
- switch
ha_integration_type: integration
---
From 97bcb20b78820b200083fe8b5bf58e115037beff Mon Sep 17 00:00:00 2001
From: Robert Svensson
Date: Sat, 5 Aug 2023 20:07:31 +0200
Subject: [PATCH 15/91] Add restart entity to UniFi button platform (#28419)
---
source/_integrations/unifi.markdown | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/source/_integrations/unifi.markdown b/source/_integrations/unifi.markdown
index d27816c34e7..1b0c57fc23a 100644
--- a/source/_integrations/unifi.markdown
+++ b/source/_integrations/unifi.markdown
@@ -17,6 +17,7 @@ ha_codeowners:
ha_domain: unifi
ha_ssdp: true
ha_platforms:
+ - button
- device_tracker
- diagnostics
- image
@@ -30,6 +31,7 @@ ha_integration_type: hub
There is currently support for the following device types within Home Assistant:
+- [Button](#button)
- [Image](#image)
- [Presence Detection](#presence-detection)
- [Switch](#switch)
@@ -58,6 +60,10 @@ The UniFi Network application can either be a UniFi OS console device (like the
It is recommended that you run the UniFi Network application in a dedicated virtual machine to avoid that situation.
+## Button
+
+Provides the ability to restart a UniFi device. This feature requires admin privileges.
+
## Image
Provides QR Code images that can be scanned to easily join a specific WLAN. Entities are disabled by default. This feature requires admin privileges.
From c03462404ad7f23f4e248165c3d01e9ef0dea502 Mon Sep 17 00:00:00 2001
From: Alberto Geniola
Date: Sat, 5 Aug 2023 22:04:02 +0200
Subject: [PATCH 16/91] Elmax/cover (#24308)
* Add cover platform support.
* Add alarm_control_panel platform support.
---------
Co-authored-by: G Johansson
---
source/_integrations/elmax.markdown | 2 ++
1 file changed, 2 insertions(+)
diff --git a/source/_integrations/elmax.markdown b/source/_integrations/elmax.markdown
index e3d64206130..606de057f06 100644
--- a/source/_integrations/elmax.markdown
+++ b/source/_integrations/elmax.markdown
@@ -13,6 +13,8 @@ ha_platforms:
- alarm_control_panel
- binary_sensor
- switch
+ - cover
+ - alarm_control_panel
ha_integration_type: integration
---
From 97eea8c053534b21755ca563140d24ce3037a161 Mon Sep 17 00:00:00 2001
From: Richard Kroegel <42204099+rikroe@users.noreply.github.com>
Date: Sat, 5 Aug 2023 22:28:52 +0200
Subject: [PATCH 17/91] Remove deprecate refresh from cloud (#28468)
---
source/_integrations/bmw_connected_drive.markdown | 4 ----
1 file changed, 4 deletions(-)
diff --git a/source/_integrations/bmw_connected_drive.markdown b/source/_integrations/bmw_connected_drive.markdown
index b14b7d35b54..6387acd88e3 100644
--- a/source/_integrations/bmw_connected_drive.markdown
+++ b/source/_integrations/bmw_connected_drive.markdown
@@ -135,10 +135,6 @@ The `button._find_vehicle` button requests the vehicle to update t
-### Update the state / refresh from cloud
-
-The `button._refresh_from_cloud` button fetches the last state of the vehicles of all your accounts from the BMW server. This does *not* trigger an update from the vehicle; it gets the data from the BMW servers. So this service does *not* interact with your vehicles.
-
## Selects
If you have a (PH)EV, you can control the charging process through Home Assistant. The selects are created automatically depending on your vehicle's capabilities and can be pressed/executed from the UI or using the `select.select_option` service. For more information, please see the [select documentation](/integrations/select/).
From 5aaee9675db85539671569de8f15782ec47d61a4 Mon Sep 17 00:00:00 2001
From: Jan-Philipp Benecke
Date: Sat, 5 Aug 2023 22:47:16 +0200
Subject: [PATCH 18/91] Change discovergy integration type (#28360)
---
source/_integrations/discovergy.markdown | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/source/_integrations/discovergy.markdown b/source/_integrations/discovergy.markdown
index af0ec7a2ffd..605d80b19da 100644
--- a/source/_integrations/discovergy.markdown
+++ b/source/_integrations/discovergy.markdown
@@ -13,7 +13,7 @@ ha_config_flow: true
ha_platforms:
- diagnostics
- sensor
-ha_integration_type: hub
+ha_integration_type: service
---
The `discovergy` integration allows users to integrate their [Discovergy](https://discovergy.com/) smart meters into Home Assistant.
From 4ca99a003e6f220c2094231cc848f13ff815c578 Mon Sep 17 00:00:00 2001
From: Franck Nijhof
Date: Mon, 7 Aug 2023 08:02:28 +0200
Subject: [PATCH 19/91] Document use_x_frame_options http configuration option
(#28453)
---
source/_integrations/http.markdown | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/source/_integrations/http.markdown b/source/_integrations/http.markdown
index f32045222e7..868622030f1 100644
--- a/source/_integrations/http.markdown
+++ b/source/_integrations/http.markdown
@@ -62,6 +62,11 @@ use_x_forwarded_for:
required: false
type: boolean
default: false
+use_x_frame_options:
+ description: "Controls the `X-Frame-Options` header to help prevent [clickjacking](https://en.wikipedia.org/wiki/Clickjacking)."
+ required: false
+ type: boolean
+ default: true
trusted_proxies:
description: "List of trusted proxies, consisting of IP addresses or networks, that are allowed to set the `X-Forwarded-For` header. This is required when using `use_x_forwarded_for` because all requests to Home Assistant, regardless of source, will arrive from the reverse proxy IP address. Therefore in a reverse proxy scenario, this option should be set with extreme care. If the immediate upstream proxy is not in the list, the request will be rejected. If any other intermediate proxy is not in the list, the first untrusted proxy will be considered the client."
required: false
From a0dd99117f3f7abd5df01da9a6c60e2701926a28 Mon Sep 17 00:00:00 2001
From: "J. Nick Koston"
Date: Mon, 7 Aug 2023 11:28:13 -1000
Subject: [PATCH 20/91] Move Yale Doorman to the known working devices for
August (#28488)
---
source/_integrations/august.markdown | 9 +++------
1 file changed, 3 insertions(+), 6 deletions(-)
diff --git a/source/_integrations/august.markdown b/source/_integrations/august.markdown
index b2737f2d025..3daa5fe526e 100644
--- a/source/_integrations/august.markdown
+++ b/source/_integrations/august.markdown
@@ -43,9 +43,12 @@ The `august` integration allows you to integrate your [August](https://august.co
| Yale Assure Lock 2 | yes |
| Yale Conexis L1 | yes |
| Yale Conexis L2 | yes |
+| Yale Doorman L3 | yes |
| Yale Linus | yes |
| Yale Smart Safe | yes |
+Other devices not listed above have not been tested and may not function as expected.
+
There is currently support for the following device types within Home Assistant:
- Doorbell
@@ -65,12 +68,6 @@ The August Wi-Fi Smart Lock (Gen 4) uses different battery technology (lithium-i
Other August locks expect to be powered by AA alkaline (non-rechargeable) batteries. Rechargeable batteries in these locks will result in incorrect reporting of battery charge.
-## Known Unsupported Devices
-
-- The Yale Doorman L3
-
-Other devices not listed above have not been tested and may not function as expected.
-
## Binary Sensor
If you have an August Doorbell, once you have enabled the August integration, you should see following sensors:
From ef64e48267b1bb6ace6787e589a40ace8a46812d Mon Sep 17 00:00:00 2001
From: Massimiliano Cannarozzo
Date: Tue, 8 Aug 2023 15:23:13 +0200
Subject: [PATCH 21/91] Add neato dismiss alert button (#28395)
* Add neato dismiss alert button
* fixup! Add neato dismiss alert button
Co-authored-by: Joost Lekkerkerker
---------
Co-authored-by: Joost Lekkerkerker
---
source/_integrations/neato.markdown | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/source/_integrations/neato.markdown b/source/_integrations/neato.markdown
index 399a2e89998..be184d9d76d 100644
--- a/source/_integrations/neato.markdown
+++ b/source/_integrations/neato.markdown
@@ -5,6 +5,7 @@ ha_category:
- Camera
- Sensor
- Switch
+ - Button
- Vacuum
ha_iot_class: Cloud Polling
ha_release: 0.33
@@ -17,6 +18,7 @@ ha_platforms:
- camera
- sensor
- switch
+ - button
- vacuum
ha_integration_type: integration
---
@@ -28,6 +30,7 @@ There is support for the following platform types within Home Assistant:
- **Camera** - allows you to view the latest cleaning map.
- **Sensor** - allows you to view the battery level.
- **Switch** - allows you to enable or disable the schedule.
+- [**Button**](#button) - allows you to dismiss an alert visible in the app.
- [**Vacuum**](#vacuum)
## Prerequisites
@@ -73,6 +76,10 @@ After the update to firmware 4.0 (which adds cleaning maps) there is also suppor
+## Button
+
+Each `neato` vacuum has a _Dismiss alert_ button. This allows to dismiss an alert visible in the app (e.g. dust bin full) and preventing the vacuum to start cleaning.
+
## Vacuum
The `neato` vacuum platform allows you to control your [Neato Botvac Connected][botvac-connected].
From 0cf007f4f4854f0518b25224728ba57fab86aba7 Mon Sep 17 00:00:00 2001
From: Erik Montnemery
Date: Tue, 8 Aug 2023 19:45:28 +0200
Subject: [PATCH 22/91] Document weather.get_forecast service (#28483)
* Document weather.get_forecast service
* Update source/_integrations/weather.markdown
* Correct example
* Apply suggestions from code review
Co-authored-by: G Johansson
* Update weather.markdown
* Update weather.markdown
---------
Co-authored-by: G Johansson
---
source/_integrations/weather.markdown | 82 ++++++++++++++++++++++++---
1 file changed, 75 insertions(+), 7 deletions(-)
diff --git a/source/_integrations/weather.markdown b/source/_integrations/weather.markdown
index 63d42e8ac11..1612ea56e7a 100644
--- a/source/_integrations/weather.markdown
+++ b/source/_integrations/weather.markdown
@@ -15,7 +15,10 @@ The `weather` platforms gather meteorological information from web services and
Home Assistant currently supports free web services some of which require registration.
-## Condition mapping
+## State and state attributes
+
+A weather entity's state is used to indicate the current overall conditions, e.g. 'cloudy' or 'sunny'.
+### Condition mapping
The `weather` platform only knows the below listed conditions. The reason for this is that for these conditions is an icon from [Material Design Icons](https://pictogrammers.com/library/mdi/) available and mapped in the frontend.
@@ -35,21 +38,85 @@ The `weather` platform only knows the below listed conditions. The reason for th
- 'windy-variant'
- 'exceptional'
-### Forecast Information
+### State attributes
-Periodic forecast information is stored in the `forecast` attribute on the entity. To access and use the information should be reserved for advanced users using [Templates](/docs/configuration/templating/).
+Detailed weather conditions as well as the unit of measurements used for the conditions are indicated by state attributes. A weather entity may not support all the state attributes.
+{% raw %}
```yaml
-temperature: 14.2
-temperature_unit: °C
+apparent_temperature: 12.0
+cloud_coverage: 0
+dew_point: 5.0
humidity: 76
+precipitation_unit: mm
pressure: 1019
pressure_unit: hPa
+temperature: 14.2
+temperature_unit: °C
+uv_index: 2
+visibility: 10
+visibility_unit: km
wind_bearing: 260
+wind_gust_speed: 51.56
wind_speed: 35.17
wind_speed_unit: km/h
-visibility_unit: km
-precipitation_unit: mm
+```
+{% endraw %}
+
+## Service `weather.get_forecast`
+
+Weather integrations which support weather forecasts expose the forecast using services. The services provided by weather entities are described below, and you can also read more about [Service Calls](/docs/scripts/service-calls/).
+
+
+
+Some integrations may not support the `weather.get_forecast` service, but instead expose weather forecasts as a state attribute named `forecast`. This behavior is deprecated and will be removed in a future release of Home Assistant Core.
+
+
+
+This service populates [Response Data](/docs/scripts/service-calls#use-templates-to-handle-response-data)
+with a weather forecast.
+
+| Service data attribute | Optional | Description | Example |
+| ---------------------- | -------- | ----------- | --------|
+| `type` | no | The type of forecast, must be one of `daily`, `twice_daily` or `hourly`. | daily
+
+{% raw %}
+```yaml
+service: weather.get_forecast
+target:
+ entity_id: weather.home
+data:
+ type: daily
+response_variable: weather_forecast
+```
+{% endraw %}
+
+The response data field `forecast` is a list of forecasted conditions at a given point in time:
+
+| Response data | Description | Example |
+| ---------------------- | ----------- | -------- |
+| `datetime` | The time of the forecasted conditions. | 2023-02-17T14:00:00+00:00
+| `is_daytime` | Only set for `twice_daily` forecasts. | False
+| `apparent_temperature` | The apparent (feels-like) temperature in the unit indicated by the `temperature_unit` state attribute. | 10.2
+| `cloud_coverage` | The cloud coverage in %. | 15
+| `condition` | The weather condition. | Sunny
+| `dew_point` | The dew point temperature in the unit indicated by the `temperature_unit` state attribute. | 6.0
+| `humidity` | The relative humidity in %. | 82
+| `precipitation_probability` | The probability of precipitation in %. | 0
+| `precipitation` | The precipitation amount in the unit indicated by the `precipitation_unit` state attribute. | 0
+| `pressure` | The air pressure in the unit indicated by the `pressure_unit` state attribute. | 1019
+| `temperature` | The temperature in the unit indicated by the `temperature_unit` state attribute. If templow is also provided, this is the higher temperature. | 14.2
+| `templow` | The lower temperature in the unit indicated by the `temperature_unit` state attribute. | 5.0
+| `uv_index` | The UV index. | 3
+| `wind_bearing` | The wind bearing in azimuth angle (degrees) or 1-3 letter cardinal direction. | 268
+| `wind_gust_speed` | The wind gust speed in the unit indicated by the `wind_speed_unit` state attribute. | 34.41
+| `wind_speed` | The wind speed in the unit indicated by the `wind_speed_unit` state attribute. | 24.41
+
+
+Example forecast:
+
+{% raw %}
+```yaml
forecast:
- condition: cloudy
precipitation_probability: 0
@@ -76,3 +143,4 @@ forecast:
wind_speed: 20.27
precipitation: 0
```
+{% endraw %}
From 662672c1c2febed732020e8f490db7a8f651c7a1 Mon Sep 17 00:00:00 2001
From: Charles Garwood
Date: Tue, 8 Aug 2023 14:03:27 -0400
Subject: [PATCH 23/91] Update Enphase Envoy documentation (#28507)
---
source/_integrations/enphase_envoy.markdown | 26 +++++++++++++++++----
1 file changed, 21 insertions(+), 5 deletions(-)
diff --git a/source/_integrations/enphase_envoy.markdown b/source/_integrations/enphase_envoy.markdown
index 68c0c3b1fd5..819a47255ce 100644
--- a/source/_integrations/enphase_envoy.markdown
+++ b/source/_integrations/enphase_envoy.markdown
@@ -9,19 +9,35 @@ ha_domain: enphase_envoy
ha_zeroconf: true
ha_config_flow: true
ha_codeowners:
- - '@gtdiehl'
+ - '@bdraco'
+ - '@cgarwood'
+ - '@dgomes'
+ - '@joostlek'
ha_platforms:
+ - binary_sensor
- diagnostics
- sensor
ha_integration_type: integration
---
-A sensor platform for the [Enphase Envoy](https://enphase.com/en-us/products-and-services/envoy-and-combiner) solar energy gateway. Works with older models that only have production metrics (ie. Envoy-C) and newer models that offer both production and consumption metrics (ie. Envoy-S).
+An integration for the [Enphase Envoy](https://enphase.com/en-us/products-and-services/envoy-and-combiner) solar energy gateway. This integration works with older models that only have production metrics (ie. Envoy-C) and newer models that offer both production and consumption metrics (ie. Envoy-S). Firmware version 3.9 or newer is required.
{% include integrations/config_flow.md %}
-### Obtaining the password
+## Capabilities
-For newer models, the username `envoy` without a password will grant access to the device. For older models, the password for the `installer` user can be obtained with this: [tool](https://thecomputerperson.wordpress.com/2016/08/28/reverse-engineering-the-enphase-installer-toolkit/).
+This integration will offer various sensors depending on the configuration of your Enphase system. Sensors are available for the following:
-In some cases, you need to use the username `envoy` with the last 6 digits of the unit's serial number as password. See [the enphase documentation](https://support.enphase.com/s/article/What-is-the-Username-and-Password-for-the-Administration-page-of-the-Envoy-local-interface) for more details on other units.
+- Current energy production & consumption
+- Historical energy production & consumption
+- Power production per-inverter
+
+_Consumption sensors require your Envoy to be properly configured with consumption CT sensors installed._
+
+For Enphase Ensemble systems with the Enpower/IQ System Controller and Encharge/IQ Batteries installed, additional sensors are available for battery status and usage.
+
+## Envoy authentication requirements
+
+For newer models running firmware 7 and greater, you will need your Enlighten cloud username and password. The integration will use these credentials to obtain an Envoy access token from the Enlighten cloud.
+
+For models running firmware 5 and older, use `installer` for the username. No password is required. The integration will automatically detect the `installer` password.
From e0cf4ea2bb6916113b856394f006cd7b8813113c Mon Sep 17 00:00:00 2001
From: David Knowles
Date: Wed, 9 Aug 2023 09:33:10 -0400
Subject: [PATCH 24/91] Add Switch entities to Schlage (#28499)
---
source/_integrations/schlage.markdown | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/source/_integrations/schlage.markdown b/source/_integrations/schlage.markdown
index 6cd84a80f19..f89f178ae34 100644
--- a/source/_integrations/schlage.markdown
+++ b/source/_integrations/schlage.markdown
@@ -4,6 +4,7 @@ description: Instructions on how to integrate Schlage WiFi smart locks into Home
ha_category:
- Lock
- Sensor
+ - Switch
ha_release: 2023.9
ha_iot_class: Cloud Polling
ha_config_flow: true
@@ -12,6 +13,7 @@ ha_codeowners:
ha_platforms:
- lock
- sensor
+ - switch
ha_integration_type: integration
---
@@ -23,9 +25,17 @@ There is currently support for the following device types within Home Assistant:
- Lock
- Sensor
+- Switch
## Sensor
Once you have enabled the Schlage integration, you should see the following sensors:
- Lock Battery
+
+## Switch
+
+Once you have enabled the Schlage integration, you should see the following switches:
+
+- **1-Touch Locking** - When enabled, locks the lock with a press of the Schlage button.
+- **Keypress Beep** - Controls whether the lock will emit beeping tones on use.
From c741577f3b9acb423b16e640a5883f3cd17f5cc9 Mon Sep 17 00:00:00 2001
From: G Johansson
Date: Wed, 9 Aug 2023 17:23:26 +0200
Subject: [PATCH 25/91] Add product filter to Trafikverket Train (#27319)
---
source/_integrations/trafikverket_train.markdown | 2 ++
1 file changed, 2 insertions(+)
diff --git a/source/_integrations/trafikverket_train.markdown b/source/_integrations/trafikverket_train.markdown
index ee0d42ff215..b73bb97983f 100644
--- a/source/_integrations/trafikverket_train.markdown
+++ b/source/_integrations/trafikverket_train.markdown
@@ -37,6 +37,8 @@ Retrieve train departure information from [Trafikverket](https://www.trafikverke
The next departure is calculated from actual, estimated, and planned to provide the most accurate information about departure.
+You can filter based on product descriptions such as `SJ Regionaltåg` to only see specific trains between the two stations.
+
## Prerequisites
Please click [here](https://api.trafikinfo.trafikverket.se/) and register to obtain the API key.
From c84c79803628cdd34ada4d85de8a50c08f2c2a6d Mon Sep 17 00:00:00 2001
From: Chris
Date: Thu, 10 Aug 2023 09:31:06 -0700
Subject: [PATCH 26/91] Adds documentation for unifi PDU power sensors feature
(#28524)
* Adds documentation for unifi PDU power sensors feature
* Removes reference to the Integration plugin
Co-authored-by: Robert Svensson
---------
Co-authored-by: Robert Svensson
---
source/_integrations/unifi.markdown | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/source/_integrations/unifi.markdown b/source/_integrations/unifi.markdown
index 1b0c57fc23a..6175d013140 100644
--- a/source/_integrations/unifi.markdown
+++ b/source/_integrations/unifi.markdown
@@ -130,6 +130,10 @@ Entities reporting connected clients to a WLAN.
Get entities reporting uptime per network client.
+### Power Outlet sensor
+
+Get entities reporting the power utilization for outlets that support metrics (such as the AC outlets on the USP-PDU-Pro).
+
## Firmware updates
This will show if there are firmware updates available for the UniFi network devices connected to the controller. If the configured user has admin privileges, the firmware upgrades can also be installed directly from Home Assistant.
From 1936ab6993938237c7774380f7947e3187f757cc Mon Sep 17 00:00:00 2001
From: Jan Bouwhuis
Date: Fri, 11 Aug 2023 09:30:57 +0200
Subject: [PATCH 27/91] Allow float for initial MQTT climate temperature
(#28492)
---
source/_integrations/climate.mqtt.markdown | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/source/_integrations/climate.mqtt.markdown b/source/_integrations/climate.mqtt.markdown
index 5a2e1d1915f..da94fe099de 100644
--- a/source/_integrations/climate.mqtt.markdown
+++ b/source/_integrations/climate.mqtt.markdown
@@ -183,7 +183,7 @@ fan_modes:
initial:
description: Set the initial target temperature. The default value depends on the temperature unit and will be 21° or 69.8°F.
required: false
- type: integer
+ type: float
icon:
description: "[Icon](/docs/configuration/customizing-devices/#icon) for the entity."
required: false
From 071087456b1aafa7fae0dc61170cf510729caefa Mon Sep 17 00:00:00 2001
From: G Johansson
Date: Fri, 11 Aug 2023 16:39:58 +0200
Subject: [PATCH 28/91] Rest Sensor ManualTriggerEntity (#28528)
---
source/_integrations/sensor.rest.markdown | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/source/_integrations/sensor.rest.markdown b/source/_integrations/sensor.rest.markdown
index 1c68edcf1c2..5615c0357fb 100644
--- a/source/_integrations/sensor.rest.markdown
+++ b/source/_integrations/sensor.rest.markdown
@@ -56,6 +56,10 @@ authentication:
description: Type of the HTTP authentication. `basic` or `digest`.
required: false
type: string
+availability:
+ description: Defines a template if the entity state is available or not.
+ required: false
+ type: template
device_class:
description: Sets the [class of the device](/integrations/sensor#device-class), changing the device state and icon that is displayed on the frontend.
required: false
From b15a2f445100bebf4f011dce4909bdc2577a9ea1 Mon Sep 17 00:00:00 2001
From: G Johansson
Date: Fri, 11 Aug 2023 16:40:17 +0200
Subject: [PATCH 29/91] Rest Binary Sensor to ManualTriggerEntity (#28526)
---
source/_integrations/binary_sensor.rest.markdown | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/source/_integrations/binary_sensor.rest.markdown b/source/_integrations/binary_sensor.rest.markdown
index bb03c7c15b5..cf45239ef58 100644
--- a/source/_integrations/binary_sensor.rest.markdown
+++ b/source/_integrations/binary_sensor.rest.markdown
@@ -83,8 +83,20 @@ method:
name:
description: Name of the REST binary sensor.
required: false
- type: string
+ type: template
default: REST Binary Sensor
+icon:
+ description: Defines a template for the icon of the entity.
+ required: false
+ type: template
+picture:
+ description: Defines a template for the entity picture of the entity.
+ required: false
+ type: template
+availability:
+ description: Defines a template if the entity state is available or not.
+ required: false
+ type: template
device_class:
description: Sets the [class of the device](/integrations/binary_sensor/#device-class), changing the device state and icon that is displayed on the frontend.
required: false
From c461b0fdf4a3bc0ef16f02f98b0a9582dec646fa Mon Sep 17 00:00:00 2001
From: Charles Garwood
Date: Fri, 11 Aug 2023 13:31:38 -0400
Subject: [PATCH 30/91] Update Enphase Envoy docs with additional sensors and
switch platform (#28542)
* Update Enphase Envoy docs with additional sensors and switch platform
* Update source/_integrations/enphase_envoy.markdown
Co-authored-by: Joost Lekkerkerker
---------
Co-authored-by: Joost Lekkerkerker
---
source/_integrations/enphase_envoy.markdown | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/source/_integrations/enphase_envoy.markdown b/source/_integrations/enphase_envoy.markdown
index 819a47255ce..f9604f850ea 100644
--- a/source/_integrations/enphase_envoy.markdown
+++ b/source/_integrations/enphase_envoy.markdown
@@ -17,6 +17,7 @@ ha_platforms:
- binary_sensor
- diagnostics
- sensor
+ - switch
ha_integration_type: integration
---
@@ -34,7 +35,12 @@ This integration will offer various sensors depending on the configuration of yo
_Consumption sensors require your Envoy to be properly configured with consumption CT sensors installed._
-For Enphase Ensemble systems with the Enpower/IQ System Controller and Encharge/IQ Batteries installed, additional sensors are available for battery status and usage.
+For Enphase Ensemble systems with the Enpower/IQ System Controller and Encharge/IQ Batteries installed, additional features are available:
+
+- Sensors for battery status and usage
+- Sensors for grid status
+- Sensors for the state of the Enpower's 4 load-shedding relays
+- A switch allowing you to take your system on-grid and off-grid. Note that the Enpower has a slight delay built-in between receiving these commands and actually switching the system on or off grid.
## Envoy authentication requirements
From d32c8fefda022114c69827308cff93a2dca85015 Mon Sep 17 00:00:00 2001
From: tronikos
Date: Sat, 12 Aug 2023 13:20:23 -0700
Subject: [PATCH 31/91] Update google_assistant_sdk.markdown (#28502)
---
.../google_assistant_sdk.markdown | 24 ++++++++++++++++++-
1 file changed, 23 insertions(+), 1 deletion(-)
diff --git a/source/_integrations/google_assistant_sdk.markdown b/source/_integrations/google_assistant_sdk.markdown
index 67cb345961a..e299f0b6d86 100644
--- a/source/_integrations/google_assistant_sdk.markdown
+++ b/source/_integrations/google_assistant_sdk.markdown
@@ -141,7 +141,7 @@ data:
media_player: media_player.living_room_speaker
```
-You can also send multiple commands in the same conversation context which is useful to unlock doors or open covers that need a PIN. Example:
+You can send multiple commands in the same conversation context which is useful to unlock doors or open covers that need a PIN. Example:
```yaml
service: google_assistant_sdk.send_text_command
@@ -151,6 +151,28 @@ data:
- "1234"
```
+You can get responses. Example:
+
+```yaml
+service: google_assistant_sdk.send_text_command
+data:
+ command:
+ - "tell me a joke"
+ - "tell me another one"
+```
+
+returns:
+
+```yaml
+responses:
+ - text: |-
+ What do you call a belt made of watches?
+ A waist of time 👖 🕝
+ - text: |-
+ What's the most musical part of the turkey?
+ The drumsticks 🍗
+```
+
### Service `notify.google_assistant_sdk`
You can use the service `notify.google_assistant_sdk` to broadcast messages to Google Assistant speakers and displays without interrupting music/video playback.
From cebb2de8ceb682317a8f31f6591d0ea6e48f3753 Mon Sep 17 00:00:00 2001
From: Renier Moorcroft <66512715+RenierM26@users.noreply.github.com>
Date: Sun, 13 Aug 2023 13:11:04 +0200
Subject: [PATCH 32/91] Update ezviz.markdown for siren entity. (#27536)
---
source/_integrations/ezviz.markdown | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/source/_integrations/ezviz.markdown b/source/_integrations/ezviz.markdown
index 1e3475387ee..62eb20d27bc 100644
--- a/source/_integrations/ezviz.markdown
+++ b/source/_integrations/ezviz.markdown
@@ -21,6 +21,7 @@ ha_platforms:
- number
- select
- sensor
+ - siren
- switch
- update
ha_integration_type: integration
@@ -141,6 +142,11 @@ Trigger device OTA firmware update process for latest stable version.
The motion detection sensitivity can be adjusted using the "Detection sensitivity" Number entity. It's important to note that this entity fetches information from the device and will not update if your battery-powered camera is in sleep mode, as this measure is implemented to preserve battery life and prevent excessive drainage.
+### Siren
+
+The Siren entity allows you to activate the Alarm function on the device. In most cameras, the Alarm function incorporates a strobe light and/or an audible siren that is designed to deter potential intruders.
+Once triggered, the siren will automatically deactivate after 60 seconds (EZVIZ does this, not done via integration). Alternatively, you can manually deactivate the siren by using the entity.
+
### PTZ
PTZ up/down/left/right buttons are available on supported PTZ cameras for pan and tilt control.
From a048d43dabf8d3547b383287ffc391a141a06969 Mon Sep 17 00:00:00 2001
From: Mr-Ker <58399419+Mr-Ker@users.noreply.github.com>
Date: Sun, 13 Aug 2023 21:07:06 +0200
Subject: [PATCH 33/91] Update Bosch SHC supported binary sensors (#28564)
The component has been updated to shutter contact II binary sensor and
the documentation should be updated accordingly.
Resolves: #86295
---
source/_integrations/bosch_shc.markdown | 1 +
1 file changed, 1 insertion(+)
diff --git a/source/_integrations/bosch_shc.markdown b/source/_integrations/bosch_shc.markdown
index 3cd6c5308ae..24beebe546b 100644
--- a/source/_integrations/bosch_shc.markdown
+++ b/source/_integrations/bosch_shc.markdown
@@ -38,6 +38,7 @@ There is currently support for the following device types within Home Assistant:
The binary sensor platform allows you to monitor the states of your shutter contact and battery sensors. Binary sensor devices are added for each of the following devices:
- Shutter Contact
+- Shutter Contact II
- Battery powered devices
### Cover
From 8d5a1c4689a7687f3ccb52811cf44232333790a0 Mon Sep 17 00:00:00 2001
From: Johannes Wagner <7691102+joanwa@users.noreply.github.com>
Date: Mon, 14 Aug 2023 18:43:15 +0800
Subject: [PATCH 34/91] Modbus nan values (#26865)
Co-authored-by: Franck Nijhof
---
source/_integrations/modbus.markdown | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/source/_integrations/modbus.markdown b/source/_integrations/modbus.markdown
index 70a94fb415d..3c317c224c5 100644
--- a/source/_integrations/modbus.markdown
+++ b/source/_integrations/modbus.markdown
@@ -1013,6 +1013,10 @@ sensors:
description: The maximum allowed value of a sensor. If value > max_value --> max_value. Can be float or integer
required: false
type: float
+ nan_value:
+ description: If a Modbus sensor has a defined NaN value, this value can be set as a hex string starting with `0x` containing one or more bytes (for example, `0xFFFF` or `0x80000000`) or provided as an integer directly. If triggered, the sensor becomes `unavailable`. Please note that the hex to int conversion for `nan_value` does currently not obey home-assistants Modbus encoding using the `data_type`, `structure`, or `swap` arguments.
+ required: false
+ type: string
zero_suppress:
description: Suppress values close to zero. If -zero_suppress <= value <= +zero_suppress --> 0. Can be float or integer
required: false
@@ -1026,7 +1030,7 @@ sensors:
required: false
type: string
slave_count:
- description: Generates x-1 slave sensors, allowing read of multiple registers with a single read messsage.
+ description: Generates x-1 slave sensors, allowing read of multiple registers with a single read message.
required: false
type: integer
{% endconfiguration %}
From a1333f4e0d723db46a9cb527dfdb6c2478ebcb70 Mon Sep 17 00:00:00 2001
From: Michael Arthur
Date: Mon, 14 Aug 2023 23:10:42 +1200
Subject: [PATCH 35/91] Add select hour of free power to electric kiwi (#28426)
---
source/_integrations/electric_kiwi.markdown | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/source/_integrations/electric_kiwi.markdown b/source/_integrations/electric_kiwi.markdown
index 1da275d6340..b75ec25098f 100644
--- a/source/_integrations/electric_kiwi.markdown
+++ b/source/_integrations/electric_kiwi.markdown
@@ -14,7 +14,7 @@ ha_platforms:
ha_integration_type: hub
---
-[Electric Kiwi](https://www.electrickiwi.co.nz/) is an independent power and broadband company in New Zealand, offering variable rates for peak, shoulder, and off-peak pricing with a selectable hour of free power. This integration uses the official [Electric Kiwi API](https://developer.electrickiwi.co.nz) to show the hour of free power.
+[Electric Kiwi](https://www.electrickiwi.co.nz/) is an independent power and broadband company in New Zealand, offering variable rates for peak, shoulder, and off-peak pricing with a selectable hour of free power. This integration uses the official [Electric Kiwi API](https://developer.electrickiwi.co.nz) to show and select the hour of free power.
{% include integrations/config_flow.md %}
From ba44473c0a6e83e523715f2342c97bab3e8807e2 Mon Sep 17 00:00:00 2001
From: Charles Garwood
Date: Mon, 14 Aug 2023 20:23:31 -0400
Subject: [PATCH 36/91] Add docs for Enphase dry contact relays (#28583)
---
source/_integrations/enphase_envoy.markdown | 11 +++++++++++
1 file changed, 11 insertions(+)
diff --git a/source/_integrations/enphase_envoy.markdown b/source/_integrations/enphase_envoy.markdown
index f9604f850ea..87e87886a7e 100644
--- a/source/_integrations/enphase_envoy.markdown
+++ b/source/_integrations/enphase_envoy.markdown
@@ -16,6 +16,7 @@ ha_codeowners:
ha_platforms:
- binary_sensor
- diagnostics
+ - select
- sensor
- switch
ha_integration_type: integration
@@ -47,3 +48,13 @@ For Enphase Ensemble systems with the Enpower/IQ System Controller and Encharge/
For newer models running firmware 7 and greater, you will need your Enlighten cloud username and password. The integration will use these credentials to obtain an Envoy access token from the Enlighten cloud.
For models running firmware 5 and older, use `installer` for the username. No password is required. The integration will automatically detect the `installer` password.
+
+## Enpower Load Shedding Relays
+
+The Enphase Enpower has 4 load shedding relays that can be used to control non-essential loads in your home. These have two main modes of operation:
+
+### Standard
+When the mode entity is set to standard, you can simply set the state of the relay to be powered or not powered for each mode of operation: on grid, off grid, and on generator.
+
+### Battery Level
+When the relay mode is set to battery level, the relays will turn on and off based on the remaining battery level of your Encharge batteries. Currently, target battery levels must be set using the Enphase Enlighten app.
From 94f3e9a8f3763c179a017fb6ec24775d39950409 Mon Sep 17 00:00:00 2001
From: G Johansson
Date: Tue, 15 Aug 2023 12:49:18 +0200
Subject: [PATCH 37/91] rest switch manualtriggerentity (#28530)
---
source/_integrations/switch.rest.markdown | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/source/_integrations/switch.rest.markdown b/source/_integrations/switch.rest.markdown
index d1b17c3e127..4741bc8a318 100644
--- a/source/_integrations/switch.rest.markdown
+++ b/source/_integrations/switch.rest.markdown
@@ -38,8 +38,20 @@ method:
name:
description: Name of the REST Switch.
required: false
- type: string
+ type: template
default: REST Switch
+icon:
+ description: Defines a template for the icon of the entity.
+ required: false
+ type: template
+picture:
+ description: Defines a template for the entity picture of the entity.
+ required: false
+ type: template
+availability:
+ description: Defines a template if the entity state is available or not.
+ required: false
+ type: template
device_class:
description: Sets the [class of the device](/integrations/switch/#device-class), changing the device state and icon that is displayed on the frontend.
required: false
From 442448a9ac53a7f6bd0eaae32b06cdb28781c7cc Mon Sep 17 00:00:00 2001
From: Charles Garwood
Date: Tue, 15 Aug 2023 16:06:20 -0400
Subject: [PATCH 38/91] Add docs for Enphase number entities (#28587)
* Add docs for Enphase number entities
* Update source/_integrations/enphase_envoy.markdown
Co-authored-by: Joost Lekkerkerker
---------
Co-authored-by: Joost Lekkerkerker
---
source/_integrations/enphase_envoy.markdown | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/source/_integrations/enphase_envoy.markdown b/source/_integrations/enphase_envoy.markdown
index 87e87886a7e..33aaa1e3b8c 100644
--- a/source/_integrations/enphase_envoy.markdown
+++ b/source/_integrations/enphase_envoy.markdown
@@ -16,6 +16,7 @@ ha_codeowners:
ha_platforms:
- binary_sensor
- diagnostics
+ - number
- select
- sensor
- switch
@@ -57,4 +58,4 @@ The Enphase Enpower has 4 load shedding relays that can be used to control non-e
When the mode entity is set to standard, you can simply set the state of the relay to be powered or not powered for each mode of operation: on grid, off grid, and on generator.
### Battery Level
-When the relay mode is set to battery level, the relays will turn on and off based on the remaining battery level of your Encharge batteries. Currently, target battery levels must be set using the Enphase Enlighten app.
+When the relay mode is set to battery level, the relays will turn on and off based on the remaining battery level of your Encharge batteries. Two number entities are available to control the cutoff and restore levels for the relays. When the battery level drops below the cutoff level, the relays will turn off. When the battery level rises above the restore level, the relays will turn back on.
From 4efe0a784b983245d91d3b36d6dc9f89bb18a6f7 Mon Sep 17 00:00:00 2001
From: Faidon Liambotis
Date: Fri, 18 Aug 2023 10:33:41 +0300
Subject: [PATCH 39/91] Add supported_features to the MQTT Alarm Control Panel
(#28599)
* Add supported_features to the MQTT Alarm Control Panel
Add documentation for the new "supported_features" option. See
home-assistant/core#98363.
* Apply suggestions from code review
Co-authored-by: Jan Bouwhuis
* Add an example for MQTT Alarm Control Panel's supported_features
* Use a block rather than a flow sequence in the supported_features example
Co-authored-by: Jan Bouwhuis
---------
Co-authored-by: Jan Bouwhuis
---
.../alarm_control_panel.mqtt.markdown | 25 +++++++++++++++++++
1 file changed, 25 insertions(+)
diff --git a/source/_integrations/alarm_control_panel.mqtt.markdown b/source/_integrations/alarm_control_panel.mqtt.markdown
index da585e18721..4392613411c 100644
--- a/source/_integrations/alarm_control_panel.mqtt.markdown
+++ b/source/_integrations/alarm_control_panel.mqtt.markdown
@@ -244,6 +244,11 @@ state_topic:
description: The MQTT topic subscribed to receive state updates.
required: true
type: string
+supported_features:
+ description: A list of features that the alarm control panel supports. The available list options are `arm_home`, `arm_away`, `arm_night`, `arm_vacation`, `arm_custom_bypass`, and `trigger`.
+ required: false
+ type: list
+ default: ["arm_home", "arm_away", "arm_night", "arm_vacation", "arm_custom_bypass", "trigger"]
unique_id:
description: An ID that uniquely identifies this alarm panel. If two alarm panels have the same unique ID, Home Assistant will raise an exception.
required: false
@@ -258,6 +263,26 @@ value_template:
In this section you find some real-life examples of how to use this alarm control panel.
+### Configuration with partial feature support
+
+The example below shows a full configuration with an alarm panel that only supports the `arm_home` and `arm_away` features.
+
+{% raw %}
+
+```yaml
+# Example with partial feature support
+mqtt:
+ - alarm_control_panel:
+ name: "Alarm Panel"
+ supported_features:
+ - arm_home
+ - arm_away
+ state_topic: "alarmdecoder/panel"
+ command_topic: "alarmdecoder/panel/set"
+```
+
+{% endraw %}
+
### Configuration with local code validation
The example below shows a full configuration with local code validation.
From cfa5d4824b8b5617933a462bbb85d5dbe22e7b70 Mon Sep 17 00:00:00 2001
From: Erik Montnemery
Date: Fri, 18 Aug 2023 19:25:44 +0200
Subject: [PATCH 40/91] Document sensor not supported for unlimited plans
(#28604)
* Document sensor not supported for unlimited plans
* Replace incorrect use of bandwidth with data
---
source/_integrations/startca.markdown | 26 +++++++++++++-------------
1 file changed, 13 insertions(+), 13 deletions(-)
diff --git a/source/_integrations/startca.markdown b/source/_integrations/startca.markdown
index e412be42313..855acad976a 100644
--- a/source/_integrations/startca.markdown
+++ b/source/_integrations/startca.markdown
@@ -48,7 +48,7 @@ api_key:
required: true
type: string
total_bandwidth:
- description: Your bandwidth limit in gigabytes. Set to `0` for unlimited plans without a cap.
+ description: Your data limit in gigabytes. Set to `0` for unlimited plans without a cap.
required: true
type: string
monitored_conditions:
@@ -57,27 +57,27 @@ monitored_conditions:
type: list
keys:
usage:
- description: Bandwidth usage (percentage).
+ description: Data usage (percentage). This sensor is not supported for unlimited plans.
usage_gb:
- description: Bandwidth usage (gigabytes).
+ description: Data usage (gigabytes).
limit:
- description: Monthly bandwidth limit (gigabytes).
+ description: Monthly data limit (gigabytes). This sensor is not supported for unlimited plans.
used_download:
- description: Bandwidth used by download outside the grace period (gigabytes).
+ description: Data used by download outside the grace period (gigabytes).
used_upload:
- description: Bandwidth used by upload outside the grace period (gigabytes).
+ description: Data used by upload outside the grace period (gigabytes).
used_total:
- description: Total bandwidth (download and upload sum calculation) used outside the grace period (gigabytes).
+ description: Total data (download and upload sum calculation) used outside the grace period (gigabytes).
grace_download:
- description: Bandwidth used by download during the grace period (gigabytes).
+ description: Data used by download during the grace period (gigabytes).
grace_upload:
- description: Bandwidth used by upload during the grace period (gigabytes).
+ description: Data used by upload during the grace period (gigabytes).
grace_total:
- description: Total bandwidth (download and upload sum calculation) used during the unlimited period (gigabytes).
+ description: Total data (download and upload sum calculation) used during the unlimited period (gigabytes).
total_download:
- description: Total bandwidth download (Grace + Used) (gigabytes).
+ description: Total data download (Grace + Used) (gigabytes).
total_upload:
- description: Total bandwidth upload (Grace + Used) (gigabytes).
+ description: Total data upload (Grace + Used) (gigabytes).
used_remaining:
- description: Remaining bandwidth calculated from used and supplied total bandwidth (gigabytes).
+ description: Remaining bandwidth calculated from used and supplied total bandwidth (gigabytes). This sensor is not supported for unlimited plans.
{% endconfiguration %}
From d1f8a9224e2c1046e8e69bf5d9e2197ae584f28d Mon Sep 17 00:00:00 2001
From: Maciej Bieniek
Date: Mon, 21 Aug 2023 09:49:58 +0000
Subject: [PATCH 41/91] Update information about Shelly entity naming style
(#28561)
---
source/_integrations/shelly.markdown | 33 ++++++++++++----------------
1 file changed, 14 insertions(+), 19 deletions(-)
diff --git a/source/_integrations/shelly.markdown b/source/_integrations/shelly.markdown
index 4109072a1d7..833fcf12d8c 100644
--- a/source/_integrations/shelly.markdown
+++ b/source/_integrations/shelly.markdown
@@ -69,36 +69,31 @@ Shelly generation 2 devices running firmware 0.12 or later can act as a Bluetoot
## Entity naming (generation 1)
-The integration uses `Device Name` to name its entities if the device has only one relay or no relays at all.
+The integration uses the following strategy to name its entities:
-The integration uses the following strategy to name its entities if the device has more than one relay:
-
-- If `Device Name` or `Channel Name` is set in the device, the integration will use them to generate the entities' name.
-- If channel names are set, they will be used in the entity names. The device name will not be used.
-- If only the device name is set, and the device has multiple channels, the channel number will be appended to the entity name (e.g., Channel 2).
-- In case device name and channel names are not set, the entity name will be generated by the `Device Type`, `Device ID` and `Channel Number`.
-
-Examples:
-
-| Device Name | Channel Name | Entity Name |
-| ----------- | -------------- | ------------------------------- |
-| `Not set` | `Not Set` | shellyswitch25-ABC123 Channel 1 |
-| `Not set` | Kids Room Bulb | Kids Room Bulb |
-| Kitchen | `Not Set` | Kitchen Channel 1 |
-| Bedroom | Round Bulb | Round Bulb |
+- If `Device Name` and `Channel Name` are set in the device, the integration will use them to generate the entities' name, e.g. `Shelly 2.5 Kitchen Light`
+- If `Device Name` or `Channel Name` are set to the default empty value, the integration will use the `Device ID` and/or default channel name to generate the entities' name, e.g. `Shelly2.5-9808D1D8B912 Channel 0`.
+- If the device has only one relay or no relay at all, the integration will use `Device Name` to name its entities.
Names are set from the device web page:
- Device name can be set in **Settings** >> **DEVICE NAME**
-- Channel name for single-channel devices can be set in **Settings** >> **CHANNEL NAME**
+- Channel name for single-channel devices can be set in **Settings** >> **CHANNEL NAME**.
- Channel name for multi-channel devices can be set in **Settings** >> **CHANNEL NAME** after selecting the channel, by clicking on the channel name.
## Entity naming (generation 2)
The integration uses the following strategy to name its entities:
-- If `Channel Name` is set in the device, the integration will use it to generate the entities' name, e.g. `Kitchen Light`
-- If `Channel Name` is set to the default value, the integration will use the `Device ID` and default channel name to generate the entities' name, e.g. `ShellyPro4PM-9808D1D8B912 switch_0`.
+- If `Device Name` and `Output Name` are set in the device, the integration will use them to generate the entities' name, e.g. `Shelly Pro 2 Kitchen Light`
+- If `Device Name` or `Output Name` are set to the default value, the integration will use the `Device ID` and/or default output name to generate the entities' name, e.g. `ShellyPro4PM-9808D1D8B912 Switch 0`.
+- If the device has no relay at all, the integration will use `Device Name` to name its entities.
+
+Names are set from the device web page:
+
+- Device name can be set in **Settings** >> **Device Name**.
+- Channel name can be set when you click **Output** >> **Settings** >> **Output Name**.
+
## Binary input sensors
From 7407a7817a3458750d4c9105836dc1fb73a22cc5 Mon Sep 17 00:00:00 2001
From: starkillerOG
Date: Mon, 21 Aug 2023 11:54:19 +0200
Subject: [PATCH 42/91] Add Reolink pan position (#28616)
---
source/_integrations/reolink.markdown | 1 +
1 file changed, 1 insertion(+)
diff --git a/source/_integrations/reolink.markdown b/source/_integrations/reolink.markdown
index fbae3feaf0f..fd6f08557ee 100644
--- a/source/_integrations/reolink.markdown
+++ b/source/_integrations/reolink.markdown
@@ -168,6 +168,7 @@ When IR light entity is OFF always OFF, when ON IR LEDs will be on when the came
Depending on the supported features of the camera, the following sensor entities are added:
+- PTZ pan position
- Wi-Fi signal*
## Update entity
From 578a7d127122f32dddac62a03c6891a203d8b7c3 Mon Sep 17 00:00:00 2001
From: "Benjamin Paul [MSFT]"
Date: Mon, 21 Aug 2023 05:55:35 -0400
Subject: [PATCH 43/91] Add Nexia Number entity documentation (#28627)
---
source/_integrations/nexia.markdown | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/source/_integrations/nexia.markdown b/source/_integrations/nexia.markdown
index 9d0978591de..b6c347b36ac 100644
--- a/source/_integrations/nexia.markdown
+++ b/source/_integrations/nexia.markdown
@@ -71,6 +71,10 @@ The following thermostats are not supported: `XL624`, `XL950`, `AZONE950`, `AZEM
Other thermostats may work, but they have not been tested.
+### Number
+
+The number platform lets you adjust the fan speed on systems with variable-speed fan support.
+
### Scene
The scene platform lets you activate a nexia automation.
@@ -96,4 +100,4 @@ Sets the humidify setpoint. This setting will affect all zones on the same therm
| Service data attribute | Optional | Description |
| ---------------------- | -------- | ----------- |
| `entity_id` | no | String or list of strings that point at `entity_id`'s of climate devices to control.
-| `humidity` | no | Humidify setpoint level, from 35 to 65.
+| `humidity` | no | Humidify setpoint level, from 35 to 65.
\ No newline at end of file
From b389890b9f4fbcccf4c597fee8f4894fff6725ec Mon Sep 17 00:00:00 2001
From: "J. Nick Koston"
Date: Mon, 21 Aug 2023 05:56:18 -0400
Subject: [PATCH 44/91] Document that some august entities are slower to update
(#28645)
---
source/_integrations/august.markdown | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/source/_integrations/august.markdown b/source/_integrations/august.markdown
index 3daa5fe526e..83ea2502195 100644
--- a/source/_integrations/august.markdown
+++ b/source/_integrations/august.markdown
@@ -68,6 +68,14 @@ The August Wi-Fi Smart Lock (Gen 4) uses different battery technology (lithium-i
Other August locks expect to be powered by AA alkaline (non-rechargeable) batteries. Rechargeable batteries in these locks will result in incorrect reporting of battery charge.
+## Push updates not available for some entities
+
+While most entities can be updated via the push API, August/Yale does not offer a push API for some data, which means these entities will update slower:
+
+- Doorbell ding sensor (Doorman models only)
+- Lock Battery sensor
+- Lock Operation sensor
+
## Binary Sensor
If you have an August Doorbell, once you have enabled the August integration, you should see following sensors:
From a94e980a355ecde0a887eaffe3dd21dbe4aab9b5 Mon Sep 17 00:00:00 2001
From: G Johansson
Date: Mon, 21 Aug 2023 17:49:36 +0200
Subject: [PATCH 45/91] Modernize weather template (#28532)
---
source/_integrations/weather.template.markdown | 14 +++++++++++---
1 file changed, 11 insertions(+), 3 deletions(-)
diff --git a/source/_integrations/weather.template.markdown b/source/_integrations/weather.template.markdown
index 61ad647a311..9918f2ae0b8 100644
--- a/source/_integrations/weather.template.markdown
+++ b/source/_integrations/weather.template.markdown
@@ -34,7 +34,7 @@ weather:
temperature_template: "{{ states('sensor.temperature') | float }}"
temperature_unit: "°C"
humidity_template: "{{ states('sensor.humidity') | float }}"
- forecast_template: "{{ state_attr('weather.my_region', 'forecast') }}"
+ forecast_daily_template: "{{ state_attr('weather.my_region', 'forecast') }}"
```
{% endraw %}
@@ -43,7 +43,7 @@ weather:
name:
description: Name to use in the frontend.
required: true
- type: string
+ type: template
unique_id:
description: An ID that uniquely identifies this weather entity. Set this to a unique value to allow customization through the UI.
required: false
@@ -116,10 +116,18 @@ visibility_unit:
description: Unit for visibility_template output. Valid options are km, mi, ft, m, cm, mm, in, yd.
required: false
type: string
-forecast_template:
+forecast_daily_template:
description: Daily forecast data.
required: false
type: template
+forecast_hourly_template:
+ description: Hourly forecast data.
+ required: false
+ type: template
+forecast_twice_daily_template:
+ description: Twice daily forecast data.
+ required: false
+ type: template
precipitation_unit:
description: Unit for precipitation output. Valid options are km, mi, ft, m, cm, mm, in, yd.
required: false
From 6ed698e2be92d6a34ede2cfd4bff4f4bc0a66f7e Mon Sep 17 00:00:00 2001
From: starkillerOG
Date: Tue, 22 Aug 2023 09:33:49 +0200
Subject: [PATCH 46/91] Add Reolink zoom in/out (#28590)
---
source/_integrations/reolink.markdown | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/source/_integrations/reolink.markdown b/source/_integrations/reolink.markdown
index fd6f08557ee..201dc091fc3 100644
--- a/source/_integrations/reolink.markdown
+++ b/source/_integrations/reolink.markdown
@@ -104,11 +104,13 @@ Depending on the supported features of the camera, button entities are added for
- PTZ up
- PTZ down
- PTZ calibrate
+- PTZ zoom in*
+- PTZ zoom out*
- Guard go to
- Guard set current position
- Restart*
-PTZ left, right, up and down will continually move the camera in the respective position until the PTZ stop is called or the hardware limit is reached.
+PTZ left, right, up, down, zoom in and zoom out will continually move the camera in the respective position until the PTZ stop is called or the hardware limit is reached.
"Guard set current position" will set the current position as the new guard position.
From 8ead6f494e1059201c9e2163fda46c143d82253c Mon Sep 17 00:00:00 2001
From: Maciej Bieniek
Date: Tue, 22 Aug 2023 09:35:00 +0000
Subject: [PATCH 47/91] Add information about Shelly Gas Valve (#28639)
---
source/_integrations/shelly.markdown | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/source/_integrations/shelly.markdown b/source/_integrations/shelly.markdown
index 833fcf12d8c..a2205e2dd56 100644
--- a/source/_integrations/shelly.markdown
+++ b/source/_integrations/shelly.markdown
@@ -266,6 +266,16 @@ The first will allow specifying a temperature, the second instead of a percentag
will be disabled.
As soon as you change the temperature, it gets enabled again.
+## Shelly Gas with Valve add-on
+
+If you have Valve add-on connected to Shelly Gas, the integration will create two entities for the valve. The `switch` entity allows you to control the valve, the `sensor` entity shows exact states of the valve.
+
+
+
+The `switch` entity in Home Assistant does not support transition states. For this reason, the `opening` state of the valve maps to the `on` (opened) state of the entity and the `closing` state of the valve maps to the `off` (closed) state of the entity.
+
+
+
## CoAP port (generation 1)
In some cases, it may be needed to customize the CoAP UDP port (default: `5683`) your Home Assistant instance is listening to.
From 4a7acc62bcdc43151b4b44e2f65ab96eb9696b44 Mon Sep 17 00:00:00 2001
From: Michael Arthur
Date: Tue, 22 Aug 2023 22:37:39 +1200
Subject: [PATCH 48/91] Add lawn mower entity (#28546)
Co-authored-by: Franck Nijhof
---
source/_integrations/lawn_mower.markdown | 46 ++++++++++++++++++++++++
1 file changed, 46 insertions(+)
create mode 100644 source/_integrations/lawn_mower.markdown
diff --git a/source/_integrations/lawn_mower.markdown b/source/_integrations/lawn_mower.markdown
new file mode 100644
index 00000000000..bb4c531949c
--- /dev/null
+++ b/source/_integrations/lawn_mower.markdown
@@ -0,0 +1,46 @@
+---
+title: Lawn Mower
+description: Instructions on how to setup and use lawn mowers in Home Assistant.
+ha_release: 2023.9
+ha_domain: lawn_mower
+ha_quality_scale: internal
+ha_category:
+ - Lawn Mower
+ha_codeowners:
+ - '@home-assistant/core'
+ha_integration_type: entity
+---
+
+The lawn mower integration allows the control of robotic lawn mowers to be reflected within Home Assistant.
+
+Please note, the lawn mower integration cannot be directly used; you cannot create your own lawn mower entities using this integration. This integration is a building block for other integrations to use, enabling them to create lawn mower entities for you.
+
+## Services
+
+Available services: `start_mowing`, `pause` and `dock`.
+
+Before calling one of these services, make sure your lawn_mower platform supports it.
+
+### Service `lawn_mower.start_mowing`
+
+Start or resume a mowing task.
+
+| Service data attribute | Optional | Description |
+| ---------------------- | -------- | ---------------------------------------------------------------- |
+| `entity_id` | yes | Only act on specific lawn_mower. Use `entity_id: all` to target all. |
+
+### Service `lawn_mower.pause`
+
+Pause a mowing task.
+
+| Service data attribute | Optional | Description |
+| ---------------------- | -------- | ---------------------------------------------------------------- |
+| `entity_id` | yes | Only act on specific lawn_mower. Use `entity_id: all` to target all. |
+
+### Service `lawn_mower.dock`
+
+Tell the lawn_mower to return to dock.
+
+| Service data attribute | Optional | Description |
+| ---------------------- | -------- | ---------------------------------------------------------------- |
+| `entity_id` | yes | Only act on specific lawn_mower. Use `entity_id: all` to target all. |
From 88b1fd5f96e664ba8931e1b2c453d0ea10cb8daf Mon Sep 17 00:00:00 2001
From: starkillerOG
Date: Tue, 22 Aug 2023 18:03:55 +0200
Subject: [PATCH 49/91] Add Reolink AI detection delay time (#28592)
---
source/_integrations/reolink.markdown | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/source/_integrations/reolink.markdown b/source/_integrations/reolink.markdown
index 201dc091fc3..628ccc21e68 100644
--- a/source/_integrations/reolink.markdown
+++ b/source/_integrations/reolink.markdown
@@ -77,9 +77,13 @@ Depending on the supported features of the camera, number entities are added for
- Guard return time
- Motion sensitivity
- AI face sensitivity
-- AI people sensitivity
+- AI person sensitivity
- AI vehicle sensitivity
- AI pet sensitivity
+- AI face delay*
+- AI person delay*
+- AI vehicle delay*
+- AI pet delay*
- Auto quick reply time
- Auto track limit left
- Auto track limit right
From 8ed8a0b04d9d62a2ca0f83d409ea10f60d107903 Mon Sep 17 00:00:00 2001
From: Jack Boswell
Date: Wed, 23 Aug 2023 08:14:20 +1200
Subject: [PATCH 50/91] Add Starlink device tracker documentation (#28387)
Co-authored-by: Franck Nijhof
---
source/_integrations/starlink.markdown | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/source/_integrations/starlink.markdown b/source/_integrations/starlink.markdown
index d107e0521b5..bfc9f99e4ad 100644
--- a/source/_integrations/starlink.markdown
+++ b/source/_integrations/starlink.markdown
@@ -4,6 +4,7 @@ description: Instructions on how to integrate Starlink into Home Assistant.
ha_category:
- Binary Sensor
- Button
+ - Device Tracker
- Network
- Sensor
- Switch
@@ -16,6 +17,7 @@ ha_domain: starlink
ha_platforms:
- binary_sensor
- button
+ - device_tracker
- diagnostics
- sensor
- switch
@@ -59,3 +61,7 @@ The Starlink integration allows you to integrate your [Starlink](https://www.sta
### Switch
- Stowed - Controls whether Dishy is stowed
+
+### Device Tracker
+
+- Device location - Tracks the location of Dishy. Note you need to allow location access on the local network via the Starlink app for this to work. This is disabled by default in the Starlink app and is thus disabled by default in Home Assistant.
From 056fa9d912d8fdac9dfa891b047852c7e378ab9b Mon Sep 17 00:00:00 2001
From: Jan Bouwhuis
Date: Tue, 22 Aug 2023 22:40:04 +0200
Subject: [PATCH 51/91] Remove depecated aux_heat options for MQTT climate
(#28634)
---
source/_integrations/climate.mqtt.markdown | 12 ------------
1 file changed, 12 deletions(-)
diff --git a/source/_integrations/climate.mqtt.markdown b/source/_integrations/climate.mqtt.markdown
index da94fe099de..c5afdd7b057 100644
--- a/source/_integrations/climate.mqtt.markdown
+++ b/source/_integrations/climate.mqtt.markdown
@@ -35,18 +35,6 @@ action_topic:
Valid values: `off`, `heating`, `cooling`, `drying`, `idle`, `fan`.
required: false
type: string
-aux_command_topic:
- description: The MQTT topic to publish commands to switch auxiliary heat.
- required: false
- type: string
-aux_state_template:
- description: A template to render the value received on the `aux_state_topic` with.
- required: false
- type: template
-aux_state_topic:
- description: The MQTT topic to subscribe for changes of the auxiliary heat mode. If this is not set, the auxiliary heat mode works in optimistic mode (see below).
- required: false
- type: string
availability:
description: A list of MQTT topics subscribed to receive availability (online/offline) updates. Must not be used together with `availability_topic`.
required: false
From 0f743ffd9dd486320acb311cbee6e5902551dcdb Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Rojas?=
Date: Tue, 22 Aug 2023 22:42:21 +0200
Subject: [PATCH 52/91] Document Airzone System Binary sensors (#27943)
---
source/_integrations/airzone_cloud.markdown | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/source/_integrations/airzone_cloud.markdown b/source/_integrations/airzone_cloud.markdown
index fcf60eee666..af097818820 100644
--- a/source/_integrations/airzone_cloud.markdown
+++ b/source/_integrations/airzone_cloud.markdown
@@ -46,6 +46,12 @@ Password:
## Binary Sensors
+For each Airzone system (HVAC machine), the following *binary sensors* are created:
+
+| Condition | Description |
+| :------------------ | :-------------------------------------------------------- |
+| problems | Indicates that the current system has errors or warnings. |
+
For each Airzone zone (thermostat), the following *binary sensors* are created:
| Condition | Description |
From 4be63590bf7ce4ac4dfd4237b204de3ec0a5b184 Mon Sep 17 00:00:00 2001
From: Guido Schmitz
Date: Tue, 22 Aug 2023 23:12:46 +0200
Subject: [PATCH 53/91] Add update platform to devolo Home Control (#28512)
Co-authored-by: Franck Nijhof
---
source/_integrations/devolo_home_network.markdown | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/source/_integrations/devolo_home_network.markdown b/source/_integrations/devolo_home_network.markdown
index a8b829121ab..df364804d9e 100755
--- a/source/_integrations/devolo_home_network.markdown
+++ b/source/_integrations/devolo_home_network.markdown
@@ -7,6 +7,7 @@ ha_category:
- Presence Detection
- Sensor
- Switch
+ - Update
ha_release: '2021.12'
ha_iot_class: Local Polling
ha_config_flow: true
@@ -22,6 +23,7 @@ ha_platforms:
- diagnostics
- sensor
- switch
+ - update
ha_zeroconf: true
ha_integration_type: device
---
@@ -72,6 +74,11 @@ Currently the following device types within Home Assistant are supported.
- Turn on/off the device LEDs
- Is enabled by default
+## Update
+
+- Update the firmware of a device.
+ - Is enabled by default but will only give a result if regular checks are enabled on the device.
+
## Supported devolo Devices
The list of supported devolo devices depends on the device firmware and the device features. The following devices were tested running firmware 5.6.0:
From 12d657e7333431e2e8b6b45472c842a37aee4fa9 Mon Sep 17 00:00:00 2001
From: Maximilian <43999966+DeerMaximum@users.noreply.github.com>
Date: Wed, 23 Aug 2023 07:06:43 +0000
Subject: [PATCH 54/91] Add docs for NINA warning filters (#28586)
* Add docs for filters
* tiny tweaks
---------
Co-authored-by: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com>
---
source/_integrations/nina.markdown | 36 ++++++++++++++++++++++++++++++
1 file changed, 36 insertions(+)
diff --git a/source/_integrations/nina.markdown b/source/_integrations/nina.markdown
index b4e05988351..fd25928cfa7 100644
--- a/source/_integrations/nina.markdown
+++ b/source/_integrations/nina.markdown
@@ -20,6 +20,40 @@ For each county/city it creates warning slots that change to Unsafe when warning
{% include integrations/config_flow.md %}
+### Filter
+
+The integration includes the possibility to filter warnings in two ways via a regex.
+
+
+All filters are applied to lowercase text only.
+
+
+#### Headline filter
+
+This filter filters warnings based on the headline as a **blacklist**. In other words, if the regular expression matches the headline of the warning, the warning will be **ignored**.
+
+Default: Match nothing (`/(?!)/`)
+
+##### Example
+
+Ignore warnings that contain the word `corona`
+
+Regex: `.*corona.*`
+Headline: `corona-verordnung des landes: warnstufe durch landesgesundheitsamt ausgerufen`
+
+#### Affected area filter
+
+This filter **whitelists** warnings based on the affected area. In other words, if the regular expression matches the area, the warning will be **displayed**.
+
+Default: Match all (`.*`)
+
+##### Example
+
+Show only warnings from the city of nagold.
+
+Regex: `.*nagold.*`
+Areas: `gemeinde oberreichenbach, gemeinde neuweiler, stadt nagold`
+
### Attributes
| Attribute | Description |
@@ -28,6 +62,8 @@ For each county/city it creates warning slots that change to Unsafe when warning
| `description` | *(str)* Official description of the warning. |
| `sender` | *(str)* Sender of the warning. Can be empty. |
| `severity` | *(str)* Severity of the warning.
Extreme - Extraordinary threat to life or property
Severe - Significant threat to life or property
Moderate - Possible threat to life or property
Minor – Minimal to no known threat to life or property
Unknown - Severity unknown |
+| `recommended_actions` | *(str)* The recommendations for action. |
+| `affected_areas` | *(str)* Areas where the warning applies. |
| `id` | *(str)* Individual ID for each warning. |
| `sent` | *(time)* Transmission time and date (UTC) of the issued warning. |
| `start` | *(time)* Starting time and date (UTC) of the issued warning. Can be empty. |
From fd8c1524c6b768ac0d885071517c12f4e3987d56 Mon Sep 17 00:00:00 2001
From: Joakim Plate
Date: Wed, 23 Aug 2023 23:18:16 +0200
Subject: [PATCH 55/91] Gardena/moisture (#28657)
Co-authored-by: Danny Tsang <567982+dannytsang@users.noreply.github.com>
---
.../_integrations/gardena_bluetooth.markdown | 31 +++++++++++++++++--
1 file changed, 28 insertions(+), 3 deletions(-)
diff --git a/source/_integrations/gardena_bluetooth.markdown b/source/_integrations/gardena_bluetooth.markdown
index 1cf7dcd2a93..f6dbf2db2ae 100644
--- a/source/_integrations/gardena_bluetooth.markdown
+++ b/source/_integrations/gardena_bluetooth.markdown
@@ -21,24 +21,49 @@ ha_platforms:
ha_integration_type: integration
---
-The Gardena Bluetooth integration allows users to integrate their [Gardena Smart](https://www.gardena.com/int/products/smart/) devices using Bluetooth into Home Assistant.
+The Gardena Bluetooth integration allows users to integrate their Gardena Bluetooth devices into Home Assistant.
-The integration supports the [Water Control](#water-control) devices within Home Assistant:
+See device section for support information: [Water Control](#water-control), [Irrigation Valves](#irrigation-valves), [Lawn Mowers](#lawn-mowers), [Garden Pumps](#gard-pumps)
{% include integrations/config_flow.md %}
## Water Control
-Allow control of the valve state of [Gardena Bluetooth Water Control](https://www.gardena.com/int/products/watering/water-controls/water-control-bluetooth) units.
+- Water Control Bluetooth ([01889-20](https://www.gardena.com/int/products/watering/water-controls/water-control-bluetooth))
+- Soil Moisture Sensors ([1867-20](https://www.gardena.com/int/products/watering/water-controls/soil-moisture-sensor/))
The paring of the device may require a [Factory Reset](#factory-reset) before it allows a connection.
### Limitations
- Control of offline scheduling settings is not supported.
+- Use of the official Android application, sometimes locks out access to device until [Factory Reset](#factory-reset) is performed or Bluetooth is disabled in the Android device.
### Factory Reset
1. Remove the battery.
2. Push and hold Man. button and reinsert the battery.
3. Hold the button for approx. 10 seconds.
+
+## Irrigation Valves
+
+- Irrigation Valve 9 V Bluetooth ([1285-20](https://www.gardena.com/int/products/watering/sprinklersystem/irrigation-valve-9-v-bluetooth/970480401/))
+
+### Limitations
+
+Irrigation valves are currently untested, but expected to work.
+
+## Lawn Mowers
+
+### Limitations
+
+Gardena Bluetooth lawn mowers are currently not supported due to custom protocol on top of Bluetooth.
+
+## Gard Pumps
+
+- Garden Pump ([9058-61](https://www.gardena.com/de/produkte/bewasserung/pumpen/gartenpumpe-6300-silentcomfort/970645401/))
+- Garden Pump ([9059-61](https://www.gardena.com/de/produkte/bewasserung/pumpen/gartenpumpe-6500-silentcomfort/970645601/))
+
+### Limitations
+
+Irrigation valves are currently untested, but expected to work.
\ No newline at end of file
From fb2f61973f652a5edc35b4474cf0389fc243bee6 Mon Sep 17 00:00:00 2001
From: Jan Bouwhuis
Date: Thu, 24 Aug 2023 10:41:04 +0200
Subject: [PATCH 56/91] Add origin info for MQTT discovery (#28659)
---
source/_integrations/mqtt.markdown | 49 +++++++++++++++++++++++++++++-
1 file changed, 48 insertions(+), 1 deletion(-)
diff --git a/source/_integrations/mqtt.markdown b/source/_integrations/mqtt.markdown
index be33b26a0fc..0d7d8ad4078 100644
--- a/source/_integrations/mqtt.markdown
+++ b/source/_integrations/mqtt.markdown
@@ -276,6 +276,18 @@ In the value of configuration variables ending with `_topic`, `~` will be replac
Configuration variable names in the discovery payload may be abbreviated to conserve memory when sending a discovery message from memory constrained devices.
+It is encouraged to add additional information about the origin that supplies MQTT entities via MQTT discovery by adding the `origin` option (can abbreviated to `o`) to the discovery payload. Note that these options also support abbreviations. Information of the origin will be logged to the core event log when an item is discovered or updated.
+
+{% configuration_basic %}
+name:
+ description: The name of the application that is the origin the discovered MQTT item. This option is required.
+sw_version:
+ description: Software version of the application that supplies the discovered MQTT item.
+support_url:
+ description: Support URL of the application that supplies the discovered MQTT item.
+{% endconfiguration_basic %}
+
+
{% details "Supported abbreviations" %}
```txt
@@ -391,6 +403,7 @@ Configuration variable names in the discovery payload may be abbreviated to cons
'mode_stat_t': 'mode_state_topic',
'modes': 'modes',
'name': 'name',
+ 'o': 'origin',
'obj_id': 'object_id',
'off_dly': 'off_delay',
'on_cmd_type': 'on_command_type',
@@ -555,6 +568,14 @@ Configuration variable names in the discovery payload may be abbreviated to cons
'sa': 'suggested_area',
```
{% enddetails %}
+{% details "Supported abbreviations for origin info" %}
+
+```txt
+ 'name': 'name',
+ 'sw': 'sw_version',
+ 'url': 'support_url',
+```
+{% enddetails %}
### Support by third-party tools
@@ -675,7 +696,7 @@ Setting up a [light that takes JSON payloads](/integrations/light.mqtt/#json-sch
{
"~": "homeassistant/light/kitchen",
"name": "Kitchen",
- "unique_id": "kitchen_light",
+ "uniq_id": "kitchen_light",
"cmd_t": "~/set",
"stat_t": "~/state",
"schema": "json",
@@ -683,6 +704,32 @@ Setting up a [light that takes JSON payloads](/integrations/light.mqtt/#json-sch
}
```
+#### Example with using abbreviated Device and Origin info in discovery messages
+
+ ```json
+ {
+ "~": "homeassistant/light/kitchen",
+ "name": null,
+ "uniq_id": "kitchen_light",
+ "cmd_t": "~/set",
+ "stat_t": "~/state",
+ "schema": "json",
+ "dev": {
+ "ids": "ea334450945afc",
+ "name": "Kitchen",
+ "mf": "Bla electronics",
+ "mdl": "xya",
+ "sw": "1.0",
+ "hw": "1.0rev2",
+ },
+ "o": {
+ "name":"bla2mqtt",
+ "sw": "2.1",
+ "url": "https://bla2mqtt.example.com/support",
+ }
+ }
+ ```
+
#### Use object_id to influence the entity id
The entity id is automatically generated from the entity's name. All MQTT integrations optionally support providing an `object_id` which will be used instead if provided.
From 01c1f7ec9a8aeb642150a7e0c1ec40abeb478c2e Mon Sep 17 00:00:00 2001
From: Franck Nijhof
Date: Thu, 24 Aug 2023 12:49:45 +0200
Subject: [PATCH 57/91] Add event groups (#28653)
---
source/_integrations/group.markdown | 59 +++++++++++++++++++----------
1 file changed, 40 insertions(+), 19 deletions(-)
diff --git a/source/_integrations/group.markdown b/source/_integrations/group.markdown
index 39f10be5817..120370b0a66 100644
--- a/source/_integrations/group.markdown
+++ b/source/_integrations/group.markdown
@@ -5,6 +5,7 @@ ha_category:
- Binary Sensor
- Cover
- Fan
+ - Event
- Helper
- Light
- Lock
@@ -23,6 +24,7 @@ ha_config_flow: true
ha_platforms:
- binary_sensor
- cover
+ - event
- fan
- light
- lock
@@ -38,7 +40,7 @@ The group integration lets you combine multiple entities into a single entity. E
This can be useful for cases where you want to control, for example, the
multiple bulbs in a light fixture as a single light in Home Assistant.
-Home Assistant can group multiple binary sensors, covers, fans, lights, locks, media players, switches as a single entity, with the option of hiding the individual member entities.
+Home Assistant can group multiple binary sensors, covers, events, fans, lights, locks, media players, switches as a single entity, with the option of hiding the individual member entities.
{% include integrations/config_flow.md %}
@@ -70,6 +72,11 @@ In short, when any group member entity is `open`, the group will also be `open`.
- Otherwise, the group state is `open` if at least one group member is `open`.
- Otherwise, the group state is `closed`.
+### Event groups
+
+- The group state is `unavailable` if all group members are `unavailable`.
+- Otherwise, the group state is the last event received from any group member.
+
### Fan groups
In short, when any group member entity is `on`, the group will also be `on`. A complete overview of how fan groups behave:
@@ -149,6 +156,20 @@ cover:
- cover.living_room_window
```
+Example YAML configuration of an event group:
+
+```yaml
+# Example configuration.yaml entry
+event:
+ - platform: group
+ name: "Remote events"
+ entities:
+ - event.remote_button_1
+ - event.remote_button_2
+ - event.remote_button_3
+ - event.remote_button_4
+```
+
Example YAML configuration of a fan group:
```yaml
@@ -376,13 +397,13 @@ Old style groups can calculate group state with entities from the following doma
When member entities all have a single `on` and `off` state, the group state will be calculated as follows:
-| Domain | on | off |
-|-------------------|----------|----------|
-| device_tracker | home | not_home |
-| cover | open | closed |
-| lock | unlocked | locked |
-| person | home | not_home |
-| media_player | ok | problem |
+| Domain | on | off |
+| -------------- | -------- | -------- |
+| device_tracker | home | not_home |
+| cover | open | closed |
+| lock | unlocked | locked |
+| person | home | not_home |
+| media_player | ok | problem |
When a group contains entities from domains that have multiple `on` states or only use `on` and `off`, the group state will be `on` or `off`.
@@ -394,14 +415,14 @@ These groups can still be in templates with the `expand()` directive, called usi
This integration provides the following services to modify groups and a service to reload the configuration without restarting Home Assistant itself.
-| Service | Data | Description |
-| ------- | ---- | ----------- |
-| `set` | `Object ID` | Group id and part of entity id.
-| | `Name` | Name of the group.
-| | `Icon` | Name of the icon for the group.
-| | `Entities` | List of all members in the group. Not compatible with **delta**.
-| | `Add Entities` | List of members that will change on group listening.
-| | `Remove Entities` | List of members that will be removed from group listening.
-| | `All` | Enable this option if the group should only turn on when all entities are on.
-| `remove` | `Object ID` | Group id and part of entity id.
-| `reload` | `Object ID` | Group id and part of entity id.
+| Service | Data | Description |
+| -------- | ----------------- | ----------------------------------------------------------------------------- |
+| `set` | `Object ID` | Group id and part of entity id. |
+| | `Name` | Name of the group. |
+| | `Icon` | Name of the icon for the group. |
+| | `Entities` | List of all members in the group. Not compatible with **delta**. |
+| | `Add Entities` | List of members that will change on group listening. |
+| | `Remove Entities` | List of members that will be removed from group listening. |
+| | `All` | Enable this option if the group should only turn on when all entities are on. |
+| `remove` | `Object ID` | Group id and part of entity id. |
+| `reload` | `Object ID` | Group id and part of entity id. |
From bf68b1f2d83f062ebc08773b40c8330f7cbeb8f0 Mon Sep 17 00:00:00 2001
From: Simone Chemelli
Date: Sun, 27 Aug 2023 19:40:20 +0200
Subject: [PATCH 58/91] Comelit SimpleHome integration doc (#28251)
* Comelit SimpleHome documentation
* fix release notation
---
source/_integrations/comelit.markdown | 27 +++++++++++++++++++++++++++
1 file changed, 27 insertions(+)
create mode 100644 source/_integrations/comelit.markdown
diff --git a/source/_integrations/comelit.markdown b/source/_integrations/comelit.markdown
new file mode 100644
index 00000000000..53425c769ca
--- /dev/null
+++ b/source/_integrations/comelit.markdown
@@ -0,0 +1,27 @@
+---
+title: Comelit SimpleHome
+description: Instructions on how to integrate Comelit SimpleHome home automation devices into Home Assistant.
+ha_category:
+ - Light
+ha_release: '2023.9'
+ha_domain: comelit
+ha_config_flow: true
+ha_codeowners:
+ - '@chemelli74'
+ha_iot_class: Local Polling
+ha_platforms:
+ - light
+ha_ssdp: false
+ha_integration_type: integration
+---
+
+The Comelit SimpleHome integration allows you to control your [Comelit home automation devices](https://comelitgroup.it/installatore/offerta/domotica-e-smart-home).
+
+There is support for the following platform types within Home Assistant:
+
+- **Comelit Serial Bridge** - allows local control for climate, light and cover devices.
+{% include integrations/config_flow.md %}
+
+## Configuration
+
+The configuration in the UI asks for a a few information: host, alarm_pin.
From 2c398b4cd818db18dc3003cd311f2d4bdb25839e Mon Sep 17 00:00:00 2001
From: Shay Levy
Date: Mon, 28 Aug 2023 11:42:50 +0300
Subject: [PATCH 59/91] Revert "Update information about Shelly entity naming
style (#28561)" (#28688)
---
source/_integrations/shelly.markdown | 33 ++++++++++++++++------------
1 file changed, 19 insertions(+), 14 deletions(-)
diff --git a/source/_integrations/shelly.markdown b/source/_integrations/shelly.markdown
index 27c42e575b9..75076820b6d 100644
--- a/source/_integrations/shelly.markdown
+++ b/source/_integrations/shelly.markdown
@@ -80,31 +80,36 @@ Shelly generation 2 devices running firmware 0.12 or later can act as a Bluetoot
## Entity naming (generation 1)
-The integration uses the following strategy to name its entities:
+The integration uses `Device Name` to name its entities if the device has only one relay or no relays at all.
-- If `Device Name` and `Channel Name` are set in the device, the integration will use them to generate the entities' name, e.g. `Shelly 2.5 Kitchen Light`
-- If `Device Name` or `Channel Name` are set to the default empty value, the integration will use the `Device ID` and/or default channel name to generate the entities' name, e.g. `Shelly2.5-9808D1D8B912 Channel 0`.
-- If the device has only one relay or no relay at all, the integration will use `Device Name` to name its entities.
+The integration uses the following strategy to name its entities if the device has more than one relay:
+
+- If `Device Name` or `Channel Name` is set in the device, the integration will use them to generate the entities' name.
+- If channel names are set, they will be used in the entity names. The device name will not be used.
+- If only the device name is set, and the device has multiple channels, the channel number will be appended to the entity name (e.g., Channel 2).
+- In case device name and channel names are not set, the entity name will be generated by the `Device Type`, `Device ID` and `Channel Number`.
+
+Examples:
+
+| Device Name | Channel Name | Entity Name |
+| ----------- | -------------- | ------------------------------- |
+| `Not set` | `Not Set` | shellyswitch25-ABC123 Channel 1 |
+| `Not set` | Kids Room Bulb | Kids Room Bulb |
+| Kitchen | `Not Set` | Kitchen Channel 1 |
+| Bedroom | Round Bulb | Round Bulb |
Names are set from the device web page:
- Device name can be set in **Settings** >> **DEVICE NAME**
-- Channel name for single-channel devices can be set in **Settings** >> **CHANNEL NAME**.
+- Channel name for single-channel devices can be set in **Settings** >> **CHANNEL NAME**
- Channel name for multi-channel devices can be set in **Settings** >> **CHANNEL NAME** after selecting the channel, by clicking on the channel name.
## Entity naming (generation 2)
The integration uses the following strategy to name its entities:
-- If `Device Name` and `Output Name` are set in the device, the integration will use them to generate the entities' name, e.g. `Shelly Pro 2 Kitchen Light`
-- If `Device Name` or `Output Name` are set to the default value, the integration will use the `Device ID` and/or default output name to generate the entities' name, e.g. `ShellyPro4PM-9808D1D8B912 Switch 0`.
-- If the device has no relay at all, the integration will use `Device Name` to name its entities.
-
-Names are set from the device web page:
-
-- Device name can be set in **Settings** >> **Device Name**.
-- Channel name can be set when you click **Output** >> **Settings** >> **Output Name**.
-
+- If `Channel Name` is set in the device, the integration will use it to generate the entities' name, e.g. `Kitchen Light`
+- If `Channel Name` is set to the default value, the integration will use the `Device ID` and default channel name to generate the entities' name, e.g. `ShellyPro4PM-9808D1D8B912 switch_0`.
## Binary input sensors
From 523a3bfa911a10aab67925e1312dca8d1b0e41d3 Mon Sep 17 00:00:00 2001
From: Jan Bouwhuis
Date: Mon, 28 Aug 2023 11:10:45 +0200
Subject: [PATCH 60/91] Add MQTT lawn mower platform (#28663)
* Add MQTT lawn mower platform
* Use separate command topics and templates
* Tiny tweaks
* refrase
* Refrase
* Final version
---------
Co-authored-by: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com>
---
source/_integrations/lawn_mower.mqtt.markdown | 222 ++++++++++++++++++
source/_integrations/mqtt.markdown | 2 +
2 files changed, 224 insertions(+)
create mode 100644 source/_integrations/lawn_mower.mqtt.markdown
diff --git a/source/_integrations/lawn_mower.mqtt.markdown b/source/_integrations/lawn_mower.mqtt.markdown
new file mode 100644
index 00000000000..1dacdac14e0
--- /dev/null
+++ b/source/_integrations/lawn_mower.mqtt.markdown
@@ -0,0 +1,222 @@
+---
+title: "MQTT Lawn Mower"
+description: "Instructions on how to integrate MQTT lawn mowers into Home Assistant."
+ha_category:
+ - Lawn Mower
+ha_release: 2023.9
+ha_iot_class: Configurable
+ha_domain: mqtt
+---
+
+The `mqtt` `lawn_mower` platform allows controlling a lawn mower over MQTT.
+
+## Configuration
+
+To enable MQTT Lawn Mower in your installation, add the following to your `configuration.yaml` file:
+
+```yaml
+# Example configuration.yaml entry
+mqtt:
+ - lawn_mower:
+ command_topic: topic
+ name: "Test Lawn Mower"
+```
+
+{% configuration %}
+activity_state_topic:
+ description: The MQTT topic subscribed to receive an update of the activity. Valid activities are `mowing`, `paused`, `docked`, and `error`. Use `value_template` to extract the activity state from a custom payload. When payload `none` is received, the activity state will be reset to `unknown`.
+ required: false
+ type: string
+activity_value_template:
+ description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the value."
+ required: false
+ type: template
+availability:
+ description: A list of MQTT topics subscribed to receive availability (online/offline) updates. Must not be used together with `availability_topic`.
+ required: false
+ type: list
+ keys:
+ payload_available:
+ description: The payload that represents the available state.
+ required: false
+ type: string
+ default: online
+ payload_not_available:
+ description: The payload that represents the unavailable state.
+ required: false
+ type: string
+ default: offline
+ topic:
+ description: An MQTT topic subscribed to receive availability (online/offline) updates.
+ required: true
+ type: string
+ value_template:
+ description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the device's availability from the `topic`. To determine the device's availability, the result of this template will be compared to `payload_available` and `payload_not_available`."
+ required: false
+ type: template
+availability_topic:
+ description: The MQTT topic subscribed to receive availability (online/offline) updates. Must not be used together with `availability`.
+ required: false
+ type: string
+availability_mode:
+ description: When `availability` is configured, this controls the conditions needed to set the entity to `available`. Valid entries are `all`, `any`, and `latest`. If set to `all`, `payload_available` must be received on all configured availability topics before the entity is marked as online. If set to `any`, `payload_available` must be received on at least one configured availability topic before the entity is marked as online. If set to `latest`, the last `payload_available` or `payload_not_available` received on any configured availability topic controls the availability.
+ required: false
+ type: string
+ default: latest
+availability_template:
+ description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `availability_topic`. To determine the devices's availability, the result of this template will be compared to `payload_available` and `payload_not_available`."
+ required: false
+ type: template
+device:
+ description: "Information about the device this lawn mower is a part of to tie it into the [device registry](https://developers.home-assistant.io/docs/en/device_registry_index.html). Only works when the [`unique_id`](#unique_id) is set. At least one of the identifiers or connections must be present to identify the device."
+ required: false
+ type: map
+ keys:
+ configuration_url:
+ description: 'A link to the webpage that can manage the configuration of this device. Can be either an `http://`, `https://`, or an internal `homeassistant://` URL.'
+ required: false
+ type: string
+ connections:
+ description: 'A list of connections of the device to the outside world as a list of tuples `[connection_type, connection_identifier]`. For example, the MAC address of a network interface: `"connections": ["mac", "02:5b:26:a8:dc:12"]`.'
+ required: false
+ type: list
+ hw_version:
+ description: The hardware version of the device.
+ required: false
+ type: string
+ identifiers:
+ description: 'A list of IDs that uniquely identify the device. For example, a serial number.'
+ required: false
+ type: [list, string]
+ manufacturer:
+ description: The manufacturer of the device.
+ required: false
+ type: string
+ model:
+ description: The model of the device.
+ required: false
+ type: string
+ name:
+ description: The name of the device.
+ required: false
+ type: string
+ suggested_area:
+ description: 'Suggest an area if the device isn’t in one yet.'
+ required: false
+ type: string
+ sw_version:
+ description: The firmware version of the device.
+ required: false
+ type: string
+ via_device:
+ description: 'Identifier of a device that routes messages between this device and Home Assistant. Examples of such devices are hubs or parent devices of a sub-device. This is used to show the device topology in Home Assistant.'
+ required: false
+ type: string
+dock_command_template:
+ description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to generate the payload to send to `dock_command_topic`. The `value` parameter in the template will be set to `dock`.
+ required: false
+ type: template
+dock_command_topic:
+ description: The MQTT topic that publishes commands when the service `lawn_mower.dock` service call is executed. The value `dock` is published when the service is called. Use a `dock_command_template` to publish a custom format.
+ required: false
+ type: string
+enabled_by_default:
+ description: Flag which defines if the entity should be enabled when first added.
+ required: false
+ type: boolean
+ default: true
+encoding:
+ description: The encoding of the payloads received and published messages. Set to `""` to disable decoding of the incoming payload.
+ required: false
+ type: string
+ default: "utf-8"
+entity_category:
+ description: The [category](https://developers.home-assistant.io/docs/core/entity#generic-properties) of the entity.
+ required: false
+ type: string
+ default: None
+icon:
+ description: "[Icon](/docs/configuration/customizing-devices/#icon) for the entity."
+ required: false
+ type: icon
+json_attributes_template:
+ description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the JSON dictionary from messages received on the `json_attributes_topic`."
+ required: false
+ type: template
+json_attributes_topic:
+ description: The MQTT topic subscribed to receive a JSON dictionary payload and then set as entity attributes. Implies `force_update` of the current activity state when a message is received on this topic.
+ required: false
+ type: string
+name:
+ description: The name of the lawn mower. Can be set to `null` if only the device name is relevant.
+ required: false
+ type: string
+object_id:
+ description: Used instead of `name` for automatic generation of `entity_id`
+ required: false
+ type: string
+optimistic:
+ description: Flag that defines if the lawn mower works in optimistic mode.
+ required: false
+ type: boolean
+ default: "`true` if no `state_topic` defined, else `false`."
+pause_command_template:
+ description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to generate the payload to send to `pause_command_topic`. The `value` parameter in the template will be set to `pause`.
+ required: false
+ type: template
+pause_command_topic:
+ description: The MQTT topic that publishes commands when the service `lawn_mower.pause` service call is executed. The value `pause` is published when the service is called. Use a `pause_command_template` to publish a custom format.
+ required: false
+ type: string
+qos:
+ description: The maximum QoS level to be used when receiving and publishing messages.
+ required: false
+ type: integer
+ default: 0
+start_mowing_template:
+ description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to generate the payload to send to `dock_command_topic`. The `value` parameter in the template will be set to `dock`.
+ required: false
+ type: template
+start_mowing_command_topic:
+ description: The MQTT topic that publishes commands when the service `lawn_mower.start_mowing` service call is executed. The value `start_mowing` is published when the service is called. Use a `start_mowing_command_template` to publish a custom format.
+ required: false
+ type: string
+retain:
+ description: If the published message should have the retain flag on or not.
+ required: false
+ type: boolean
+ default: false
+unique_id:
+ description: An ID that uniquely identifies this lawn mower. If two lawn mowers have the same unique ID, Home Assistant will raise an exception.
+ required: false
+ type: string
+{% endconfiguration %}
+
+
+
+Make sure that your topic matches exactly. `some-topic/` and `some-topic` are different topics.
+
+
+
+## Example
+
+The example below shows how to use a single command topic with a command template.
+
+{% raw %}
+
+```yaml
+# Example configuration.yaml entry
+mqtt:
+ - alarm_control_panel:
+ name: "Lawn Mower Plus"
+ activity_state_topic: "lawn_mower_plus/state"
+ activity_value_template: "{{ value_json.activity }}"
+ pause_command_topic: "lawn_mower_plus/set"
+ pause_command_template: '{"activity": "{{ value }}"}'
+ dock_command_topic: "lawn_mower_plus/set"
+ dock_command_template: '{"activity": "{{ value }}"}'
+ start_mowing_command_topic: "lawn_mower_plus/set"
+ start_mowing_command_template: '{"activity": "{{ value }}"}'
+```
+
+{% endraw %}
diff --git a/source/_integrations/mqtt.markdown b/source/_integrations/mqtt.markdown
index d78be66412b..04c89a52287 100644
--- a/source/_integrations/mqtt.markdown
+++ b/source/_integrations/mqtt.markdown
@@ -227,6 +227,7 @@ The discovery of MQTT devices will enable one to use MQTT devices with only mini
- [Humidifier](/integrations/humidifier.mqtt/)
- [Image](/integrations/image.mqtt/)
- [Climate/HVAC](/integrations/climate.mqtt/)
+- [Lawn Mower](/integrations/lawn_mower.mqtt/)
- [Light](/integrations/light.mqtt/)
- [Lock](/integrations/lock.mqtt/)
- [Number](/integrations/number.mqtt/)
@@ -797,6 +798,7 @@ mqtt:
- [Humidifier](/integrations/humidifier.mqtt/)
- [Image](/integrations/imahe.mqtt/)
- [Climate/HVACs](/integrations/climate.mqtt/)
+- [Lawn Mower](/integrations/lawn_mower.mqtt/)
- [Light](/integrations/light.mqtt/)
- [Lock](/integrations/lock.mqtt/)
- [Number](/integrations/number.mqtt/)
From fb04cd14717514ff18efbb778d36fa1a9f9a0a71 Mon Sep 17 00:00:00 2001
From: Simone Chemelli
Date: Mon, 28 Aug 2023 15:11:49 +0200
Subject: [PATCH 61/91] Vodafone Station integration doc (#28061)
* Vodafone Station documentation
* Update HA release
Co-authored-by: Maciej Bieniek
---------
Co-authored-by: Maciej Bieniek
---
.../_integrations/vodafone_station.markdown | 52 +++++++++++++++++++
1 file changed, 52 insertions(+)
create mode 100644 source/_integrations/vodafone_station.markdown
diff --git a/source/_integrations/vodafone_station.markdown b/source/_integrations/vodafone_station.markdown
new file mode 100644
index 00000000000..5a2b40785ce
--- /dev/null
+++ b/source/_integrations/vodafone_station.markdown
@@ -0,0 +1,52 @@
+---
+title: Vodafone Station
+description: Instructions on how to integrate Vodafone Station routers into Home Assistant.
+ha_category:
+ - Presence Detection
+ha_release: 2023.9
+ha_domain: vodafone_station
+ha_config_flow: true
+ha_codeowners:
+ - '@paoloantinori'
+ - '@chemelli74'
+ha_iot_class: Local Polling
+ha_platforms:
+ - device_tracker
+ha_ssdp: false
+ha_integration_type: integration
+---
+
+The Vodafone Station integration allows you to control your [Vodafone Station](https://www.vodafone.it/privati/area-supporto/assistenza-dispositivi/vodafone-station.html) based router.
+
+There is support for the following platform types within Home Assistant:
+
+- **Device tracker** - presence detection by looking at connected devices.
+{% include integrations/config_flow.md %}
+
+## Configuration
+
+The configuration in the UI asks for a a few information: host, username, password and SSL.
+Depending on the model of the router, the login URL can be based on http:// or https://.
+The default username is `vodafone`.
+
+
+## Integration options
+
+It is possible to change some behaviors through the integration options.
+To change the settings, go to {% my integrations title="**Settings** > **Devices & Services**" %}. On the **Vodafone Station** integration, select the cogwheel. Then select **Configure**.
+
+- **Consider home**: Number of seconds that must elapse before considering a disconnected device "not at home".
+
+## Additional info
+
+### Device Tracker
+
+**Note**: If you don't want to automatically track newly detected devices, disable the integration system option `Enable new added entities`.
+
+
+### Tested models
+
+This integartion was tested against the following models:
+
+ - Vodafone Power Station
+ - Vodafone WiFi 6 Station
From d638984da29573ef61745754355b10c2b8fd951a Mon Sep 17 00:00:00 2001
From: Guido Schmitz
Date: Mon, 28 Aug 2023 16:01:31 +0200
Subject: [PATCH 62/91] Add image platform to devolo_home_network (#28505)
Co-authored-by: Robert Resch
---
source/_integrations/devolo_home_network.markdown | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/source/_integrations/devolo_home_network.markdown b/source/_integrations/devolo_home_network.markdown
index df364804d9e..90e6fc14f01 100755
--- a/source/_integrations/devolo_home_network.markdown
+++ b/source/_integrations/devolo_home_network.markdown
@@ -4,6 +4,7 @@ description: Instructions on how to integrate devolo Home Network devices with H
ha_category:
- Binary Sensor
- Button
+ - Image
- Presence Detection
- Sensor
- Switch
@@ -21,6 +22,7 @@ ha_platforms:
- button
- device_tracker
- diagnostics
+ - image
- sensor
- switch
- update
@@ -49,6 +51,12 @@ Currently the following device types within Home Assistant are supported.
- Restart the device
- Start WPS
+### Images
+
+- QR code of your guest wifi credentials
+ - Updates every 15 seconds if changes are detected
+ - Is enabled by default
+
### Presence Detection
- Detect presence of devices connected to the main or the guest wifi
From 3178bf78e122faf4a75372515dd06d6be58dcaee Mon Sep 17 00:00:00 2001
From: Jake Colman
Date: Mon, 28 Aug 2023 10:07:56 -0400
Subject: [PATCH 63/91] Add documentation for indoor sensors (#28646)
Co-authored-by: Franck Nijhof
---
source/_integrations/honeywell.markdown | 12 +++++++-----
1 file changed, 7 insertions(+), 5 deletions(-)
diff --git a/source/_integrations/honeywell.markdown b/source/_integrations/honeywell.markdown
index ef52cbb18f5..643383e652c 100644
--- a/source/_integrations/honeywell.markdown
+++ b/source/_integrations/honeywell.markdown
@@ -35,11 +35,11 @@ Home Assistant is integrated with the following devices through [https://mytotal
- Every thermostat is exposed as a climate entity
- Known working devices: [TH6320R1004](https://customer.resideo.com/en-US/Pages/Product.aspx?cat=HonECC%2520Catalog&pid=TH6320R1004/U), [RTH9585WF1004](https://www.honeywellhome.com/us/en/products/air/thermostats/wifi-thermostats/wifi-color-touchscreen-thermostat-rth9585wf1004-u/), [RTH6580WF](https://www.honeywellhome.com/us/en/products/air/thermostats/wifi-thermostats/wifi-7-day-programmable-thermostat-rth6580wf1001-u1/)
- Sensors
- - A Temperature sensor entity.
- - A Humidity sensor entity.
- - Known working devices: [C7089R1013](https://customer.resideo.com/en-US/Pages/Product.aspx?cat=HonECC%20Catalog&pid=C7089R1013/U)
+ - A Temperature sensor entity
+ - A Humidity sensor entity
+ - Known working devices: [C7089R1013](https://customer.resideo.com/en-US/Pages/Product.aspx?cat=HonECC%20Catalog&pid=C7089R1013/U), [RTH6580WF](https://www.honeywellhome.com/us/en/products/air/thermostats/wifi-thermostats/wifi-7-day-programmable-thermostat-rth6580wf1001-u1/)
-Others devices like Security systems are not currently supported by this integration
+Other devices like Security systems are not currently supported by this integration.
## Climate
@@ -49,10 +49,12 @@ All [climate services](/integrations/climate) are supported except set_swing_mod
## Sensor
-The sensor platform integrates outside temperature and outside humidity into Home Assistant as sensors for each device.
+The sensor platform integrates inside and outside temperature and humidity into Home Assistant as sensors for each device. Not every supported thermostat will support all sensors.
This integration will add Home Assistant sensors for the following:
|Sensor|Value|
--- | ---
|Outdoor temperature | Average temperature of all Honeywell Wireless Outdoor Sensors|
|Outdoor humidity | Average humidity of all Honeywell Wireless Outdoor Sensors|
+|Indoor temperature | Current temperature as measured at the specific thermostat|
+|Indoor humidity | Current humidity as measured at the specific thermostat|
From 3b97555273dbdb8702c2a3edc836e385b1426151 Mon Sep 17 00:00:00 2001
From: Marty Sun
Date: Mon, 28 Aug 2023 22:10:10 +0800
Subject: [PATCH 64/91] Add documentation for Yardian integration (#28391)
Co-authored-by: J. Nick Koston
Co-authored-by: Franck Nijhof
---
source/_integrations/yardian.markdown | 28 ++++++++++++++++++
.../yardian/yardian_config_flow.jpg | Bin 0 -> 108470 bytes
2 files changed, 28 insertions(+)
create mode 100644 source/_integrations/yardian.markdown
create mode 100644 source/images/integrations/yardian/yardian_config_flow.jpg
diff --git a/source/_integrations/yardian.markdown b/source/_integrations/yardian.markdown
new file mode 100644
index 00000000000..770b114cece
--- /dev/null
+++ b/source/_integrations/yardian.markdown
@@ -0,0 +1,28 @@
+---
+title: Yardian
+description: Instructions on how to integrate Yardian device within Home Assistant.
+ha_category:
+ - Irrigation
+ - Switch
+ha_config_flow: true
+ha_release: 2023.9
+ha_iot_class: Local Polling
+ha_codeowners:
+ - '@h3l1o5'
+ha_domain: yardian
+ha_platforms:
+ - switch
+ha_integration_type: integration
+---
+
+The Yardian integration allows you to control your [Yardian Smart Sprinkler Controller](https://yardian.com/products/yardian-pro-smart-sprinkler-controller/).
+
+There is currently support for the following platform within Home Assistant:
+
+- [Switch](#switch) - Allows you to view the status of zones and control them.
+
+{% include integrations/config_flow.md %}
+
+During the configuration, you will have to manually set the **Host** and the **Access Token**. You can find them inside your [Yardian App](https://yardian.com/app/).
+
+
diff --git a/source/images/integrations/yardian/yardian_config_flow.jpg b/source/images/integrations/yardian/yardian_config_flow.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..ac9019dda689b27b44c375aa7a6bc5db6a26fb80
GIT binary patch
literal 108470
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