From fa61ff16c9d8fb62a2feabd3535c9764caf7ef9a Mon Sep 17 00:00:00 2001
From: Bram Kragten
Date: Thu, 1 Aug 2024 13:50:43 +0200
Subject: [PATCH 01/63] Dashboard actions: Fix perform_action key (#34068)
* Dashboard actions: Fix perform_action key
* Update actions.markdown
* Update actions.markdown
---
source/dashboards/actions.markdown | 40 +++++++++++++++++++-----------
1 file changed, 25 insertions(+), 15 deletions(-)
diff --git a/source/dashboards/actions.markdown b/source/dashboards/actions.markdown
index 9f0f27fb3a3..9fbcac53d77 100644
--- a/source/dashboards/actions.markdown
+++ b/source/dashboards/actions.markdown
@@ -71,7 +71,7 @@ tap_action:
description: "Path to navigate to (e.g., `https://www.home-assistant.io`) when the `action` is defined as `url`"
type: string
default: none
- perform-action:
+ perform_action:
required: false
description: "Action to perform (e.g., `media_player.media_play_pause`) when the `action` is defined as `perform-action`"
type: string
@@ -120,7 +120,7 @@ hold_action:
keys:
action:
required: true
- description: "Action to perform (`more-info`, `toggle`, `call-service`, `navigate`, `url`, `assist`, `none`)"
+ description: "Action to perform (`more-info`, `toggle`, `perform-action`, `navigate`, `url`, `assist`, `none`)"
type: string
default: "`more-info`"
navigation_path:
@@ -138,14 +138,19 @@ hold_action:
description: "Path to navigate to (e.g., `https://www.home-assistant.io`) when the `action` is defined as `url`"
type: string
default: none
- service:
+ perform_action:
required: false
- description: "Service to call (e.g., `media_player.media_play_pause`) when the `action` is defined as `call-service`"
+ description: "Action to perform (e.g., `media_player.media_play_pause`) when the `action` is defined as `perform-action`"
type: string
default: none
data:
required: false
- description: "Service data to include (e.g., `entity_id: media_player.bedroom`) when the `action` is defined as `call-service`"
+ description: "Action data to include (e.g., `brightness: 100`) when the `action` is defined as `perform-action`"
+ type: string
+ default: none
+ target:
+ required: false
+ description: "Action target to user (e.g., `entity_id: media_player.bedroom`) when the `action` is defined as `perform-action`"
type: string
default: none
confirmation:
@@ -182,7 +187,7 @@ double_tap_action:
keys:
action:
required: true
- description: "Action to perform (`more-info`, `toggle`, `call-service`, `navigate`, `url`, `assist`, `none`)"
+ description: "Action to perform (`more-info`, `toggle`, `perform-action`, `navigate`, `url`, `assist`, `none`)"
type: string
default: "`more-info`"
navigation_path:
@@ -200,14 +205,19 @@ double_tap_action:
description: "Path to navigate to (e.g., `https://www.home-assistant.io`) when the `action` is defined as `url`"
type: string
default: none
- service:
+ perform_action:
required: false
- description: "Service to call (e.g., `media_player.media_play_pause`) when the `action` is defined as `call-service`"
+ description: "Action to perform (e.g., `media_player.media_play_pause`) when the `action` is defined as `perform-action`"
type: string
default: none
data:
required: false
- description: "Service data to include (e.g., `entity_id: media_player.bedroom`) when the `action` is defined as `call-service`"
+ description: "Action data to include (e.g., `brightness: 100`) when the `action` is defined as `perform-action`"
+ type: string
+ default: none
+ target:
+ required: false
+ description: "Action target to user (e.g., `entity_id: media_player.bedroom`) when the `action` is defined as `perform-action`"
type: string
default: none
confirmation:
@@ -233,14 +243,14 @@ If you define confirmation as an object instead of boolean, you can add more cus
```yaml
double_tap_action:
- action: call-service
+ action: perform-action
confirmation:
text: Are you sure you want to restart?
- service: script.restart
+ perform_action: script.restart
hold_action:
- action: call-service
+ action: perform-action
confirmation: true
- service: script.do_other_thing
+ perform_action: script.do_other_thing
```
{% configuration confirmation%}
@@ -265,13 +275,13 @@ user:
```yaml
double_tap_action:
- action: call-service
+ action: perform-action
confirmation:
text: Are you sure you want to restart?
exemptions:
- user: x9405b8c64ee49bb88c42000e0a9dfa8
- user: 88bcfbdc39155d16c3b2d09cbf8b0367
- service: script.restart
+ perform_action: script.restart
```
## Examples
From 9e0d048e42d953426fe5138f468f20a9a74538b7 Mon Sep 17 00:00:00 2001
From: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com>
Date: Fri, 2 Aug 2024 12:21:56 +0200
Subject: [PATCH 02/63] YAML examples: rename 'service' to 'action' (#34064)
---
source/_dashboards/button.markdown | 4 ++--
source/_dashboards/entities.markdown | 8 ++++----
source/_dashboards/picture-entity.markdown | 4 ++--
source/_dashboards/picture-glance.markdown | 20 ++++++++++----------
source/_dashboards/picture.markdown | 4 ++--
source/_includes/installation/container.md | 2 +-
6 files changed, 21 insertions(+), 21 deletions(-)
diff --git a/source/_dashboards/button.markdown b/source/_dashboards/button.markdown
index 7e84aca94b5..19ebda8313e 100644
--- a/source/_dashboards/button.markdown
+++ b/source/_dashboards/button.markdown
@@ -140,8 +140,8 @@ type: button
name: Turn Off Lights
show_state: false
tap_action:
- action: call-service
- service: script.turn_on
+ action: perform-action
+ perform_action: script.turn_on
data:
entity_id: script.turn_off_lights
```
diff --git a/source/_dashboards/entities.markdown b/source/_dashboards/entities.markdown
index 98cc7056db5..6185487a423 100644
--- a/source/_dashboards/entities.markdown
+++ b/source/_dashboards/entities.markdown
@@ -426,8 +426,8 @@ entities:
name: Bed light transition
action_name: Toggle light
tap_action:
- action: call-service
- service: light.toggle
+ action: perform-action
+ perform_action: light.toggle
data:
entity_id: light.bed_light
transition: 10
@@ -458,8 +458,8 @@ entities:
name: Power cycle LibreELEC
icon: mdi:power-cycle
tap_action:
- action: call-service
+ action: perform-action
confirmation:
text: Are you sure you want to restart?
- service: script.libreelec_power_cycle
+ perform_action: script.libreelec_power_cycle
```
diff --git a/source/_dashboards/picture-entity.markdown b/source/_dashboards/picture-entity.markdown
index f090bf77947..afdc03003e4 100644
--- a/source/_dashboards/picture-entity.markdown
+++ b/source/_dashboards/picture-entity.markdown
@@ -135,8 +135,8 @@ type: picture-entity
entity: camera.backdoor
camera_view: live
tap_action:
- action: call-service
- service: camera.snapshot
+ action: perform-action
+ perform_action: camera.snapshot
data:
entity_id: camera.backdoor
filename: '/shared/backdoor-{{ now().strftime("%Y-%m-%d-%H%M%S") }}.jpg'
diff --git a/source/_dashboards/picture-glance.markdown b/source/_dashboards/picture-glance.markdown
index a81ec742141..c4c73e008d7 100644
--- a/source/_dashboards/picture-glance.markdown
+++ b/source/_dashboards/picture-glance.markdown
@@ -197,35 +197,35 @@ If your camera supports PTZ (can be mov
- entity: button.camera1_ptz_left
icon: mdi:pan-left
tap_action:
- action: call-service
- service: button.press
+ action: perform-action
+ perform_action: button.press
data:
entity_id: button.camera1_ptz_left
- entity: button.camera1_ptz_right
icon: mdi:pan-right
tap_action:
- action: call-service
- service: button.press
+ action: perform-action
+ perform_action: button.press
data:
entity_id: button.camera1_ptz_right
- entity: button.camera1_ptz_up
icon: mdi:pan-up
tap_action:
- action: call-service
- service: button.press
+ action: perform-action
+ perform_action: button.press
data:
entity_id: button.camera1_ptz_up
- entity: button.camera1_ptz_down
icon: mdi:pan-down
tap_action:
- action: call-service
- service: button.press
+ action: perform-action
+ perform_action: button.press
data:
entity_id: button.camera1_ptz_down
camera_image: camera.camera1_sub
tap_action:
- action: call-service
- service: light.toggle
+ action: perform-action
+ perform_action: light.toggle
target:
entity_id: light.philips_929003052501_01_huelight
```
diff --git a/source/_dashboards/picture.markdown b/source/_dashboards/picture.markdown
index 015e19ed515..25770bf6605 100644
--- a/source/_dashboards/picture.markdown
+++ b/source/_dashboards/picture.markdown
@@ -80,8 +80,8 @@ Toggle entity using an action:
type: picture
image: /local/light.png
tap_action:
- action: call-service
- service: light.toggle
+ action: perform-action
+ perform_action: light.toggle
data:
entity_id: light.ceiling_lights
```
diff --git a/source/_includes/installation/container.md b/source/_includes/installation/container.md
index 40a1cbb6487..0304fc4f4f2 100644
--- a/source/_includes/installation/container.md
+++ b/source/_includes/installation/container.md
@@ -41,7 +41,7 @@ Once the Home Assistant Container is running Home Assistant should be accessible
If you change the configuration, you have to restart the server. To do that you have 3 options.
1. In your Home Assistant UI, go to the **Settings** > **System** and click the **Restart** button.
-2. You can go to the **Developer Tools** > **Actions**, select the service `homeassistant.restart` and select **Perform action**.
+2. You can go to the **Developer Tools** > **Actions**, select `homeassistant.restart` and select **Perform action**.
3. Restart it from a terminal.
{% tabbed_block %}
From 943046de5a0caaa2e4d068cb588d66f9473072f6 Mon Sep 17 00:00:00 2001
From: Matthias Alphart
Date: Fri, 2 Aug 2024 12:56:14 +0200
Subject: [PATCH 03/63] Use new mode values for KNX climate (#34080)
---
source/_integrations/knx.markdown | 26 +++++++++++++-------------
1 file changed, 13 insertions(+), 13 deletions(-)
diff --git a/source/_integrations/knx.markdown b/source/_integrations/knx.markdown
index 4569eb6dd83..37266f726dc 100644
--- a/source/_integrations/knx.markdown
+++ b/source/_integrations/knx.markdown
@@ -796,20 +796,20 @@ The following values are valid for the `heat_cool_address` and the `heat_cool_st
The following values are valid for the Home Assistant [Climate](/integrations/climate/) `hvac_mode` attribute. Supported values for your KNX thermostats can be specified via `controller_modes` configuration variable:
-- `Off` (maps internally to `HVAC_MODE_OFF` within Home Assistant)
-- `Auto` (maps internally to `HVAC_MODE_AUTO` within Home Assistant)
-- `Heat` (maps internally to `HVAC_MODE_HEAT` within Home Assistant)
-- `Cool` (maps internally to `HVAC_MODE_COOL` within Home Assistant)
-- `Fan only` (maps internally to `HVAC_MODE_FAN_ONLY` within Home Assistant)
-- `Dry` (maps internally to `HVAC_MODE_DRY` within Home Assistant)
+- `off` (maps internally to `HVAC_MODE_OFF` within Home Assistant)
+- `auto` (maps internally to `HVAC_MODE_AUTO` within Home Assistant)
+- `heat` (maps internally to `HVAC_MODE_HEAT` within Home Assistant)
+- `cool` (maps internally to `HVAC_MODE_COOL` within Home Assistant)
+- `fan_only` (maps internally to `HVAC_MODE_FAN_ONLY` within Home Assistant)
+- `dehumidification` (maps internally to `HVAC_MODE_DRY` within Home Assistant)
The following presets are valid for the Home Assistant [Climate](/integrations/climate/) `preset_mode` attribute. Supported values for your KNX thermostats can be specified via `operation_modes` configuration variable:
-- `Auto` (maps to `none` of the Home Assistant [Climate](/integrations/climate/) `preset_mode` attribute)
-- `Comfort` (maps to `comfort` of the Home Assistant [Climate](/integrations/climate/) `preset_mode` attribute)
-- `Standby` (maps to `away` of the Home Assistant [Climate](/integrations/climate/) `preset_mode` attribute)
-- `Night` (maps to `sleep` of the Home Assistant [Climate](/integrations/climate/) `preset_mode` attribute)
-- `Frost Protection` (maps to `eco` of the Home Assistant [Climate](/integrations/climate/) `preset_mode` attribute)
+- `auto` (maps to `none` of the Home Assistant [Climate](/integrations/climate/) `preset_mode` attribute)
+- `comfort` (maps to `comfort` of the Home Assistant [Climate](/integrations/climate/) `preset_mode` attribute)
+- `standby` (maps to `away` of the Home Assistant [Climate](/integrations/climate/) `preset_mode` attribute)
+- `economy` (maps to `sleep` of the Home Assistant [Climate](/integrations/climate/) `preset_mode` attribute)
+- `building_protection` (maps to `eco` of the Home Assistant [Climate](/integrations/climate/) `preset_mode` attribute)
{% configuration %}
name:
@@ -866,7 +866,7 @@ command_value_state_address:
required: false
type: [string, list]
operation_mode_address:
- description: KNX address for setting operation mode (Frost protection/night/comfort). *DPT 20.102*
+ description: KNX address for setting operation mode (auto / building protection / economy / standby / comfort). *DPT 20.102*
required: false
type: [string, list]
operation_mode_state_address:
@@ -902,7 +902,7 @@ operation_mode_frost_protection_address:
required: false
type: [string, list]
operation_mode_night_address:
- description: KNX address for switching on/off night mode. *DPT 1*
+ description: KNX address for switching on/off economy mode. *DPT 1*
required: false
type: [string, list]
operation_mode_comfort_address:
From e8e1ec23bd319e6b62fa52232bd63ca6814e445b Mon Sep 17 00:00:00 2001
From: Andrew Jackson
Date: Fri, 2 Aug 2024 13:47:09 +0100
Subject: [PATCH 04/63] Mealie example template fix (#34091)
---
source/_integrations/mealie.markdown | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/source/_integrations/mealie.markdown b/source/_integrations/mealie.markdown
index 9189b0cbfb9..043ab55dda5 100644
--- a/source/_integrations/mealie.markdown
+++ b/source/_integrations/mealie.markdown
@@ -145,7 +145,7 @@ template:
unique_id: mealie_dinner_today
state: >
{% for meal in result.mealplan if meal.entry_type == "dinner" -%}
- {{ meal.recipe['name'] if meal.recipe is not none else meal.title }}
+ {{ meal.recipe['name'] if meal.recipe is not none else meal.title -}}
{{ ", " if not loop.last }}
{%- endfor %}
```
From 43f2937ac6d60e0bb83c3835d1fcd42dc751fda1 Mon Sep 17 00:00:00 2001
From: Denis Shulyaka
Date: Sat, 3 Aug 2024 09:29:10 +0300
Subject: [PATCH 05/63] Add Anthropic integration (#33952)
* Add Anthropic integration
* Update anthropic.markdown
* Update anthropic.markdown
* Update source/_integrations/anthropic.markdown
Co-authored-by: TheJulianJES
* Minor style tweaks
* Apply suggestions from code review
---------
Co-authored-by: TheJulianJES
Co-authored-by: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com>
---
source/_integrations/anthropic.markdown | 77 +++++++++++++++++++++++++
1 file changed, 77 insertions(+)
create mode 100644 source/_integrations/anthropic.markdown
diff --git a/source/_integrations/anthropic.markdown b/source/_integrations/anthropic.markdown
new file mode 100644
index 00000000000..ec06105b0c6
--- /dev/null
+++ b/source/_integrations/anthropic.markdown
@@ -0,0 +1,77 @@
+---
+title: Anthropic Conversation
+description: Instructions on how to integrate Anthropic Claude as a conversation agent
+ha_category:
+ - Voice
+ha_release: 2024.9
+ha_iot_class: Cloud Polling
+ha_config_flow: true
+ha_codeowners:
+ - '@Shulyaka'
+ha_domain: anthropic
+ha_integration_type: service
+ha_platforms:
+ - conversation
+related:
+ - docs: /voice_control/voice_remote_expose_devices/
+ title: Exposing entities to Assist
+ - docs: /voice_control/assist_create_open_ai_personality/
+ title: Create an AI personality
+ - url: https://console.anthropic.com/settings/keys
+ title: Anthropic API key
+ - url: https://www.anthropic.com
+ title: Anthropic
+ - url: https://claude.ai
+ title: Claude
+---
+
+The **Anthropic** {% term integrations %} adds a conversation agent powered by [Anthropic](https://www.anthropic.com), such as Claude 3.5 Sonnet, in Home Assistant.
+
+Controlling Home Assistant is done by providing the AI access to the Assist API of Home Assistant. You can control what devices and entities it can access from the {% my voice_assistants title="exposed entities page" %}. The AI can provide you information about your devices and control them.
+
+Legal note: Anthropic currently limits the API usage to organizations only, more info here: [Can I use the Claude API for individual use?](https://support.anthropic.com/en/articles/8987200-can-i-use-the-claude-api-for-individual-use)
+
+This integration does not integrate with [sentence triggers](/docs/automation/trigger/#sentence-trigger).
+
+## Prerequisites
+
+- This integration requires an API key to use, [which you can generate here.](https://console.anthropic.com/settings/keys).
+- This is a paid service, we advise you to monitor your costs in the [Anthropic portal](https://console.anthropic.com/settings/cost) closely.
+
+### Generating an API Key
+
+The Anthropic API key is used to authenticate requests to the Anthropic API. To generate an API key, take the following steps:
+
+1. Log in to the [Anthropic portal](https://console.anthropic.com) or sign up for an account.
+2. Enable billing with a valid credit card on the [plans page](https://console.anthropic.com/settings/plans).
+3. Visit the [API Keys page](https://console.anthropic.com/settings/keys) to retrieve the API key you'll use to configure the integration.
+
+{% include integrations/config_flow.md %}
+
+{% include integrations/option_flow.md %}
+{% configuration_basic %}
+Instructions:
+ description: Instructions for the AI on how it should respond to your requests. It is written using [Home Assistant Templating](/docs/configuration/templating/).
+
+Control Home Assistant:
+ description: If the model is allowed to interact with Home Assistant. It can only control or provide information about entities that are [exposed](/voice_control/voice_remote_expose_devices/) to it.
+
+Recommended settings:
+ description: If enabled, the recommended model and settings are chosen.
+
+{% endconfiguration_basic %}
+
+If you choose not to use the recommended settings, you can configure the following options:
+
+{% configuration_basic %}
+
+Model:
+ description: The model that will complete your prompt. See [models](https://docs.anthropic.com/en/docs/about-claude/models#model-names) for additional details and options.
+
+Maximum Tokens to Return in Response:
+ description: The maximum number of tokens to generate before stopping. Note that our models may stop _before_ reaching this maximum. This parameter only specifies the absolute maximum number of tokens to generate. Different models have different maximum values for this parameter. See [models](https://docs.anthropic.com/en/docs/models-overview) for details.
+
+Temperature:
+ description: Amount of randomness injected into the response. Use `temperature` closer to `0.0` for analytical / multiple choice, and closer to `1.0` for creative and generative tasks. Note that even with `temperature` of `0.0`, the results will not be fully deterministic.
+
+{% endconfiguration_basic %}
From f4f52441e9dddfe65b06e0b7997c7d87882542ca Mon Sep 17 00:00:00 2001
From: Simon <80467011+sorgfresser@users.noreply.github.com>
Date: Sun, 4 Aug 2024 10:17:35 +0200
Subject: [PATCH 06/63] Add elevenlabs integration docs (#32322)
* Add elevenlabs integration docs
Add elevenlabs integration docs
* Tiny style tweaks
* Add prerequisites
* Tiny tweak
* Update source/_integrations/elevenlabs.markdown
Co-authored-by: Simon <80467011+sorgfresser@users.noreply.github.com>
---------
Co-authored-by: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com>
Co-authored-by: Joost Lekkerkerker
---
source/_integrations/elevenlabs.markdown | 47 ++++++++++++++++++++++++
1 file changed, 47 insertions(+)
create mode 100644 source/_integrations/elevenlabs.markdown
diff --git a/source/_integrations/elevenlabs.markdown b/source/_integrations/elevenlabs.markdown
new file mode 100644
index 00000000000..72f958ce6de
--- /dev/null
+++ b/source/_integrations/elevenlabs.markdown
@@ -0,0 +1,47 @@
+---
+title: ElevenLabs text-to-speech
+description: Instructions on how to setup ElevenLabs text-to-speech with Home Assistant.
+ha_category:
+ - Text-to-speech
+ha_release: 2024.8
+ha_iot_class: Cloud Push
+ha_domain: elevenlabs
+ha_platforms:
+ - tts
+ha_config_flow: true
+ha_integration_type: integration
+---
+
+The **ElevenLabs** text-to-speech {% term integrations %} adds support for [ElevenLabs](https://elevenlabs.io/) as text-to-speech to read a text with natural sounding voices.
+## Prerequisites
+
+- You need an ElevenLabs account to use this integration. A free account suffices for basic usage.
+- For custom voices or more quota you need a subscription.
+- You need your API key from the ElevenLabs website.
+
+{% include integrations/config_flow.md %}
+
+For an overview of which languages can be used, check the [complete list of supported languages](https://elevenlabs.io/languages).
+
+For a description of which voices are available for use, check your VoiceLab voices.
+
+To see the available models and their benefits, check the [models documentation](https://elevenlabs.io/docs/speech-synthesis/models).
+
+## Action speak
+
+The `tts.speak` action is the modern way to use TTS. Add the `speak` action, select the entity for your ElevenLabs TTS (it's named ElevenLabs by default), select the media player entity or group to send the TTS audio to, and enter the message to speak.
+
+For more options about `speak`, see the Speak section on the main [TTS](/integrations/tts/#service-speak) building block page.
+
+In YAML, your action will look like this:
+
+```yaml
+action: tts.speak
+target:
+ entity_id: tts.elevenlabs
+data:
+ media_player_entity_id: media_player.giant_tv
+ message: Hello, can you hear me now?
+```
+
+For more information about using text-to-speech with Home Assistant and more details on all the options it provides, see the [TTS documentation](/integrations/tts/).
From df5c074bd08033e708fe6ed2dff09230fbe6ae56 Mon Sep 17 00:00:00 2001
From: Maciej Bieniek
Date: Sun, 4 Aug 2024 23:02:50 +0200
Subject: [PATCH 07/63] Add information about `model_id` to MQTT documentation
(#34117)
* Update mqtt.markdown
* Update cover.mqtt.markdown
* Update fan.mqtt.markdown
* Update tag.mqtt.markdown
* Update lock.mqtt.markdown
* Update text.mqtt.markdown
* Update event.mqtt.markdown
* Update image.mqtt.markdown
* Update light.mqtt.markdown
* Update scene.mqtt.markdown
* Update siren.mqtt.markdown
* Update valve.mqtt.markdown
* Update button.mqtt.markdown
* Update camera.mqtt.markdown
* Update notify.mqtt.markdown
* Update number.mqtt.markdown
* Update select.mqtt.markdown
* Update sensor.mqtt.markdown
* Update switch.mqtt.markdown
* Update update.mqtt.markdown
* Update vacuum.mqtt.markdown
* Update climate.mqtt.markdown
* Update humidifier.mqtt.markdown
* Update lawn_mower.mqtt.markdown
* Update water_heater.mqtt.markdown
* Update binary_sensor.mqtt.markdown
* Update device_tracker.mqtt.markdown
* Update device_trigger.mqtt.markdown
* Update alarm_control_panel.mqtt.markdown
---
source/_integrations/alarm_control_panel.mqtt.markdown | 6 +++++-
source/_integrations/binary_sensor.mqtt.markdown | 4 ++++
source/_integrations/button.mqtt.markdown | 4 ++++
source/_integrations/camera.mqtt.markdown | 4 ++++
source/_integrations/climate.mqtt.markdown | 6 +++++-
source/_integrations/cover.mqtt.markdown | 4 ++++
source/_integrations/device_tracker.mqtt.markdown | 4 ++++
source/_integrations/device_trigger.mqtt.markdown | 4 ++++
source/_integrations/event.mqtt.markdown | 4 ++++
source/_integrations/fan.mqtt.markdown | 4 ++++
source/_integrations/humidifier.mqtt.markdown | 4 ++++
source/_integrations/image.mqtt.markdown | 4 ++++
source/_integrations/lawn_mower.mqtt.markdown | 4 ++++
source/_integrations/light.mqtt.markdown | 4 ++++
source/_integrations/lock.mqtt.markdown | 4 ++++
source/_integrations/mqtt.markdown | 8 ++++++--
source/_integrations/notify.mqtt.markdown | 4 ++++
source/_integrations/number.mqtt.markdown | 4 ++++
source/_integrations/scene.mqtt.markdown | 4 ++++
source/_integrations/select.mqtt.markdown | 4 ++++
source/_integrations/sensor.mqtt.markdown | 4 ++++
source/_integrations/siren.mqtt.markdown | 4 ++++
source/_integrations/switch.mqtt.markdown | 4 ++++
source/_integrations/tag.mqtt.markdown | 4 ++++
source/_integrations/text.mqtt.markdown | 4 ++++
source/_integrations/update.mqtt.markdown | 4 ++++
source/_integrations/vacuum.mqtt.markdown | 4 ++++
source/_integrations/valve.mqtt.markdown | 4 ++++
source/_integrations/water_heater.mqtt.markdown | 4 ++++
29 files changed, 120 insertions(+), 4 deletions(-)
diff --git a/source/_integrations/alarm_control_panel.mqtt.markdown b/source/_integrations/alarm_control_panel.mqtt.markdown
index 78847e993aa..34a8c53c8db 100644
--- a/source/_integrations/alarm_control_panel.mqtt.markdown
+++ b/source/_integrations/alarm_control_panel.mqtt.markdown
@@ -135,6 +135,10 @@ device:
description: "The model of the device."
required: false
type: string
+ model_id:
+ description: The model identifier of the device.
+ required: false
+ type: string
name:
description: "The name of the device."
required: false
@@ -344,4 +348,4 @@ mqtt:
{% caution %}
When your MQTT connection is not secured, this will send your secret code over the network unprotected!
{% endcaution %}
-
\ No newline at end of file
+
diff --git a/source/_integrations/binary_sensor.mqtt.markdown b/source/_integrations/binary_sensor.mqtt.markdown
index 5b64bd29f9b..4899572be9b 100644
--- a/source/_integrations/binary_sensor.mqtt.markdown
+++ b/source/_integrations/binary_sensor.mqtt.markdown
@@ -96,6 +96,10 @@ device:
description: The model of the device.
required: false
type: string
+ model_id:
+ description: The model identifier of the device.
+ required: false
+ type: string
name:
description: The name of the device.
required: false
diff --git a/source/_integrations/button.mqtt.markdown b/source/_integrations/button.mqtt.markdown
index b84e055f58e..27b13b4d25a 100644
--- a/source/_integrations/button.mqtt.markdown
+++ b/source/_integrations/button.mqtt.markdown
@@ -93,6 +93,10 @@ device:
description: The model of the device.
required: false
type: string
+ model_id:
+ description: The model identifier of the device.
+ required: false
+ type: string
name:
description: The name of the device.
required: false
diff --git a/source/_integrations/camera.mqtt.markdown b/source/_integrations/camera.mqtt.markdown
index cf9b228e6c0..2d8cb9f4938 100644
--- a/source/_integrations/camera.mqtt.markdown
+++ b/source/_integrations/camera.mqtt.markdown
@@ -95,6 +95,10 @@ device:
description: The model of the device.
required: false
type: string
+ model_id:
+ description: The model identifier of the device.
+ required: false
+ type: string
name:
description: The name of the device.
required: false
diff --git a/source/_integrations/climate.mqtt.markdown b/source/_integrations/climate.mqtt.markdown
index b1179141219..ec9052ef44b 100644
--- a/source/_integrations/climate.mqtt.markdown
+++ b/source/_integrations/climate.mqtt.markdown
@@ -115,6 +115,10 @@ device:
description: 'The model of the device.'
required: false
type: string
+ model_id:
+ description: The model identifier of the device.
+ required: false
+ type: string
name:
description: 'The name of the device.'
required: false
@@ -474,4 +478,4 @@ mqtt:
precision: 1.0
```
-{% endraw %}
\ No newline at end of file
+{% endraw %}
diff --git a/source/_integrations/cover.mqtt.markdown b/source/_integrations/cover.mqtt.markdown
index 0b890ea932b..6c093b95415 100644
--- a/source/_integrations/cover.mqtt.markdown
+++ b/source/_integrations/cover.mqtt.markdown
@@ -106,6 +106,10 @@ device:
description: The model of the device.
required: false
type: string
+ model_id:
+ description: The model identifier of the device.
+ required: false
+ type: string
name:
description: The name of the device.
required: false
diff --git a/source/_integrations/device_tracker.mqtt.markdown b/source/_integrations/device_tracker.mqtt.markdown
index 1471fe455cf..625f1c56405 100644
--- a/source/_integrations/device_tracker.mqtt.markdown
+++ b/source/_integrations/device_tracker.mqtt.markdown
@@ -95,6 +95,10 @@ device:
description: The model of the device.
required: false
type: string
+ model_id:
+ description: The model identifier of the device.
+ required: false
+ type: string
name:
description: The name of the device.
required: false
diff --git a/source/_integrations/device_trigger.mqtt.markdown b/source/_integrations/device_trigger.mqtt.markdown
index 1ad3a038e7b..bc2e1dff2a0 100644
--- a/source/_integrations/device_trigger.mqtt.markdown
+++ b/source/_integrations/device_trigger.mqtt.markdown
@@ -68,6 +68,10 @@ device:
description: The model of the device.
required: false
type: string
+ model_id:
+ description: The model identifier of the device.
+ required: false
+ type: string
name:
description: The name of the device.
required: false
diff --git a/source/_integrations/event.mqtt.markdown b/source/_integrations/event.mqtt.markdown
index 645264b8a03..29c73730c87 100644
--- a/source/_integrations/event.mqtt.markdown
+++ b/source/_integrations/event.mqtt.markdown
@@ -87,6 +87,10 @@ device:
description: The model of the device.
required: false
type: string
+ model_id:
+ description: The model identifier of the device.
+ required: false
+ type: string
name:
description: The name of the device.
required: false
diff --git a/source/_integrations/fan.mqtt.markdown b/source/_integrations/fan.mqtt.markdown
index 4a56e0d507a..afe35bebd41 100644
--- a/source/_integrations/fan.mqtt.markdown
+++ b/source/_integrations/fan.mqtt.markdown
@@ -102,6 +102,10 @@ device:
description: The model of the device.
required: false
type: string
+ model_id:
+ description: The model identifier of the device.
+ required: false
+ type: string
name:
description: The name of the device.
required: false
diff --git a/source/_integrations/humidifier.mqtt.markdown b/source/_integrations/humidifier.mqtt.markdown
index 078bb6319e4..ad043a83901 100644
--- a/source/_integrations/humidifier.mqtt.markdown
+++ b/source/_integrations/humidifier.mqtt.markdown
@@ -120,6 +120,10 @@ device:
description: The model of the device.
required: false
type: string
+ model_id:
+ description: The model identifier of the device.
+ required: false
+ type: string
name:
description: The name of the device.
required: false
diff --git a/source/_integrations/image.mqtt.markdown b/source/_integrations/image.mqtt.markdown
index 366cb11e17d..2278cee09aa 100644
--- a/source/_integrations/image.mqtt.markdown
+++ b/source/_integrations/image.mqtt.markdown
@@ -98,6 +98,10 @@ device:
description: The model of the device.
required: false
type: string
+ model_id:
+ description: The model identifier of the device.
+ required: false
+ type: string
name:
description: The name of the device.
required: false
diff --git a/source/_integrations/lawn_mower.mqtt.markdown b/source/_integrations/lawn_mower.mqtt.markdown
index 61766ae84fb..e006db58e6f 100644
--- a/source/_integrations/lawn_mower.mqtt.markdown
+++ b/source/_integrations/lawn_mower.mqtt.markdown
@@ -96,6 +96,10 @@ device:
description: The model of the device.
required: false
type: string
+ model_id:
+ description: The model identifier of the device.
+ required: false
+ type: string
name:
description: The name of the device.
required: false
diff --git a/source/_integrations/light.mqtt.markdown b/source/_integrations/light.mqtt.markdown
index 9aee3d634ca..e9179af08c9 100644
--- a/source/_integrations/light.mqtt.markdown
+++ b/source/_integrations/light.mqtt.markdown
@@ -164,6 +164,10 @@ device:
description: 'The model of the device.'
required: false
type: string
+ model_id:
+ description: The model identifier of the device.
+ required: false
+ type: string
name:
description: 'The name of the device.'
required: false
diff --git a/source/_integrations/lock.mqtt.markdown b/source/_integrations/lock.mqtt.markdown
index 6dece6193de..1452b1d4d3b 100644
--- a/source/_integrations/lock.mqtt.markdown
+++ b/source/_integrations/lock.mqtt.markdown
@@ -108,6 +108,10 @@ device:
description: 'The model of the device.'
required: false
type: string
+ model_id:
+ description: The model identifier of the device.
+ required: false
+ type: string
name:
description: 'The name of the device.'
required: false
diff --git a/source/_integrations/mqtt.markdown b/source/_integrations/mqtt.markdown
index a1ff21b8f45..139e0e52bb1 100644
--- a/source/_integrations/mqtt.markdown
+++ b/source/_integrations/mqtt.markdown
@@ -584,6 +584,7 @@ support_url:
'name': 'name',
'mf': 'manufacturer',
'mdl': 'model',
+ 'mdl_id': 'model_id',
'hw': 'hw_version',
'sw': 'sw_version',
'sa': 'suggested_area',
@@ -820,7 +821,8 @@ Setting up a sensor with multiple measurement values requires multiple consecuti
],
"name":"Bedroom",
"manufacturer": "Example sensors Ltd.",
- "model": "K9",
+ "model": "Example Sensor",
+ "model_id": "K9",
"serial_number": "12AE3010545",
"hw_version": "1.01a",
"sw_version": "2024.1.0",
@@ -955,6 +957,7 @@ Setting up a [light that takes JSON payloads](/integrations/light.mqtt/#json-sch
"name": "Kitchen",
"mf": "Bla electronics",
"mdl": "xya",
+ "mdl_id": "ABC123",
"sw": "1.0",
"sn": "ea334450945afc",
"hw": "1.0rev2",
@@ -1175,7 +1178,8 @@ data:
"device": {
"identifiers": "Acurite-986-1R-51778",
"name": "Bathroom",
- "model": "Acurite-986",
+ "model": "Acurite",
+ "model_id": "986",
"manufacturer": "rtl_433" }
}
```
diff --git a/source/_integrations/notify.mqtt.markdown b/source/_integrations/notify.mqtt.markdown
index 2f02873ff8a..2d7dca5ffb6 100644
--- a/source/_integrations/notify.mqtt.markdown
+++ b/source/_integrations/notify.mqtt.markdown
@@ -93,6 +93,10 @@ device:
description: The model of the device.
required: false
type: string
+ model_id:
+ description: The model identifier of the device.
+ required: false
+ type: string
name:
description: The name of the device.
required: false
diff --git a/source/_integrations/number.mqtt.markdown b/source/_integrations/number.mqtt.markdown
index e4301d3fac7..68d44cdbbb7 100644
--- a/source/_integrations/number.mqtt.markdown
+++ b/source/_integrations/number.mqtt.markdown
@@ -87,6 +87,10 @@ device:
description: The model of the device.
required: false
type: string
+ model_id:
+ description: The model identifier of the device.
+ required: false
+ type: string
name:
description: The name of the device.
required: false
diff --git a/source/_integrations/scene.mqtt.markdown b/source/_integrations/scene.mqtt.markdown
index f7ec95cbeac..7ddd58d84c5 100644
--- a/source/_integrations/scene.mqtt.markdown
+++ b/source/_integrations/scene.mqtt.markdown
@@ -91,6 +91,10 @@ device:
description: The model of the device.
required: false
type: string
+ model_id:
+ description: The model identifier of the device.
+ required: false
+ type: string
name:
description: The name of the device.
required: false
diff --git a/source/_integrations/select.mqtt.markdown b/source/_integrations/select.mqtt.markdown
index dcd782ccb38..03c03470fa3 100644
--- a/source/_integrations/select.mqtt.markdown
+++ b/source/_integrations/select.mqtt.markdown
@@ -99,6 +99,10 @@ device:
description: The model of the device.
required: false
type: string
+ model_id:
+ description: The model identifier of the device.
+ required: false
+ type: string
name:
description: The name of the device.
required: false
diff --git a/source/_integrations/sensor.mqtt.markdown b/source/_integrations/sensor.mqtt.markdown
index ebc059543e4..e3e517d5a0f 100644
--- a/source/_integrations/sensor.mqtt.markdown
+++ b/source/_integrations/sensor.mqtt.markdown
@@ -88,6 +88,10 @@ device:
description: The model of the device.
required: false
type: string
+ model_id:
+ description: The model identifier of the device.
+ required: false
+ type: string
name:
description: The name of the device.
required: false
diff --git a/source/_integrations/siren.mqtt.markdown b/source/_integrations/siren.mqtt.markdown
index efc26dc6f75..c3dcfc57d42 100644
--- a/source/_integrations/siren.mqtt.markdown
+++ b/source/_integrations/siren.mqtt.markdown
@@ -110,6 +110,10 @@ device:
description: The model of the device.
required: false
type: string
+ model_id:
+ description: The model identifier of the device.
+ required: false
+ type: string
name:
description: The name of the device.
required: false
diff --git a/source/_integrations/switch.mqtt.markdown b/source/_integrations/switch.mqtt.markdown
index 1aade14aeff..c3619c78b2d 100644
--- a/source/_integrations/switch.mqtt.markdown
+++ b/source/_integrations/switch.mqtt.markdown
@@ -101,6 +101,10 @@ device:
description: The model of the device.
required: false
type: string
+ model_id:
+ description: The model identifier of the device.
+ required: false
+ type: string
name:
description: The name of the device.
required: false
diff --git a/source/_integrations/tag.mqtt.markdown b/source/_integrations/tag.mqtt.markdown
index 93e6b0a442a..352ad0d3fed 100644
--- a/source/_integrations/tag.mqtt.markdown
+++ b/source/_integrations/tag.mqtt.markdown
@@ -53,6 +53,10 @@ device:
description: The model of the device.
required: false
type: string
+ model_id:
+ description: The model identifier of the device.
+ required: false
+ type: string
name:
description: The name of the device.
required: false
diff --git a/source/_integrations/text.mqtt.markdown b/source/_integrations/text.mqtt.markdown
index c8b36f76dff..c94f87da8cc 100644
--- a/source/_integrations/text.mqtt.markdown
+++ b/source/_integrations/text.mqtt.markdown
@@ -95,6 +95,10 @@ device:
description: The model of the device.
required: false
type: string
+ model_id:
+ description: The model identifier of the device.
+ required: false
+ type: string
name:
description: The name of the device.
required: false
diff --git a/source/_integrations/update.mqtt.markdown b/source/_integrations/update.mqtt.markdown
index 63167874b2a..522f5c9ed7b 100644
--- a/source/_integrations/update.mqtt.markdown
+++ b/source/_integrations/update.mqtt.markdown
@@ -92,6 +92,10 @@ device:
description: The model of the device.
required: false
type: string
+ model_id:
+ description: The model identifier of the device.
+ required: false
+ type: string
name:
description: The name of the device.
required: false
diff --git a/source/_integrations/vacuum.mqtt.markdown b/source/_integrations/vacuum.mqtt.markdown
index 6bf2044f6bf..8351b02b4f4 100644
--- a/source/_integrations/vacuum.mqtt.markdown
+++ b/source/_integrations/vacuum.mqtt.markdown
@@ -84,6 +84,10 @@ device:
description: The model of the device.
required: false
type: string
+ model_id:
+ description: The model identifier of the device.
+ required: false
+ type: string
name:
description: The name of the device.
required: false
diff --git a/source/_integrations/valve.mqtt.markdown b/source/_integrations/valve.mqtt.markdown
index 379c0d3e88e..909f7ff7b5b 100644
--- a/source/_integrations/valve.mqtt.markdown
+++ b/source/_integrations/valve.mqtt.markdown
@@ -130,6 +130,10 @@ device:
description: The model of the device.
required: false
type: string
+ model_id:
+ description: The model identifier of the device.
+ required: false
+ type: string
name:
description: The name of the device.
required: false
diff --git a/source/_integrations/water_heater.mqtt.markdown b/source/_integrations/water_heater.mqtt.markdown
index 2ca78692316..c0d7ef41646 100644
--- a/source/_integrations/water_heater.mqtt.markdown
+++ b/source/_integrations/water_heater.mqtt.markdown
@@ -96,6 +96,10 @@ device:
description: 'The model of the device.'
required: false
type: string
+ model_id:
+ description: The model identifier of the device.
+ required: false
+ type: string
name:
description: 'The name of the device.'
required: false
From dae74b5c92a40f10538dcbb00b5a70385ba19d41 Mon Sep 17 00:00:00 2001
From: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com>
Date: Wed, 7 Aug 2024 09:09:13 +0200
Subject: [PATCH 08/63] Add automation name example (#34165)
---
source/getting-started/automation.markdown | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/source/getting-started/automation.markdown b/source/getting-started/automation.markdown
index 2b8c5a96eca..6d9f2122323 100644
--- a/source/getting-started/automation.markdown
+++ b/source/getting-started/automation.markdown
@@ -47,7 +47,8 @@ This tutorial assumes the following:

-6. To save the automation, select **Save**. Give the automation a name and **Save** again.
+6. To save the automation, select **Save**. Give the automation a name, add a **Description**, and **Save** again.
+ - When choosing a name, be specific, so that you can find it even when you have many automations. For example, `Turn on living room table light at sunset`.
- Now wait until it's 30 minutes before sunset and see your automation magic!
- Or follow these steps to [test your automation](/docs/automation/troubleshooting/#testing-your-automation) right away.
@@ -99,7 +100,7 @@ This tutorial assumes the following:

-6. To save the automation, select **Save**. Give the automation a name and **Save** again.
+6. To save the automation, select **Save**. Give the automation a name (for example, `dim living room table light night before workday`), add a **Description**, and **Save** again.
7. [Test your automation](/docs/automation/troubleshooting/#testing-your-automation).
{% include getting-started/next_step.html step="Presence detection" link="/getting-started/presence-detection/" %}
From 782d5a083674dd54e6fc321746127639d48e0bc3 Mon Sep 17 00:00:00 2001
From: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com>
Date: Wed, 7 Aug 2024 12:05:04 +0200
Subject: [PATCH 09/63] Badge: add steps on adding a badge from UI (#34172)
---
source/dashboards/badges.markdown | 20 +++++++++++++++++++
source/images/dashboards/badge_add.png | Bin 0 -> 20682 bytes
source/images/dashboards/badge_configure.png | Bin 0 -> 52167 bytes
3 files changed, 20 insertions(+)
create mode 100644 source/images/dashboards/badge_add.png
create mode 100644 source/images/dashboards/badge_configure.png
diff --git a/source/dashboards/badges.markdown b/source/dashboards/badges.markdown
index b7ff3d54d29..e4688ab7cc7 100644
--- a/source/dashboards/badges.markdown
+++ b/source/dashboards/badges.markdown
@@ -10,6 +10,26 @@ Badges are widgets that sit at the top of a panel, above all the cards.
Badges at the top of a panel.
+## Adding a badge to your dashboard
+
+1. Go to {% my lovelace_dashboards title="**Settings** > **Dashboards**" %}.
+2. If you have multiple [views](/dashboards/views/), open the view to which you want to add a badge.
+3. In the top right of the screen, select the edit {% icon "mdi:edit" %} button.
+4. To add a badge, select the plus {% icon "mdi:plus" %}button.
+
+ 
+
+5. Select the entity for which you want to display a badge.
+6. Configure your badge.
+ - The available options depend on the entity.
+ - Add the states you want to see.
+ - If you want, add a **Name**.
+
+ 
+7. Under **Interactions**, you can define the tap behavior.
+8. If you want this badge to be visible only to specific users or under a certain condition, open the **Visibility** tab to [define those conditions](/dashboards/cards/#showing-or-hiding-a-card-conditionally).
+9. Select **Save**.
+
## Entity badge
The Entity badge allows you to display the state of an entity on a badge. This badge supports [actions](/dashboards/actions/).
diff --git a/source/images/dashboards/badge_add.png b/source/images/dashboards/badge_add.png
new file mode 100644
index 0000000000000000000000000000000000000000..6cc99f14f20519b066e40c4852444249a0278059
GIT binary patch
literal 20682
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
q4$Df%hX%}2)(u=C{n
zUB{njxS3Z4ILNk|@(PEB*-+MiERAlrXMoYFqLHZq;!X48&r$c->>)ll>3NR)nE>GtJo&|V!@7%sWy2Ol{c#BMR
z?#&i^Pyl1-yC4Pb`8zWIx3*;d=osw*=)ylhxWd7+agLv{D09qm?j2pM2HRei^&n#r
zcg}o&9kzA6j;R>PeL`{3*LG9#&O~qTw+GIDVKIIm+N6r5*7^N_M)GDXQ%1V6);$70
zG=BTO_BZq@$FeB;?d{#p0%vn!__fJdu^lME)6apw;*zo7D{3vxqXznSaM<3%CSA0a
zD{0YIv)nSHj}S89AAKIk;^5h1pqcv)cIEWFj|6yRj*N8kVCq*E$!U%P1&N`D7%GQU
zg8luHTF}-Pg}#MkM#fXtPIqz;fZYpK8Vnj?daG<~R?OrQRHRqlWQxWOI9lH@0$)P$
z*TttLunSd7;H{F|{K9ImGaz1Fg}x+Me=A3Dv2&Cs>s(88i1U9x`)3Cr%fBN3Yqb3v
zL9j%^P~3Lv?JhkVE&~^>p>Bo#Bi3KG(b}h$iG+7nEzyyEyp$i7bY{Y)WxgkLf>-tU
zOGu1^HV0cw!5e*Kb84C}asb)_uvT!1A|0r-tQ7C@>nQt!=D-aAi?&SfLKUUkOf@zh
zDkvjlx$^1LPda}V>4Knl(652(0RCa`v>GU?Ez>Z1Xr;>^hc5?p8XhZLO1xODer*LP
z3mC7~+q}7c-FP0%-i?Vyitf;Pg(`_{sa{VE!jxP3*4(R^!>fKK^_RoSKGeUF18YxJ%b)16SJsnH8vzwF|r;
z9i1wLTQY;q^j6z9@r$x8k38(ZDZ>shYhNNzdhrFWBn4lLm^tyuwRx8Fr<{+4{B
z#90vYMe6&*VRMz2k{Ds^yZFao8YGk!9a#Wi0c=M%kQ{)Fk+TS+<$=P1B*}x=-yYCc
z`Borsh_~*|Ex?l$saBAP{K6s=6nuq>IvI(b9yb+%F3v?jilw}v@;6$`ZihmlAE~MP
zs9g^oc|U#nv^P^mcye+AvRrPA`xf**OQmGoyhcq;jeI3{Xv%p?=`i-Zg{HhB62yqa
z4cysAqoxt$vC3qW)nP{pG?Ko`pW6)=;(M{O{)R`Fpux4Zq-Y&$R4|}
z^4oCDdz`>_8`=(yEIGWVJR(Y8E#R$CZkxSPOWNj#ojtq)up^^Z{g*t6IFxx838%vu
zFm$aWmR5NH{oO_5{wJq)71}uJxB>QxN#vu~HwrPo(H4LWHxJ&^i^{pnwUnGOuithLNC9nYp*^oU+)alZk$OtB&*17qWO>yNl_e*6m3iKRCZH1%8N
zQOEhQQyqMFZ88aS;6K12KtYx{ZO+2QRiIR)a96CwPJjwPZ-)z$CL4QnT)5Cn;SZG3
zd0ptugwOGF2~E3X(&0Z{fgZxm#-whe;Pj)}*gqzfX%oSn^kD6nXPGW+!fRsafjXDw
zIKXxlkE7=DrazH`x7|68O0Ghugc
zFYz+r+9z{zpWGH1aV>idqQll%jyQ4~ga9koWk)+J%42ZzY`>8Z(LFvMB^j6e2EEk^
z54Mqab536{>^Ottl-*hbQA|t>{sqTzMGCwJO6qf01mM60TWrFd}ioDV|kQ+FB48Nv7-s!29#Oza#^g5nZdvtHW9O
zBBeqlS^&whyq1}U`P6t@Vp8%S|5~@`*h~>KZKL^whlk&pyK`F3>AhQ`X~IMThPmr;
z6?Cg@ixdVE0|TW(I?sxS=VQUqO&ZZ3MdKx!mt6Hc5WFpuhtBBhlT@|isEQN}s!s<<@L^Anp@y)I+2o%IMsooA
z21JU&ma0T6D-}4_A02WSP+m>MaY)D;*WA0xm8BmRjdFjBS#Du(S7w=v&RfFBnA64)
zB8+5KlN|nlAYt_(8>Gf=^`@pom4jgCcz3kFYWKorr>yvbh4JVgxX-9ZI_-DpEUyZ~
z9l6Ua?R8=Q+mmbXNRGk*kS-L=YtSni#@4==t5ytT8B*@cd$#Y<=6lI-3I2X!f4!
z0MXdexVGHiLZPW@?>q6o6a8{)A{>FygLD~MA^lL1S;*QD#5;TJf10a#)y7-i|BlM@j?p3uhFyvYJK=!+Yt
zrlG}pBo=JlJ*vsVtgo$^KmZ}7pv#zkCf^}W1y}OT!sz0dUHjWdSRB@?$Y1hKL+YN?
z@y~HzrkDH#n!-1)YI)}BC=SN*wNRJhjS+9Bk+-8}qOB2xqFbbcwQ5bC+$h5@vZZiI
zK}b9iJLe0PLmJNv#Jfa#>psbWc7*RAqo-(;rt(_oku^sDW)k!0B=FKCO8`t2Fv!wB
zz~0;Mu6TArWd-j)&enR4)rBP*7J
zGuxA2l|TF;0~9ay%(|e#qMZiXfA9#{zs>c(W%%TN{yK4>4kDw;e|acH4V|&-X!6E9
zqUADP-;=l084DV#3R7#E;Zud>`tnnzBdSp1Zvx^OhBiDB%yeM-
z$l4pwiI=-NUq0fjqLga?aF85VFmJWLAPkkgXNw?_fUoW>JxjB9orvO_)+gO^j+F09
z^&vnRT|wz;v+U?I4D0@9h>B*g#>t23g}gOfFt~ADxQC-!-!&4a{(Tpqs|}ixSSbuU
zJgFY4aaAJ(FqKPQh2U_EwPaBBv;_sq-=^)?7mjYq5_vDyW_epcHPSEMpqe$nEB|Ug
zuJw*QQWtJEn)ab;zmmKuQd!1fTozMqp{=tfVgG%xWr<$bi=aT+?KoRIYG6Ayo$yyC
zo~rp=jT%H=9Rba$SfWapEgNTHR`$^3}r{m
z^hPn=2Og8>dRk2F(L+Kh`dbdU{-3r=RI=_%VL^&}HkOk>Tt@n$2=I9kyY?G8)rfQmwx}
zfEpbbM0WeTN$a~dO4Pl-ct+j4>n|_Z&CjPzYaAaSV0*TK<
z7ta0rbYollV!eP?6mN`4=HC}Y?utyN^XpllDRJt)bouhoLb-Lq@{_+Sjqtx~3~rNT
z@ugo*$N9SIO?HF8SLc4fNw&Vdwm^Rkn*T@0eLazXzApK1l}y?P4Vz)mtHByD4x>?L
z?06?WmxEWijciH2&3JzUDsK6AsLB&pm>}{(eSlDSMl6#+T%=0LKJ};yb~I#{NgZ*i
zVOTiNU}@+M3pjq0suCo1PSBHo+{EpkeiqJ%d!M0)VPE?!Gd8JWC$}Dt}S1fZ;l8p!Xb=*r01$RmwVj
zhs`)Eh_}v(l_+yW_nAv}P_JN9g7Z;TXwmlpd{?tgKw?^&p+^CEEp&a+9blNym>bB7*K?CQFm9pkmb`
zDN9SO5~v
zWt{=%M?4G(Kq*If;kW)_KM@MMf4o>}CtIXYsa4*UI%+b!yNKF0)@10uk=|2f{$!lv
z8rgh=Fdjjzo6jzh$Evv)i+L;%_{Z?r-iICz%8$6xuPbF=B`&c&7|+?P^P$;Shgf^A
z`iZNt#zltBGn~~XEj%j5WIX?l?^O$kcJBVepy5A{DJWS7{dBt0U7pAwkCtO+dCdvj
zP}F*}%kfKRp+OJ7*H48aa$ZVG-M2PuY-|9i_#HT1q3ri!y*yIQYSKg^m7KKi>v2E#
zVGf(=TB6SLdoaqu|sZgt+x+GnHtoQXwhdg=}87EfO~`@L`wT(XW^nnE5w)q*FE6!8g90)Cwx?Gw)yZ+IvEt
zK4B~*Ee*c0WQLM?-=!Db@!KTJR{X;!b&$p6X+
z@m8e9xVe=Xu}a)zi>FxKF2!env`Q0BBdpzr{Ww`_%Ah0xp2IbMZT~8@&7PxoF&5iO
zv!>moE7I~Qm_ZxvBC52SW3|C0V;?zw$CQWS_?O~Sn8ah$fzR8q3Qa1F=1J<=5ud+*
zr5on2SOyFJfJfMBRc?{NYdptR=d7$Jzu(lE#C@(tBc%tR|KVhJn3HC$i3PzvZQ`iq
zYD+}q@`KI+>xqZ}bM@(e;eXmVR2cT#-LkhY%~x@jhej{mQr-bcUJ`sZv%+~&eKFvI
zp?bdNF2UvPQUh|^l;9(HYs3|d`V5Qp;u`is#fvzbLqNt3al;!ndTD-$ask9<$loQ^
z>6O+!10%@7;{~;|m&uo1nj;yWKdnA|5Nt{fcTvz0Eg~#gj!+%YqFsEqvMx{
zIOD{JJK-BYg6H4~hwFaY1|Iw6@Wg-J0D_F~(ibO(lXQUb6%gt*D%2Yz*
z;;;ciJP=`-q`9Iu%U>8tYm0DVhe1kX+sgb?2GA0iQhPW@h4+mh=%M0{{L)rAy>}s#f0kD@CJ6i}lNKma3sa3`+~R5gk6j
z*YXw)4j&Z|Lb`f;6?1=lIG8H>Hl8hF=iu-yXPnvd-jPJmBeo9Sn!ZUC{uaGde)^V=<+FzrK9W$Jf9yx~WrhK?5BOZ|4Gy~~6;v{*Kdug@$4%LP
zlM1Duwm!U<9IO_5>)_x}t--K|vDl*s@1@xH7aJ)c3z6c^X~2&BzfMCwm)v>mT4^_s1E>}5}7#eeJS7AK^Xnh`3*p@#F*a5yr0;AqTo9H(H;*JXX1!fR#9c`
zX=W4v*Wq?`fP%;Dv$nS8=y&6XfCdDCj}ya0VWKg+9ehqbWlFU2v~i-oeBg&>qgA+w
zM?D%HK9kY(Jef3J(P0wawD814Jedr^u$Y*b@!Q!7-QD}E!{)OdLdr=ICZ~KWU@W{_
zqtT^8xQz9FtqCCmZdJ($+Vp=|-OnJoC_TUl0Pf~neA%=)jePc7PEJlNMy)v`_vGBI
zy}drBw#T1INlEhP32O|)l){O>uZESC7V>vwc9)uNf&&8JC?w!{^hCRqmO#z>Mk7=LTbM}@>KK-
zmANbN!QVow6ZA;zRPqqbx%f2jlEr}$sKMZ&CGIO4qZ8WC>h|#9BarIq4XW1eJhzZW
ztYdoPEKP>;$@{X`WZa&fAxoinRe_Gfsq1erg<*=$CyaXRTKH2Aee#HSXC1|)KW;oe
z`l)wRB;V?4LENOijp6tRwulSS5M=qaT-;k@h>f0FSnjNL4mWD7vMwt@Z>u%x`;7i(
ztA{QMj_dZqV=y8za&MWXfvJoDQ`0~kkHfI52H(*;G&CxH{?wvybxoVsur#Z2K!>Zi
zXw5YRZ9Mxy+FTG=rJo@5KSUQpW;s{bKTlgn$1R1t{87rou7c0ekgkU|=FCp>qwdrG=$&io`P@G45M^Lb6=rWMk_bA7@#$
zlC)8k&$|r1=HqXU?WPagunV>X=hVbb|IdEAm>>vbfxvI^eQ8DeY-Q{%lA~ylErUt|4nPu%^p1*Sw8?NUoW*W?aU`1*PSJ1vb0(x(j8r^hAyeJ
z1$ka-O;cW1g%}*44zF<$jY48L@iRjLM?8S4lbFgbBW`Y
zB>5ZX@sQsd-q;E+rzmXmR`!dJ6TF%T1H%@C}@ai^O&w9rT)H$8#sl(=jP0inHT@Th
z{mm4=B|(1k=WmTxWM!M-OcE=*LLCggxWK|bx}*8O>B`y-AV1fb(F6@Q*6wi&sGZQT%LTkEW^#fRZPBH2h=nYaYHSWDF?(7NLFuLgO6
z=kGB`2{2%k{UX#KAd*O8mPWCo@5{-(^$v%cZSKdQryP!{? L?2aes>5|8Ibl1EU
zQVJ-HbQ`e%6Q@|7TRi3S+3c!RI%(v|t=Fd5c(uM~ED~I&&{5~u^9f*nq}XNDW@)f_
z0c=`@rn)oGdk*PVx(&G&a@zpEpc513@c10>bg|`Z7AFD~k*i*_83fC%G>GS(&{UFu
zVrP9?Y9E?oZ_%89@b25Q0(hnAWp&;%2JmO+^-V5cvr6%P3kTVF8O^RtA=R;$!yFoC
zN_QfHrQX5b6!k!T-%<O|Icf)!_
zoYIxOCifi}%z|jSTY
zID?|&%ZkNcMr!`lHzg?ZNim(3+Yt5-x$#x9PEw`;g|S@^J|NfH(Kz_h$sW~T*5`J)
z0P`_l@(JxCkba8`HM2PQp$pNH1h2o5hE2^g%%t}m@>JwtgDWVgllog)YGpAjW2o51
zaQ=WRM8qTv6C64qpkA9xuh{E3*fBSxy1sC&j`F_IT%lW`&X@yGF-4Nsb-k*Pd;r6~
zVo|dID9YvJd>oIoRqJoGG#w5>k1{P5eKIG^DkPNKej`@gDgz)aA+7K8-8;5hn2q7m
zf(Qi8oEei{Rn%LkR>~ypEoKRD(x={l_l5p2#0Brz`y)}gpoyaXcs$e<>%3}`yG^Tg
zWF3G#wX^L#%QX_5cT(}LNgE6x*yQ*lZxCK)?yvgNgB3nEQhhbc#_wXbcH%3^Qtz~n
z15SOwix(<(pdeZL9jNfWo{I}%*et&M0l|p|;l7R$DRGne4}vtiSR$_*9D?Z(^w~)s
zCLp#B2NhWEMmbMULCecE+KrvwIt{^q-tcV$HDs9+v`}ZAbiz)0bzp9hZNx8blG2@(gg~xqWz2i
z13kX`eS!C-Nr+3{PET`SWx2aB6Ipz-5JNL(y6&Ae;rAcOY(q9xt;ta-i8bXok`J!T
zCu5M>*3IykVQiHgBq4OguQ;~UFitp7B
z`N~ReaOAl8ntf6~zJN>Ul`_tLv7}{ONwGuH*Niuxwu&AFxnkfCUhRoN8oRH|mAy~6
z+erEU9Z~oy{bA}11nU}V=Gr!H#!>4GZMDiP?m3?$X|&d)Y6+$Un6R@S3Hil+CMrz)
z%eXjWv^I4oWtFwDa1A%aD#5*Z%b+&$Jsog%h$L@I=o?NVTO5uif1;&4-WG)S_
z8AlWm5tH2sv&(lr_v&WgEED*mR1`mSZsoU}6h<#`VEFve619XeKDW2a?vmOiqU_KG
zoPODsoy(WIP4Gwl6
zd^fo-yU(tRiwbj}_BTR^36rqn(=_o`OdQ&IiEu6pMv`iV7VKW`V!o3aEkycZRcsDr
zl3=Q-wvapHKyUTQP0)_@a0>}CpA
zYh|&w9!3n4sXnzX(mc;Hnz3GMG&3SB;?&HH2bVqRIZB6~SS{jGVM@YU(7zF%LV!q(
zKibcG?6c
zgfCrTDUgYKD@J7{BheVWp4>^sXh$H@pu_d;5I4;=8{+02{n})+f9GVO!XlF;k~wtA_ZzM?hJ3%URNFhydsDT=zb5
zf|Rr7YWWK#s8=Sf|7LaZ%MD3$T(v;aF^{8vhOls+eVZ_#r!s+C8K3y`Yy;3C!sF$q
zdM#Lf=nYKmqg<-HT>oZA$?GmABLp*L!puRbEv`uvt51;?m`6svFFcZcCoLdHw+d9i
zX#=yibIdoS(VX2rdn$8nQfPS*Ns&M-^$A8+Ccld9WbjgFU-EZF4Q}42GxVnaRGwXq
z*Nf%|A;AniGkshXYRG55u!G}IyC*&CZ8?4d>*K-#WpAfqHflxig)Cb2=LoR}#>-mR
zfHfgvW%3T^LvUX2Q8&dciC*nfds8zZy%8DA`Xg^H-8LN(0LztPo3r$YZmYT4%ErDR
zb*!2Dt>tn}5Ww8GP5cGa0MeRbWpR(3*$b#V3c#%IB&0P#FmO%S%j5DWbY<{5{r1G9
z9_|TqMxzJU58F@ciR=W10rW_}w=@z`ci0jV7RKRnBKD#2^dn#>W+kWq#F}cW<1hOd
z&fkT8t*=#L9xb`I%a!*J&Nr9{wVf;&CYI}z5uhBNjsTu%W-hjZCQVIFYvk=4KQWZe
zYO@u8z!zRcap@v_Lmb&65QL_8cC{|9MVV4
z19Rls178jX!=ogYv+JnKf4#~9iF5!KT0r=cA>qBLbbv%k;=~nlrF1xqr@Z;`a|!8I
z33B*Rv-V*P^^1!1YPR$RWh}kU@1O_+Znq6Az8hk4GBRJl-o)B-k;C4rV?jr^bLZx;
zajCBI{Ab*DNnE;OlEwa5@)aJ
zGD73cn*5OA(XaUlU?d8iq6|(v63&)&0;?kbKD6so4yo(?=qU($ighkaW~2Lv4(LM0
z;WrzAX7rd)My69HnkC0PwCRa6n%K9LS5oi%`FtK`wFo;;Vy@EdDW821nGcG9gG1})
zY`fmkDVECZ5Pn}{G1jE$?)*r?7~;bCry5u}V3Gl4*BQPHkQ_IyzO=RIb!SM)<9ohd
z?L-YIRMDG~RFP2x`sny9ABDThR>XG>t7H>=I3hqIDvU@m&-SVWNR
zzi*z9a{i5Vuqet}wIWkGgke}HQ=!*`ZvyCtJ$XZL<@}YK6PwYLRjt0N$sb(v@Y9vi
z0FIhFV;aR|1VROn>ghIZej%TO0OfEPu(k%0yLR<@sxx09H=7I%UO%#$Ye}45oRp8y
zC!ciI30d!q#uP|z%vqaqS61!}GWCoVgc2gF0&5DIT%6&UdCQI2(K`8a
z_7x%>Pddi-eJEc!&xyz&Bb6J8&uaExyda-gfTSh^aI=9MF
zkRK?oKkG?J!q=HCR7m2Yji(~FtROpszh!ttA6_*NmLx>T*>ZoX;M<#R!7Lcn-I*(z
z#G=#iM{9J}J1iIA=JeznK3Cq^0gN~t&9XnnJ`iKZm~6{e+me0xx{Y+LRHT;fkWh|C
zu~L@Y+?~Qv!eTRTP8-Y6iLlITe|`ih*LpZ@xbT|Iq5+7*VLoU4!0wW150-~Rlg(<=
zUlMr+z?D(>l65Mm0M@|Rn*|@
zU>BTDyG~%e|8R)Bq1MrA)))qsr|4OM14MJSFJ$2rE49>ra@lN;Rbq;6^46G2RD?4E
z7Tj=~R<0ICYRTDh!^c0qnQ}&ndL}(J(vq)1(bYzED84XgyuxWBZOKzO`lR}G4HC~)
zoxYjzl0kve-dP!DPb}N`A2FX2EqYUd^oDBnSeq2AF
zQF%W){RBk81Y>?e3yU0&_K68rzfB|koK5GU7%Eft1;^fHU{OWgL5q0Z^#~;1gQ_MdD-^3p0s7j2;0bvokN=w|
zk*$!FGj2+wQICECES))=G6Pm7*4u9DT7O?LfFiUca=Yj!mviFdq&&khQuXO2_sSaF
zdCaKZh7$|`VcK%xSu@$rYo&n@Shm`Bk~ZhPg_lx$8a?z8w;Qmqa-PtDz!H?TBrgsp
z!pUdPyiUo0Hdq)xRns}8)%2l1Se(sFu7L8}eM`pizJ-!!r>zfx!0k66?j&1!KQ2i%
z!~AbS^DlqPU~5Ok@$;*hb^gjZlU4G84FdRVfWG6#P^OWcWvRXzu$0YF+QZkiU?NDv
zU%x5dDmf*8gtGiYBmI^oCs(0@DtI&j~VCD2^;B3;w?sP+RE3L__snwV@!bnrt
zd-voC0p-fp1X#eSvv3oea81OE)Q+2hVhr?^nx=ZC^CpgXYZcwj8D@BfpvBV9?J1;^
zT(*@^)z7bS|9G)_Yp#DXaOTv7I9VazQQS*>dRrK5J(7RiHV&A!cWyo4+q)p47|0wV
zq0u6VH6YOYuGjwya9_o?qb8FsU_%g)HS4gm0q$I!ppaabq`xzHVCoZgM{t)z#C(VmQv~CFJPu
zTt;kry3x~|S0Zo04!Yc5_~5g8O)BC3Me>Kuj$
z!O~2BA)2=iH{|*svMk@SyHWB?*6jER-}Jm^L8ClIE3nw;)hq0~jK(V22%scI*}CD2
zT)rkMp%&UyqaV|s_bz{VEFNet)l#$dgt3y_7K~`GO*J5U%#|QZ6LMsluKx?P`+T~@
zF@OO0x+l_hw}UN`ocYA}pGL~Dn2ZN+gr1@cdasAhe{%>~8#mtk020~1TGJ24j2h|3
z5OO}pqqi=nVk~aZppY=OO1p+@0Rgv1ZrMYHMHL1-ATA>X{6r<=LwsD7ZD>W=zexMn
z3@!nb^f#VOPPz60=YacCCatZ{e_j`#kx|kL@azMN<6?m>`0zx%$+n>}U7XwS&~5YZ
z{#HOE(NOMx92eQwk*KUGHIXF@A!HwWq2v;#aFY--
z))^!2&z8E9kg?1yUF#JMW-McbCR^5sG0cdVEHi_VHT)j;p5O1k-#Nd(o^zh_JfHKN
z@ACP4UeD+A{=$dCmD!Wz#vAYow~F^Y2YVmVbQn)c)UFdx$QMvgFkjxiVybHsb9LyJl#-zO4s9BHar5uBTbaZBER20UHlm=Qi4D+V$iKq6+U)jpOHb!uep
zc1l3(T7s<8X2{WiSBmfVnc;YFVkBj4
z$|cFQkb#j-{YOKtt-3p2rJutN+APErP1D9+P-0@+e0%O9aj8rCF9|47E})BmBDrI9
z+l%JUpz$nhP|&n1E=}ufNXaL0Ul+Y5w*MTmM-9N9+He+v3%%tp8-$+xxkgfJ9Q{K=
z)24?DAGc{@9?3>B@k780P|a5BZ5<2s4G6F%hx<21&gNXtRRz+%ruz7duuv~D3>Vlmx}p+biR$g^k@uEwY4^!z>+JiXOceMbwbRn7vnS|VoDxX
zwyifk{5JNc*?Y(nHF{5t%g5&)dBd|_#aDP$$hMatp*ggKL7Y!VOIiHOY2d|xi4~Ao
z2DiB=lHYfWUV6Z*-iEymr9tUTvYgBq8Zh`kpn0IjVE6FtR(!
zHVPN7kR4aGJ1Y!Zd^7hCU8TBPUikkJ4E+7u&EL!gVB8o;$a@iXri;Yut2=vxpaA}(
zc4n#EW6DFhZR4-&4ADv_^#4e@#yr$-|p0d-~2@Ds)@7qhbB
zo|XM^9^z-5vI)$YZJ;htRGrX&9
zNXWgXq@eiX^GOP*gcWp$pxi!q
zPZv-mK9;(W2&f8ynmah#&Q0~ON)ML$XuJ82Kh~=qQm6WAx>Q=#E&Rqapo_pzu*zIu
zmD`;C{lZQ}84v>01a3=dZOY{uIx2n-4{e5EeDApuwb%sn_
zX&1ieLnuilY8a?*_
zQ(;+DPu56{I!cl{vYpbimeoBQ}xe
zs;8%C|6s6YKRWbf8LD+>v9c)RcK!Y1fZj6TV1Mrc75_9d6C@-od;ttr^55BVK9wW0
z0D0*&jrWY5JWVArL$%G)NJ0w}sJM&L8eUMa)SZV9
zR}xkVd#gMNT+y3TQ87zZ1n5~wDH$0!TuQH?ccn*JF+TRp$~9lNuKt#(lQ<5=)cuwW
zC@B<_8N*y$iH80n9gFI0Ky8QPhl88L=Y+WG>+8iI#P2c*9?g;JC4tW!&Iumn9vK}C
z+uMog>FK!_99*c4YF5dz)y@+kA2EH&XM9FF?^B1_^;cA*htBx^;~zPKOUl|dH2V>b
zy7Kc@HcI=W59?Mz{F$p{8LSr+XF+hMrUhbdA-_
z6`@CR;V-5;oa^}h9jqTp`^K7Tc5`zZ93O{9MMd>9G*ngZ01B6pu`wMjt@rIo!h$Is
z6vf+yJR7J`U^(&39hyx8AIH#Ijm
zMzIx=VSbh0a{R-#R$wR-MRcpF(Xg$O#I^7FFeZ~pSt40Fs4dt}gDH@XF7(p$&y`t7Z<+NA(BXp0ltcd*<(-@aebcYz-wOX)3u-Ey
zjWd!l+M=jmNQPaZW!XhYPPz8A=~!goofo;)A)~rv7w3JV0(>iyFLd*@gvRR?b!Fu&
zuvps|7F#CW$@Y}m)9A}Jao~8j`(5TBcpBZgT66Wb{l|2jFM|Fo3D86m*srS2WBEk}
z$EeOb*Eem&2gi({s*um_=dc`%NB4#c^eSjE}m{S=F_P#^J?mf`49Ha@|Ltce%8H)Iw*g2!ckQIuTaD8A`;(yS&T0dd-5swFERVb6buaLb#^T&I
zm_Y6eSC3;bdjIG}O#dZU;{u~ob9=w1uZxukCfkEA&_5J?w8rO5q}Z+OegT(ic)gCl
z4DD`GUrt-T8$=noTb5svHo)k8J2e`znX3H<33<3VL3ue%+33Zad~jO)qHF@Oh*7KF
zxC!UOd(uTs+~)9O$(Kk>HQ4tl(0i?)Cz9J(J`6aYaUDb#L?1S%&P$xeP!y?FXK}x0
zRT+5*4N@F#SQIcjod#)s{1b4w$yH985Zq+<%2{YkgiZ>6;)uReUF`WA`NefMdPma7
z1gr=2+fN|2cPb47oTQ(}f)uxRNSklL;f!;P7KZTZGD;b`aevxY!
z&`>3t+7jsuXVt5ZEvIwBq^*CIh;*-*qN|PvMRjd7F}<9>FshU^v)1|XqcLr6&uTXdT-`OfwFego_J}I=~pIr
Tc@Q`ZkIUA|$?~naZ{oiJwMQHO
literal 0
HcmV?d00001
diff --git a/source/images/dashboards/badge_configure.png b/source/images/dashboards/badge_configure.png
new file mode 100644
index 0000000000000000000000000000000000000000..c0d9942e103e703785787d3a9548a4df83e082d3
GIT binary patch
literal 52167
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