From 9725635dab9c44b12d31bef810b455ba14b370d7 Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Tue, 2 Apr 2024 13:56:49 +0200 Subject: [PATCH] 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 4a9c030b790..f636b302989 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