From a509dc6edff579b74834a25461673ec031e448ae Mon Sep 17 00:00:00 2001
From: Lennard Beers
Date: Fri, 29 Mar 2024 02:21:27 +0100
Subject: [PATCH 001/137] Add eq3btsmart integration page (#31202)
Co-authored-by: J. Nick Koston
---
source/_integrations/eq3btsmart.markdown | 37 ++++++++++++++++++++++++
source/_redirects | 1 -
2 files changed, 37 insertions(+), 1 deletion(-)
create mode 100644 source/_integrations/eq3btsmart.markdown
diff --git a/source/_integrations/eq3btsmart.markdown b/source/_integrations/eq3btsmart.markdown
new file mode 100644
index 000000000000..741e986f3266
--- /dev/null
+++ b/source/_integrations/eq3btsmart.markdown
@@ -0,0 +1,37 @@
+---
+title: eQ-3 Bluetooth Smart Thermostats
+description: Instructions on how to integrate eQ-3 Bluetooth Smart Thermostats into Home Assistant.
+ha_category: Climate
+ha_iot_class: Local Polling
+ha_release: 2024.5
+ha_config_flow: true
+ha_codeowners:
+ - '@eulemitkeule'
+ - '@dbuezas'
+ha_domain: eq3btsmart
+ha_integration_type: integration
+---
+
+The `eq3btsmart` climate platform allows you to integrate eQ-3 Bluetooth Smart Thermostats.
+
+The current functionality allows setting the temperature as well as controlling the supported modes with help of the [eq3btsmart](https://github.com/eulemitkeule/eq3btsmart) library.
+As the device doesn't contain a temperature sensor ([read more](https://forum.fhem.de/index.php/topic,39308.15.html)), we report target temperature also as current one.
+
+### Pairing
+
+Pairing is only required with firmware versions above 120 and when not using ESPHome Bluetooth proxies.
+Before configuring Home Assistant you need to pair the thermostat to your Bluetooth adapter using `bluetoothctl`.
+
+```bash
+bluetoothctl
+scan on
+
+scan off
+pair
+
+trust
+disconnect
+exit
+```
+
+{% include integrations/config_flow.md %}
diff --git a/source/_redirects b/source/_redirects
index efbc3b90f835..e0320acb7077 100644
--- a/source/_redirects
+++ b/source/_redirects
@@ -508,7 +508,6 @@ layout: null
/integrations/ee_brightbox /more-info/removed-integration 301
/integrations/eight_sleep /more-info/removed-integration 301
/integrations/envirophat /more-info/removed-integration 301
-/integrations/eq3btsmart /more-info/removed-integration 301
/integrations/essent /more-info/removed-integration 301
/integrations/facebox /more-info/removed-integration 301
/integrations/fedex /more-info/removed-integration 301
From 8a82d6c7938e86fe610c10748a4f0c2a9064a079 Mon Sep 17 00:00:00 2001
From: Luca Angemi
Date: Fri, 29 Mar 2024 14:05:36 +0000
Subject: [PATCH 002/137] =?UTF-8?q?Add=20=C2=B4uid=C2=B4=20to=20=C2=B4imap?=
=?UTF-8?q?=C2=B4=20event=20(#32082)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
source/_integrations/imap.markdown | 2 ++
1 file changed, 2 insertions(+)
diff --git a/source/_integrations/imap.markdown b/source/_integrations/imap.markdown
index 142e38563bb4..b82cae5935fa 100644
--- a/source/_integrations/imap.markdown
+++ b/source/_integrations/imap.markdown
@@ -133,6 +133,8 @@ custom:
description: Holds the result of the custom event data [template](/docs/configuration/templating). All attributes are available as a variable in the template.
initial:
description: Returns `True` if this is the initial event for the last message received. When a message within the search scope is removed and the last message received has not been changed, then an `imap_content` event is generated and the `initial` property is set to `False`. Note that if no `Message-ID` header was set on the triggering email, the `initial` property will always be set to `True`.
+uid:
+ description: Latest `uid` of the message.
{% endconfiguration_basic %}
From 5bc442df7e207bca41538323670228f6d03d9b45 Mon Sep 17 00:00:00 2001
From: Quentame
Date: Sat, 30 Mar 2024 07:01:07 +0100
Subject: [PATCH 003/137] `conditional` & `entity-filter`: add ability to
filter through `entity_id` & add `entity-filter` `conditional`'s conditions
(#30561)
* entity-filter: add ability to filter through entity_id value
* Update to latest frontend PR edits
* Update to new upstream
* Fix English spelling
Co-authored-by: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com>
---------
Co-authored-by: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com>
---
source/_dashboards/conditional.markdown | 79 ++++--
source/_dashboards/entity-filter.markdown | 287 ++++++++++++++++++---
source/dashboards/badges.markdown | 288 ++++++++++++++++++++--
3 files changed, 593 insertions(+), 61 deletions(-)
diff --git a/source/_dashboards/conditional.markdown b/source/_dashboards/conditional.markdown
index 3cf505e9a5e4..19b188730ba6 100644
--- a/source/_dashboards/conditional.markdown
+++ b/source/_dashboards/conditional.markdown
@@ -25,7 +25,7 @@ type:
type: string
conditions:
required: true
- description: List of conditions to check. See [available conditions](/dashboards/conditional/#card-conditions).
+ description: List of conditions to check. See [available conditions](#conditions-options).
type: list
card:
required: true
@@ -79,24 +79,24 @@ card:
- binary_sensor.rookmelder
```
-## Card conditions
+## Conditions options
### State
+Tests if an entity has a specified state.
+
```yaml
-condition: "state"
+condition: state
entity: climate.thermostat
state: heat
```
```yaml
-condition: "state"
+condition: state
entity: climate.thermostat
state_not: "off"
```
-Tests if an entity has a specified state.
-
{% configuration %}
condition:
required: true
@@ -108,11 +108,11 @@ entity:
type: string
state:
required: false
- description: Entity state is equal to this value. Can contain an array of states.*
+ description: Entity state or ID to be equal to this value. Can contain an array of states.*
type: [list, string]
state_not:
required: false
- description: Entity state is unequal to this value. Can contain an array of states.*
+ description: Entity state or ID to not be equal to this value. Can contain an array of states.*
type: [list, string]
{% endconfiguration %}
@@ -123,7 +123,7 @@ state_not:
Tests if an entity state matches the thresholds.
```yaml
-condition: "numeric_state"
+condition: numeric_state
entity: sensor.outside_temperature
above: 10
below: 20
@@ -140,15 +140,15 @@ entity:
type: string
above:
required: false
- description: Entity state is above this value.*
+ description: Entity state or ID to be above this value.*
type: string
below:
required: false
- description: Entity state is below to this value.*
+ description: Entity state or ID to be below this value.*
type: string
{% endconfiguration %}
-*at least one is required (`above` or `below`)
+*at least one is required (`above` or `below`), both are also possible for values between.
### Screen
@@ -175,7 +175,7 @@ media_query:
Specify the visibility of the card per user.
```yaml
-condition: "user"
+condition: user
users:
- 581fca7fdc014b8b894519cc531f9a04
```
@@ -191,6 +191,57 @@ users:
type: list
{% endconfiguration %}
+### And
+
+Specify that both conditions must be met.
+
+```yaml
+condition: and
+conditions:
+ - condition: numeric_state
+ above: 0
+ - condition: user
+ users:
+ - 581fca7fdc014b8b894519cc531f9a04
+```
+
+{% configuration %}
+condition:
+ required: true
+ description: "`and`"
+ type: string
+conditions:
+ required: false
+ description: List of conditions to check. See [available conditions](#conditions-options).
+ type: list
+{% endconfiguration %}
+
+### Or
+
+Specify that at least one of the conditions must be met.
+
+```yaml
+condition: or
+conditions:
+ - condition: numeric_state
+ above: 0
+ - condition: user
+ users:
+ - 581fca7fdc014b8b894519cc531f9a04
+```
+
+{% configuration %}
+condition:
+ required: true
+ description: "`or`"
+ type: string
+conditions:
+ required: false
+ description: List of conditions to check. See [available conditions](#conditions-options).
+ type: list
+{% endconfiguration %}
+
+
## Related topics
-- [Dashboard cards](/dashboards/cards/)
\ No newline at end of file
+- [Dashboard cards](/dashboards/cards/)
diff --git a/source/_dashboards/entity-filter.markdown b/source/_dashboards/entity-filter.markdown
index 201e7067261d..64b575458292 100644
--- a/source/_dashboards/entity-filter.markdown
+++ b/source/_dashboards/entity-filter.markdown
@@ -29,9 +29,13 @@ entities:
required: true
description: A list of entity IDs or `entity` objects, see below.
type: list
+conditions:
+ required: false
+ description: List of conditions to check. See [available conditions](#conditions-options).*
+ type: list
state_filter:
- required: true
- description: List of strings representing states or `filter` objects, see below.
+ required: false
+ description: (legacy) List of strings representing states or filters to check. See [available legacy filters](#legacy-state-filters).*
type: list
card:
required: false
@@ -45,6 +49,8 @@ show_empty:
default: true
{% endconfiguration %}
+*one is required (`conditions` or `state_filter`)
+
### Options for entities
If you define entities as objects instead of strings (by adding `entity:` before entity ID), you can add more customization and configurations:
@@ -64,8 +70,9 @@ name:
type: string
icon:
required: false
- description: Overwrites icon or entity picture.
+ description: Overwrites icon or entity picture. You can use any icon from [Material Design Icons](https://pictogrammers.com/library/mdi/). Prefix the icon name with `mdi:`, ie `mdi:home`.
type: string
+ default: Entity domain icon
secondary_info:
required: false
description: "Show additional info. Values: `entity-id`, `last-changed`."
@@ -74,32 +81,225 @@ format:
required: false
description: "How the state should be formatted. Currently only used for timestamp sensors. Valid values are: `relative`, `total`, `date`, `time` and `datetime`."
type: string
+conditions:
+ required: false
+ description: List of conditions to check. See [available conditions](#conditions-options).*
+ type: list
state_filter:
required: false
- description: List of strings representing states or `filter` objects, see below.
+ description: (legacy) List of strings representing states or filters to check. See [available legacy filters](#legacy-state-filters).*
type: list
{% endconfiguration %}
-### Options for state filter
+*only one filter will be applied: `conditions` or `state_filter` if `conditions` is not present
-If you define `state_filter` as objects instead of strings (by adding `value:` before your state value), you can add more customization to your filter:
+## Conditions options
-{% configuration %}
-value:
+You can specify multiple `conditions`, in which case the entity will be displayed if it matches any condition.
+
+### State
+
+Tests if an entity has a specified state.
+
+```yaml
+type: entity-filter
+entities:
+ - climate.thermostat_living_room
+ - climate.thermostat_bed_room
+conditions:
+ - condition: state
+ state: heat
+```
+
+```yaml
+type: entity-filter
+entities:
+ - climate.thermostat_living_room
+ - climate.thermostat_bed_room
+conditions:
+ - condition: state
+ state_not: "off"
+```
+
+```yaml
+type: entity-filter
+entities:
+ - sensor.gas_station_1
+ - sensor.gas_station_2
+ - sensor.gas_station_3
+conditions:
+ - condition: state
+ state: sensor.gas_station_lowest_price
+```
+
+{% configuration condition_state %}
+condition:
required: true
- description: String representing the state.
+ description: "`state`"
type: string
-operator:
+state:
required: false
- description: Operator to use in the comparison. Can be `==`, `<=`, `<`, `>=`, `>`, `!=`, `in`, `not in`, or `regex`.
+ description: Entity state or ID to be equal to this value. Can contain an array of states.*
+ type: [list, string]
+state_not:
+ required: false
+ description: Entity state or ID to not be equal to this value. Can contain an array of states.*
+ type: [list, string]
+{% endconfiguration %}
+
+*one is required (`state` or `state_not`)
+
+### Numeric state
+
+Tests if an entity state matches the thresholds.
+
+```yaml
+type: entity-filter
+entities:
+ - sensor.outside_temperature
+ - sensor.living_room_temperature
+ - sensor.bed_room_temperature
+conditions:
+ - condition: numeric_state
+ above: 10
+ below: 20
+```
+
+{% configuration condition_numeric_state %}
+condition:
+ required: true
+ description: "`numeric_state`"
type: string
-attribute:
+above:
required: false
- description: Attribute of the entity to use instead of the state.
+ description: Entity state or ID to be above this value.*
+ type: string
+below:
+ required: false
+ description: Entity state or ID to be below this value.*
+ type: string
+{% endconfiguration %}
+
+*at least one is required (`above` or `below`), both are also possible for values between.
+
+### Screen
+
+Specify the visibility of the entity per screen size. Some screen size presets are available in the UI but you can use any CSS media query you want in YAML.
+
+```yaml
+type: entity-filter
+entities:
+ - sensor.outside_temperature
+ - sensor.living_room_temperature
+ - sensor.bed_room_temperature
+conditions:
+ - condition: screen
+ media_query: "(min-width: 1280px)"
+```
+
+{% configuration condition_screen %}
+condition:
+ required: true
+ description: "`screen`"
+ type: string
+media_query:
+ required: true
+ description: Media query to check which screen size are allowed to display the entity.
+ type: string
+{% endconfiguration %}
+
+### User
+
+Specify the visibility of the entity per user.
+
+```yaml
+type: entity-filter
+entities:
+ - sensor.outside_temperature
+ - sensor.living_room_temperature
+ - sensor.bed_room_temperature
+conditions:
+ - condition: user
+ users:
+ - 581fca7fdc014b8b894519cc531f9a04
+```
+
+{% configuration condition_user %}
+condition:
+ required: true
+ description: "`user`"
+ type: string
+users:
+ required: true
+ description: User ID that can see the entity (unique hex value found on the Users configuration page).
+ type: list
+{% endconfiguration %}
+
+### And
+
+Specify that both conditions must be met.
+
+```yaml
+type: entity-filter
+entities:
+ - sensor.outside_temperature
+ - sensor.living_room_temperature
+ - sensor.bed_room_temperature
+conditions:
+ - condition: and
+ conditions:
+ - condition: numeric_state
+ above: 0
+ - condition: user
+ users:
+ - 581fca7fdc014b8b894519cc531f9a04
+```
+
+{% configuration condition_and %}
+condition:
+ required: true
+ description: "`and`"
+ type: string
+conditions:
+ required: false
+ description: List of conditions to check. See [available conditions](#conditions-options).
+ type: list
+{% endconfiguration %}
+
+### Or
+
+Specify that at least one of the conditions must be met.
+
+```yaml
+type: entity-filter
+entities:
+ - sensor.outside_temperature
+ - sensor.living_room_temperature
+ - sensor.bed_room_temperature
+conditions:
+ - condition: or
+ conditions:
+ - condition: numeric_state
+ above: 0
+ - condition: user
+ users:
+ - 581fca7fdc014b8b894519cc531f9a04
+```
+
+{% configuration condition_or %}
+condition:
+ required: true
+ description: "`or`"
type: string
+conditions:
+ required: false
+ description: List of conditions to check. See [available conditions](#conditions-options).
+ type: list
{% endconfiguration %}
-## Examples
+## Legacy state filters
+
+### String filter
Show only active switches or lights in the house.
@@ -134,7 +334,32 @@ card:
Entity filter combined with glance card.
-You can also specify multiple `state_filter` conditions, in which case the entity will be displayed if it matches any condition. This example will display everyone who is at home or at work.
+You can also specify multiple `state_filter` conditions, in which case the entity will be displayed if it matches any condition.
+
+If you define `state_filter` as objects instead of strings, you can add more customization to your filter, as described below.
+
+### Operator filter
+
+Tests if an entity state correspond to the applied `operator`.
+
+{% configuration condition_operator %}
+value:
+ required: true
+ description: String representing the state.
+ type: string
+operator:
+ required: true
+ description: Operator to use in the comparison. Can be `==`, `<=`, `<`, `>=`, `>`, `!=`, `in`, `not in`, or `regex`.
+ type: string
+attribute:
+ required: false
+ description: Attribute of the entity to use instead of the state.
+ type: string
+{% endconfiguration %}
+
+#### Examples
+
+Displays everyone who is at home or at work.
```yaml
type: entity-filter
@@ -146,7 +371,7 @@ state_filter:
- operator: "=="
value: home
- operator: "=="
- value: work
+ value: work
card:
type: glance
title: Who's at work or home
@@ -173,19 +398,19 @@ entities:
Use a regex filter against entity attributes. This regex filter below looks for expressions that are 1 digit in length and where the number is between 0-7 (so show holidays today or in the next 7 days) and displays those holidays as entities in the Entity Filter card.
```yaml
- - type: entity-filter
- card:
- title: "Upcoming Holidays In Next 7 Days"
- show_header_toggle: false
- state_filter:
- - operator: regex
- value: "^([0-7]{1})$"
- attribute: eta
- entities:
- - entity: sensor.upcoming_ical_holidays_0
- - entity: sensor.upcoming_ical_holidays_1
- - entity: sensor.upcoming_ical_holidays_2
- - entity: sensor.upcoming_ical_holidays_3
- - entity: sensor.upcoming_ical_holidays_4
- show_empty: false
+type: entity-filter
+card:
+ title: "Upcoming Holidays In Next 7 Days"
+ show_header_toggle: false
+state_filter:
+ - operator: regex
+ value: "^([0-7]{1})$"
+ attribute: eta
+entities:
+ - entity: sensor.upcoming_ical_holidays_0
+ - entity: sensor.upcoming_ical_holidays_1
+ - entity: sensor.upcoming_ical_holidays_2
+ - entity: sensor.upcoming_ical_holidays_3
+ - entity: sensor.upcoming_ical_holidays_4
+show_empty: false
```
diff --git a/source/dashboards/badges.markdown b/source/dashboards/badges.markdown
index 56821d176240..198b11f4105a 100644
--- a/source/dashboards/badges.markdown
+++ b/source/dashboards/badges.markdown
@@ -19,7 +19,7 @@ type: state-label
entity: light.living_room
```
-{% configuration state_label %}
+{% configuration state_badge %}
type:
required: true
description: "`state-label`"
@@ -62,12 +62,18 @@ entities:
required: true
description: A list of entity IDs or `entity` objects, see below.
type: list
+conditions:
+ required: false
+ description: List of conditions to check. See [available conditions](#conditions-options).*
+ type: list
state_filter:
- required: true
- description: List of strings representing states or `filter` objects, see below.
+ required: false
+ description: (legacy) List of strings representing states or filters to check. See [available legacy filters](#legacy-state-filters).*
type: list
{% endconfiguration %}
+*one is required (`conditions` or `state_filter`)
+
### Options for entities
If you define entities as objects instead of strings (by adding `entity:` before entity ID), you can add more customization and configurations:
@@ -93,34 +99,227 @@ image:
required: false
description: The URL of an image.
type: string
+conditions:
+ required: false
+ description: List of conditions to check. See [available conditions](#conditions-options).*
+ type: list
state_filter:
required: false
- description: List of strings representing states or `filter` objects, see below.
+ description: (legacy) List of strings representing states or filters to check. See [available legacy filters](#legacy-state-filters).*
type: list
{% endconfiguration %}
-### Options for state filter
+*only one filter will be applied: `conditions` or `state_filter` if `conditions` is not present
-If you define state_filter as objects instead of strings (by adding `value:` before your state value), you can add more customization to your filter:
+## Conditions options
-{% configuration state_filter %}
-value:
+You can specify multiple `conditions`, in which case the entity will be displayed if it matches any condition.
+
+### State
+
+Tests if an entity has a specified state.
+
+```yaml
+type: entity-filter
+entities:
+ - climate.thermostat_living_room
+ - climate.thermostat_bed_room
+conditions:
+ - condition: state
+ state: heat
+```
+
+```yaml
+type: entity-filter
+entities:
+ - climate.thermostat_living_room
+ - climate.thermostat_bed_room
+conditions:
+ - condition: state
+ state_not: "off"
+```
+
+```yaml
+type: entity-filter
+entities:
+ - sensor.gas_station_1
+ - sensor.gas_station_2
+ - sensor.gas_station_3
+conditions:
+ - condition: state
+ state: sensor.gas_station_lowest_price
+```
+
+{% configuration condition_state %}
+condition:
required: true
- description: String representing the state.
+ description: "`state`"
type: string
-operator:
+state:
+ required: false
+ description: Entity state or ID to be equal to this value. Can contain an array of states.*
+ type: [list, string]
+state_not:
required: false
- description: Operator to use in the comparison. Can be `==`, `<=`, `<`, `>=`, `>`, `!=` or `regex`.
+ description: Entity state or ID to not be equal to this value. Can contain an array of states.*
+ type: [list, string]
+{% endconfiguration %}
+
+*one is required (`state` or `state_not`)
+
+### Numeric state
+
+Tests if an entity state matches the thresholds.
+
+```yaml
+type: entity-filter
+entities:
+ - sensor.outside_temperature
+ - sensor.living_room_temperature
+ - sensor.bed_room_temperature
+conditions:
+ - condition: numeric_state
+ above: 10
+ below: 20
+```
+
+{% configuration condition_numeric_state %}
+condition:
+ required: true
+ description: "`numeric_state`"
type: string
-attribute:
+above:
required: false
- description: Attribute of the entity to use instead of the state.
+ description: Entity state or ID to be above this value.*
+ type: string
+below:
+ required: false
+ description: Entity state or ID to be below this value.*
+ type: string
+{% endconfiguration %}
+
+*at least one is required (`above` or `below`), both are also possible for values between.
+
+### Screen
+
+Specify the visibility of the entity per screen size. Some screen size presets are available in the UI but you can use any CSS media query you want in YAML.
+
+```yaml
+type: entity-filter
+entities:
+ - sensor.outside_temperature
+ - sensor.living_room_temperature
+ - sensor.bed_room_temperature
+conditions:
+ - condition: screen
+ media_query: "(min-width: 1280px)"
+```
+
+{% configuration condition_screen %}
+condition:
+ required: true
+ description: "`screen`"
+ type: string
+media_query:
+ required: true
+ description: Media query to check which screen size are allowed to display the entity.
+ type: string
+{% endconfiguration %}
+
+### User
+
+Specify the visibility of the entity per user.
+
+```yaml
+type: entity-filter
+entities:
+ - sensor.outside_temperature
+ - sensor.living_room_temperature
+ - sensor.bed_room_temperature
+conditions:
+ - condition: user
+ users:
+ - 581fca7fdc014b8b894519cc531f9a04
+```
+
+{% configuration condition_user %}
+condition:
+ required: true
+ description: "`user`"
type: string
+users:
+ required: true
+ description: User ID that can see the entity (unique hex value found on the Users configuration page).
+ type: list
{% endconfiguration %}
-### Examples
+### And
+
+Specify that both conditions must be met.
+
+```yaml
+type: entity-filter
+entities:
+ - sensor.outside_temperature
+ - sensor.living_room_temperature
+ - sensor.bed_room_temperature
+conditions:
+ - condition: and
+ conditions:
+ - condition: numeric_state
+ above: 0
+ - condition: user
+ users:
+ - 581fca7fdc014b8b894519cc531f9a04
+```
+
+{% configuration condition_and %}
+condition:
+ required: true
+ description: "`and`"
+ type: string
+conditions:
+ required: false
+ description: List of conditions to check. See [available conditions](#conditions-options).
+ type: list
+{% endconfiguration %}
+
+### Or
+
+Specify that at least one of the conditions must be met.
+
+```yaml
+type: entity-filter
+entities:
+ - sensor.outside_temperature
+ - sensor.living_room_temperature
+ - sensor.bed_room_temperature
+conditions:
+ - condition: or
+ conditions:
+ - condition: numeric_state
+ above: 0
+ - condition: user
+ users:
+ - 581fca7fdc014b8b894519cc531f9a04
+```
+
+{% configuration condition_or %}
+condition:
+ required: true
+ description: "`or`"
+ type: string
+conditions:
+ required: false
+ description: List of conditions to check. See [available conditions](#conditions-options).
+ type: list
+{% endconfiguration %}
+
+## Legacy state filters
+
+### String filter
-Show only active switches or lights in the house
+Show only active switches or lights in the house.
```yaml
type: entity-filter
@@ -133,7 +332,47 @@ state_filter:
- "on"
```
-Specify filter for a single entity
+You can also specify multiple `state_filter` conditions, in which case the entity will be displayed if it matches any condition.
+
+If you define `state_filter` as objects instead of strings, you can add more customization to your filter, as described below.
+
+### Operator filter
+
+Tests if an entity state correspond to the applied `operator`.
+
+{% configuration condition_operator %}
+value:
+ required: true
+ description: String representing the state.
+ type: string
+operator:
+ required: true
+ description: Operator to use in the comparison. Can be `==`, `<=`, `<`, `>=`, `>`, `!=`, `in`, `not in`, or `regex`.
+ type: string
+attribute:
+ required: false
+ description: Attribute of the entity to use instead of the state.
+ type: string
+{% endconfiguration %}
+
+#### Examples
+
+Displays everyone who is at home or at work.
+
+```yaml
+type: entity-filter
+entities:
+ - device_tracker.demo_paulus
+ - device_tracker.demo_anne_therese
+ - device_tracker.demo_home_boy
+state_filter:
+ - operator: "=="
+ value: home
+ - operator: "=="
+ value: work
+```
+
+Specify filter for a single entity.
```yaml
type: entity-filter
@@ -150,3 +389,20 @@ entities:
value: 50
attribute: humidity
```
+
+Use a regex filter against entity attributes. This regex filter below looks for expressions that are 1 digit in length and where the number is between 0-7 (so show holidays today or in the next 7 days) and displays those holidays as entities in the Entity Filter badge.
+
+```yaml
+type: entity-filter
+state_filter:
+ - operator: regex
+ value: "^([0-7]{1})$"
+ attribute: eta
+entities:
+ - entity: sensor.upcoming_ical_holidays_0
+ - entity: sensor.upcoming_ical_holidays_1
+ - entity: sensor.upcoming_ical_holidays_2
+ - entity: sensor.upcoming_ical_holidays_3
+ - entity: sensor.upcoming_ical_holidays_4
+show_empty: false
+```
From 0781b7a032b54896ef040997d19c68569f5b06ac Mon Sep 17 00:00:00 2001
From: Shai Ungar
Date: Sat, 30 Mar 2024 16:23:16 +0300
Subject: [PATCH 004/137] Fix Rova double header (#32097)
---
source/_integrations/rova.markdown | 2 --
1 file changed, 2 deletions(-)
diff --git a/source/_integrations/rova.markdown b/source/_integrations/rova.markdown
index abb38a4c4c5b..024645f53ce0 100644
--- a/source/_integrations/rova.markdown
+++ b/source/_integrations/rova.markdown
@@ -14,6 +14,4 @@ ha_integration_type: integration
[ROVA](https://rova.nl) is a waste collection company that operates in the center and east of the Netherlands. This **ROVA** integration uses an unofficial [ROVA](https://rova.nl) API to allow you to get your waste collection schedule and integrate this into your Home Assistant installation.
-## Configuration
-
{% include integrations/config_flow.md %}
From 77ceff67db5def33fd68aac09270167a68a99d1d Mon Sep 17 00:00:00 2001
From: Bruno Henrique
Date: Sat, 30 Mar 2024 12:10:13 -0300
Subject: [PATCH 005/137] Adding UniFi WLAN regenerate password button (#32081)
* Adding UniFi WLAN Change Password Button
* Adding UniFi WLAN Change Password Button
* Adding UniFi WLAN Change Password Button
* Adding UniFi WLAN Regenerate Password Button
* Adding UniFi WLAN Regenerate Password Button
* Adding UniFi WLAN Regenerate Password Button
* Adding UniFi WLAN Regenerate Password Button
---
source/_integrations/unifi.markdown | 3 +++
1 file changed, 3 insertions(+)
diff --git a/source/_integrations/unifi.markdown b/source/_integrations/unifi.markdown
index 64bbe58f4a79..feb71560b6e0 100644
--- a/source/_integrations/unifi.markdown
+++ b/source/_integrations/unifi.markdown
@@ -72,6 +72,9 @@ Use the **Power cycle PoE** button entity to power cycle one specific PoE port t
Use the **Restart UniFi device** button entity to restart the entire UniFi device. In case the device is a PoE switch, the PoE supply is not affected.
+### WLAN regenerate password
+Use the **WLAN regenerate password** button entity to generate and apply a new password to the specified WLAN (Wireless Local Area Network). Use the **WLAN regenerate password** button entity to generate and apply a new password to the specified WLAN (Wireless Local Area Network). **It will be randomly generated with 20 characters, consisting of lowercase letters, uppercase letters, and digits.**
+
## 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 558eb85004ffc0c072801021dec217b2a2390b16 Mon Sep 17 00:00:00 2001
From: Bruno Henrique
Date: Sat, 30 Mar 2024 15:50:19 -0300
Subject: [PATCH 006/137] Adding UniFi WLAN Password sensor (#32078)
* Adding UniFi WLAN Password Sensor
* Adding UniFi WLAN Password Sensor
* Adding UniFi WLAN Password Sensor
* Adding UniFi WLAN Password Sensor
Co-authored-by: Robert Svensson
* Adding UniFi WLAN Password Sensor
---------
Co-authored-by: Robert Svensson
---
source/_integrations/unifi.markdown | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/source/_integrations/unifi.markdown b/source/_integrations/unifi.markdown
index feb71560b6e0..d970d1ec8d1d 100644
--- a/source/_integrations/unifi.markdown
+++ b/source/_integrations/unifi.markdown
@@ -155,6 +155,13 @@ Get entities reporting the general temperature of a UniFi Network device.
Get entities reporting the current state of a UniFi Network device.
+### WLAN password sensor
+
+Provides the current password for a specific WLAN. It allows users to access the password for various purposes, such as sharing with guests or configuring devices manually. As this exposes the password in clear text it is only recommended to utilize this in scenarios where the QR Code is not sufficient.
+
+- Entity is disabled by default.
+- This feature requires admin privileges.
+
## 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 a225b5175e9eea30e64861257297a9eb85765cbd Mon Sep 17 00:00:00 2001
From: wittypluck
Date: Sun, 31 Mar 2024 20:05:52 +0200
Subject: [PATCH 007/137] Add uptime sensor to Glances (#32050)
---
source/_integrations/glances.markdown | 1 +
1 file changed, 1 insertion(+)
diff --git a/source/_integrations/glances.markdown b/source/_integrations/glances.markdown
index 698ef3c3523b..48ea454d7bc7 100644
--- a/source/_integrations/glances.markdown
+++ b/source/_integrations/glances.markdown
@@ -58,5 +58,6 @@ Glances integration will add the following sensors if available in the platform:
- For each detected raid the following sensors will be created:
- raid_available: The number of available devices for the raid.
- raid_used: The number of devices used by the raid.
+- uptime: The server uptime.
Not all platforms are able to provide all metrics. For instance the cpu temp sensor requires installing and configuring `lmsensors` in Ubuntu, and may not be available at all in other platforms.
From 9f5436beb68bee72b240c67a5eef45368cef5378 Mon Sep 17 00:00:00 2001
From: Lenn <78048721+LennP@users.noreply.github.com>
Date: Tue, 2 Apr 2024 08:11:12 +0200
Subject: [PATCH 008/137] Add more info to Motionblinds BLE integration
(#32058)
* Add extra information for Motionblinds Bluetooth motors
* Fix Matter link
* Fix commas and period
* Fix spelling error
* Remove seller info
---
source/_integrations/motionblinds_ble.markdown | 13 +++++++------
1 file changed, 7 insertions(+), 6 deletions(-)
diff --git a/source/_integrations/motionblinds_ble.markdown b/source/_integrations/motionblinds_ble.markdown
index ccdaca3bfe86..e023e9d1516e 100644
--- a/source/_integrations/motionblinds_ble.markdown
+++ b/source/_integrations/motionblinds_ble.markdown
@@ -17,13 +17,14 @@ ha_platforms:
ha_integration_type: integration
---
-The Motionblinds BLE {% term integration %} adds support for [Motionblinds](https://motionblinds.com/) Bluetooth motors. Beware that this integration does not work with *Eve Motionblinds* motors. *Eve Motionblinds* can be added to Home Assistant using the [HomeKit Device](https://www.home-assistant.io/integrations/homekit_controller/) integration.
+This {% term integration %} adds support for [Motionblinds](https://motionblinds.com/) Bluetooth motors. Want to motorize your existing blinds? This can be done with Motionblinds motor CMD-03. Made-to-measure window coverings with Motionblinds are available through a worldwide reseller network.
+Beware that this integration does not work with Eve Motionblinds motors. Eve Motionblinds can be added to Home Assistant using the [HomeKit Device](https://www.home-assistant.io/integrations/homekit_controller/) integration or the [Matter](https://www.home-assistant.io/integrations/matter/) integration.
{% include integrations/config_flow.md %}
## Setup
-During the setup of a Motionblinds BLE device, you will be asked what kind of blind your Motionblind is. There are 8 different blind types:
+During the setup of a Motionblinds Bluetooth motor, you will be asked what kind of blind you have. There are 8 different blind types:
- **Roller blind**: has the ability to change position and speed.
- **Honeycomb blind**: has the ability to change position and speed.
@@ -32,7 +33,7 @@ During the setup of a Motionblinds BLE device, you will be asked what kind of bl
- **Venetian blind (tilt-only)**: has the ability to change tilt and speed.
- **Double Roller blind**: has the ability to change position, tilt, and speed.
- **Curtain blind**: has the ability to change position. May need to be calibrated if the end positions are lost, which can be done by using the open/close cover button or the set cover position slider. This will trigger a calibration which will first make the curtain find the end positions after which it will run to the position as indicated by the command that was given.
-- **Vertical blind**: has the ability to change position and tilt. May need to be calibrated if the end positions are lost, which has to be done using the Motionblinds BLE mobile app.
+- **Vertical blind**: has the ability to change position and tilt. May need to be calibrated if the end positions are lost, which must be done using the Motionblinds Bluetooth app.
## Entities
@@ -44,13 +45,13 @@ The following entities are available for a Motionblinds BLE device:
- Disconnect button: allows you to disconnect the blind.
- Favorite button: allows you to move the blind to the favorite position.
- [Select](https://www.home-assistant.io/integrations/select/) entities:
- - Speed select: allows you to change the speed of the motor to low, medium, or high. Available for all blinds except a curtain blind and a vertical blind.
+ - Speed select: allows you to change the speed of the motor to low, medium, or high. Available for all blinds except curtain blinds and vertical blinds.
## Services
-Since Motionblinds BLE motors require a Bluetooth connection to control them, Home Assistant does not get automatic updates of the motor's state by default. Therefore, you can use the [homeassistant.update_entity](https://www.home-assistant.io/docs/scripts/service-calls/#homeassistant-services) service on a Motionblinds BLE entity which will connect to your Motionblind and update the state of all entities belonging to the device. **However, be aware that doing so may impact battery life.**
+Since Motionblinds Bluetooth motors require a Bluetooth connection to control them, Home Assistant does not get automatic updates of the motor's state by default. Therefore, you can use the [homeassistant.update_entity](https://www.home-assistant.io/docs/scripts/service-calls/#homeassistant-services) service on any entity belonging to a Motionblinds Bluetooth device, which will connect to your Motionblinds Bluetooth motor and update the state of all entities belong to that device. However, be aware that doing so may impact battery life.
-This can also be automated using a YAML automation. For instance, the following automation connects to your Motionblind every 24 hours to update it's state in Home Assistant:
+This can also be automated using a YAML automation. For instance, the following automation connects to your Motionblind every 24 hours to update its state in Home Assistant:
```yaml
alias: Motionblinds BLE polling automation
From af648244c33cdd0311be894cf432efd07c84bd9c Mon Sep 17 00:00:00 2001
From: Thomas55555 <59625598+Thomas55555@users.noreply.github.com>
Date: Tue, 2 Apr 2024 08:50:45 +0200
Subject: [PATCH 009/137] Add error sensor to Husqvarna Automower (#31856)
* Add error sensor
* Add restricted reason and some examples
---------
Co-authored-by: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com>
---
source/_integrations/husqvarna_automower.markdown | 2 ++
1 file changed, 2 insertions(+)
diff --git a/source/_integrations/husqvarna_automower.markdown b/source/_integrations/husqvarna_automower.markdown
index da4ebaf9f757..ecb3b2a1a222 100644
--- a/source/_integrations/husqvarna_automower.markdown
+++ b/source/_integrations/husqvarna_automower.markdown
@@ -118,6 +118,8 @@ The integration will create the following sensors:
- Battery level
- Cutting blade usage time (if available)
+- Error. For example: *Mower tilted*, *outside geofence*.
+- Restricted reason. For example: *Week schedule*, *frost*, or *daily limit*.
- Mode
- Next start
- Number of charging cycles
From 1a129085bdd14930eb6b15726df04158c6f4f0c0 Mon Sep 17 00:00:00 2001
From: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com>
Date: Tue, 2 Apr 2024 09:17:55 +0200
Subject: [PATCH 010/137] Settings: add labels to areas and zones menu (#32060)
* Settings: add labels to areas and zones menu
* Fix typo
---
source/_integrations/zone.markdown | 2 +-
source/voice_control/aliases.markdown | 4 ++--
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/source/_integrations/zone.markdown b/source/_integrations/zone.markdown
index 10e7575af73b..8d7f7d067981 100644
--- a/source/_integrations/zone.markdown
+++ b/source/_integrations/zone.markdown
@@ -14,7 +14,7 @@ ha_integration_type: system
Zones allow you to specify certain regions on earth (for now). When a device tracker sees a device to be within a zone, the state will take the name from the zone. Zones can also be used as a [trigger](/docs/automation/trigger#zone-trigger) or [condition](/docs/scripts/conditions/#zone-condition) inside automation setups.
-Zones can be added and managed through the user interface at **{% my zones title="Settings -> Areas & Zones" %}**.
+Zones can be added and managed through the user interface at {% my zones title="**Settings** > **Areas, labels & zones**" %}.
![Screenshot of the UI for adding or editing a zone](/images/integrations/zone/zone_edit_ui.png)
diff --git a/source/voice_control/aliases.markdown b/source/voice_control/aliases.markdown
index 73d8bface7d8..5ae4b6568323 100644
--- a/source/voice_control/aliases.markdown
+++ b/source/voice_control/aliases.markdown
@@ -18,7 +18,7 @@ There are multliple ways to add an alias of an entity:
## Adding an alias of an area
-1. To add an alias for an area, go to **Settings** > **Areas & zones**.
+1. To add an alias for an area, go to {% my zones title="**Settings** > **Areas, labels & zones**" %}.
2. Select the area of interest.
3. In the three-dot menu, select **Area settings**.
-4. Select **Add alias** and enter the alias you want to use for that area.
\ No newline at end of file
+4. Select **Add alias** and enter the alias you want to use for that area.
From 82762d63da0b2066d7884936ba8edb1ba90dda3b Mon Sep 17 00:00:00 2001
From: Franck Nijhof
Date: Tue, 2 Apr 2024 09:29:37 +0200
Subject: [PATCH 011/137] Add floor template functions (#32121)
* Add floor template functions
* Add missing full stop
---
.../_docs/configuration/templating.markdown | 45 +++++++++++++++++++
1 file changed, 45 insertions(+)
diff --git a/source/_docs/configuration/templating.markdown b/source/_docs/configuration/templating.markdown
index f2bd16b9b7a5..96a664074293 100644
--- a/source/_docs/configuration/templating.markdown
+++ b/source/_docs/configuration/templating.markdown
@@ -458,6 +458,51 @@ The same thing can also be expressed as a test:
{% endraw %}
+### Floors
+
+- `floors()` returns the full list of floor IDs.
+- `floor_id(lookup_value)` returns the floor ID for a given device ID, entity ID, area ID, or area name. Can also be used as a filter.
+- `floor_name(lookup_value)` returns the floor name for a given device ID, entity ID, area ID, or floor ID. Can also be used as a filter.
+- `floor_areas(floor_name_or_id)` returns the list of area IDs tied to a given floor ID or name. Can also be used as a filter.
+
+#### Floors examples
+
+{% raw %}
+
+```text
+{{ floor() }} # ['floor_id']
+```
+
+```text
+{{ floor_id('First floor') }} # 'first_floor'
+```
+
+```text
+{{ floor_id('my_device_id') }} # 'second_floor'
+```
+
+```text
+{{ floor_id('sensor.sony') }} # 'first_floor'
+```
+
+```text
+{{ floor_name('first_floor') }} # 'First floor'
+```
+
+```text
+{{ floor_name('my_device_id') }} # 'Second floor'
+```
+
+```text
+{{ floor_name('sensor.sony') }} # 'First floor'
+```
+
+```text
+{{ floor_areas('first_floor') }} # ['living_room', 'kitchen']
+```
+
+{% endraw %}
+
### Areas
- `areas()` returns the full list of area IDs
From 439b5f430be439f629257bc969f18a74d029ca33 Mon Sep 17 00:00:00 2001
From: Franck Nijhof
Date: Tue, 2 Apr 2024 09:54:09 +0200
Subject: [PATCH 012/137] Add label template functions (#32122)
* Add label template functions
* tiny tweaks
---------
Co-authored-by: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com>
---
.../_docs/configuration/templating.markdown | 53 +++++++++++++++++++
1 file changed, 53 insertions(+)
diff --git a/source/_docs/configuration/templating.markdown b/source/_docs/configuration/templating.markdown
index 96a664074293..7117294db667 100644
--- a/source/_docs/configuration/templating.markdown
+++ b/source/_docs/configuration/templating.markdown
@@ -574,6 +574,59 @@ If there is more than one entry with the same title, the entities for all the ma
{% endraw %}
+### Labels
+
+- `labels()` returns the full list of label IDs, or those for a given area ID, device ID, or entity ID.
+- `label_id(lookup_value)` returns the label ID for a given label name.
+- `label_name(lookup_value)` returns the label name for a given label ID.
+- `label_areas(label_name_or_id)` returns the list of area IDs tied to a given label ID or name.
+- `label_devices(label_name_or_id)` returns the list of device IDs tied to a given label ID or name.
+- `label_entities(label_name_or_id)` returns the list of entity IDs tied to a given label ID or name.
+
+Each of the label template functions can also be used as a filter.
+
+#### Labels examples
+
+{% raw %}
+
+```text
+{{ labels() }} # ['christmas_decorations', 'energy_saver', 'security']
+```
+
+```text
+{{ labels("living_room") }} # ['christmas_decorations', 'energy_saver']
+```
+
+```text
+{{ labels("my_device_id") }} # ['security']
+```
+
+```text
+{{ labels("light.christmas_tree") }} # ['christmas_decorations']
+```
+
+```text
+{{ label_id('Energy saver') }} # 'energy_saver'
+```
+
+```text
+{{ label_name('energy_saver') }} # 'Energy saver'
+```
+
+```text
+{{ label_areas('security') }} # ['driveway', 'garden', 'porch']
+```
+
+```text
+{{ label_devices('energy_saver') }} # ['deadbeefdeadbeefdeadbeefdeadbeef']
+```
+
+```text
+{{ label_entities('security') }} # ['camera.driveway', 'binary_sensor.motion_garden', 'camera.porch']
+```
+
+{% endraw %}
+
### Issues
- `issues()` returns all open issues as a mapping of (domain, issue_id) tuples to the issue object.
From d75ffe72c1817e94543114e31f59ae93ba58610d Mon Sep 17 00:00:00 2001
From: Steven B <51370195+sdb9696@users.noreply.github.com>
Date: Tue, 2 Apr 2024 09:48:09 +0100
Subject: [PATCH 013/137] Update ring quality scale to silver (#31849)
---
source/_integrations/ring.markdown | 1 +
1 file changed, 1 insertion(+)
diff --git a/source/_integrations/ring.markdown b/source/_integrations/ring.markdown
index 3a855f56024b..504d469ecf85 100644
--- a/source/_integrations/ring.markdown
+++ b/source/_integrations/ring.markdown
@@ -13,6 +13,7 @@ ha_release: 0.42
ha_iot_class: Cloud Polling
ha_config_flow: true
ha_domain: ring
+ha_quality_scale: silver
ha_dhcp: true
ha_platforms:
- binary_sensor
From 36f205eec25124ddce97cf6d7dabbf9793d07e1b Mon Sep 17 00:00:00 2001
From: Franck Nijhof
Date: Tue, 2 Apr 2024 13:56:49 +0200
Subject: [PATCH 014/137] Add floor selector (#32124)
* Add floor selector
* Update source/_docs/blueprint/selectors.markdown
Co-authored-by: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com>
* Update source/_docs/blueprint/selectors.markdown
Co-authored-by: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com>
* Update source/_docs/blueprint/selectors.markdown
Co-authored-by: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com>
* Update source/_docs/blueprint/selectors.markdown
Co-authored-by: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com>
* Update source/_docs/blueprint/selectors.markdown
Co-authored-by: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com>
* Update source/_docs/blueprint/selectors.markdown
Co-authored-by: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com>
* Update source/_docs/blueprint/selectors.markdown
Co-authored-by: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com>
* Update source/_docs/blueprint/selectors.markdown
Co-authored-by: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com>
* Update source/_docs/blueprint/selectors.markdown
Co-authored-by: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com>
* Update source/_docs/blueprint/selectors.markdown
Co-authored-by: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com>
* Update source/_docs/blueprint/selectors.markdown
* Update source/_docs/blueprint/selectors.markdown
Co-authored-by: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com>
* Update source/_docs/blueprint/selectors.markdown
Co-authored-by: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com>
---------
Co-authored-by: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com>
---
source/_docs/blueprint/selectors.markdown | 151 ++++++++++++++++++--
source/images/blueprints/selector-floor.png | Bin 0 -> 20550 bytes
2 files changed, 141 insertions(+), 10 deletions(-)
create mode 100644 source/images/blueprints/selector-floor.png
diff --git a/source/_docs/blueprint/selectors.markdown b/source/_docs/blueprint/selectors.markdown
index 4a9c030b790c..f636b3029895 100644
--- a/source/_docs/blueprint/selectors.markdown
+++ b/source/_docs/blueprint/selectors.markdown
@@ -18,7 +18,6 @@ The following selectors are currently available:
- [Action selector](#action-selector)
- [Add-on selector](#add-on-selector)
- [Area selector](#area-selector)
- - [Example area selectors](#example-area-selectors)
- [Attribute selector](#attribute-selector)
- [Assist pipeline selector](#assist-pipeline-selector)
- [Backup location selector](#backup-location-selector)
@@ -32,23 +31,20 @@ The following selectors are currently available:
- [Date selector](#date-selector)
- [Date \& time selector](#date--time-selector)
- [Device selector](#device-selector)
- - [Example device selector](#example-device-selector)
- [Duration selector](#duration-selector)
- [Entity selector](#entity-selector)
- - [Example entity selector](#example-entity-selector)
+- [Floor selector](#floor-selector)
- [Icon selector](#icon-selector)
- [Language selector](#language-selector)
- [Location selector](#location-selector)
- [Media selector](#media-selector)
- [Number selector](#number-selector)
- - [Example number selectors](#example-number-selectors)
- [Object selector](#object-selector)
- [QR code selector](#qr-code-selector)
- [RGB color selector](#rgb-color-selector)
- [Select selector](#select-selector)
- [State selector](#state-selector)
- [Target selector](#target-selector)
- - [Example target selectors](#example-target-selectors)
- [Template selector](#template-selector)
- [Text selector](#text-selector)
- [Theme selector](#theme-selector)
@@ -211,7 +207,7 @@ living_room
- kitchen
```
-### Example area selectors
+### Example area selectors
An example area selector only shows areas that provide one or more lights or
switches provided by the [ZHA](/integrations/zha) integration.
@@ -581,7 +577,7 @@ faadde5365842003e8ca55267fe9d1f4
- 3da77cb054352848b9544d40e19de562
```
-### Example device selector
+### Example device selector
An example entity selector that, will only show devices that are:
@@ -717,7 +713,7 @@ light.living_room
- light.kitchen
```
-### Example entity selector
+### Example entity selector
An example entity selector that, will only show entities that are:
@@ -737,6 +733,141 @@ entity:
device_class: motion
```
+## Floor selector
+
+The floor selector shows a floor finder that can pick
+floors based on the selector configuration. The value of the input will be the
+floor ID. If `multiple` is set to `true`, the value is a list of floor IDs.
+
+A floor selector can filter the list of floors based on the properties of the
+devices and entities assigned to the areas on those floors.
+For example, the floor list could be limited to floors with entities
+provided by the [ZHA](/integrations/zha) integration, based on the areas they are in.
+
+In its most basic form, this selector doesn't require any options.
+It will show all floors.
+
+![Screenshot of a floor selector](/images/blueprints/selector-floor.png)
+
+```yaml
+floor:
+```
+
+{% configuration floor %}
+device:
+ description: >
+ When device options are provided, the list of floors is filtered by floors
+ that have at least one device matching the given conditions. Can be
+ either an object or a list of objects.
+ type: list
+ required: false
+ keys:
+ integration:
+ description: >
+ Can be set to an integration domain. Limits the list of floors that
+ have devices by this integration domain. For example,
+ [`zha`](/integrations/zha).
+ type: string
+ required: false
+ manufacturer:
+ description: >
+ When set, the list only includes floors that have devices by the set
+ manufacturer name.
+ type: string
+ required: false
+ model:
+ description: >
+ When set, the list only includes floors that have devices which have
+ the set model.
+ type: string
+ required: false
+entity:
+ description: >
+ When entity options are provided, the list only includes floors
+ that at least have one entity that matches the given conditions. Can be
+ either an object or a list of objects.
+ type: list
+ required: false
+ keys:
+ integration:
+ description: >
+ Can be set to an integration domain. Limits the list of floors that
+ have entities by the set integration domain. For example,
+ [`zha`](/integrations/zha).
+ type: string
+ required: false
+ domain:
+ description: >
+ When set, the list only includes floors that have entities of certain domains,
+ for example, [`light`](/integrations/light) or
+ [`binary_sensor`](/integrations/binary_sensor). Can be either a string
+ with a single domain, or a list of string domains to limit the selection to.
+ type: [string, list]
+ required: false
+ device_class:
+ description: >
+ When set, the list only includes floors that have entities with a certain
+ device class, for example, `motion` or `window`. Can be either a string
+ with a single device_class, or a list of string device_class to limit
+ the selection.
+ type: [device_class, list]
+ required: false
+ supported_features:
+ description: >
+ When set, the list only includes floors that have entities with a certain
+ supported feature, for example, `light.LightEntityFeature.TRANSITION`
+ or `climate.ClimateEntityFeature.TARGET_TEMPERATURE`. Should be a list
+ of features.
+ type: list
+ required: false
+multiple:
+ description: >
+ Allows selecting multiple floors. If set to `true`, the resulting value of
+ this selector will be a list instead of a single string value.
+ type: boolean
+ default: false
+ required: false
+{% endconfiguration %}
+
+The output of this selector is the floor ID, or (in case `multiple` is set to
+`true`) a list of floor IDs.
+
+```yaml
+# Example floor selector output result, when multiple is set to false
+first_floor
+
+# Example floor selector output result, when multiple is set to true
+- first_floor
+- second_floor
+```
+
+### Example floor selectors
+
+An example floor selector only shows floors that have one or more lights or
+switches provided by the [ZHA](/integrations/zha) integration.
+
+```yaml
+floor:
+ entity:
+ integration: zha
+ domain:
+ - light
+ - switch
+```
+
+Another example using the floor selector, which only shows floors that
+have one or more remote controls provided by the [deCONZ](/integrations/deconz)
+integration. Multiple floors can be selected.
+
+```yaml
+floor:
+ multiple: true
+ device:
+ - integration: deconz
+ manufacturer: IKEA of Sweden
+ model: TRADFRI remote control
+```
+
## Icon selector
The icon selector shows an icon picker that allows the user to select an icon.
@@ -910,7 +1041,7 @@ mode:
The output of this selector is a number, for example: `42`
-### Example number selectors
+### Example number selectors
An example number selector that allows a user a percentage, directly in a
regular number input box.
@@ -1209,7 +1340,7 @@ action:
-### Example target selectors
+### Example target selectors
An example target selector that only shows targets that at least provide one
or more lights, provided by the [ZHA](/integrations/zha) integration.
diff --git a/source/images/blueprints/selector-floor.png b/source/images/blueprints/selector-floor.png
new file mode 100644
index 0000000000000000000000000000000000000000..7c345440b0df3c9b1d934267b5c315c6c0bccebf
GIT binary patch
literal 20550
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
literal 0
HcmV?d00001
From 6c0e9b5e8c99887b70501a88aaa3949b70e4b9c6 Mon Sep 17 00:00:00 2001
From: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com>
Date: Tue, 2 Apr 2024 14:06:39 +0200
Subject: [PATCH 015/137] Map dashboard update to reflect current software
(#32126)
---
source/_dashboards/map.markdown | 5 ++--
source/_integrations/default_config.markdown | 1 -
source/_integrations/map.markdown | 27 ------------------
source/_redirects | 1 +
source/dashboards/dashboards.markdown | 14 +++++----
.../presence-detection.markdown | 5 ++--
.../images/dashboards/dashboard-manage-01.png | Bin 62349 -> 57138 bytes
7 files changed, 15 insertions(+), 38 deletions(-)
delete mode 100644 source/_integrations/map.markdown
diff --git a/source/_dashboards/map.markdown b/source/_dashboards/map.markdown
index 9370e83431f9..3ee49dcb992e 100644
--- a/source/_dashboards/map.markdown
+++ b/source/_dashboards/map.markdown
@@ -5,7 +5,7 @@ sidebar_label: Map
description: "The map card that allows you to display entities on a map"
---
-The map card that allows you to display entities on a map
+The map card that allows you to display entities on a map. This card is used on the [Map dashboard](/dashboards/dashboards/#map-dashboard), which is one of the default dashboards.
@@ -138,4 +138,5 @@ hours_to_show: 48
## Related topics
- [Themes](/integrations/frontend/)
-- [Dashboard cards](/dashboards/cards/)
\ No newline at end of file
+- [Dashboard cards](/dashboards/cards/)
+- [Map dashboard](/dashboards/dashboards/#map-dashboard)
\ No newline at end of file
diff --git a/source/_integrations/default_config.markdown b/source/_integrations/default_config.markdown
index 61be61b50be6..c579916b7d70 100644
--- a/source/_integrations/default_config.markdown
+++ b/source/_integrations/default_config.markdown
@@ -25,7 +25,6 @@ This {% term integration %} is a meta-component and configures a default set of
- [Home Assistant Cloud](/integrations/cloud/) (`cloud`)
- [Image upload](/integrations/image_upload/) (`image_upload`)
- [Logbook](/integrations/logbook/) (`logbook`)
-- [Map](/integrations/map/) (`map`)
- [Media source](/integrations/media_source/) (`media_source`)
- [Mobile app support](/integrations/mobile_app/) (`mobile_app`)
- [My Home Assistant](/integrations/my/) (`my`)
diff --git a/source/_integrations/map.markdown b/source/_integrations/map.markdown
deleted file mode 100644
index 3702fe90909a..000000000000
--- a/source/_integrations/map.markdown
+++ /dev/null
@@ -1,27 +0,0 @@
----
-title: Map
-description: Offers a map to show tracked devices.
-ha_category:
- - Other
-ha_release: 0.56
-ha_quality_scale: internal
-ha_domain: map
-ha_integration_type: system
----
-
-This offers a map on the frontend to display the location of tracked devices. To set up tracked devices, look at the [device tracker](/integrations/device_tracker/) documentation. This integration is by default enabled, unless you've disabled or removed the [`default_config:`](/integrations/default_config/) line from your configuration. If that is the case, the following example shows you how to enable this integration manually:
-
-```yaml
-# Example configuration.yaml entry
-map:
-```
-
-
-Devices that are currently at home won't show on the map.
-
-
-
-
-This map always shows the location of all tracked devices. If you want to hide certain entities, you should look into the [Map Card](/dashboards/map/).
-
-
diff --git a/source/_redirects b/source/_redirects
index e0320acb7077..a66bddc685cb 100644
--- a/source/_redirects
+++ b/source/_redirects
@@ -467,6 +467,7 @@ layout: null
/docs/tools/credstash/ /docs/configuration/secrets
/docs/scripts/editor/ /docs/scripts
/getting-started/devices /integrations
+/integrations/map /dashboards/map/
# Blog
/blog/2019/05/29/release-94 /blog/2019/06/05/release-94
diff --git a/source/dashboards/dashboards.markdown b/source/dashboards/dashboards.markdown
index abcb82ff328a..bbd9f8928604 100644
--- a/source/dashboards/dashboards.markdown
+++ b/source/dashboards/dashboards.markdown
@@ -18,16 +18,20 @@ Home Assistant ships with some dashboards out of the box:
- Overview
- Energy
-- Map
+- [Map](#map-dashboard)
- Logbook
- History
- To-do lists
-Not all of the predefined dashboards are listed under {% my lovelace_dashboards title="**Settings** > **Dashboards**" %}. **Map**, **Logbook**, and **History**, are powered by their respective integrations.
+Not all of the predefined dashboards are listed under {% my lovelace_dashboards title="**Settings** > **Dashboards**" %}. The **Logbook** and **History** dashboards are powered by their respective integrations.
### Map dashboard
-The predefined **Map** dashboard is powered by the [Map integration](/integrations/map/). If you see a [person](/integrations/person/) on the map, it means you have connected a device that allows [presence detection](/integrations/#presence-detection). This is the case for example if you have the [Home Assistant Companion App](https://companion.home-assistant.io/) on your phone and allowed location tracking.
+The predefined **Map** dashboard is populated by the [Map card](/dashboards/map/). You can edit this dashboard like any other dashboard. For example, you can edit the [view](/dashboards/views/) to use the **Sidebar** instead of the default **Panel** view type if you like.
+
+#### Maps and presence detection
+
+If you see a [person](/integrations/person/) on the map, it means you have connected a device that allows [presence detection](/integrations/#presence-detection). This is the case for example if you have the [Home Assistant Companion App](https://companion.home-assistant.io/) on your phone and allowed location tracking.
### Logbook dashboard
@@ -255,6 +259,6 @@ views:
## Related topics
- [Logbook integration](/integrations/logbook/)
-- [Map integration](/integrations/map/)
- [History integration](/integrations/history/)
-- [To-do list integration](/integrations/todo/)
\ No newline at end of file
+- [To-do list integration](/integrations/todo/)
+- [Views](/dashboards/views/)
\ No newline at end of file
diff --git a/source/getting-started/presence-detection.markdown b/source/getting-started/presence-detection.markdown
index 71eac4875eba..3d1f98eb8e65 100644
--- a/source/getting-started/presence-detection.markdown
+++ b/source/getting-started/presence-detection.markdown
@@ -18,14 +18,14 @@ It's also possible to run an app on your phone to provide detailed location info
During the setup of Home Assistant Companion on your mobile device, the app will ask for permission to allow the device's location to be provided to Home Assistant. Allowing this will create a `device_tracker` entity for that device which can be used in automations and conditions.
-
### Zones
+
![Map with zones](/images/screenshots/badges-zone.png)
{% term Zones %} allow you to name areas on a map. These areas can then be used to name the location a tracked user is, or use entering/leaving a zone as an automation {% term trigger %} or {% term condition %}. See [Zones integration](/integrations/zone/) page for more details like creating zones.
-The map view will hide all devices that are home.
+The map dashboard will hide all devices that are home.